summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaustabh Chakraborty <[email protected]>2025-10-17 20:54:11 +0530
committerPeng Fan <[email protected]>2025-10-30 10:11:17 +0800
commit0f425edd10f30361ad52af466e36ffe718af1ea5 (patch)
tree8f9a09d4f1f9e3ac023871833085a691f9ce5453
parent0b75109b6aafd1e796bc8cee0953cd6c5ba77610 (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]>
-rw-r--r--drivers/mmc/dw_mmc.c8
-rw-r--r--drivers/mmc/mmc.c20
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;
}