|
@@ -2426,8 +2426,17 @@ int sdhci_resume_host(struct sdhci_host *host)
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
- sdhci_init(host, (host->mmc->pm_flags & MMC_PM_KEEP_POWER));
|
|
|
- mmiowb();
|
|
|
+ if ((host->mmc->pm_flags & MMC_PM_KEEP_POWER) &&
|
|
|
+ (host->quirks2 & SDHCI_QUIRK2_HOST_OFF_CARD_ON)) {
|
|
|
+ /* Card keeps power but host controller does not */
|
|
|
+ sdhci_init(host, 0);
|
|
|
+ host->pwr = 0;
|
|
|
+ host->clock = 0;
|
|
|
+ sdhci_do_set_ios(host, &host->mmc->ios);
|
|
|
+ } else {
|
|
|
+ sdhci_init(host, (host->mmc->pm_flags & MMC_PM_KEEP_POWER));
|
|
|
+ mmiowb();
|
|
|
+ }
|
|
|
|
|
|
ret = mmc_resume_host(host->mmc);
|
|
|
sdhci_enable_card_detection(host);
|