Merge git://git.denx.de/u-boot-sunxi
[oweals/u-boot.git] / drivers / power / pmic / pmic-uclass.c
index 953bbe50269322cb05a947f93f66ded00465dfbb..9347b4068897e8fca645f8974dc70f7a1b39b7f2 100644 (file)
@@ -26,6 +26,7 @@ int pmic_bind_children(struct udevice *pmic, ofnode parent,
        struct driver *drv;
        struct udevice *child;
        const char *node_name;
+       const char *reg_name;
        int bind_count = 0;
        ofnode node;
        int prefix_len;
@@ -34,9 +35,7 @@ int pmic_bind_children(struct udevice *pmic, ofnode parent,
        debug("%s for '%s' at node offset: %d\n", __func__, pmic->name,
              dev_of_offset(pmic));
 
-       for (node = ofnode_first_subnode(parent);
-            ofnode_valid(node);
-            node = ofnode_next_subnode(node)) {
+       ofnode_for_each_subnode(node, parent) {
                node_name = ofnode_get_name(node);
 
                debug("* Found child node: '%s'\n", node_name);
@@ -46,8 +45,14 @@ int pmic_bind_children(struct udevice *pmic, ofnode parent,
                        debug("  - compatible prefix: '%s'\n", info->prefix);
 
                        prefix_len = strlen(info->prefix);
-                       if (strncmp(info->prefix, node_name, prefix_len))
-                               continue;
+                       if (strncmp(info->prefix, node_name, prefix_len)) {
+                               reg_name = ofnode_read_string(node,
+                                                             "regulator-name");
+                               if (!reg_name)
+                                       continue;
+                               if (strncmp(info->prefix, reg_name, prefix_len))
+                                       continue;
+                       }
 
                        drv = lists_driver_lookup_name(info->driver);
                        if (!drv) {