aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/clock.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap2/clock.c')
-rw-r--r--arch/arm/mach-omap2/clock.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c
index 180299e4a83..1334f595eab 100644
--- a/arch/arm/mach-omap2/clock.c
+++ b/arch/arm/mach-omap2/clock.c
@@ -32,6 +32,7 @@
32 32
33#include "clock.h" 33#include "clock.h"
34#include "cm2xxx_3xxx.h" 34#include "cm2xxx_3xxx.h"
35#include "cm44xx.h"
35#include "cm-regbits-24xx.h" 36#include "cm-regbits-24xx.h"
36#include "cm-regbits-34xx.h" 37#include "cm-regbits-34xx.h"
37 38
@@ -43,6 +44,11 @@ u8 cpu_mask;
43 44
44/* Private functions */ 45/* Private functions */
45 46
47static void _omap4_module_wait_ready(struct clk *clk)
48{
49 omap4_cm_wait_module_ready(clk->enable_reg);
50}
51
46/** 52/**
47 * _omap2_module_wait_ready - wait for an OMAP module to leave IDLE 53 * _omap2_module_wait_ready - wait for an OMAP module to leave IDLE
48 * @clk: struct clk * belonging to the module 54 * @clk: struct clk * belonging to the module
@@ -190,8 +196,12 @@ int omap2_dflt_clk_enable(struct clk *clk)
190 __raw_writel(v, clk->enable_reg); 196 __raw_writel(v, clk->enable_reg);
191 v = __raw_readl(clk->enable_reg); /* OCP barrier */ 197 v = __raw_readl(clk->enable_reg); /* OCP barrier */
192 198
193 if (clk->ops->find_idlest) 199 if (clk->ops->find_idlest) {
194 _omap2_module_wait_ready(clk); 200 if (cpu_is_omap44xx())
201 _omap4_module_wait_ready(clk);
202 else
203 _omap2_module_wait_ready(clk);
204 }
195 205
196 return 0; 206 return 0;
197} 207}
@@ -219,6 +229,12 @@ void omap2_dflt_clk_disable(struct clk *clk)
219 /* No OCP barrier needed here since it is a disable operation */ 229 /* No OCP barrier needed here since it is a disable operation */
220} 230}
221 231
232const struct clkops clkops_omap4_dflt_wait = {
233 .enable = omap2_dflt_clk_enable,
234 .disable = omap2_dflt_clk_disable,
235 .find_idlest = omap2_clk_dflt_find_idlest,
236};
237
222const struct clkops clkops_omap2_dflt_wait = { 238const struct clkops clkops_omap2_dflt_wait = {
223 .enable = omap2_dflt_clk_enable, 239 .enable = omap2_dflt_clk_enable,
224 .disable = omap2_dflt_clk_disable, 240 .disable = omap2_dflt_clk_disable,
@@ -327,6 +343,10 @@ int omap2_clk_enable(struct clk *clk)
327 } 343 }
328 } 344 }
329 345
346 /* If clockdomain supports hardware control, enable it */
347 if (clk->clkdm)
348 clkdm_allow_idle(clk->clkdm);
349
330 return 0; 350 return 0;
331 351
332oce_err3: 352oce_err3: