diff options
author | Fu Zhonghui <zhonghui.fu@linux.intel.com> | 2014-08-17 22:48:14 -0400 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2014-09-09 07:59:04 -0400 |
commit | dea67c4ec8218b301d7cac7ee6e63dac0bc566cb (patch) | |
tree | effaa882b9c5fb831c41b7d369e8b797871b369b /drivers/mmc/core/sdio_irq.c | |
parent | b1dec12032af3a5239171c76cd43a4d372d8829b (diff) |
mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
bf3b5ec66bd ("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>
Diffstat (limited to 'drivers/mmc/core/sdio_irq.c')
-rw-r--r-- | drivers/mmc/core/sdio_irq.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/mmc/core/sdio_irq.c b/drivers/mmc/core/sdio_irq.c index 5cc13c8d35bb..696eca493844 100644 --- a/drivers/mmc/core/sdio_irq.c +++ b/drivers/mmc/core/sdio_irq.c | |||
@@ -208,7 +208,7 @@ static int sdio_card_irq_get(struct mmc_card *card) | |||
208 | host->sdio_irqs--; | 208 | host->sdio_irqs--; |
209 | return err; | 209 | return err; |
210 | } | 210 | } |
211 | } else { | 211 | } else if (host->caps & MMC_CAP_SDIO_IRQ) { |
212 | mmc_host_clk_hold(host); | 212 | mmc_host_clk_hold(host); |
213 | host->ops->enable_sdio_irq(host, 1); | 213 | host->ops->enable_sdio_irq(host, 1); |
214 | mmc_host_clk_release(host); | 214 | mmc_host_clk_release(host); |
@@ -229,7 +229,7 @@ static int sdio_card_irq_put(struct mmc_card *card) | |||
229 | if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) { | 229 | if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) { |
230 | atomic_set(&host->sdio_irq_thread_abort, 1); | 230 | atomic_set(&host->sdio_irq_thread_abort, 1); |
231 | kthread_stop(host->sdio_irq_thread); | 231 | kthread_stop(host->sdio_irq_thread); |
232 | } else { | 232 | } else if (host->caps & MMC_CAP_SDIO_IRQ) { |
233 | mmc_host_clk_hold(host); | 233 | mmc_host_clk_hold(host); |
234 | host->ops->enable_sdio_irq(host, 0); | 234 | host->ops->enable_sdio_irq(host, 0); |
235 | mmc_host_clk_release(host); | 235 | mmc_host_clk_release(host); |