ARM: tegra11: clock: Fix system bus clock rounding
Alex Frid [Wed, 12 Dec 2012 01:24:16 +0000 (17:24 -0800)]
Made sure system bus clock (SCLK) round rate operation follows the
same policy on fractional divisors as set rate operation - either both
operations allow fractions, or both does not support them (otherwise,
clock rate stats are confused).

Change-Id: I3814d66905c01f2ff84b0402be9b9a3d0b113fd6
Signed-off-by: Alex Frid <afrid@nvidia.com>
Reviewed-on: http://git-master/r/171213
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>

arch/arm/mach-tegra/tegra11_clocks.c

index c20df06..0b725ab 100644 (file)
@@ -1552,7 +1552,10 @@ static long tegra11_sbus_cmplx_round_rate(struct clk *c, unsigned long rate)
 
        round_rate = source_rate * 2 / (divider + 2);
        if (round_rate > c->max_rate) {
-               divider = max(2, (divider + 1));
+               divider += new_parent->flags & DIV_U71_INT ? 2 : 1;
+#if !DIVIDER_1_5_ALLOWED
+               divider = max(2, divider);
+#endif
                round_rate = source_rate * 2 / (divider + 2);
        }