When device has multiple power domains, power_domain_get could
not able to support that. So let's iterate each power domain
and enable it.

Signed-off-by: Peng Fan <peng....@nxp.com>
---
 drivers/core/device.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/core/device.c b/drivers/core/device.c
index 474c1642ee..67fcff87fa 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -311,7 +311,7 @@ int device_probe(struct udevice *dev)
        const struct driver *drv;
        int size = 0;
        int ret;
-       int seq;
+       int seq, i, count;
 
        if (!dev)
                return -EINVAL;
@@ -390,8 +390,16 @@ int device_probe(struct udevice *dev)
 
        if (CONFIG_IS_ENABLED(POWER_DOMAIN) && dev->parent &&
            device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) {
-               if (!power_domain_get(dev, &pd))
-                       power_domain_on(&pd);
+               count = dev_count_phandle_with_args(dev, "power-domains",
+                                                   "#power-domain-cells");
+               for (i = 0; i < count; i++) {
+                       ret = power_domain_get_by_index(dev, &pd, i);
+                       if (ret)
+                               goto fail;
+                       ret = power_domain_on(&pd);
+                       if (ret)
+                               goto fail;
+               }
        }
 
        ret = uclass_pre_probe_device(dev);
-- 
2.16.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to