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

Commit 6e7c2de4 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "mmc: sd: set card removed to true"

parents 2897ea99 184d6f52
Loading
Loading
Loading
Loading
+22 −5
Original line number Diff line number Diff line
@@ -3245,26 +3245,43 @@ int mmc_resume_bus(struct mmc_host *host)
	spin_unlock_irqrestore(&host->lock, flags);

	mmc_bus_get(host);
	if (host->ops->get_cd)
	if (host->ops->get_cd) {
		card_present = host->ops->get_cd(host);
		if (!card_present) {
			pr_err("%s: Card removed - card_present:%d\n",
			       mmc_hostname(host), card_present);
			mmc_card_set_removed(host->card);
		}
	}

	if (host->bus_ops && !host->bus_dead && host->card && card_present) {
		mmc_power_up(host, host->card->ocr);
		BUG_ON(!host->bus_ops->resume);
		host->bus_ops->resume(host);
		err = host->bus_ops->resume(host);
		if (err && (err != -ENOMEDIUM)) {
			pr_err("%s: bus resume: failed: %d\n",
			       mmc_hostname(host), err);
			err = mmc_hw_reset(host);
			if (err) {
				pr_err("%s: reset: failed: %d\n",
				       mmc_hostname(host), err);
				goto err_reset;
			} else {
				mmc_card_clr_suspended(host->card);
			}
		}
		if (mmc_card_cmdq(host->card)) {
			err = mmc_cmdq_halt(host, false);
			if (err)
				pr_err("%s: %s: unhalt failed: %d\n",
				       mmc_hostname(host), __func__, err);
			else
				mmc_card_clr_suspended(host->card);
		}
	}

err_reset:
	mmc_bus_put(host);
	pr_debug("%s: Deferred resume completed\n", mmc_hostname(host));
	return 0;
	return err;
}
EXPORT_SYMBOL(mmc_resume_bus);

+14 −4
Original line number Diff line number Diff line
@@ -1346,11 +1346,21 @@ static int mmc_sd_resume(struct mmc_host *host)

	MMC_TRACE(host, "%s: Enter\n", __func__);
	err = _mmc_sd_resume(host);
	if (err) {
		pr_err("%s: sd resume err: %d\n", mmc_hostname(host), err);
		if (host->ops->get_cd && !host->ops->get_cd(host)) {
			err = -ENOMEDIUM;
			mmc_card_set_removed(host->card);
		}
	}

	if (err != -ENOMEDIUM) {
		pm_runtime_set_active(&host->card->dev);
		pm_runtime_mark_last_busy(&host->card->dev);
		pm_runtime_enable(&host->card->dev);
	MMC_TRACE(host, "%s: Exit err: %d\n", __func__, err);
	}

	MMC_TRACE(host, "%s: Exit err: %d\n", __func__, err);
	return err;
}