Commit 6308d290 authored by Adrian Hunter's avatar Adrian Hunter Committed by Chris Ball

mmc: sdhci: add quirk for keeping card power during suspend

Add quirk SDHCI_QUIRK2_HOST_OFF_CARD_ON to cater for the case when the
card keeps power during suspend but the host controller does not i.e.
the card power is not controlled by the host controller.  In that
case, the controller must be fully reset on resume.
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent da721cf7
...@@ -2426,8 +2426,17 @@ int sdhci_resume_host(struct sdhci_host *host) ...@@ -2426,8 +2426,17 @@ int sdhci_resume_host(struct sdhci_host *host)
if (ret) if (ret)
return ret; return ret;
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)); sdhci_init(host, (host->mmc->pm_flags & MMC_PM_KEEP_POWER));
mmiowb(); mmiowb();
}
ret = mmc_resume_host(host->mmc); ret = mmc_resume_host(host->mmc);
sdhci_enable_card_detection(host); sdhci_enable_card_detection(host);
......
...@@ -90,6 +90,8 @@ struct sdhci_host { ...@@ -90,6 +90,8 @@ struct sdhci_host {
unsigned int quirks2; /* More deviations from spec. */ unsigned int quirks2; /* More deviations from spec. */
#define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0)
int irq; /* Device IRQ */ int irq; /* Device IRQ */
void __iomem *ioaddr; /* Mapped address */ void __iomem *ioaddr; /* Mapped address */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment