|
@@ -379,9 +379,16 @@ void omap_sram_idle(void)
|
|
|
if (pwrdm_read_pwrst(neon_pwrdm) == PWRDM_POWER_ON)
|
|
|
pwrdm_set_next_pwrst(neon_pwrdm, mpu_next_state);
|
|
|
|
|
|
- /* PER */
|
|
|
+ /* Enable IO-PAD and IO-CHAIN wakeups */
|
|
|
per_next_state = pwrdm_read_next_pwrst(per_pwrdm);
|
|
|
core_next_state = pwrdm_read_next_pwrst(core_pwrdm);
|
|
|
+ if (per_next_state < PWRDM_POWER_ON ||
|
|
|
+ core_next_state < PWRDM_POWER_ON) {
|
|
|
+ prm_set_mod_reg_bits(OMAP3430_EN_IO, WKUP_MOD, PM_WKEN);
|
|
|
+ omap3_enable_io_chain();
|
|
|
+ }
|
|
|
+
|
|
|
+ /* PER */
|
|
|
if (per_next_state < PWRDM_POWER_ON) {
|
|
|
omap_uart_prepare_idle(2);
|
|
|
omap2_gpio_prepare_for_retention();
|
|
@@ -406,10 +413,8 @@ void omap_sram_idle(void)
|
|
|
omap3_core_save_context();
|
|
|
omap3_prcm_save_context();
|
|
|
}
|
|
|
- /* Enable IO-PAD and IO-CHAIN wakeups */
|
|
|
- prm_set_mod_reg_bits(OMAP3430_EN_IO, WKUP_MOD, PM_WKEN);
|
|
|
- omap3_enable_io_chain();
|
|
|
}
|
|
|
+
|
|
|
omap3_intc_prepare_idle();
|
|
|
|
|
|
/*
|
|
@@ -471,7 +476,8 @@ void omap_sram_idle(void)
|
|
|
}
|
|
|
|
|
|
/* Disable IO-PAD and IO-CHAIN wakeup */
|
|
|
- if (core_next_state < PWRDM_POWER_ON) {
|
|
|
+ if (per_next_state < PWRDM_POWER_ON ||
|
|
|
+ core_next_state < PWRDM_POWER_ON) {
|
|
|
prm_clear_mod_reg_bits(OMAP3430_EN_IO, WKUP_MOD, PM_WKEN);
|
|
|
omap3_disable_io_chain();
|
|
|
}
|