diff options
author | Colin Cross <ccross@android.com> | 2011-06-09 17:48:27 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2011-06-09 17:48:27 -0700 |
commit | 321fc8e64a54be22308bee68eaafd81672eb6c45 (patch) | |
tree | 070804e3ba717fadc814fefcd7bb98141e201997 /drivers/mmc | |
parent | 1dfd911585f4376e4859db0fbb26b8fb39cf0951 (diff) | |
parent | 461b3c034b82dff7d7ced336aeed61dd0064bf07 (diff) |
Merge branch 'android-2.6.36' into android-tegra-2.6.36
Conflicts:
drivers/mmc/host/sdhci.c
Change-Id: I9a048b52a7f82631caf222c5f273265bb9927675
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/sdhci.c | 32 | ||||
-rw-r--r-- | drivers/mmc/host/sdhci.h | 2 |
2 files changed, 34 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 7577da76fbb2..ba32a2ef93a1 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1229,6 +1229,31 @@ static int sdhci_get_ro(struct mmc_host *mmc) return present; } +static int sdhci_enable(struct mmc_host *mmc) +{ + struct sdhci_host *host = mmc_priv(mmc); + + if (!mmc->card || mmc->card->type == MMC_TYPE_SDIO) + return 0; + + if (mmc->ios.clock) + sdhci_set_clock(host, mmc->ios.clock); + + return 0; +} + +static int sdhci_disable(struct mmc_host *mmc, int lazy) +{ + struct sdhci_host *host = mmc_priv(mmc); + + if (!mmc->card || mmc->card->type == MMC_TYPE_SDIO) + return 0; + + sdhci_set_clock(host, 0); + + return 0; +} + static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable) { struct sdhci_host *host; @@ -1265,6 +1290,8 @@ static const struct mmc_host_ops sdhci_ops = { .request = sdhci_request, .set_ios = sdhci_set_ios, .get_ro = sdhci_get_ro, + .enable = sdhci_enable, + .disable = sdhci_disable, .enable_sdio_irq = sdhci_enable_sdio_irq, }; @@ -1871,6 +1898,11 @@ int sdhci_add_host(struct sdhci_host *host) if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) mmc->caps |= MMC_CAP_NEEDS_POLL; + if (host->quirks & SDHCI_QUIRK_RUNTIME_DISABLE) { + mmc->caps |= MMC_CAP_DISABLE; + mmc_set_disable_delay(mmc, 50); + } + mmc->caps |= MMC_CAP_ERASE; mmc->ocr_avail = 0; diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index 4a425440845a..cfa3e70ccffa 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -264,6 +264,8 @@ struct sdhci_host { #define SDHCI_QUIRK_NO_SDIO_IRQ (1LL<<36) /* Controller should only use high-speed mode */ #define SDHCI_QUIRK_FORCE_HIGH_SPEED_MODE (1LL<<37) +/* Controller allows runtime enable / disable */ +#define SDHCI_QUIRK_RUNTIME_DISABLE (1LL<<38) int irq; /* Device IRQ */ void __iomem * ioaddr; /* Mapped address */ |