Przeglądaj źródła

[ARM] 3359/1: S3C24XX - add support for clk_set_rate

Patch from Ben Dooks

Add support for clk_set_rate and clk_round_rate to the
s3c2410 clock implementation

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Ben Dooks 19 lat temu
rodzic
commit
6e8908edd5
2 zmienionych plików z 15 dodań i 1 usunięć
  1. 13 1
      arch/arm/mach-s3c2410/clock.c
  2. 2 0
      arch/arm/mach-s3c2410/clock.h

+ 13 - 1
arch/arm/mach-s3c2410/clock.c

@@ -180,12 +180,24 @@ unsigned long clk_get_rate(struct clk *clk)
 
 
 long clk_round_rate(struct clk *clk, unsigned long rate)
 long clk_round_rate(struct clk *clk, unsigned long rate)
 {
 {
+	if (!IS_ERR(clk) && clk->round_rate)
+		return (clk->round_rate)(clk, rate);
+
 	return rate;
 	return rate;
 }
 }
 
 
 int clk_set_rate(struct clk *clk, unsigned long rate)
 int clk_set_rate(struct clk *clk, unsigned long rate)
 {
 {
-	return -EINVAL;
+	int ret;
+
+	if (IS_ERR(clk))
+		return -EINVAL;
+
+	mutex_lock(&clocks_mutex);
+	ret = (clk->set_rate)(clk, rate);
+	mutex_unlock(&clocks_mutex);
+
+	return ret;
 }
 }
 
 
 struct clk *clk_get_parent(struct clk *clk)
 struct clk *clk_get_parent(struct clk *clk)

+ 2 - 0
arch/arm/mach-s3c2410/clock.h

@@ -21,6 +21,8 @@ struct clk {
 	unsigned long         ctrlbit;
 	unsigned long         ctrlbit;
 
 
 	int		    (*enable)(struct clk *, int enable);
 	int		    (*enable)(struct clk *, int enable);
+	int		    (*set_rate)(struct clk *c, unsigned long rate);
+	unsigned long	    (*round_rate)(struct clk *c, unsigned long rate);
 	int		    (*set_parent)(struct clk *c, struct clk *parent);
 	int		    (*set_parent)(struct clk *c, struct clk *parent);
 };
 };