Call clock notifiers with the CLK_ABORT_RATE_CHANGE message in two
conditions:

- in the PREPARE phase when another callback has denied the rate/parent
  change; or

- in the PRE phase if the set_rate() or set_parent() function fails.

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

diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c
index 50d8e06..1600119 100644
--- a/arch/arm/mach-omap2/clock.c
+++ b/arch/arm/mach-omap2/clock.c
@@ -804,6 +804,7 @@ int omap2_clk_set_rate(struct clk *clk, unsigned long rate)
        if (r == NOTIFY_BAD) {
                pr_debug("clock: %s: clk_set_rate() aborted by notifier\n",
                         clk->name);
+               omap_clk_notify_downstream(clk, CLK_ABORT_RATE_CHANGE);
                return -EAGAIN;
        }
 
@@ -814,10 +815,16 @@ 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;
+       if (ret == 0) {
+               temp_rate = clk->rate;
+               clk->rate = clk->temp_rate;
+               omap_clk_notify_downstream(clk, CLK_POST_RATE_CHANGE);
+               clk->rate = temp_rate;
+       } else {
+               pr_debug("clock: %s: clk_set_rate() aborted by failed "
+                        "set_rate(): %d\n", clk->name, ret);
+               omap_clk_notify_downstream(clk, CLK_ABORT_RATE_CHANGE);
+       }
 
        return ret;
 }
@@ -883,6 +890,7 @@ int omap2_clk_set_parent(struct clk *clk, struct clk 
*new_parent)
        if (r == NOTIFY_BAD) {
                pr_debug("clock: %s: clk_set_parent() aborted by notifier\n",
                         clk->name);
+               omap_clk_notify_downstream(clk, CLK_ABORT_RATE_CHANGE);
                return -EAGAIN;
        }
 


--
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