mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
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: Nguyen Viet Dung <nv-dung@jinso.co.jp> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski+renesas@gmail.com> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
0e74823429
commit
b22ffdcd25
2 changed files with 6 additions and 1 deletions
|
@ -85,6 +85,7 @@ struct tmio_mmc_host {
|
||||||
unsigned long last_req_ts;
|
unsigned long last_req_ts;
|
||||||
struct mutex ios_lock; /* protect set_ios() context */
|
struct mutex ios_lock; /* protect set_ios() context */
|
||||||
bool native_hotplug;
|
bool native_hotplug;
|
||||||
|
bool resuming;
|
||||||
};
|
};
|
||||||
|
|
||||||
int tmio_mmc_host_probe(struct tmio_mmc_host **host,
|
int tmio_mmc_host_probe(struct tmio_mmc_host **host,
|
||||||
|
|
|
@ -862,6 +862,10 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
|
||||||
if (!host->power) {
|
if (!host->power) {
|
||||||
tmio_mmc_clk_update(mmc);
|
tmio_mmc_clk_update(mmc);
|
||||||
pm_runtime_get_sync(dev);
|
pm_runtime_get_sync(dev);
|
||||||
|
if (host->resuming) {
|
||||||
|
tmio_mmc_reset(host);
|
||||||
|
host->resuming = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tmio_mmc_set_clock(host, ios->clock);
|
tmio_mmc_set_clock(host, ios->clock);
|
||||||
if (!host->power) {
|
if (!host->power) {
|
||||||
|
@ -1154,10 +1158,10 @@ int tmio_mmc_host_resume(struct device *dev)
|
||||||
struct mmc_host *mmc = dev_get_drvdata(dev);
|
struct mmc_host *mmc = dev_get_drvdata(dev);
|
||||||
struct tmio_mmc_host *host = mmc_priv(mmc);
|
struct tmio_mmc_host *host = mmc_priv(mmc);
|
||||||
|
|
||||||
tmio_mmc_reset(host);
|
|
||||||
tmio_mmc_enable_dma(host, true);
|
tmio_mmc_enable_dma(host, true);
|
||||||
|
|
||||||
/* The MMC core will perform the complete set up */
|
/* The MMC core will perform the complete set up */
|
||||||
|
host->resuming = true;
|
||||||
return mmc_resume_host(mmc);
|
return mmc_resume_host(mmc);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(tmio_mmc_host_resume);
|
EXPORT_SYMBOL(tmio_mmc_host_resume);
|
||||||
|
|
Loading…
Add table
Reference in a new issue