diff options
author | Paul Mundt <lethal@linux-sh.org> | 2007-07-20 06:30:07 +0200 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2007-07-20 06:30:07 +0200 |
commit | fe04d7798f611bca333df27d44484bdd62eef53f (patch) | |
tree | a8b62c7f9812c51434f1ab843aabc0b51aa8145c /arch/sh | |
parent | sh: Implement clk_round_rate() in the clock framework. (diff) | |
download | linux-fe04d7798f611bca333df27d44484bdd62eef53f.tar.xz linux-fe04d7798f611bca333df27d44484bdd62eef53f.zip |
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>
Diffstat (limited to 'arch/sh')
-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: return err; } +static long sh7722_frqcr_round_rate(struct clk *clk, unsigned long rate) +{ + unsigned long parent_rate = clk->parent->rate; + int div; + + /* look for multiplier/divisor pair */ + div = sh7722_find_divisors(parent_rate, rate); + if (div < 0) + return clk->rate; + + /* calculate new value of clock rate */ + return parent_rate * 2 / div; +} + static struct clk_ops sh7722_frqcr_clk_ops = { .recalc = sh7722_frqcr_recalc, .set_rate = sh7722_frqcr_set_rate, + .round_rate = sh7722_frqcr_round_rate, }; /* |