ARM: OMAP3: PM: call pre/post transition per powerdomain
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. Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Tested-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Tested-by: Grazvydas Ignotas <notasas@gmail.com> Signed-off-by: Kevin Hilman <khilman@ti.com>
This commit is contained in:
parent
e055548953
commit
58f0829b71
|
@ -273,16 +273,21 @@ void omap_sram_idle(void)
|
||||||
per_next_state = pwrdm_read_next_pwrst(per_pwrdm);
|
per_next_state = pwrdm_read_next_pwrst(per_pwrdm);
|
||||||
core_next_state = pwrdm_read_next_pwrst(core_pwrdm);
|
core_next_state = pwrdm_read_next_pwrst(core_pwrdm);
|
||||||
|
|
||||||
pwrdm_pre_transition(NULL);
|
if (mpu_next_state < PWRDM_POWER_ON) {
|
||||||
|
pwrdm_pre_transition(mpu_pwrdm);
|
||||||
|
pwrdm_pre_transition(neon_pwrdm);
|
||||||
|
}
|
||||||
|
|
||||||
/* PER */
|
/* PER */
|
||||||
if (per_next_state < PWRDM_POWER_ON) {
|
if (per_next_state < PWRDM_POWER_ON) {
|
||||||
|
pwrdm_pre_transition(per_pwrdm);
|
||||||
per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0;
|
per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0;
|
||||||
omap2_gpio_prepare_for_idle(per_going_off);
|
omap2_gpio_prepare_for_idle(per_going_off);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CORE */
|
/* CORE */
|
||||||
if (core_next_state < PWRDM_POWER_ON) {
|
if (core_next_state < PWRDM_POWER_ON) {
|
||||||
|
pwrdm_pre_transition(core_pwrdm);
|
||||||
if (core_next_state == PWRDM_POWER_OFF) {
|
if (core_next_state == PWRDM_POWER_OFF) {
|
||||||
omap3_core_save_context();
|
omap3_core_save_context();
|
||||||
omap3_cm_save_context();
|
omap3_cm_save_context();
|
||||||
|
@ -335,14 +340,20 @@ void omap_sram_idle(void)
|
||||||
omap2_prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK,
|
omap2_prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK,
|
||||||
OMAP3430_GR_MOD,
|
OMAP3430_GR_MOD,
|
||||||
OMAP3_PRM_VOLTCTRL_OFFSET);
|
OMAP3_PRM_VOLTCTRL_OFFSET);
|
||||||
|
pwrdm_post_transition(core_pwrdm);
|
||||||
}
|
}
|
||||||
omap3_intc_resume_idle();
|
omap3_intc_resume_idle();
|
||||||
|
|
||||||
pwrdm_post_transition(NULL);
|
|
||||||
|
|
||||||
/* PER */
|
/* PER */
|
||||||
if (per_next_state < PWRDM_POWER_ON)
|
if (per_next_state < PWRDM_POWER_ON) {
|
||||||
omap2_gpio_resume_after_idle();
|
omap2_gpio_resume_after_idle();
|
||||||
|
pwrdm_post_transition(per_pwrdm);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mpu_next_state < PWRDM_POWER_ON) {
|
||||||
|
pwrdm_post_transition(mpu_pwrdm);
|
||||||
|
pwrdm_post_transition(neon_pwrdm);
|
||||||
|
}
|
||||||
|
|
||||||
clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]);
|
clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue