mmc: dw_mmc: return error for invalid voltage setting
authorKaustabh Chakraborty <kauschluss@disroot.org>
Fri, 17 Oct 2025 15:24:10 +0000 (20:54 +0530)
committerPeng Fan <peng.fan@nxp.com>
Thu, 30 Oct 2025 02:11:17 +0000 (10:11 +0800)
In certain cases, the VQMMC regulator may not support certain voltages.
For instance, a VQMMC regulator which supports only up to 2.7V will not
accept 3.3V as an argument. This is unaccounted for, and thus the driver
incorrectly assumes that the voltage is set successfully.

Fetch the return value in a variable and return if it's non-zero.
(-ENOSYS is exempted as it implies that the voltage adjustment
functionality as a whole isn't supported).

Signed-off-by: Kaustabh Chakraborty <kauschluss@disroot.org>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
drivers/mmc/dw_mmc.c

index 94b6641..9b143f9 100644 (file)
@@ -649,9 +649,11 @@ static int dwmci_set_ios(struct mmc *mmc)
                        return ret;
 
                if (mmc->signal_voltage == MMC_SIGNAL_VOLTAGE_180)
-                       regulator_set_value(mmc->vqmmc_supply, 1800000);
+                       ret = regulator_set_value(mmc->vqmmc_supply, 1800000);
                else
-                       regulator_set_value(mmc->vqmmc_supply, 3300000);
+                       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)