提交 39b9431b 编写于 作者: U Ulf Hansson 提交者: Chris Ball

mmc: core: Stop bkops for eMMC only from mmc suspend

Move mmc suspend specific operations to be executed from the .suspend
callback in the mmc bus_ops. This simplifies the mmc_suspend_host
function which is supposed to handle nothing but common suspend tasks.

Since eMMC can be considered non-removable there are no need to check
for ongoing bkops at PM_SUSPEND_PREPARE notification so remove it.
Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: NChris Ball <cjb@laptop.org>
上级 0c5ce16b
...@@ -2651,14 +2651,8 @@ int mmc_suspend_host(struct mmc_host *host) ...@@ -2651,14 +2651,8 @@ int mmc_suspend_host(struct mmc_host *host)
mmc_bus_get(host); mmc_bus_get(host);
if (host->bus_ops && !host->bus_dead) { if (host->bus_ops && !host->bus_dead) {
if (host->bus_ops->suspend) { if (host->bus_ops->suspend)
if (mmc_card_doing_bkops(host->card)) {
err = mmc_stop_bkops(host->card);
if (err)
goto out;
}
err = host->bus_ops->suspend(host); err = host->bus_ops->suspend(host);
}
if (err == -ENOSYS || !host->bus_ops->resume) { if (err == -ENOSYS || !host->bus_ops->resume) {
/* /*
...@@ -2682,10 +2676,8 @@ int mmc_suspend_host(struct mmc_host *host) ...@@ -2682,10 +2676,8 @@ int mmc_suspend_host(struct mmc_host *host)
if (!err && !mmc_card_keep_power(host)) if (!err && !mmc_card_keep_power(host))
mmc_power_off(host); mmc_power_off(host);
out:
return err; return err;
} }
EXPORT_SYMBOL(mmc_suspend_host); EXPORT_SYMBOL(mmc_suspend_host);
/** /**
...@@ -2740,22 +2732,10 @@ int mmc_pm_notify(struct notifier_block *notify_block, ...@@ -2740,22 +2732,10 @@ int mmc_pm_notify(struct notifier_block *notify_block,
struct mmc_host *host = container_of( struct mmc_host *host = container_of(
notify_block, struct mmc_host, pm_notify); notify_block, struct mmc_host, pm_notify);
unsigned long flags; unsigned long flags;
int err = 0;
switch (mode) { switch (mode) {
case PM_HIBERNATION_PREPARE: case PM_HIBERNATION_PREPARE:
case PM_SUSPEND_PREPARE: case PM_SUSPEND_PREPARE:
if (host->card && mmc_card_mmc(host->card) &&
mmc_card_doing_bkops(host->card)) {
err = mmc_stop_bkops(host->card);
if (err) {
pr_err("%s: didn't stop bkops\n",
mmc_hostname(host));
return err;
}
mmc_card_clr_doing_bkops(host->card);
}
spin_lock_irqsave(&host->lock, flags); spin_lock_irqsave(&host->lock, flags);
host->rescan_disable = 1; host->rescan_disable = 1;
spin_unlock_irqrestore(&host->lock, flags); spin_unlock_irqrestore(&host->lock, flags);
......
...@@ -1411,6 +1411,12 @@ static int mmc_suspend(struct mmc_host *host) ...@@ -1411,6 +1411,12 @@ static int mmc_suspend(struct mmc_host *host)
mmc_claim_host(host); mmc_claim_host(host);
if (mmc_card_doing_bkops(host->card)) {
err = mmc_stop_bkops(host->card);
if (err)
goto out;
}
err = mmc_cache_ctrl(host, 0); err = mmc_cache_ctrl(host, 0);
if (err) if (err)
goto out; goto out;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册