diff options
author | vjagadish <vjagadish@nvidia.com> | 2011-10-13 17:50:28 +0530 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:49:36 -0800 |
commit | 9f911ec2a67b3b7caca97f9d10619a89932adcaa (patch) | |
tree | 0132b51829d16f7d5fa7b243e5504dcb2a93731e /drivers/mmc/host/sdhci.c | |
parent | 30d34fda85af0438046dc5b14a150a07206e9283 (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.c | 27 |
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, |