Signed-off-by: Ameya Palande <ameya.palande@xxxxxxxxx> --- drivers/dsp/bridge/wmd/tiomap3430_pwr.c | 33 ++++++++++++++++++------------ 1 files changed, 20 insertions(+), 13 deletions(-) diff --git a/drivers/dsp/bridge/wmd/tiomap3430_pwr.c b/drivers/dsp/bridge/wmd/tiomap3430_pwr.c index b81df8c..7aa58d1 100644 --- a/drivers/dsp/bridge/wmd/tiomap3430_pwr.c +++ b/drivers/dsp/bridge/wmd/tiomap3430_pwr.c @@ -204,20 +204,21 @@ DSP_STATUS SleepDSP(struct WMD_DEV_CONTEXT *pDevContext, IN u32 dwCmd, struct CFG_HOSTRES resources; struct DEH_MGR *hDehMgr; u16 usCount = TIHELEN_ACKTIMEOUT; - enum HW_PwrState_t pwrState; - enum HW_PwrState_t targetPwrState; + enum HW_PwrState_t pwrState, targetPwrState; - status = CFG_GetHostResources( - (struct CFG_DEVNODE *)DRV_GetFirstDevExtension(), &resources); - if (DSP_FAILED(status)) - return status; DBG_Trace(DBG_LEVEL7, "SleepDSP- Enter function \n"); - /* next, check if sleep code is valid... */ + /* Check if sleep code is valid */ if ((dwCmd != PWR_DEEPSLEEP) && (dwCmd != PWR_EMERGENCYDEEPSLEEP)) { DBG_Trace(DBG_LEVEL7, "SleepDSP- Illegal sleep command\n"); return DSP_EINVALIDARG; } + + status = CFG_GetHostResources( + (struct CFG_DEVNODE *)DRV_GetFirstDevExtension(), &resources); + if (DSP_FAILED(status)) + return status; + switch (pDevContext->dwBrdState) { case BRD_RUNNING: status = HW_MBOX_saveSettings(resources.dwMboxBase); @@ -245,7 +246,6 @@ DSP_STATUS SleepDSP(struct WMD_DEV_CONTEXT *pDevContext, IN u32 dwCmd, break; case BRD_HIBERNATION: case BRD_DSP_HIBERNATION: - status = HW_MBOX_saveSettings(resources.dwMboxBase); /* Already in Hibernation, so just return */ DBG_Trace(DBG_LEVEL7, "SleepDSP- DSP already in " "hibernation\n"); @@ -259,17 +259,22 @@ DSP_STATUS SleepDSP(struct WMD_DEV_CONTEXT *pDevContext, IN u32 dwCmd, "SleepDSP- Bridge in Illegal state\n"); return DSP_EFAIL; } + /* Get the PRCM DSP power domain status */ HW_PWR_IVA2StateGet(resources.dwPrmBase, HW_PWR_DOMAIN_DSP, - &pwrState); - /* Wait for DSP to move into Standby state, how much time - * should we wait?*/ + &pwrState); + + /* + * Wait for DSP to move into Standby state, how much time + * should we wait? + */ while ((pwrState != targetPwrState) && --usCount) { udelay(500); HW_PWR_IVA2StateGet(resources.dwPrmBase, HW_PWR_DOMAIN_DSP, &pwrState); } - if (usCount == 0) { + + if (!usCount) { DBG_Trace(DBG_LEVEL7, "SleepDSP: Timed out Waiting for DSP" " STANDBY %x \n", pwrState); DEV_GetDehMgr(pDevContext->hDevObject, &hDehMgr); @@ -278,17 +283,19 @@ DSP_STATUS SleepDSP(struct WMD_DEV_CONTEXT *pDevContext, IN u32 dwCmd, } else { DBG_Trace(DBG_LEVEL7, "SleepDSP: DSP STANDBY Pwr state %x \n", pwrState); + /* Update the Bridger Driver state */ if (enable_off_mode) pDevContext->dwBrdState = BRD_HIBERNATION; else pDevContext->dwBrdState = BRD_RETENTION; + /* Turn off DSP Peripheral clocks */ status = DSP_PeripheralClocks_Disable(pDevContext, NULL); if (DSP_FAILED(status)) DBG_Trace(DBG_LEVEL7, "SleepDSP- FAILED\n"); } -#endif +#endif /* CONFIG_PM */ return status; } -- 1.6.2.4 -- 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