diff options
author | Philip Rakity <prakity@marvell.com> | 2012-06-27 18:15:00 +0200 |
---|---|---|
committer | Chris Ball <cjb@laptop.org> | 2012-07-22 21:25:51 +0200 |
commit | 38cfc2f71cec9508bdd3a11e576738c2182418d0 (patch) | |
tree | 6ab1b3e57109327035547711136b568fae061b4b /drivers/mmc | |
parent | mmc: atmel-mci: modify CLKDIV displaying in debugfs (diff) | |
download | linux-38cfc2f71cec9508bdd3a11e576738c2182418d0.tar.xz linux-38cfc2f71cec9508bdd3a11e576738c2182418d0.zip |
mmc: sdhci: When a UHS switch fails, cycle power if regulator is used
Power needs to be removed from the card when switching to 1.8v fails.
If a regulator is used to control vmmc we need to turn the
regulator off and then back on otherwise power will not be
removed from the card.
Signed-off-by: Philip Rakity <prakity@marvell.com>
Reviewed-by: Aaron Lu <aaron.lu@amd.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/sdhci.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index bc1de70360c8..d9966568143b 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1682,11 +1682,15 @@ static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host, pwr = sdhci_readb(host, SDHCI_POWER_CONTROL); pwr &= ~SDHCI_POWER_ON; sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); + if (host->vmmc) + regulator_disable(host->vmmc); /* Wait for 1ms as per the spec */ usleep_range(1000, 1500); pwr |= SDHCI_POWER_ON; sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); + if (host->vmmc) + regulator_enable(host->vmmc); pr_info(DRIVER_NAME ": Switching to 1.8V signalling " "voltage failed, retrying with S18R set to 0\n"); |