Update the pmic uclass and all pmics to support a live device tree.

Signed-off-by: Simon Glass <s...@chromium.org>
---

Changes in v2: None

 drivers/power/pmic/act8846.c     |  8 +++-----
 drivers/power/pmic/lp873x.c      | 12 +++++-------
 drivers/power/pmic/max77686.c    |  8 +++-----
 drivers/power/pmic/palmas.c      | 16 +++++++---------
 drivers/power/pmic/pfuze100.c    |  8 +++-----
 drivers/power/pmic/pmic-uclass.c | 22 ++++++++++------------
 drivers/power/pmic/rk808.c       |  8 +++-----
 drivers/power/pmic/s5m8767.c     |  7 +++----
 drivers/power/pmic/sandbox.c     |  2 +-
 drivers/power/pmic/tps65090.c    |  8 +++-----
 include/power/pmic.h             |  2 +-
 11 files changed, 42 insertions(+), 59 deletions(-)

diff --git a/drivers/power/pmic/act8846.c b/drivers/power/pmic/act8846.c
index 15da12edea..a6b0940956 100644
--- a/drivers/power/pmic/act8846.c
+++ b/drivers/power/pmic/act8846.c
@@ -48,13 +48,11 @@ static int act8846_read(struct udevice *dev, uint reg, 
uint8_t *buff, int len)
 
 static int act8846_bind(struct udevice *dev)
 {
-       const void *blob = gd->fdt_blob;
-       int regulators_node;
+       ofnode regulators_node;
        int children;
 
-       regulators_node = fdt_subnode_offset(blob, dev_of_offset(dev),
-                                            "regulators");
-       if (regulators_node <= 0) {
+       regulators_node = dev_read_subnode(dev, "regulators");
+       if (!ofnode_valid(regulators_node)) {
                debug("%s: %s regulators subnode not found!", __func__,
                      dev->name);
                return -ENXIO;
diff --git a/drivers/power/pmic/lp873x.c b/drivers/power/pmic/lp873x.c
index d8f30df371..f505468313 100644
--- a/drivers/power/pmic/lp873x.c
+++ b/drivers/power/pmic/lp873x.c
@@ -46,15 +46,13 @@ static int lp873x_read(struct udevice *dev, uint reg, 
uint8_t *buff, int len)
 
 static int lp873x_bind(struct udevice *dev)
 {
-       int regulators_node;
-       const void *blob = gd->fdt_blob;
+       ofnode regulators_node;
        int children;
-       int node = dev_of_offset(dev);
 
-       regulators_node = fdt_subnode_offset(blob, node, "regulators");
-
-       if (regulators_node <= 0) {
-               printf("%s: %s reg subnode not found!", __func__, dev->name);
+       regulators_node = dev_read_subnode(dev, "regulators");
+       if (!ofnode_valid(regulators_node)) {
+               debug("%s: %s regulators subnode not found!", __func__,
+                     dev->name);
                return -ENXIO;
        }
 
diff --git a/drivers/power/pmic/max77686.c b/drivers/power/pmic/max77686.c
index 8295fab3f0..ceca9f96a7 100644
--- a/drivers/power/pmic/max77686.c
+++ b/drivers/power/pmic/max77686.c
@@ -50,13 +50,11 @@ static int max77686_read(struct udevice *dev, uint reg, 
uint8_t *buff, int len)
 
 static int max77686_bind(struct udevice *dev)
 {
-       int regulators_node;
-       const void *blob = gd->fdt_blob;
+       ofnode regulators_node;
        int children;
 
-       regulators_node = fdt_subnode_offset(blob, dev_of_offset(dev),
-                                            "voltage-regulators");
-       if (regulators_node <= 0) {
+       regulators_node = dev_read_subnode(dev, "voltage-regulators");
+       if (!ofnode_valid(regulators_node)) {
                debug("%s: %s regulators subnode not found!", __func__,
                                                             dev->name);
                return -ENXIO;
diff --git a/drivers/power/pmic/palmas.c b/drivers/power/pmic/palmas.c
index f5a23073c4..804c0d13a0 100644
--- a/drivers/power/pmic/palmas.c
+++ b/drivers/power/pmic/palmas.c
@@ -46,17 +46,15 @@ static int palmas_read(struct udevice *dev, uint reg, 
uint8_t *buff, int len)
 
 static int palmas_bind(struct udevice *dev)
 {
-       int pmic_node = -1, regulators_node;
-       const void *blob = gd->fdt_blob;
+       ofnode pmic_node = ofnode_null(), regulators_node;
+       ofnode subnode;
        int children;
-       int node = dev_of_offset(dev);
-       int subnode, len;
 
-       fdt_for_each_subnode(subnode, blob, node) {
+       dev_for_each_subnode(subnode, dev) {
                const char *name;
                char *temp;
 
-               name = fdt_get_name(blob, subnode, &len);
+               name = ofnode_get_name(subnode);
                temp = strstr(name, "pmic");
                if (temp) {
                        pmic_node = subnode;
@@ -64,14 +62,14 @@ static int palmas_bind(struct udevice *dev)
                }
        }
 
-       if (pmic_node <= 0) {
+       if (!ofnode_valid(pmic_node)) {
                debug("%s: %s pmic subnode not found!", __func__, dev->name);
                return -ENXIO;
        }
 
-       regulators_node = fdt_subnode_offset(blob, pmic_node, "regulators");
+       regulators_node = ofnode_find_subnode(pmic_node, "regulators");
 
-       if (regulators_node <= 0) {
+       if (!ofnode_valid(regulators_node)) {
                debug("%s: %s reg subnode not found!", __func__, dev->name);
                return -ENXIO;
        }
diff --git a/drivers/power/pmic/pfuze100.c b/drivers/power/pmic/pfuze100.c
index 90a43f2fe5..5f361c7696 100644
--- a/drivers/power/pmic/pfuze100.c
+++ b/drivers/power/pmic/pfuze100.c
@@ -52,13 +52,11 @@ static int pfuze100_read(struct udevice *dev, uint reg, 
uint8_t *buff, int len)
 
 static int pfuze100_bind(struct udevice *dev)
 {
+       ofnode regulators_node;
        int children;
-       int regulators_node;
-       const void *blob = gd->fdt_blob;
 
-       regulators_node = fdt_subnode_offset(blob, dev_of_offset(dev),
-                                            "regulators");
-       if (regulators_node <= 0) {
+       regulators_node = dev_read_subnode(dev, "regulators");
+       if (!ofnode_valid(regulators_node)) {
                debug("%s: %s regulators subnode not found!", __func__,
                      dev->name);
                return -ENXIO;
diff --git a/drivers/power/pmic/pmic-uclass.c b/drivers/power/pmic/pmic-uclass.c
index 0f7fa517f9..953bbe5026 100644
--- a/drivers/power/pmic/pmic-uclass.c
+++ b/drivers/power/pmic/pmic-uclass.c
@@ -19,29 +19,27 @@
 DECLARE_GLOBAL_DATA_PTR;
 
 #if CONFIG_IS_ENABLED(PMIC_CHILDREN)
-int pmic_bind_children(struct udevice *pmic, int offset,
+int pmic_bind_children(struct udevice *pmic, ofnode parent,
                       const struct pmic_child_info *child_info)
 {
        const struct pmic_child_info *info;
-       const void *blob = gd->fdt_blob;
        struct driver *drv;
        struct udevice *child;
        const char *node_name;
        int bind_count = 0;
-       int node;
+       ofnode node;
        int prefix_len;
        int ret;
 
        debug("%s for '%s' at node offset: %d\n", __func__, pmic->name,
              dev_of_offset(pmic));
 
-       for (node = fdt_first_subnode(blob, offset);
-            node > 0;
-            node = fdt_next_subnode(blob, node)) {
-               node_name = fdt_get_name(blob, node, NULL);
+       for (node = ofnode_first_subnode(parent);
+            ofnode_valid(node);
+            node = ofnode_next_subnode(node)) {
+               node_name = ofnode_get_name(node);
 
-               debug("* Found child node: '%s' at offset:%d\n", node_name,
-                                                                node);
+               debug("* Found child node: '%s'\n", node_name);
 
                child = NULL;
                for (info = child_info; info->prefix && info->driver; info++) {
@@ -60,8 +58,8 @@ int pmic_bind_children(struct udevice *pmic, int offset,
 
                        debug("  - found child driver: '%s'\n", drv->name);
 
-                       ret = device_bind(pmic, drv, node_name, NULL,
-                                         node, &child);
+                       ret = device_bind_with_driver_data(pmic, drv, node_name,
+                                                          0, node, &child);
                        if (ret) {
                                debug("  - child binding error: %d\n", ret);
                                continue;
@@ -82,7 +80,7 @@ int pmic_bind_children(struct udevice *pmic, int offset,
                        debug("  - compatible prefix not found\n");
        }
 
-       debug("Bound: %d childs for PMIC: '%s'\n", bind_count, pmic->name);
+       debug("Bound: %d children for PMIC: '%s'\n", bind_count, pmic->name);
        return bind_count;
 }
 #endif
diff --git a/drivers/power/pmic/rk808.c b/drivers/power/pmic/rk808.c
index 3f5f316b56..f62d623cf3 100644
--- a/drivers/power/pmic/rk808.c
+++ b/drivers/power/pmic/rk808.c
@@ -57,13 +57,11 @@ static int rk808_read(struct udevice *dev, uint reg, 
uint8_t *buff, int len)
 #if CONFIG_IS_ENABLED(PMIC_CHILDREN)
 static int rk808_bind(struct udevice *dev)
 {
-       const void *blob = gd->fdt_blob;
-       int regulators_node;
+       ofnode regulators_node;
        int children;
 
-       regulators_node = fdt_subnode_offset(blob, dev_of_offset(dev),
-                                            "regulators");
-       if (regulators_node <= 0) {
+       regulators_node = dev_read_subnode(dev, "regulators");
+       if (!ofnode_valid(regulators_node)) {
                debug("%s: %s regulators subnode not found!", __func__,
                      dev->name);
                return -ENXIO;
diff --git a/drivers/power/pmic/s5m8767.c b/drivers/power/pmic/s5m8767.c
index 25d673b998..f8ae5ea2db 100644
--- a/drivers/power/pmic/s5m8767.c
+++ b/drivers/power/pmic/s5m8767.c
@@ -54,12 +54,11 @@ int s5m8767_enable_32khz_cp(struct udevice *dev)
 
 static int s5m8767_bind(struct udevice *dev)
 {
-       int node;
-       const void *blob = gd->fdt_blob;
        int children;
+       ofnode node;
 
-       node = fdt_subnode_offset(blob, dev_of_offset(dev), "regulators");
-       if (node <= 0) {
+       node = dev_read_subnode(dev, "regulators");
+       if (!ofnode_valid(node)) {
                debug("%s: %s regulators subnode not found!", __func__,
                      dev->name);
                return -ENXIO;
diff --git a/drivers/power/pmic/sandbox.c b/drivers/power/pmic/sandbox.c
index b4e412eb3e..6763303c66 100644
--- a/drivers/power/pmic/sandbox.c
+++ b/drivers/power/pmic/sandbox.c
@@ -51,7 +51,7 @@ static int sandbox_pmic_read(struct udevice *dev, uint reg,
 
 static int sandbox_pmic_bind(struct udevice *dev)
 {
-       if (!pmic_bind_children(dev, dev_of_offset(dev), pmic_children_info))
+       if (!pmic_bind_children(dev, dev_ofnode(dev), pmic_children_info))
                error("%s:%d PMIC: %s - no child found!", __func__, __LINE__,
                                                          dev->name);
 
diff --git a/drivers/power/pmic/tps65090.c b/drivers/power/pmic/tps65090.c
index b30a7f08e9..4565e3b54c 100644
--- a/drivers/power/pmic/tps65090.c
+++ b/drivers/power/pmic/tps65090.c
@@ -52,13 +52,11 @@ static int tps65090_read(struct udevice *dev, uint reg, 
uint8_t *buff, int len)
 
 static int tps65090_bind(struct udevice *dev)
 {
-       int regulators_node;
-       const void *blob = gd->fdt_blob;
+       ofnode regulators_node;
        int children;
 
-       regulators_node = fdt_subnode_offset(blob, dev_of_offset(dev),
-                                            "regulators");
-       if (regulators_node <= 0) {
+       regulators_node = dev_read_subnode(dev, "regulators");
+       if (!ofnode_valid(regulators_node)) {
                debug("%s: %s regulators subnode not found!", __func__,
                      dev->name);
                return -ENXIO;
diff --git a/include/power/pmic.h b/include/power/pmic.h
index e0b2e129dd..4b34316427 100644
--- a/include/power/pmic.h
+++ b/include/power/pmic.h
@@ -226,7 +226,7 @@ struct pmic_child_info {
  *     buck2 { ... };
  * };
  */
-int pmic_bind_children(struct udevice *pmic, int offset,
+int pmic_bind_children(struct udevice *pmic, ofnode parent,
                       const struct pmic_child_info *child_info);
 
 /**
-- 
2.13.0.rc2.291.g57267f2277-goog

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

Reply via email to