summaryrefslogtreecommitdiff
path: root/drivers/mmc/host/sdhci.c
diff options
context:
space:
mode:
authorvjagadish <vjagadish@nvidia.com>2011-10-13 17:50:28 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:49:36 -0800
commit9f911ec2a67b3b7caca97f9d10619a89932adcaa (patch)
tree0132b51829d16f7d5fa7b243e5504dcb2a93731e /drivers/mmc/host/sdhci.c
parent30d34fda85af0438046dc5b14a150a07206e9283 (diff)
mmc: host: support runtime enable/disable SDCLK
Implement functions needed in struct mmc_host_ops to support enable/disable SDCLK dynamically. BUG 886285 Change-Id: Ic48ac63af495cea30ce926c39ec2e0a9f2d26244 Reviewed-on: http://git-master/r/57856 Reviewed-by: Varun Colbert <vcolbert@nvidia.com> Tested-by: Varun Colbert <vcolbert@nvidia.com> Rebase-Id: Rfae7d6001a827395824716fb858ef18d0d2c4d68
Diffstat (limited to 'drivers/mmc/host/sdhci.c')
-rw-r--r--drivers/mmc/host/sdhci.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index b277f3d99ab2..08b710f74ec1 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1819,10 +1819,37 @@ static void sdhci_enable_preset_value(struct mmc_host *mmc, bool enable)
spin_unlock_irqrestore(&host->lock, flags);
}
+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;
+}
+
+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 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,
.start_signal_voltage_switch = sdhci_start_signal_voltage_switch,
.execute_tuning = sdhci_execute_tuning,