Hi Marek, On 2024-09-25 04:21, Marek Vasut wrote: > 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.
I sent a different fix for this some time ago, please check it out: https://patchwork.ozlabs.org/patch/1964571/ Regards, Jonas > > 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;