aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/clock24xx.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/clock24xx.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/clock24xx.c')
-rw-r--r--arch/arm/mach-omap2/clock24xx.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/arch/arm/mach-omap2/clock24xx.c b/arch/arm/mach-omap2/clock24xx.c
index 069f3e1827a6..f2b74e9b7d8d 100644
--- a/arch/arm/mach-omap2/clock24xx.c
+++ b/arch/arm/mach-omap2/clock24xx.c
@@ -369,9 +369,9 @@ static long omap2_dpllcore_round_rate(unsigned long target_rate)
369 369
370} 370}
371 371
372static void omap2_dpllcore_recalc(struct clk *clk) 372static unsigned long omap2_dpllcore_recalc(struct clk *clk)
373{ 373{
374 clk->rate = omap2_get_dpll_rate_24xx(clk); 374 return omap2_get_dpll_rate_24xx(clk);
375} 375}
376 376
377static int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate) 377static int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate)
@@ -448,9 +448,9 @@ static int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate)
448 * 448 *
449 * Set virt_prcm_set's rate to the mpu_speed field of the current PRCM set. 449 * Set virt_prcm_set's rate to the mpu_speed field of the current PRCM set.
450 */ 450 */
451static void omap2_table_mpu_recalc(struct clk *clk) 451static unsigned long omap2_table_mpu_recalc(struct clk *clk)
452{ 452{
453 clk->rate = curr_prcm_set->mpu_speed; 453 return curr_prcm_set->mpu_speed;
454} 454}
455 455
456/* 456/*
@@ -647,14 +647,14 @@ static u32 omap2_get_sysclkdiv(void)
647 return div; 647 return div;
648} 648}
649 649
650static void omap2_osc_clk_recalc(struct clk *clk) 650static unsigned long omap2_osc_clk_recalc(struct clk *clk)
651{ 651{
652 clk->rate = omap2_get_apll_clkin() * omap2_get_sysclkdiv(); 652 return omap2_get_apll_clkin() * omap2_get_sysclkdiv();
653} 653}
654 654
655static void omap2_sys_clk_recalc(struct clk *clk) 655static unsigned long omap2_sys_clk_recalc(struct clk *clk)
656{ 656{
657 clk->rate = clk->parent->rate / omap2_get_sysclkdiv(); 657 return clk->parent->rate / omap2_get_sysclkdiv();
658} 658}
659 659
660/* 660/*
@@ -707,9 +707,9 @@ int __init omap2_clk_init(void)
707 707
708 clk_init(&omap2_clk_functions); 708 clk_init(&omap2_clk_functions);
709 709
710 omap2_osc_clk_recalc(&osc_ck); 710 osc_ck.rate = omap2_osc_clk_recalc(&osc_ck);
711 propagate_rate(&osc_ck); 711 propagate_rate(&osc_ck);
712 omap2_sys_clk_recalc(&sys_ck); 712 sys_ck.rate = omap2_sys_clk_recalc(&sys_ck);
713 propagate_rate(&sys_ck); 713 propagate_rate(&sys_ck);
714 714
715 for (c = omap24xx_clks; c < omap24xx_clks + ARRAY_SIZE(omap24xx_clks); c++) 715 for (c = omap24xx_clks; c < omap24xx_clks + ARRAY_SIZE(omap24xx_clks); c++)