aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhoujie Wu <zjwu@marvell.com>2017-08-21 14:02:09 -0400
committerUlf Hansson <ulf.hansson@linaro.org>2017-08-30 08:11:47 -0400
commit99c14fc360dbbb583a03ab985551b12b5c5ca4f1 (patch)
treec8f707233931b43963040c786c477dbd168c532e
parenta7c17d8ae4918afe527c141cc20ed34dfe18e7db (diff)
mmc: sdhci-xenon: add set_power callback
Xenon sdh controller requests proper SD bus voltage select bits programmed even with vmmc power supply. Any reserved value(100b-000b) programmed in this field will lead to controller ignore SD bus power bit and keep its value at zero. Add set_power callback to handle this. Signed-off-by: Zhoujie Wu <zjwu@marvell.com> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Tested-by: Gregory CLEMENT <gregory.clement@free-electrons.com> Fixes: 3a3748dba881 ("mmc: sdhci-xenon: Add Marvell Xenon SDHC core functionality") Cc: <stable@vger.kernel.org> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
-rw-r--r--drivers/mmc/host/sdhci-xenon.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci-xenon.c b/drivers/mmc/host/sdhci-xenon.c
index bc1781bb070b..c580af05b033 100644
--- a/drivers/mmc/host/sdhci-xenon.c
+++ b/drivers/mmc/host/sdhci-xenon.c
@@ -210,8 +210,27 @@ static void xenon_set_uhs_signaling(struct sdhci_host *host,
210 sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2); 210 sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
211} 211}
212 212
213static void xenon_set_power(struct sdhci_host *host, unsigned char mode,
214 unsigned short vdd)
215{
216 struct mmc_host *mmc = host->mmc;
217 u8 pwr = host->pwr;
218
219 sdhci_set_power_noreg(host, mode, vdd);
220
221 if (host->pwr == pwr)
222 return;
223
224 if (host->pwr == 0)
225 vdd = 0;
226
227 if (!IS_ERR(mmc->supply.vmmc))
228 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd);
229}
230
213static const struct sdhci_ops sdhci_xenon_ops = { 231static const struct sdhci_ops sdhci_xenon_ops = {
214 .set_clock = sdhci_set_clock, 232 .set_clock = sdhci_set_clock,
233 .set_power = xenon_set_power,
215 .set_bus_width = sdhci_set_bus_width, 234 .set_bus_width = sdhci_set_bus_width,
216 .reset = xenon_reset, 235 .reset = xenon_reset,
217 .set_uhs_signaling = xenon_set_uhs_signaling, 236 .set_uhs_signaling = xenon_set_uhs_signaling,