diff options
author | Kevin Hilman <[email protected]> | 2010-08-16 09:21:19 +0300 |
---|---|---|
committer | Tony Lindgren <[email protected]> | 2010-08-16 09:22:05 +0300 |
commit | 58a5559e461a4ab945286dacef611d3c542c5fee (patch) | |
tree | 4be2990e686545c54f183143da331caf67a0a338 | |
parent | c66dd2660de534973303e2dd4f7784763bc9e549 (diff) |
OMAP3: PM: ensure IO wakeups are properly disabled
Commit 5a5f561 (convert OMAP3 PRCM macros to the _SHIFT/_MASK suffixes)
mistakenly removed the check for PER when disabling the IO chain.
During idle, if the PER powerdomain transitions into a lower state
and CORE does not, the IO pad wakeups are not being disabled in
the idle path after they are enabled. This can happen with the
lower C-states when using CPUidle for example.
This patch ensures that the check for disabling IO wakeups also checks
for PER transitions, matching the check done to enable IO wakeups.
Found when debugging PM/CPUidle related problems reported by Ameya
Palande <[email protected]>. Problems were triggered
particularily on boards with UART2 consoles (n900, Overo) since UART2
is in the PER powerdomain.
Tested on l-o master (omap3_defonfig + CONFIG_CPU_IDLE=y) as well
as with current PM branch. Boards tested: n900, Overo, omap3evm.
Cc: Paul Walmsley <[email protected]>
Cc: Ameya Palande <[email protected]>
Tested-by: Jarkko Nikula <[email protected]>
Signed-off-by: Kevin Hilman <[email protected]>
[[email protected]: updated description to clarify the transistion]
Signed-off-by: Tony Lindgren <[email protected]>
-rw-r--r-- | arch/arm/mach-omap2/pm34xx.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index fb4994ad622e..7b03426c72a3 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -480,7 +480,9 @@ void omap_sram_idle(void) } /* Disable IO-PAD and IO-CHAIN wakeup */ - if (omap3_has_io_wakeup() && core_next_state < PWRDM_POWER_ON) { + if (omap3_has_io_wakeup() && + (per_next_state < PWRDM_POWER_ON || + core_next_state < PWRDM_POWER_ON)) { prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); omap3_disable_io_chain(); } |