{
        u32 cval, i=0;
 
-       if (clk->enable_bit == PARENT_CONTROLS_CLOCK)   /* Parent will do it */
-               return;
-
        cval = cm_read_mod_reg(PLL_MOD, CM_CLKEN);
 
        if ((cval & (0x3 << clk->enable_bit)) == (0x3 << clk->enable_bit))
 {
        u32 regval32;
 
-       if (clk->flags & ALWAYS_ENABLED)
+       if (clk->flags & (ALWAYS_ENABLED | PARENT_CONTROLS_CLOCK))
                return 0;
 
        if (unlikely(clk == &osc_ck)) {
                return 0;
        }
 
-       if (clk->enable_reg == (void __iomem *)OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN)) {
+       if (clk->enable_reg == OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN)) {
                omap2_clk_fixed_enable(clk);
                return 0;
        }
 {
        u32 cval;
 
-       if (clk->enable_bit == PARENT_CONTROLS_CLOCK)
-               return;         /* let parent off do it */
-
        cval = cm_read_mod_reg(PLL_MOD, CM_CLKEN);
        cval &= ~(0x3 << clk->enable_bit);
        cm_write_mod_reg(cval, PLL_MOD, CM_CLKEN);
 {
        u32 regval32;
 
+       if (clk->flags & (ALWAYS_ENABLED | PARENT_CONTROLS_CLOCK))
+               return;
+
        if (unlikely(clk == &osc_ck)) {
                omap2_set_osc_ck(0);
                return;
        if (clk->enable_reg == 0)
                return;
 
-       if (clk->enable_reg == (void __iomem *)OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN)) {
+       if (clk->enable_reg == OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN)) {
                omap2_clk_fixed_disable(clk);
                return;
        }
 
 static u32 omap2_clksel_to_divisor(u32 div_sel, u32 field_val);
 static u32 omap2_clksel_get_divisor(struct clk *clk);
 
-/* REVISIT: should use a clock flag for this, not a magic number */
-#define PARENT_CONTROLS_CLOCK  0xff
-
 #define RATE_IN_242X   (1 << 0)
 #define RATE_IN_243X   (1 << 1)
 #define RATE_IN_343X   (1 << 2)
        .parent         = &apll54_ck,   /* can also be alt_clk */
        .rate           = 54000000,
        .flags          = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X |
-                               RATE_FIXED | CM_PLL_SEL1 | RATE_PROPAGATES,
+                               RATE_FIXED | CM_PLL_SEL1 | RATE_PROPAGATES |
+                               PARENT_CONTROLS_CLOCK,
        .src_offset     = OMAP24XX_54M_SOURCE_SHIFT,
-       .enable_reg     = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
-       .enable_bit     = PARENT_CONTROLS_CLOCK,
        .recalc         = &omap2_propagate_rate,
 };
 
        .parent         = &apll96_ck,
        .rate           = 96000000,
        .flags          = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X |
-                               RATE_FIXED | RATE_PROPAGATES,
-       .enable_reg     = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
-       .enable_bit     = PARENT_CONTROLS_CLOCK,
+                               RATE_FIXED | RATE_PROPAGATES |
+                               PARENT_CONTROLS_CLOCK,
        .recalc         = &omap2_propagate_rate,
 };
 
        .parent         = &apll96_ck,    /* 96M or Alt */
        .rate           = 48000000,
        .flags          = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X |
-                               RATE_FIXED | CM_PLL_SEL1 | RATE_PROPAGATES,
+                               RATE_FIXED | CM_PLL_SEL1 | RATE_PROPAGATES |
+                               PARENT_CONTROLS_CLOCK,
        .src_offset     = OMAP24XX_48M_SOURCE_SHIFT,
-       .enable_reg     = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
-       .enable_bit     = PARENT_CONTROLS_CLOCK,
        .recalc         = &omap2_propagate_rate,
 };
 
        .parent         = &func_48m_ck,
        .rate           = 12000000,
        .flags          = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X |
-                               RATE_FIXED | RATE_PROPAGATES,
+                               RATE_FIXED | RATE_PROPAGATES |
+                               PARENT_CONTROLS_CLOCK,
        .recalc         = &omap2_propagate_rate,
-       .enable_reg     = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
-       .enable_bit     = PARENT_CONTROLS_CLOCK,
 };
 
 /* Secure timer, only available in secure mode */