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)
|
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);
|
mmc_claim_host(host);
|
||||||
|
|
||||||
if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(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);
|
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))
|
if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
|
||||||
wake_up_process(host->sdio_irq_thread);
|
wake_up_process(host->sdio_irq_thread);
|
||||||
else if (host->caps & MMC_CAP_SDIO_IRQ)
|
else if (host->caps & MMC_CAP_SDIO_IRQ)
|
||||||
host->ops->enable_sdio_irq(host, 1);
|
host->ops->enable_sdio_irq(host, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
mmc_release_host(host);
|
mmc_release_host(host);
|
||||||
|
|
||||||
host->pm_flags &= ~MMC_PM_KEEP_POWER;
|
host->pm_flags &= ~MMC_PM_KEEP_POWER;
|
||||||
|
|
|
@ -34,6 +34,10 @@ static int process_sdio_pending_irqs(struct mmc_host *host)
|
||||||
unsigned char pending;
|
unsigned char pending;
|
||||||
struct sdio_func *func;
|
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
|
* Optimization, if there is only 1 function interrupt registered
|
||||||
* and we know an IRQ was signaled then call irq handler directly.
|
* and we know an IRQ was signaled then call irq handler directly.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user