diff options
Diffstat (limited to 'arch/arm/mach-omap2/clock36xx.c')
-rw-r--r-- | arch/arm/mach-omap2/clock36xx.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/arch/arm/mach-omap2/clock36xx.c b/arch/arm/mach-omap2/clock36xx.c index 0e1e9e4e2fa4..8f3bf4e50908 100644 --- a/arch/arm/mach-omap2/clock36xx.c +++ b/arch/arm/mach-omap2/clock36xx.c | |||
@@ -37,34 +37,32 @@ | |||
37 | * (Any other value different from the Read value) to the | 37 | * (Any other value different from the Read value) to the |
38 | * corresponding CM_CLKSEL register will refresh the dividers. | 38 | * corresponding CM_CLKSEL register will refresh the dividers. |
39 | */ | 39 | */ |
40 | static int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk *clk) | 40 | int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk_hw *clk) |
41 | { | 41 | { |
42 | struct clk_hw_omap *parent; | ||
43 | struct clk_hw *parent_hw; | ||
42 | u32 dummy_v, orig_v, clksel_shift; | 44 | u32 dummy_v, orig_v, clksel_shift; |
43 | int ret; | 45 | int ret; |
44 | 46 | ||
45 | /* Clear PWRDN bit of HSDIVIDER */ | 47 | /* Clear PWRDN bit of HSDIVIDER */ |
46 | ret = omap2_dflt_clk_enable(clk); | 48 | ret = omap2_dflt_clk_enable(clk); |
47 | 49 | ||
50 | parent_hw = __clk_get_hw(__clk_get_parent(clk->clk)); | ||
51 | parent = to_clk_hw_omap(parent_hw); | ||
52 | |||
48 | /* Restore the dividers */ | 53 | /* Restore the dividers */ |
49 | if (!ret) { | 54 | if (!ret) { |
50 | clksel_shift = __ffs(clk->parent->clksel_mask); | 55 | clksel_shift = __ffs(parent->clksel_mask); |
51 | orig_v = __raw_readl(clk->parent->clksel_reg); | 56 | orig_v = __raw_readl(parent->clksel_reg); |
52 | dummy_v = orig_v; | 57 | dummy_v = orig_v; |
53 | 58 | ||
54 | /* Write any other value different from the Read value */ | 59 | /* Write any other value different from the Read value */ |
55 | dummy_v ^= (1 << clksel_shift); | 60 | dummy_v ^= (1 << clksel_shift); |
56 | __raw_writel(dummy_v, clk->parent->clksel_reg); | 61 | __raw_writel(dummy_v, parent->clksel_reg); |
57 | 62 | ||
58 | /* Write the original divider */ | 63 | /* Write the original divider */ |
59 | __raw_writel(orig_v, clk->parent->clksel_reg); | 64 | __raw_writel(orig_v, parent->clksel_reg); |
60 | } | 65 | } |
61 | 66 | ||
62 | return ret; | 67 | return ret; |
63 | } | 68 | } |
64 | |||
65 | const struct clkops clkops_omap36xx_pwrdn_with_hsdiv_wait_restore = { | ||
66 | .enable = omap36xx_pwrdn_clk_enable_with_hsdiv_restore, | ||
67 | .disable = omap2_dflt_clk_disable, | ||
68 | .find_companion = omap2_clk_dflt_find_companion, | ||
69 | .find_idlest = omap2_clk_dflt_find_idlest, | ||
70 | }; | ||