Commit 52585ccd93d75e368382af09ae336ed8f231642c

Authored by Haojian Zhuang
Committed by Eric Miao
1 parent 4e234cc0ee

ARM: pxa: add clk_set_rate()

Since there're mulitple clock rates in some device controllers, enable
clk_set_rate() for this usage.

Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
Signed-off-by: Eric Miao <eric.y.miao@gmail.com>

Showing 4 changed files with 32 additions and 0 deletions Side-by-side Diff

arch/arm/mach-mmp/clock.c
... ... @@ -88,4 +88,19 @@
88 88 return rate;
89 89 }
90 90 EXPORT_SYMBOL(clk_get_rate);
  91 +
  92 +int clk_set_rate(struct clk *clk, unsigned long rate)
  93 +{
  94 + unsigned long flags;
  95 + int ret = -EINVAL;
  96 +
  97 + if (clk->ops->setrate) {
  98 + spin_lock_irqsave(&clocks_lock, flags);
  99 + ret = clk->ops->setrate(clk, rate);
  100 + spin_unlock_irqrestore(&clocks_lock, flags);
  101 + }
  102 +
  103 + return ret;
  104 +}
  105 +EXPORT_SYMBOL(clk_set_rate);
arch/arm/mach-mmp/clock.h
... ... @@ -12,6 +12,7 @@
12 12 void (*enable)(struct clk *);
13 13 void (*disable)(struct clk *);
14 14 unsigned long (*getrate)(struct clk *);
  15 + int (*setrate)(struct clk *, unsigned long);
15 16 };
16 17  
17 18 struct clk {
arch/arm/mach-pxa/clock.c
... ... @@ -53,6 +53,21 @@
53 53 }
54 54 EXPORT_SYMBOL(clk_get_rate);
55 55  
  56 +int clk_set_rate(struct clk *clk, unsigned long rate)
  57 +{
  58 + unsigned long flags;
  59 + int ret = -EINVAL;
  60 +
  61 + if (clk->ops->setrate) {
  62 + spin_lock_irqsave(&clocks_lock, flags);
  63 + ret = clk->ops->setrate(clk, rate);
  64 + spin_unlock_irqrestore(&clocks_lock, flags);
  65 + }
  66 +
  67 + return ret;
  68 +}
  69 +EXPORT_SYMBOL(clk_set_rate);
  70 +
56 71 void clk_dummy_enable(struct clk *clk)
57 72 {
58 73 }
arch/arm/mach-pxa/clock.h
... ... @@ -5,6 +5,7 @@
5 5 void (*enable)(struct clk *);
6 6 void (*disable)(struct clk *);
7 7 unsigned long (*getrate)(struct clk *);
  8 + int (*setrate)(struct clk *, unsigned long);
8 9 };
9 10  
10 11 struct clk {