mirror of https://gitee.com/openkylin/linux.git
mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
781e989cf5
("mmc: sdhci: convert to new SDIO IRQ handling") andbf3b5ec66b
("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: Jaehoon Chung <jh80.chung@samsung.com> Signed-off-by: Chris Ball <chris@printf.net> Signed-off-by: Fu Zhonghui <zhonghui.fu@linux.intel.com> Cc: <stable@vger.kernel.org> # v3.16+ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
b1dec12032
commit
dea67c4ec8
|
@ -992,8 +992,16 @@ static int mmc_sdio_resume(struct mmc_host *host)
|
|||
}
|
||||
}
|
||||
|
||||
if (!err && host->sdio_irqs)
|
||||
wake_up_process(host->sdio_irq_thread);
|
||||
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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue