clk: clk_set_rate() must fail if CLK_SET_RATE_GATE is set and clk is enabled
authorViresh Kumar <viresh.kumar@st.com>
Wed, 11 Apr 2012 10:33:42 +0000 (16:03 +0530)
committerMike Turquette <mturquette@linaro.org>
Wed, 2 May 2012 01:13:38 +0000 (18:13 -0700)
This is well documented but isn't implemented. clk_set_rate() must check if
flags have CLK_SET_RATE_GATE bit set and is enabled too.

Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Mike Turquette <mturquette@linaro.org>
drivers/clk/clk.c

index c81803b9ba3578c6d6f6da657e09534bbb6d26e4..8149764f8438fd456b18ff1cba8107d2fe48173a 100644 (file)
@@ -900,6 +900,11 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
        if (rate == clk->rate)
                goto out;
 
+       if ((clk->flags & CLK_SET_RATE_GATE) && __clk_is_enabled(clk)) {
+               ret = -EBUSY;
+               goto out;
+       }
+
        /* calculate new rates and get the topmost changed clock */
        top = clk_calc_new_rates(clk, rate);
        if (!top) {