Commit dea67c4e authored by Fu Zhonghui's avatar Fu Zhonghui Committed by Ulf Hansson
Browse files

mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread

781e989c ("mmc: sdhci: convert to new SDIO IRQ handling") and
bf3b5ec6 ("mmc: sdio_irq: rework sdio irq handling") disabled
the use of our own custom threaded IRQ handler, but left in an
unconditional wake_up_process() on that handler at resume-time.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=80151



In addition, the check for MMC_CAP_SDIO_IRQ capability is added
before enable sdio IRQ.

Signed-off-by: default avatarJaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: default avatarChris Ball <chris@printf.net>
Signed-off-by: default avatarFu Zhonghui <zhonghui.fu@linux.intel.com>
Cc: <stable@vger.kernel.org> # v3.16+
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent b1dec120
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -992,8 +992,16 @@ static int mmc_sdio_resume(struct mmc_host *host)
		}
	}

	if (!err && host->sdio_irqs)
	if (!err && host->sdio_irqs) {
		if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
			wake_up_process(host->sdio_irq_thread);
		} else if (host->caps & MMC_CAP_SDIO_IRQ) {
			mmc_host_clk_hold(host);
			host->ops->enable_sdio_irq(host, 1);
			mmc_host_clk_release(host);
		}
	}

	mmc_release_host(host);

	host->pm_flags &= ~MMC_PM_KEEP_POWER;
+2 −2
Original line number Diff line number Diff line
@@ -208,7 +208,7 @@ static int sdio_card_irq_get(struct mmc_card *card)
				host->sdio_irqs--;
				return err;
			}
		} else {
		} else if (host->caps & MMC_CAP_SDIO_IRQ) {
			mmc_host_clk_hold(host);
			host->ops->enable_sdio_irq(host, 1);
			mmc_host_clk_release(host);
@@ -229,7 +229,7 @@ static int sdio_card_irq_put(struct mmc_card *card)
		if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
			atomic_set(&host->sdio_irq_thread_abort, 1);
			kthread_stop(host->sdio_irq_thread);
		} else {
		} else if (host->caps & MMC_CAP_SDIO_IRQ) {
			mmc_host_clk_hold(host);
			host->ops->enable_sdio_irq(host, 0);
			mmc_host_clk_release(host);