Loading drivers/mmc/core/sdio.c +12 −1 Original line number Diff line number Diff line Loading @@ -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)) Loading Loading @@ -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; Loading drivers/mmc/core/sdio_irq.c +4 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
drivers/mmc/core/sdio.c +12 −1 Original line number Diff line number Diff line Loading @@ -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)) Loading Loading @@ -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; Loading
drivers/mmc/core/sdio_irq.c +4 −0 Original line number Diff line number Diff line Loading @@ -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