diff options
author | Paul Mundt <lethal@linux-sh.org> | 2007-07-20 00:30:07 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2007-07-20 00:30:07 -0400 |
commit | fe04d7798f611bca333df27d44484bdd62eef53f (patch) | |
tree | a8b62c7f9812c51434f1ab843aabc0b51aa8145c | |
parent | f6991b0456416186b578d38717efcda2b012b79c (diff) |
sh: Support rate rounding for SH7722 FRQCR clocks.
Now that the round_rate() op is supported, hook it up on SH7722
for the FRQCR (CPU, PCLK, etc.) clocks.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/clock-sh7722.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c index 51b386d454de..a0fd8bb21f7c 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c | |||
@@ -387,9 +387,24 @@ out_err: | |||
387 | return err; | 387 | return err; |
388 | } | 388 | } |
389 | 389 | ||
390 | static long sh7722_frqcr_round_rate(struct clk *clk, unsigned long rate) | ||
391 | { | ||
392 | unsigned long parent_rate = clk->parent->rate; | ||
393 | int div; | ||
394 | |||
395 | /* look for multiplier/divisor pair */ | ||
396 | div = sh7722_find_divisors(parent_rate, rate); | ||
397 | if (div < 0) | ||
398 | return clk->rate; | ||
399 | |||
400 | /* calculate new value of clock rate */ | ||
401 | return parent_rate * 2 / div; | ||
402 | } | ||
403 | |||
390 | static struct clk_ops sh7722_frqcr_clk_ops = { | 404 | static struct clk_ops sh7722_frqcr_clk_ops = { |
391 | .recalc = sh7722_frqcr_recalc, | 405 | .recalc = sh7722_frqcr_recalc, |
392 | .set_rate = sh7722_frqcr_set_rate, | 406 | .set_rate = sh7722_frqcr_set_rate, |
407 | .round_rate = sh7722_frqcr_round_rate, | ||
393 | }; | 408 | }; |
394 | 409 | ||
395 | /* | 410 | /* |