Skip to content

Commit

Permalink
mmc: sdhci: add quirk for keeping card power during suspend
Browse files Browse the repository at this point in the history
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: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
  • Loading branch information
Adrian Hunter authored and Chris Ball committed Mar 27, 2012
1 parent da721cf commit 6308d29
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 2 deletions.
13 changes: 11 additions & 2 deletions drivers/mmc/host/sdhci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions include/linux/mmc/sdhci.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ struct sdhci_host {

unsigned int quirks2; /* More deviations from spec. */

#define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0)

int irq; /* Device IRQ */
void __iomem *ioaddr; /* Mapped address */

Expand Down

0 comments on commit 6308d29

Please sign in to comment.