aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Hilman <[email protected]>2010-08-16 09:21:19 +0300
committerTony Lindgren <[email protected]>2010-08-16 09:22:05 +0300
commit58a5559e461a4ab945286dacef611d3c542c5fee (patch)
tree4be2990e686545c54f183143da331caf67a0a338
parentc66dd2660de534973303e2dd4f7784763bc9e549 (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.c4
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();
}