@@ -1684,8 +1684,12 @@ out:
/*
* We have to delay this as it calls back into the driver.
*/
- if (cardint)
- mmc_signal_sdio_irq(host->mmc);
+ if (cardint) {
+ if(host->suspended)
+ sdhci_enable_sdio_irq(host->mmc, 0);
+ else
+ mmc_signal_sdio_irq(host->mmc);
+ }
return result;
}
@@ -1709,6 +1713,7 @@ int sdhci_suspend_host(struct sdhci_host *host,
pm_message_t state)
return ret;
free_irq(host->irq, host);
+ host->suspended = true;
if (host->vmmc)
ret = regulator_disable(host->vmmc);
@@ -1742,6 +1747,7 @@ int sdhci_resume_host(struct sdhci_host *host)
sdhci_init(host, (host->mmc->pm_flags & MMC_PM_KEEP_POWER));
mmiowb();
+ host->suspended = false;
ret = mmc_resume_host(host->mmc);
sdhci_enable_card_detection(host);
@@ -140,6 +140,7 @@ struct sdhci_host {
struct timer_list timer; /* Timer for timeouts */
unsigned int caps; /* Alternative capabilities */
+ bool suspended;
unsigned int ocr_avail_sdio; /* OCR bit masks */
unsigned int ocr_avail_sd;