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@xxxxxx> --- arch/arm/mach-omap2/omap_hwmod.c | 14 ++++++++++++-- arch/arm/mach-omap2/omap_hwmod.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 752969f..364424f 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -2140,12 +2140,15 @@ static int _enable(struct omap_hwmod *oh) r = (soc_ops.wait_target_ready) ? soc_ops.wait_target_ready(oh) : -EINVAL; if (!r) { + if (oh->clkdm && (oh->flags & HWMOD_CLKDM_NOAUTO)) + clkdm_hwmod_prevent_hwauto(oh->clkdm, oh); + /* * Set the clockdomain to HW_AUTO only if the target is ready, * assuming that the previous state was HW_AUTO */ if (oh->clkdm && hwsup) - clkdm_allow_idle(oh->clkdm); + clkdm_hwmod_hwauto(oh->clkdm, oh); oh->_state = _HWMOD_STATE_ENABLED; @@ -2207,8 +2210,15 @@ static int _idle(struct omap_hwmod *oh) * transition to complete properly. */ _disable_clocks(oh); - if (oh->clkdm) + + if (oh->clkdm) { + if (oh->flags & HWMOD_CLKDM_NOAUTO) { + clkdm_hwmod_allow_hwauto(oh->clkdm, oh); + clkdm_hwmod_hwauto(oh->clkdm, oh); + } + clkdm_hwmod_disable(oh->clkdm, oh); + } /* Mux pins for device idle if populated */ if (oh->mux && oh->mux->pads_dynamic) { diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h index 9611c91..4e6d1a3 100644 --- a/arch/arm/mach-omap2/omap_hwmod.h +++ b/arch/arm/mach-omap2/omap_hwmod.h @@ -532,6 +532,7 @@ struct omap_hwmod_omap4_prcm { #define HWMOD_FORCE_MSTANDBY (1 << 11) #define HWMOD_SWSUP_SIDLE_ACT (1 << 12) #define HWMOD_RECONFIG_IO_CHAIN (1 << 13) +#define HWMOD_CLKDM_NOAUTO (1 << 14) /* * omap_hwmod._int_flags definitions -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html