summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-01-31 04:42:31 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-01-31 04:42:31 -0800
commit0a7b7fc13125b1ba599eb3f937a173f68ba555e0 (patch)
treec860a107096e211972c61bb251b4ff1646937c2c
parentb2179ceb0e208e929c50f1e61034f44bd84a1691 (diff)
parent283e8d1b9311c0939f6eab8355a01b2843865162 (diff)
Merge "mmc: sdhci-msm: Disable controller clocks in suspend"
-rw-r--r--drivers/mmc/host/sdhci-msm.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
index 466e0a2c8483..6822080dc2bb 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -2906,7 +2906,24 @@ out:
return rc;
}
+static void sdhci_msm_disable_controller_clock(struct sdhci_host *host)
+{
+ struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+ struct sdhci_msm_host *msm_host = pltfm_host->priv;
+ if (atomic_read(&msm_host->controller_clock)) {
+ if (!IS_ERR(msm_host->clk))
+ clk_disable_unprepare(msm_host->clk);
+ if (!IS_ERR(msm_host->pclk))
+ clk_disable_unprepare(msm_host->pclk);
+ if (!IS_ERR(msm_host->ice_clk))
+ clk_disable_unprepare(msm_host->ice_clk);
+ sdhci_msm_bus_voting(host, 0);
+ atomic_set(&msm_host->controller_clock, 0);
+ pr_debug("%s: %s: disabled controller clock\n",
+ mmc_hostname(host->mmc), __func__);
+ }
+}
static int sdhci_msm_prepare_clocks(struct sdhci_host *host, bool enable)
{
@@ -4848,7 +4865,7 @@ static int sdhci_msm_suspend(struct device *dev)
}
ret = sdhci_msm_runtime_suspend(dev);
out:
-
+ sdhci_msm_disable_controller_clock(host);
if (host->mmc->card && mmc_card_sdio(host->mmc->card)) {
sdio_cfg = sdhci_msm_cfg_sdio_wakeup(host, true);
if (sdio_cfg)