omap_hsmmc: consider MMC_PM_KEEP_POWER on suspend/resume
When an mmc card has the MMC_PM_KEEP_POWER flag, it shouldn't be powered off on suspend (and thus doesn't have to be powered-on on resume) While on it, change the suspend flow a bit, to make it a bit easier to follow. Signed-off-by: Eliad Peller <eliad@wizery.com> Acked-by: Chris Ball <cjb@laptop.org> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
Родитель
5611cc4572
Коммит
31f9d4635b
|
@ -2176,13 +2176,7 @@ static int omap_hsmmc_suspend(struct device *dev)
|
|||
cancel_work_sync(&host->mmc_carddetect_work);
|
||||
ret = mmc_suspend_host(host->mmc);
|
||||
|
||||
if (ret == 0) {
|
||||
omap_hsmmc_disable_irq(host);
|
||||
OMAP_HSMMC_WRITE(host->base, HCTL,
|
||||
OMAP_HSMMC_READ(host->base, HCTL) & ~SDBP);
|
||||
if (host->got_dbclk)
|
||||
clk_disable(host->dbclk);
|
||||
} else {
|
||||
if (ret) {
|
||||
host->suspended = 0;
|
||||
if (host->pdata->resume) {
|
||||
ret = host->pdata->resume(&pdev->dev,
|
||||
|
@ -2191,9 +2185,20 @@ static int omap_hsmmc_suspend(struct device *dev)
|
|||
dev_dbg(mmc_dev(host->mmc),
|
||||
"Unmask interrupt failed\n");
|
||||
}
|
||||
goto err;
|
||||
}
|
||||
pm_runtime_put_sync(host->dev);
|
||||
|
||||
if (!(host->mmc->pm_flags & MMC_PM_KEEP_POWER)) {
|
||||
omap_hsmmc_disable_irq(host);
|
||||
OMAP_HSMMC_WRITE(host->base, HCTL,
|
||||
OMAP_HSMMC_READ(host->base, HCTL) & ~SDBP);
|
||||
}
|
||||
if (host->got_dbclk)
|
||||
clk_disable(host->dbclk);
|
||||
|
||||
}
|
||||
err:
|
||||
pm_runtime_put_sync(host->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -2213,7 +2218,8 @@ static int omap_hsmmc_resume(struct device *dev)
|
|||
if (host->got_dbclk)
|
||||
clk_enable(host->dbclk);
|
||||
|
||||
omap_hsmmc_conf_bus_power(host);
|
||||
if (!(host->mmc->pm_flags & MMC_PM_KEEP_POWER))
|
||||
omap_hsmmc_conf_bus_power(host);
|
||||
|
||||
if (host->pdata->resume) {
|
||||
ret = host->pdata->resume(&pdev->dev, host->slot_id);
|
||||
|
|
Загрузка…
Ссылка в новой задаче