dm: pmic: Convert uclass to livetree
authorSimon Glass <sjg@chromium.org>
Fri, 19 May 2017 02:09:32 +0000 (20:09 -0600)
committerSimon Glass <sjg@chromium.org>
Thu, 1 Jun 2017 13:03:12 +0000 (07:03 -0600)
Update the pmic uclass and all pmics to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/power/pmic/act8846.c
drivers/power/pmic/lp873x.c
drivers/power/pmic/max77686.c
drivers/power/pmic/palmas.c
drivers/power/pmic/pfuze100.c
drivers/power/pmic/pmic-uclass.c
drivers/power/pmic/rk8xx.c
drivers/power/pmic/s5m8767.c
drivers/power/pmic/sandbox.c
drivers/power/pmic/tps65090.c
include/power/pmic.h

index 15da12e..a6b0940 100644 (file)
@@ -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;
index d8f30df..f505468 100644 (file)
@@ -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;
        }
 
index 8295fab..ceca9f9 100644 (file)
@@ -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;
index f5a2307..804c0d1 100644 (file)
@@ -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;
        }
index 90a43f2..5f361c7 100644 (file)
@@ -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;
index 0f7fa51..953bbe5 100644 (file)
 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
index 394e2ff..09b9b54 100644 (file)
@@ -57,13 +57,11 @@ static int rk8xx_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
 #if CONFIG_IS_ENABLED(PMIC_CHILDREN)
 static int rk8xx_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;
index 25d673b..f8ae5ea 100644 (file)
@@ -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;
index b4e412e..6763303 100644 (file)
@@ -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);
 
index b30a7f0..4565e3b 100644 (file)
@@ -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;
index e0b2e12..4b34316 100644 (file)
@@ -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);
 
 /**