Commit 39b9431b authored by Ulf Hansson's avatar Ulf Hansson Committed by Chris Ball
Browse files

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: default avatarUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent 0c5ce16b
Loading
Loading
Loading
Loading
+1 −21
Original line number Diff line number Diff line
@@ -2651,14 +2651,8 @@ int mmc_suspend_host(struct mmc_host *host)

	mmc_bus_get(host);
	if (host->bus_ops && !host->bus_dead) {
		if (host->bus_ops->suspend) {
			if (mmc_card_doing_bkops(host->card)) {
				err = mmc_stop_bkops(host->card);
				if (err)
					goto out;
			}
		if (host->bus_ops->suspend)
			err = host->bus_ops->suspend(host);
		}

		if (err == -ENOSYS || !host->bus_ops->resume) {
			/*
@@ -2682,10 +2676,8 @@ int mmc_suspend_host(struct mmc_host *host)
	if (!err && !mmc_card_keep_power(host))
		mmc_power_off(host);

out:
	return err;
}

EXPORT_SYMBOL(mmc_suspend_host);

/**
@@ -2740,22 +2732,10 @@ int mmc_pm_notify(struct notifier_block *notify_block,
	struct mmc_host *host = container_of(
		notify_block, struct mmc_host, pm_notify);
	unsigned long flags;
	int err = 0;

	switch (mode) {
	case PM_HIBERNATION_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);
		host->rescan_disable = 1;
		spin_unlock_irqrestore(&host->lock, flags);
+6 −0
Original line number Diff line number Diff line
@@ -1411,6 +1411,12 @@ static int mmc_suspend(struct mmc_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);
	if (err)
		goto out;