diff options
| author | Kaustabh Chakraborty <[email protected]> | 2025-10-17 20:54:11 +0530 |
|---|---|---|
| committer | Peng Fan <[email protected]> | 2025-10-30 10:11:17 +0800 |
| commit | 0f425edd10f30361ad52af466e36ffe718af1ea5 (patch) | |
| tree | 8f9a09d4f1f9e3ac023871833085a691f9ce5453 /drivers | |
| parent | 0b75109b6aafd1e796bc8cee0953cd6c5ba77610 (diff) | |
mmc: enable/disable VQMMC regulator only during MMC power cycle
Disrupting the regulator voltage during ios configuration messes with
the MMC initialization sequence. Move the VQMMC regulator enable/disable
functions to the MMC power cycle function, similar to how its done for
the VMMC regulator.
Signed-off-by: Kaustabh Chakraborty <[email protected]>
Signed-off-by: Peng Fan <[email protected]>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/mmc/dw_mmc.c | 8 | ||||
| -rw-r--r-- | drivers/mmc/mmc.c | 20 |
2 files changed, 20 insertions, 8 deletions
diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c index 9b143f9931e..f3c0cc5cd8e 100644 --- a/drivers/mmc/dw_mmc.c +++ b/drivers/mmc/dw_mmc.c @@ -644,20 +644,12 @@ static int dwmci_set_ios(struct mmc *mmc) if (mmc->vqmmc_supply) { int ret; - ret = regulator_set_enable_if_allowed(mmc->vqmmc_supply, false); - if (ret) - return ret; - if (mmc->signal_voltage == MMC_SIGNAL_VOLTAGE_180) ret = regulator_set_value(mmc->vqmmc_supply, 1800000); else ret = regulator_set_value(mmc->vqmmc_supply, 3300000); if (ret && ret != -ENOSYS) return ret; - - ret = regulator_set_enable_if_allowed(mmc->vqmmc_supply, true); - if (ret) - return ret; } #endif diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index ec61ed92e86..0f07955a32e 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -2844,6 +2844,16 @@ static int mmc_power_on(struct mmc *mmc) return ret; } } + + if (mmc->vqmmc_supply) { + int ret = regulator_set_enable_if_allowed(mmc->vqmmc_supply, + true); + + if (ret && ret != -ENOSYS) { + printf("Error enabling VQMMC supply : %d\n", ret); + return ret; + } + } #endif return 0; } @@ -2861,6 +2871,16 @@ static int mmc_power_off(struct mmc *mmc) return ret; } } + + if (mmc->vqmmc_supply) { + int ret = regulator_set_enable_if_allowed(mmc->vqmmc_supply, + false); + + if (ret && ret != -ENOSYS) { + pr_debug("Error disabling VQMMC supply : %d\n", ret); + return ret; + } + } #endif return 0; } |
