Turn regulators_enable_boot_on() and regulators_enable_boot_off() into empty functions. Implement matching functionality in regulator_post_probe() instead. The regulator_post_probe() is called for all regulators after they probe, and regulators that have regulator-always-on or regulator-boot-on DT properties now always probe due to DM_FLAG_PROBE_AFTER_BIND being set on such regulators in regulator_post_bind().
Finally, fold regulator_unset() functionality into regulator_autoset(). 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: Rebase on current u-boot/next --- drivers/power/regulator/regulator-uclass.c | 60 +++++++--------------- 1 file changed, 19 insertions(+), 41 deletions(-) diff --git a/drivers/power/regulator/regulator-uclass.c b/drivers/power/regulator/regulator-uclass.c index e2f703702e3..14cf3159203 100644 --- a/drivers/power/regulator/regulator-uclass.c +++ b/drivers/power/regulator/regulator-uclass.c @@ -308,6 +308,11 @@ int regulator_autoset(struct udevice *dev) return ret; } + if (uc_pdata->force_off) { + ret = regulator_set_enable(dev, false); + goto out; + } + if (!uc_pdata->always_on && !uc_pdata->boot_on) { ret = -EMEDIUMTYPE; goto out; @@ -512,56 +517,28 @@ static int regulator_pre_probe(struct udevice *dev) return 0; } -int regulators_enable_boot_on(bool verbose) +static int regulator_post_probe(struct udevice *dev) { - struct udevice *dev; - struct uclass *uc; int ret; - ret = uclass_get(UCLASS_REGULATOR, &uc); - if (ret) + ret = regulator_autoset(dev); + if (ret && ret != -EMEDIUMTYPE && ret != -EALREADY && ret != ENOSYS) return ret; - for (uclass_first_device(UCLASS_REGULATOR, &dev); - dev; - uclass_next_device(&dev)) { - ret = regulator_autoset(dev); - if (ret == -EMEDIUMTYPE || ret == -EALREADY) { - ret = 0; - continue; - } - if (verbose) - regulator_show(dev, ret); - if (ret == -ENOSYS) - ret = 0; - } - return ret; + if (_DEBUG) + regulator_show(dev, ret); + + return 0; } -int regulators_enable_boot_off(bool verbose) +int regulators_enable_boot_on(bool verbose) { - struct udevice *dev; - struct uclass *uc; - int ret; - - ret = uclass_get(UCLASS_REGULATOR, &uc); - if (ret) - return ret; - for (uclass_first_device(UCLASS_REGULATOR, &dev); - dev; - uclass_next_device(&dev)) { - ret = regulator_unset(dev); - if (ret == -EMEDIUMTYPE) { - ret = 0; - continue; - } - if (verbose) - regulator_show(dev, ret); - if (ret == -ENOSYS) - ret = 0; - } + return 0; +} - return ret; +int regulators_enable_boot_off(bool verbose) +{ + return 0; } UCLASS_DRIVER(regulator) = { @@ -569,5 +546,6 @@ UCLASS_DRIVER(regulator) = { .name = "regulator", .post_bind = regulator_post_bind, .pre_probe = regulator_pre_probe, + .post_probe = regulator_post_probe, .per_device_plat_auto = sizeof(struct dm_regulator_uclass_plat), }; -- 2.45.2