diff options
| author | David S. Miller <davem@davemloft.net> | 2019-06-22 08:59:24 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2019-06-22 08:59:24 -0400 |
| commit | 92ad6325cb891bb455487bfe90cc47d18aa6ec37 (patch) | |
| tree | 433a7ef938fae69789216043f67eff9f9c6b0c68 /drivers/mmc/core/sdio.c | |
| parent | e0effb5fbd56a8b2b8917611cbf4fcd9aba92b8f (diff) | |
| parent | c356dc4b540edd6c02b409dd8cf3208ba2804c38 (diff) | |
| download | talos-op-linux-92ad6325cb891bb455487bfe90cc47d18aa6ec37.tar.gz talos-op-linux-92ad6325cb891bb455487bfe90cc47d18aa6ec37.zip | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Minor SPDX change conflict.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/mmc/core/sdio.c')
| -rw-r--r-- | drivers/mmc/core/sdio.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c index d1aa1c7577bb..712a7742765e 100644 --- a/drivers/mmc/core/sdio.c +++ b/drivers/mmc/core/sdio.c @@ -937,6 +937,10 @@ static int mmc_sdio_pre_suspend(struct mmc_host *host) */ static int mmc_sdio_suspend(struct mmc_host *host) { + /* Prevent processing of SDIO IRQs in suspended state. */ + mmc_card_set_suspended(host->card); + cancel_delayed_work_sync(&host->sdio_irq_work); + mmc_claim_host(host); if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) @@ -985,13 +989,20 @@ static int mmc_sdio_resume(struct mmc_host *host) err = sdio_enable_4bit_bus(host->card); } - if (!err && host->sdio_irqs) { + if (err) + goto out; + + /* Allow SDIO IRQs to be processed again. */ + mmc_card_clr_suspended(host->card); + + if (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) host->ops->enable_sdio_irq(host, 1); } +out: mmc_release_host(host); host->pm_flags &= ~MMC_PM_KEEP_POWER; |

