| From 3cbc6123a93dc91b99b58f7ea37d267fe93e1cad Mon Sep 17 00:00:00 2001 |
| From: Tim Kryger <tim.kryger@gmail.com> |
| Date: Wed, 14 Jan 2015 07:24:12 +0100 |
| Subject: mmc: sdhci: Set SDHCI_POWER_ON with external vmmc |
| |
| From: Tim Kryger <tim.kryger@gmail.com> |
| |
| commit 3cbc6123a93dc91b99b58f7ea37d267fe93e1cad upstream. |
| |
| Host controllers lacking the required internal vmmc regulator may still |
| follow the spec with regard to the LSB of SDHCI_POWER_CONTROL. Set the |
| SDHCI_POWER_ON bit when vmmc is enabled to encourage the controller to |
| to drive CMD, DAT, SDCLK. |
| |
| This fixes a regression observed on some Qualcomm and Nvidia boards |
| caused by 5222161 mmc: sdhci: Improve external VDD regulator support. |
| |
| Fixes: 52221610dd84 (mmc: sdhci: Improve external VDD regulator support) |
| Signed-off-by: Tim Kryger <tim.kryger@gmail.com> |
| Tested-by: Bjorn Andersson <bjorn.andersson@sonymobile.com> |
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/mmc/host/sdhci.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/drivers/mmc/host/sdhci.c |
| +++ b/drivers/mmc/host/sdhci.c |
| @@ -1239,6 +1239,12 @@ static void sdhci_set_power(struct sdhci |
| spin_unlock_irq(&host->lock); |
| mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd); |
| spin_lock_irq(&host->lock); |
| + |
| + if (mode != MMC_POWER_OFF) |
| + sdhci_writeb(host, SDHCI_POWER_ON, SDHCI_POWER_CONTROL); |
| + else |
| + sdhci_writeb(host, 0, SDHCI_POWER_CONTROL); |
| + |
| return; |
| } |
| |