In case the DT regulator node does not contain 'regulator-max-microvolt'
property and does not contain 'regulator-state-mem' subnode (like the
test.dts regul1_scmi: reg@1 {} regulator node), then regulator_pre_probe()
will parse this regulator node and set uc_pdata->suspend_on = true and
uc_pdata->suspend_uV = uc_pdata->max_uV, where uc_pdata->max_uV is set
to -ENODATA because "regulator-max-microvolt" is missing, and therefore
uc_pdata->suspend_uV is also -ENODATA. In case regulator_autoset() is
used afterward, it will attempt to call regulator_set_suspend_value()
with uV = uc_pdata->suspend_uV = -ENODATA and fail with -EINVAL. Check
for this case in regulator_set_suspend_value() and immediately return 0,
because there is no way to set meaningful suspend voltage, so do nothing
and retain the existing settings of the regulator.

Signed-off-by: Marek Vasut <ma...@denx.de>
---
Cc: Ben Wolsieffer <benwolsief...@gmail.com>
Cc: Caleb Connolly <caleb.conno...@linaro.org>
Cc: Chris Morgan <macromor...@hotmail.com>
Cc: Dragan Simic <dsi...@manjaro.org>
Cc: Eugen Hristev <eugen.hris...@collabora.com>
Cc: Francesco Dolcini <francesco.dolc...@toradex.com>
Cc: Heinrich Schuchardt <xypron.g...@gmx.de>
Cc: Jaehoon Chung <jh80.ch...@samsung.com>
Cc: Jagan Teki <ja...@amarulasolutions.com>
Cc: Jonas Karlman <jo...@kwiboo.se>
Cc: Kever Yang <kever.y...@rock-chips.com>
Cc: Matteo Lisi <matteo.l...@engicam.com>
Cc: Mattijs Korpershoek <mkorpersh...@baylibre.com>
Cc: Max Krummenacher <max.krummenac...@toradex.com>
Cc: Neil Armstrong <neil.armstr...@linaro.org>
Cc: Patrice Chotard <patrice.chot...@foss.st.com>
Cc: Patrick Delaunay <patrick.delau...@foss.st.com>
Cc: Philipp Tomsich <philipp.toms...@vrull.eu>
Cc: Quentin Schulz <quentin.sch...@cherry.de>
Cc: Sam Day <m...@samcday.com>
Cc: Simon Glass <s...@chromium.org>
Cc: Sumit Garg <sumit.g...@linaro.org>
Cc: Svyatoslav Ryhel <clamo...@gmail.com>
Cc: Thierry Reding <tred...@nvidia.com>
Cc: Tom Rini <tr...@konsulko.com>
Cc: Volodymyr Babchuk <volodymyr_babc...@epam.com>
Cc: u-boot-amlo...@groups.io
Cc: u-boot-q...@groups.io
Cc: u-b...@dh-electronics.com
Cc: u-boot@lists.denx.de
Cc: uboot-st...@st-md-mailman.stormreply.com
---
V2: New patch
---
 drivers/power/regulator/regulator-uclass.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/power/regulator/regulator-uclass.c 
b/drivers/power/regulator/regulator-uclass.c
index 14cf3159203..3c05fdf1966 100644
--- a/drivers/power/regulator/regulator-uclass.c
+++ b/drivers/power/regulator/regulator-uclass.c
@@ -85,6 +85,10 @@ int regulator_set_suspend_value(struct udevice *dev, int uV)
        const struct dm_regulator_ops *ops = dev_get_driver_ops(dev);
        struct dm_regulator_uclass_plat *uc_pdata;
 
+       /* Regulator did not set limits, assume already configured. */
+       if (uV == -ENODATA)
+               return 0;
+
        uc_pdata = dev_get_uclass_plat(dev);
        if (uc_pdata->min_uV != -ENODATA && uV < uc_pdata->min_uV)
                return -EINVAL;
-- 
2.45.2

Reply via email to