]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
power: regulator: Convert regulators_enable_boot_on/off() to regulator_post_probe
authorMarek Vasut <marex@denx.de>
Thu, 26 Sep 2024 23:14:13 +0000 (01:14 +0200)
committerTom Rini <trini@konsulko.com>
Tue, 1 Oct 2024 01:19:07 +0000 (19:19 -0600)
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>
drivers/power/regulator/regulator-uclass.c

index 1a970004540a1e17b667d86d4cb7623eb8736e78..9fcc4bd85b9b39d052c5c0daf3fcebb90f529a0f 100644 (file)
@@ -314,6 +314,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;
@@ -518,56 +523,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) = {
@@ -575,5 +552,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),
 };