aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/clock34xx.c
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2009-02-12 05:12:59 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2009-02-14 04:59:21 -0500
commit8b9dbc16d4f5786c6c930ab028722e3ed7e4285b (patch)
treed6bd11034d7d31a42275577840f5eb16b432378d /arch/arm/mach-omap2/clock34xx.c
parent883992bd8f6924c9aa849f2dac381075e2e55a9d (diff)
[ARM] omap: arrange for clock recalc methods to return the rate
linux-omap source commit 33d000c99ee393fe2042f93e8422f94976d276ce introduces a way to "dry run" clock changes before they're committed. However, this involves putting logic to handle this into each and every recalc function, and unfortunately due to the caching, led to some bugs. Solve both of issues by making the recalc methods always return the clock rate for the clock, which the caller decides what to do with. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-omap2/clock34xx.c')
-rw-r--r--arch/arm/mach-omap2/clock34xx.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c
index 3b6e27bc9fe3..fb0f53b96811 100644
--- a/arch/arm/mach-omap2/clock34xx.c
+++ b/arch/arm/mach-omap2/clock34xx.c
@@ -289,9 +289,9 @@ static struct omap_clk omap34xx_clks[] = {
289 * 289 *
290 * Recalculate and propagate the DPLL rate. 290 * Recalculate and propagate the DPLL rate.
291 */ 291 */
292static void omap3_dpll_recalc(struct clk *clk) 292static unsigned long omap3_dpll_recalc(struct clk *clk)
293{ 293{
294 clk->rate = omap2_get_dpll_rate(clk); 294 return omap2_get_dpll_rate(clk);
295} 295}
296 296
297/* _omap3_dpll_write_clken - write clken_bits arg to a DPLL's enable bits */ 297/* _omap3_dpll_write_clken - write clken_bits arg to a DPLL's enable bits */
@@ -787,9 +787,10 @@ static void omap3_dpll_deny_idle(struct clk *clk)
787 * Using parent clock DPLL data, look up DPLL state. If locked, set our 787 * Using parent clock DPLL data, look up DPLL state. If locked, set our
788 * rate to the dpll_clk * 2; otherwise, just use dpll_clk. 788 * rate to the dpll_clk * 2; otherwise, just use dpll_clk.
789 */ 789 */
790static void omap3_clkoutx2_recalc(struct clk *clk) 790static unsigned long omap3_clkoutx2_recalc(struct clk *clk)
791{ 791{
792 const struct dpll_data *dd; 792 const struct dpll_data *dd;
793 unsigned long rate;
793 u32 v; 794 u32 v;
794 struct clk *pclk; 795 struct clk *pclk;
795 796
@@ -808,9 +809,10 @@ static void omap3_clkoutx2_recalc(struct clk *clk)
808 v = __raw_readl(dd->control_reg) & dd->enable_mask; 809 v = __raw_readl(dd->control_reg) & dd->enable_mask;
809 v >>= __ffs(dd->enable_mask); 810 v >>= __ffs(dd->enable_mask);
810 if (v != DPLL_LOCKED) 811 if (v != DPLL_LOCKED)
811 clk->rate = clk->parent->rate; 812 rate = clk->parent->rate;
812 else 813 else
813 clk->rate = clk->parent->rate * 2; 814 rate = clk->parent->rate * 2;
815 return rate;
814} 816}
815 817
816/* Common clock code */ 818/* Common clock code */