pwrst->next_state = PWRDM_POWER_RET;
pr_warn("%s: Core OFF disabled due to errata i583\n",
__func__);
+ } else if (enable < 3 && pwrst->pwrdm == per_pwrdm) {
+ /* pandora hack */
+ pwrst->next_state = PWRDM_POWER_RET;
} else {
pwrst->next_state = state;
}
if (pwrdm_has_hdwr_sar(pwrdm))
pwrdm_enable_hdwr_sar(pwrdm);
+ /* pandora OFF hacks, notes for missing:
+ * - core_pwrdm - loses GPIO state?!
+ * - per_pwrdm - must keep RET because of GPIOs
+ * - neon_pwrdm - depends on mpu_pwrdm
+ * - mpu_pwrdm - sometimes hangs?
+ * notes for enabled:
+ * - usbhost_pwrdm - does driver reload + reinit anyway, no runtime PM
+ * - sgx_pwrdm - only OFF is supported
+ * - dss_pwrdm - works, needs working context_loss counter
+ * - cam_pwrdm - not used
+ * - iva2_pwrdm - c64_tools reprograms with direct reg hits anyway
+ */
+ if ( pwrdm == pwrdm_lookup("usbhost_pwrdm")
+ || pwrdm == pwrdm_lookup("sgx_pwrdm")
+ || pwrdm == pwrdm_lookup("cam_pwrdm")
+ || pwrdm == pwrdm_lookup("iva2_pwrdm")
+ )
+ pwrst->next_state = PWRDM_POWER_OFF;
+
+ /* on OMAP3, at least on ES2.1, DSS drains more in OFF than in RET?? */
+ else if (cpu_is_omap3630() && pwrdm == pwrdm_lookup("dss_pwrdm"))
+ pwrst->next_state = PWRDM_POWER_OFF;
+
return omap_set_pwrdm_state(pwrst->pwrdm, pwrst->next_state);
}