|
@@ -108,6 +108,7 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
|
|
|
u32 cur_state;
|
|
|
int sleep_switch = -1;
|
|
|
int ret = 0;
|
|
|
+ int hwsup = 0;
|
|
|
|
|
|
if (pwrdm == NULL || IS_ERR(pwrdm))
|
|
|
return -EINVAL;
|
|
@@ -127,6 +128,7 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
|
|
|
(pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE)) {
|
|
|
sleep_switch = LOWPOWERSTATE_SWITCH;
|
|
|
} else {
|
|
|
+ hwsup = clkdm_in_hwsup(pwrdm->pwrdm_clkdms[0]);
|
|
|
clkdm_wakeup(pwrdm->pwrdm_clkdms[0]);
|
|
|
pwrdm_wait_transition(pwrdm);
|
|
|
sleep_switch = FORCEWAKEUP_SWITCH;
|
|
@@ -142,7 +144,7 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
|
|
|
|
|
|
switch (sleep_switch) {
|
|
|
case FORCEWAKEUP_SWITCH:
|
|
|
- if (pwrdm->pwrdm_clkdms[0]->flags & CLKDM_CAN_ENABLE_AUTO)
|
|
|
+ if (hwsup)
|
|
|
clkdm_allow_idle(pwrdm->pwrdm_clkdms[0]);
|
|
|
else
|
|
|
clkdm_sleep(pwrdm->pwrdm_clkdms[0]);
|