sh: Support rate rounding for SH7722 FRQCR clocks.
authorPaul Mundt <lethal@linux-sh.org>
Fri, 20 Jul 2007 04:30:07 +0000 (13:30 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Fri, 20 Jul 2007 04:30:07 +0000 (13:30 +0900)
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>
arch/sh/kernel/cpu/sh4a/clock-sh7722.c

index 51b386d454deaedd7f31b32410adbc6bedf857c7..a0fd8bb21f7c4f74f3e16d97a3f10eeaf62bfd43 100644 (file)
@@ -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,
 };
 
 /*