Message ID | 20240626235717.272219-2-marex@denx.de |
---|---|
State | Superseded |
Delegated to: | Jaehoon Chung |
Headers | show |
Series | [1/4] power: regulator: Trigger probe of regulators which are always-on or boot-on | expand |
Hi Marek, On Thu, 27 Jun 2024 at 00:57, Marek Vasut <marex@denx.de> wrote: > > 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 <marex@denx.de> > --- > Cc: Ben Wolsieffer <benwolsieffer@gmail.com> > Cc: Caleb Connolly <caleb.connolly@linaro.org> > Cc: Chris Morgan <macromorgan@hotmail.com> > Cc: Dragan Simic <dsimic@manjaro.org> > Cc: Eugen Hristev <eugen.hristev@collabora.com> > Cc: Francesco Dolcini <francesco.dolcini@toradex.com> > Cc: Heinrich Schuchardt <xypron.glpk@gmx.de> > Cc: Jaehoon Chung <jh80.chung@samsung.com> > Cc: Jagan Teki <jagan@amarulasolutions.com> > Cc: Jonas Karlman <jonas@kwiboo.se> > Cc: Kever Yang <kever.yang@rock-chips.com> > Cc: Kostya Porotchkin <kostap@marvell.com> > Cc: Matteo Lisi <matteo.lisi@engicam.com> > Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com> > Cc: Max Krummenacher <max.krummenacher@toradex.com> > Cc: Neil Armstrong <neil.armstrong@linaro.org> > Cc: Patrice Chotard <patrice.chotard@foss.st.com> > Cc: Patrick Delaunay <patrick.delaunay@foss.st.com> > Cc: Philipp Tomsich <philipp.tomsich@vrull.eu> > Cc: Quentin Schulz <quentin.schulz@cherry.de> > Cc: Sam Day <me@samcday.com> > Cc: Simon Glass <sjg@chromium.org> > Cc: Sumit Garg <sumit.garg@linaro.org> > Cc: Svyatoslav Ryhel <clamor95@gmail.com> > Cc: Thierry Reding <treding@nvidia.com> > Cc: Tom Rini <trini@konsulko.com> > Cc: Volodymyr Babchuk <Volodymyr_Babchuk@epam.com> > Cc: u-boot-amlogic@groups.io > Cc: u-boot-qcom@groups.io > Cc: u-boot@dh-electronics.com > Cc: u-boot@lists.denx.de > Cc: uboot-stm32@st-md-mailman.stormreply.com > --- > 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 ccc4ef33d83..d52f273042f 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 != ENOSYS) > return ret; > - for (uclass_first_device(UCLASS_REGULATOR, &dev); > - dev; > - uclass_next_device(&dev)) { > - ret = regulator_autoset(dev); > - if (ret == -EMEDIUMTYPE) { > - 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.43.0 >
diff --git a/drivers/power/regulator/regulator-uclass.c b/drivers/power/regulator/regulator-uclass.c index ccc4ef33d83..d52f273042f 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 != ENOSYS) return ret; - for (uclass_first_device(UCLASS_REGULATOR, &dev); - dev; - uclass_next_device(&dev)) { - ret = regulator_autoset(dev); - if (ret == -EMEDIUMTYPE) { - 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), };
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 <marex@denx.de> --- Cc: Ben Wolsieffer <benwolsieffer@gmail.com> Cc: Caleb Connolly <caleb.connolly@linaro.org> Cc: Chris Morgan <macromorgan@hotmail.com> Cc: Dragan Simic <dsimic@manjaro.org> Cc: Eugen Hristev <eugen.hristev@collabora.com> Cc: Francesco Dolcini <francesco.dolcini@toradex.com> Cc: Heinrich Schuchardt <xypron.glpk@gmx.de> Cc: Jaehoon Chung <jh80.chung@samsung.com> Cc: Jagan Teki <jagan@amarulasolutions.com> Cc: Jonas Karlman <jonas@kwiboo.se> Cc: Kever Yang <kever.yang@rock-chips.com> Cc: Kostya Porotchkin <kostap@marvell.com> Cc: Matteo Lisi <matteo.lisi@engicam.com> Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com> Cc: Max Krummenacher <max.krummenacher@toradex.com> Cc: Neil Armstrong <neil.armstrong@linaro.org> Cc: Patrice Chotard <patrice.chotard@foss.st.com> Cc: Patrick Delaunay <patrick.delaunay@foss.st.com> Cc: Philipp Tomsich <philipp.tomsich@vrull.eu> Cc: Quentin Schulz <quentin.schulz@cherry.de> Cc: Sam Day <me@samcday.com> Cc: Simon Glass <sjg@chromium.org> Cc: Sumit Garg <sumit.garg@linaro.org> Cc: Svyatoslav Ryhel <clamor95@gmail.com> Cc: Thierry Reding <treding@nvidia.com> Cc: Tom Rini <trini@konsulko.com> Cc: Volodymyr Babchuk <Volodymyr_Babchuk@epam.com> Cc: u-boot-amlogic@groups.io Cc: u-boot-qcom@groups.io Cc: u-boot@dh-electronics.com Cc: u-boot@lists.denx.de Cc: uboot-stm32@st-md-mailman.stormreply.com --- drivers/power/regulator/regulator-uclass.c | 60 +++++++--------------- 1 file changed, 19 insertions(+), 41 deletions(-)