aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/sdhci.c
diff options
context:
space:
mode:
authorZhoujie Wu <zjwu@marvell.com>2017-08-03 12:28:40 -0700
committerUlf Hansson <ulf.hansson@linaro.org>2017-08-30 14:01:50 +0200
commit70bc85ad1f32408ed92474c2e4d4db6e9714dcf3 (patch)
tree64c54b8df0138f1d2d66faa57dedcdb6e3280639 /drivers/mmc/host/sdhci.c
parentmmc: sunxi: fix support for new timings mode only SoCs (diff)
downloadlinux-dev-70bc85ad1f32408ed92474c2e4d4db6e9714dcf3.tar.xz
linux-dev-70bc85ad1f32408ed92474c2e4d4db6e9714dcf3.zip
mmc: sdhci: ignore restoring the I/O state if MMC_POWER_OFF
One issue was found on a removable high speed sd card with runtime pm enabled. When SD card is unplugged, it keep printing "Switching to 3.3V signalling voltage failed". And found below sequence triggers the error. mmc_rescan -> mmc_sd_detect -> mmc_power_off -- mmc->ios.vdd is updated to 0. -> mmc_claim_host -> sdhci_runtime_resume_host -> sdhci_start_signal_voltage_switch -> mmc_regulator_set_vqmmc -> mmc_ocrbitnum_to_vdd When mmc_ocrbitnum_to_vdd is called, the mmc->ios.vdd is 0, so it always return -EINVAL. The signal switch will always fail and print out warning. Ignore restoring the I/O state when runtime resume if MMC_POWER_OFF. Signed-off-by: Zhoujie Wu <zjwu@marvell.com> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/mmc/host/sdhci.c')
-rw-r--r--drivers/mmc/host/sdhci.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index cf2166e4190d..4a70f2f765b6 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2934,7 +2934,8 @@ int sdhci_runtime_resume_host(struct sdhci_host *host)
sdhci_init(host, 0);
- if (mmc->ios.power_mode != MMC_POWER_UNDEFINED) {
+ if (mmc->ios.power_mode != MMC_POWER_UNDEFINED &&
+ mmc->ios.power_mode != MMC_POWER_OFF) {
/* Force clock and power re-program */
host->pwr = 0;
host->clock = 0;