Merge branch 'fixes' into next
This commit is contained in:
commit
9d767dc552
|
@ -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;
|
||||
|
|
|
@ -34,6 +34,10 @@ static int process_sdio_pending_irqs(struct mmc_host *host)
|
|||
unsigned char pending;
|
||||
struct sdio_func *func;
|
||||
|
||||
/* Don't process SDIO IRQs if the card is suspended. */
|
||||
if (mmc_card_suspended(card))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Optimization, if there is only 1 function interrupt registered
|
||||
* and we know an IRQ was signaled then call irq handler directly.
|
||||
|
|
Loading…
Reference in New Issue