We only need to call the pre/post transtion methods when we know the power state is changing. First, split up the pre/post transition calls to be per-powerdomain, and then make them conditional on whether the power domain is actually changing states. Signed-off-by: Kevin Hilman <khilman@xxxxxx> --- arch/arm/mach-omap2/pm34xx.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 2451b90..74a7f8c 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -307,16 +307,19 @@ void omap_sram_idle(void) omap3_enable_io_chain(); } - pwrdm_pre_transition(NULL); + if (mpu_next_state < PWRDM_POWER_ON) + pwrdm_pre_transition(mpu_pwrdm); /* PER */ if (per_next_state < PWRDM_POWER_ON) { + pwrdm_pre_transition(per_pwrdm); per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0; omap2_gpio_prepare_for_idle(per_going_off); } /* CORE */ if (core_next_state < PWRDM_POWER_ON) { + pwrdm_pre_transition(core_pwrdm); if (core_next_state == PWRDM_POWER_OFF) { omap3_core_save_context(); omap3_cm_save_context(); @@ -369,15 +372,15 @@ void omap_sram_idle(void) omap2_prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK, OMAP3430_GR_MOD, OMAP3_PRM_VOLTCTRL_OFFSET); + pwrdm_post_transition(core_pwrdm); } omap3_intc_resume_idle(); - pwrdm_post_transition(NULL); - /* PER */ if (per_next_state < PWRDM_POWER_ON) { per_prev_state = pwrdm_read_prev_pwrst(per_pwrdm); omap2_gpio_resume_after_idle(); + pwrdm_post_transition(per_pwrdm); } /* Disable IO-PAD and IO-CHAIN wakeup */ @@ -390,6 +393,9 @@ void omap_sram_idle(void) omap3_disable_io_chain(); } + if (mpu_next_state < PWRDM_POWER_ON) + pwrdm_post_transition(mpu_pwrdm); + clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]); } -- 1.7.9.2 -- 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