diff options
Diffstat (limited to 'arch/arm/mach-omap2/clock.c')
-rw-r--r-- | arch/arm/mach-omap2/clock.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index 302d5a796340..737aca4cff13 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c | |||
@@ -81,6 +81,14 @@ static void omap2_propagate_rate(struct clk * clk) | |||
81 | propagate_rate(clk); | 81 | propagate_rate(clk); |
82 | } | 82 | } |
83 | 83 | ||
84 | static void omap2_set_osc_ck(int enable) | ||
85 | { | ||
86 | if (enable) | ||
87 | PRCM_CLKSRC_CTRL &= ~(0x3 << 3); | ||
88 | else | ||
89 | PRCM_CLKSRC_CTRL |= 0x3 << 3; | ||
90 | } | ||
91 | |||
84 | /* Enable an APLL if off */ | 92 | /* Enable an APLL if off */ |
85 | static void omap2_clk_fixed_enable(struct clk *clk) | 93 | static void omap2_clk_fixed_enable(struct clk *clk) |
86 | { | 94 | { |
@@ -121,6 +129,11 @@ static int _omap2_clk_enable(struct clk * clk) | |||
121 | if (clk->flags & ALWAYS_ENABLED) | 129 | if (clk->flags & ALWAYS_ENABLED) |
122 | return 0; | 130 | return 0; |
123 | 131 | ||
132 | if (unlikely(clk == &osc_ck)) { | ||
133 | omap2_set_osc_ck(1); | ||
134 | return 0; | ||
135 | } | ||
136 | |||
124 | if (unlikely(clk->enable_reg == 0)) { | 137 | if (unlikely(clk->enable_reg == 0)) { |
125 | printk(KERN_ERR "clock.c: Enable for %s without enable code\n", | 138 | printk(KERN_ERR "clock.c: Enable for %s without enable code\n", |
126 | clk->name); | 139 | clk->name); |
@@ -158,6 +171,11 @@ static void _omap2_clk_disable(struct clk *clk) | |||
158 | { | 171 | { |
159 | u32 regval32; | 172 | u32 regval32; |
160 | 173 | ||
174 | if (unlikely(clk == &osc_ck)) { | ||
175 | omap2_set_osc_ck(0); | ||
176 | return; | ||
177 | } | ||
178 | |||
161 | if (clk->enable_reg == 0) | 179 | if (clk->enable_reg == 0) |
162 | return; | 180 | return; |
163 | 181 | ||