diff options
| -rw-r--r-- | drivers/mmc/host/sdhci.c | 13 | ||||
| -rw-r--r-- | include/linux/mmc/sdhci.h | 2 |
2 files changed, 13 insertions, 2 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 1f5888b42b2c..80cc7847c531 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c | |||
| @@ -2426,8 +2426,17 @@ int sdhci_resume_host(struct sdhci_host *host) | |||
| 2426 | if (ret) | 2426 | if (ret) |
| 2427 | return ret; | 2427 | return ret; |
| 2428 | 2428 | ||
| 2429 | sdhci_init(host, (host->mmc->pm_flags & MMC_PM_KEEP_POWER)); | 2429 | if ((host->mmc->pm_flags & MMC_PM_KEEP_POWER) && |
| 2430 | mmiowb(); | 2430 | (host->quirks2 & SDHCI_QUIRK2_HOST_OFF_CARD_ON)) { |
| 2431 | /* Card keeps power but host controller does not */ | ||
| 2432 | sdhci_init(host, 0); | ||
| 2433 | host->pwr = 0; | ||
| 2434 | host->clock = 0; | ||
| 2435 | sdhci_do_set_ios(host, &host->mmc->ios); | ||
| 2436 | } else { | ||
| 2437 | sdhci_init(host, (host->mmc->pm_flags & MMC_PM_KEEP_POWER)); | ||
| 2438 | mmiowb(); | ||
| 2439 | } | ||
| 2431 | 2440 | ||
| 2432 | ret = mmc_resume_host(host->mmc); | 2441 | ret = mmc_resume_host(host->mmc); |
| 2433 | sdhci_enable_card_detection(host); | 2442 | sdhci_enable_card_detection(host); |
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h index c750f85177d9..e9051e1cb1ce 100644 --- a/include/linux/mmc/sdhci.h +++ b/include/linux/mmc/sdhci.h | |||
| @@ -90,6 +90,8 @@ struct sdhci_host { | |||
| 90 | 90 | ||
| 91 | unsigned int quirks2; /* More deviations from spec. */ | 91 | unsigned int quirks2; /* More deviations from spec. */ |
| 92 | 92 | ||
| 93 | #define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0) | ||
| 94 | |||
| 93 | int irq; /* Device IRQ */ | 95 | int irq; /* Device IRQ */ |
| 94 | void __iomem *ioaddr; /* Mapped address */ | 96 | void __iomem *ioaddr; /* Mapped address */ |
| 95 | 97 | ||
