diff options
author | Zhoujie Wu <zjwu@marvell.com> | 2017-08-21 14:02:09 -0400 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2017-08-30 08:11:47 -0400 |
commit | 99c14fc360dbbb583a03ab985551b12b5c5ca4f1 (patch) | |
tree | c8f707233931b43963040c786c477dbd168c532e | |
parent | a7c17d8ae4918afe527c141cc20ed34dfe18e7db (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.c | 19 |
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 | ||
213 | static 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 | |||
213 | static const struct sdhci_ops sdhci_xenon_ops = { | 231 | static 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, |