Merge branch 'omap-clks3' into devel
[linux-2.6-block.git] / arch / arm / mach-omap2 / clock.c
index 40cb65ba1fac06154870fe1d92f0aeb974c9754b..4247a1534411ba9f9cf5bfd23c9abf94bcd799c0 100644 (file)
@@ -663,7 +663,7 @@ u32 omap2_clksel_to_divisor(struct clk *clk, u32 field_val)
  *
  * Given a struct clk of a rate-selectable clksel clock, and a clock divisor,
  * find the corresponding register field value.  The return register value is
- * the value before left-shifting.  Returns 0xffffffff on error
+ * the value before left-shifting.  Returns ~0 on error
  */
 u32 omap2_divisor_to_clksel(struct clk *clk, u32 div)
 {
@@ -675,7 +675,7 @@ u32 omap2_divisor_to_clksel(struct clk *clk, u32 div)
 
        clks = omap2_get_clksel_by_parent(clk, clk->parent);
        if (!clks)
-               return 0;
+               return ~0;
 
        for (clkr = clks->rates; clkr->div; clkr++) {
                if ((clkr->flags & cpu_mask) && (clkr->div == div))
@@ -686,7 +686,7 @@ u32 omap2_divisor_to_clksel(struct clk *clk, u32 div)
                printk(KERN_ERR "clock: Could not find divisor %d for "
                       "clock %s parent %s\n", div, clk->name,
                       clk->parent->name);
-               return 0;
+               return ~0;
        }
 
        return clkr->val;
@@ -774,7 +774,7 @@ static u32 _omap2_clksel_get_src_field(struct clk *src_clk, struct clk *clk,
                return 0;
 
        for (clkr = clks->rates; clkr->div; clkr++) {
-               if (clkr->flags & (cpu_mask | DEFAULT_RATE))
+               if (clkr->flags & cpu_mask && clkr->flags & DEFAULT_RATE)
                        break; /* Found the default rate for this platform */
        }
 
@@ -807,9 +807,6 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent)
        if (!parent_div)
                return -EINVAL;
 
-       if (clk->usecount > 0)
-               _omap2_clk_disable(clk);
-
        /* Set new source value (previous dividers if any in effect) */
        v = __raw_readl(clk->clksel_reg);
        v &= ~clk->clksel_mask;
@@ -819,9 +816,6 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent)
 
        _omap2xxx_clk_commit(clk);
 
-       if (clk->usecount > 0)
-               _omap2_clk_enable(clk);
-
        clk_reparent(clk, new_parent);
 
        /* CLKSEL clocks follow their parents' rates, divided by a divisor */