Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 31f9d463 authored by Eliad Peller's avatar Eliad Peller Committed by Tony Lindgren
Browse files

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: default avatarEliad Peller <eliad@wizery.com>
Acked-by: default avatarChris Ball <cjb@laptop.org>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 5611cc45
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -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,6 +2218,7 @@ static int omap_hsmmc_resume(struct device *dev)
		if (host->got_dbclk)
			clk_enable(host->dbclk);

		if (!(host->mmc->pm_flags & MMC_PM_KEEP_POWER))
			omap_hsmmc_conf_bus_power(host);

		if (host->pdata->resume) {