Calls the  clock post-rate-change notifier whenever clock rates are changed
in the OMAP clock framework.  This is primarily in *_recalc() functions.

One item to note is that the post-rate-change notifier is called even
if the new clock rate is identical to the old rate.  This is because
the process of changing the rate may have temporarily disabled or
glitched the clock or one of its parents, and some devices may be
sensitive to such changes.

Signed-off-by: Paul Walmsley <[email protected]>
---
 arch/arm/mach-omap2/clock.c |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c
index c990a17..843d1b5 100644
--- a/arch/arm/mach-omap2/clock.c
+++ b/arch/arm/mach-omap2/clock.c
@@ -789,6 +789,7 @@ int omap2_clksel_set_rate(struct clk *clk, unsigned long 
rate)
 int omap2_clk_set_rate(struct clk *clk, unsigned long rate)
 {
        int ret = -EINVAL;
+       unsigned long temp_rate;
 
        if (!clk->set_rate)
                return -EINVAL;
@@ -803,6 +804,11 @@ int omap2_clk_set_rate(struct clk *clk, unsigned long rate)
 
        ret = clk->set_rate(clk, rate);
 
+       temp_rate = clk->rate;
+       clk->rate = clk->temp_rate;
+       omap_clk_notify_downstream(clk, CLK_POST_RATE_CHANGE);
+       clk->rate = temp_rate;
+
        return ret;
 }
 
@@ -878,11 +884,14 @@ int omap2_clk_set_parent(struct clk *clk, struct clk 
*new_parent)
                _omap2_clk_enable(clk);
 
        clk->parent = new_parent;
-       clk->rate = new_rate;
 
        pr_debug("clock: %s: set parent to %s (orig rate %ld, new rate %ld)\n",
                 clk->name, clk->parent->name, orig_rate, new_rate);
 
+       omap_clk_notify_downstream(clk, CLK_POST_RATE_CHANGE);
+
+       clk->rate = new_rate;
+
        return 0;
 }
 


--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to