Commit b22ffdcd authored by Guennadi Liakhovetski's avatar Guennadi Liakhovetski Committed by Chris Ball
Browse files

mmc: tmio: postpone controller reset during resume



When resuming, the tmio_mmc_host_resume() function is run when the
controller might still be powered down. Issuing a reset command to it at
that time has no effect. This patch postpones resetting the controller
until the first powering-up .set_ios() call.

Reported-by: default avatarNguyen Viet Dung <nv-dung@jinso.co.jp>
Signed-off-by: default avatarGuennadi Liakhovetski <g.liakhovetski+renesas@gmail.com>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent 0e748234
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -85,6 +85,7 @@ struct tmio_mmc_host {
	unsigned long		last_req_ts;
	struct mutex		ios_lock;	/* protect set_ios() context */
	bool			native_hotplug;
	bool			resuming;
};

int tmio_mmc_host_probe(struct tmio_mmc_host **host,
+5 −1
Original line number Diff line number Diff line
@@ -862,6 +862,10 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
		if (!host->power) {
			tmio_mmc_clk_update(mmc);
			pm_runtime_get_sync(dev);
			if (host->resuming) {
				tmio_mmc_reset(host);
				host->resuming = false;
			}
		}
		tmio_mmc_set_clock(host, ios->clock);
		if (!host->power) {
@@ -1154,10 +1158,10 @@ int tmio_mmc_host_resume(struct device *dev)
	struct mmc_host *mmc = dev_get_drvdata(dev);
	struct tmio_mmc_host *host = mmc_priv(mmc);

	tmio_mmc_reset(host);
	tmio_mmc_enable_dma(host, true);

	/* The MMC core will perform the complete set up */
	host->resuming = true;
	return mmc_resume_host(mmc);
}
EXPORT_SYMBOL(tmio_mmc_host_resume);