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

Commit 4073b350 authored by Venkat Gopalakrishnan's avatar Venkat Gopalakrishnan
Browse files

mmc: sdhci-msm: Reenable cd gpio on system resume



In 3.18 kernel mmc_gpiod_request_cd_irq() is not called as part of
call to mmc_gpio_request_cd(). During probe this is taken care of
by calling mmc_gpiod_request_cd_irq() from mmc_start_host(), but if
mmc_gpio_request_cd() followed by a mmc_gpio_free_cd() is invoked
after mmc_start_host() (such as in system suspend/resume path) then
mmc_gpiod_request_cd_irq() needs to be called explicitly.

Instead of free/request the card detect irq, just disable/enable
the irq in system suspend/resume path.

CRs-fixed: 876453
Change-Id: I976cd5061c2a7d8321e48ee23a44acfd552a37fc
Signed-off-by: default avatarVenkat Gopalakrishnan <venkatg@codeaurora.org>
parent 3380d16c
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -3554,8 +3554,9 @@ static int sdhci_msm_suspend(struct device *dev)
	int ret = 0;
	ktime_t start = ktime_get();

	if (gpio_is_valid(msm_host->pdata->status_gpio))
		mmc_gpio_free_cd(msm_host->mmc);
	if (gpio_is_valid(msm_host->pdata->status_gpio) &&
		(msm_host->mmc->slot.cd_irq >= 0))
			disable_irq(msm_host->mmc->slot.cd_irq);

	if (pm_runtime_suspended(dev)) {
		pr_debug("%s: %s: already runtime suspended\n",
@@ -3577,13 +3578,10 @@ static int sdhci_msm_resume(struct device *dev)
	int ret = 0;
	ktime_t start = ktime_get();

	if (gpio_is_valid(msm_host->pdata->status_gpio)) {
		ret = mmc_gpio_request_cd(msm_host->mmc,
				msm_host->pdata->status_gpio, 0);
		if (ret)
			pr_err("%s: %s: Failed to request card detection IRQ %d\n",
					mmc_hostname(host->mmc), __func__, ret);
	}
	if (gpio_is_valid(msm_host->pdata->status_gpio) &&
		(msm_host->mmc->slot.cd_irq >= 0))
			enable_irq(msm_host->mmc->slot.cd_irq);

	if (pm_runtime_suspended(dev)) {
		pr_debug("%s: %s: runtime suspended, defer system resume\n",
		mmc_hostname(host->mmc), __func__);