diff options
author | Roger Quadros <rogerq@ti.com> | 2017-03-17 04:58:18 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2017-03-23 16:19:59 -0400 |
commit | 8ff42da411474893ae373d4280ea88954fa97fcc (patch) | |
tree | cdf50dc9abaa194cb004790436290566512d4d66 /arch/arm/mach-omap2/omap_hwmod.c | |
parent | 390c06828dd22549706946113a0783cb8e2a3240 (diff) |
ARM: OMAP2+ hwmod: Allow modules to disable HW_AUTO
Introduce HWMOD_CLKDM_NOAUTO flag that allows the hwmod's
clockdomain to be prevented from HW_AUTO while the hwmod is active.
This is needed to workaround some modules which don't function
correctly with HW_AUTO. e.g. DCAN on DRA7.
Signed-off-by: Roger Quadros <rogerq@ti.com>
[nsekhar@ti.com: rebased to v4.9 kernel]
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/mach-omap2/omap_hwmod.c')
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 8a4039325845..8bcea0d83fa0 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -2027,7 +2027,7 @@ static int _enable(struct omap_hwmod *oh) | |||
2027 | 2027 | ||
2028 | r = (soc_ops.wait_target_ready) ? soc_ops.wait_target_ready(oh) : | 2028 | r = (soc_ops.wait_target_ready) ? soc_ops.wait_target_ready(oh) : |
2029 | -EINVAL; | 2029 | -EINVAL; |
2030 | if (oh->clkdm) | 2030 | if (oh->clkdm && !(oh->flags & HWMOD_CLKDM_NOAUTO)) |
2031 | clkdm_allow_idle(oh->clkdm); | 2031 | clkdm_allow_idle(oh->clkdm); |
2032 | 2032 | ||
2033 | if (!r) { | 2033 | if (!r) { |
@@ -2084,7 +2084,12 @@ static int _idle(struct omap_hwmod *oh) | |||
2084 | _idle_sysc(oh); | 2084 | _idle_sysc(oh); |
2085 | _del_initiator_dep(oh, mpu_oh); | 2085 | _del_initiator_dep(oh, mpu_oh); |
2086 | 2086 | ||
2087 | if (oh->clkdm) | 2087 | /* |
2088 | * If HWMOD_CLKDM_NOAUTO is set then we don't | ||
2089 | * deny idle the clkdm again since idle was already denied | ||
2090 | * in _enable() | ||
2091 | */ | ||
2092 | if (oh->clkdm && !(oh->flags & HWMOD_CLKDM_NOAUTO)) | ||
2088 | clkdm_deny_idle(oh->clkdm); | 2093 | clkdm_deny_idle(oh->clkdm); |
2089 | 2094 | ||
2090 | if (oh->flags & HWMOD_BLOCK_WFI) | 2095 | if (oh->flags & HWMOD_BLOCK_WFI) |