]> git.sur5r.net Git - u-boot/commitdiff
dm: core: Update device_bind_driver_to_node() to use ofnode
authorSimon Glass <sjg@chromium.org>
Fri, 19 May 2017 02:09:07 +0000 (20:09 -0600)
committerSimon Glass <sjg@chromium.org>
Thu, 1 Jun 2017 13:03:08 +0000 (07:03 -0600)
Adjust this function to us an ofnode instead of an offset, so it can be
used with livetree. This involves updating all callers.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 files changed:
drivers/clk/at91/pmc.c
drivers/core/lists.c
drivers/cpu/cpu-uclass.c
drivers/i2c/muxes/i2c-mux-uclass.c
drivers/led/led_bcm6328.c
drivers/led/led_bcm6358.c
drivers/led/led_gpio.c
drivers/misc/tegra186_bpmp.c
drivers/misc/tegra_car.c
drivers/net/keystone_net.c
drivers/pinctrl/pinctrl-uclass.c
drivers/usb/musb-new/ti-musb.c
include/dm.h
include/dm/lists.h

index c552c75562cbe5bdc020830807bf00ce123aade5..f4ec5fcb5ec03f13037632f7a497bedbe0cba92e 100644 (file)
@@ -79,7 +79,7 @@ int at91_clk_sub_device_bind(struct udevice *dev, const char *drv_name)
                if (!name)
                        return -EINVAL;
                ret = device_bind_driver_to_node(dev, drv_name, name,
-                                                offset, NULL);
+                                       offset_to_ofnode(offset), NULL);
                if (ret)
                        return ret;
        }
index facf276474bfd867c8312d752af9ab7a69a23579..b79f26dbe6c9bd5709a1fc989269fe6733630394 100644 (file)
@@ -74,11 +74,12 @@ int lists_bind_drivers(struct udevice *parent, bool pre_reloc_only)
 int device_bind_driver(struct udevice *parent, const char *drv_name,
                       const char *dev_name, struct udevice **devp)
 {
-       return device_bind_driver_to_node(parent, drv_name, dev_name, -1, devp);
+       return device_bind_driver_to_node(parent, drv_name, dev_name,
+                                         ofnode_null(), devp);
 }
 
 int device_bind_driver_to_node(struct udevice *parent, const char *drv_name,
-                              const char *dev_name, int node,
+                              const char *dev_name, ofnode node,
                               struct udevice **devp)
 {
        struct driver *drv;
@@ -89,14 +90,10 @@ int device_bind_driver_to_node(struct udevice *parent, const char *drv_name,
                debug("Cannot find driver '%s'\n", drv_name);
                return -ENOENT;
        }
-       ret = device_bind(parent, drv, dev_name, NULL, node, devp);
-       if (ret) {
-               debug("Cannot create device named '%s' (err=%d)\n",
-                     dev_name, ret);
-               return ret;
-       }
+       ret = device_bind_with_driver_data(parent, drv, dev_name, 0 /* data */,
+                                          node, devp);
 
-       return 0;
+       return ret;
 }
 
 #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
index c57ac16b3a7ed797f6533c6ab4f73e0a3be7e5db..73e4853939e0a97ae0cb02ac39553f203c0ffd8e 100644 (file)
@@ -63,11 +63,11 @@ U_BOOT_DRIVER(cpu_bus) = {
 static int uclass_cpu_init(struct uclass *uc)
 {
        struct udevice *dev;
-       int node;
+       ofnode node;
        int ret;
 
-       node = fdt_path_offset(gd->fdt_blob, "/cpus");
-       if (node < 0)
+       node = ofnode_path("/cpus");
+       if (!ofnode_valid(node))
                return 0;
 
        ret = device_bind_driver_to_node(dm_root(), "cpu_bus", "cpus", node,
index d243b8e32d62aee3f34cb73ba57c8fc9eb63b7e5..187e8a7c91730afe56ab52ca04ee39dc1b0b0002 100644 (file)
@@ -51,24 +51,21 @@ static int i2c_mux_child_post_bind(struct udevice *dev)
 /* Find the I2C buses selected by this mux */
 static int i2c_mux_post_bind(struct udevice *mux)
 {
-       const void *blob = gd->fdt_blob;
+       ofnode node;
        int ret;
-       int offset;
 
        debug("%s: %s\n", __func__, mux->name);
        /*
         * There is no compatible string in the sub-nodes, so we must manually
         * bind these
         */
-       for (offset = fdt_first_subnode(blob, dev_of_offset(mux));
-            offset > 0;
-            offset = fdt_next_subnode(blob, offset)) {
+       dev_for_each_subnode(node, mux) {
                struct udevice *dev;
                const char *name;
 
-               name = fdt_get_name(blob, offset, NULL);
+               name = ofnode_get_name(node);
                ret = device_bind_driver_to_node(mux, "i2c_mux_bus_drv", name,
-                                                offset, &dev);
+                                                node, &dev);
                debug("   - bind ret=%d, %s\n", ret, dev ? dev->name : NULL);
                if (ret)
                        return ret;
index fa7c6d16d5910735425b0eeb9318c72238776e23..5d545c50960e5f6c1bfb7140c77715bfc5ea77c4 100644 (file)
@@ -236,7 +236,7 @@ static int bcm6328_led_bind(struct udevice *parent)
 
                ret = device_bind_driver_to_node(parent, "bcm6328-led",
                                                 fdt_get_name(blob, node, NULL),
-                                                node, &dev);
+                                                offset_to_ofnode(node), &dev);
                if (ret)
                        return ret;
 
index a9a194b0e184e71a221a8656ad225f3860e1362e..e8a3b64e6867c5df69df84175b40a1fa9e69c888 100644 (file)
@@ -201,7 +201,7 @@ static int bcm6358_led_bind(struct udevice *parent)
 
                ret = device_bind_driver_to_node(parent, "bcm6358-led",
                                                 fdt_get_name(blob, node, NULL),
-                                                node, &dev);
+                                                offset_to_ofnode(node), &dev);
                if (ret)
                        return ret;
 
index 4106ecb6799b163bd8eec2b6dc560c1ebeb89cec..997663588718f0ea5795f30535ba06d6b8ef8a2b 100644 (file)
@@ -85,25 +85,22 @@ static int led_gpio_remove(struct udevice *dev)
 
 static int led_gpio_bind(struct udevice *parent)
 {
-       const void *blob = gd->fdt_blob;
        struct udevice *dev;
-       int node;
+       ofnode node;
        int ret;
 
-       for (node = fdt_first_subnode(blob, dev_of_offset(parent));
-            node > 0;
-            node = fdt_next_subnode(blob, node)) {
+       dev_for_each_subnode(node, parent) {
                struct led_uc_plat *uc_plat;
                const char *label;
 
-               label = fdt_getprop(blob, node, "label", NULL);
+               label = ofnode_read_string(node, "label");
                if (!label) {
                        debug("%s: node %s has no label\n", __func__,
-                             fdt_get_name(blob, node, NULL));
+                             ofnode_get_name(node));
                        return -EINVAL;
                }
                ret = device_bind_driver_to_node(parent, "gpio_led",
-                                                fdt_get_name(blob, node, NULL),
+                                                ofnode_get_name(node),
                                                 node, &dev);
                if (ret)
                        return ret;
index bd8b9602e0dd1b4229aa1caf3b30aa94079c141e..d61bacfc44f2fbcc8dba608e76d499d08524d2c9 100644 (file)
@@ -112,19 +112,19 @@ static int tegra186_bpmp_bind(struct udevice *dev)
        debug("%s(dev=%p)\n", __func__, dev);
 
        ret = device_bind_driver_to_node(dev, "tegra186_clk", "tegra186_clk",
-                                        dev_of_offset(dev), &child);
+                                        dev_ofnode(dev), &child);
        if (ret)
                return ret;
 
        ret = device_bind_driver_to_node(dev, "tegra186_reset",
-                                        "tegra186_reset", dev_of_offset(dev),
+                                        "tegra186_reset", dev_ofnode(dev),
                                         &child);
        if (ret)
                return ret;
 
        ret = device_bind_driver_to_node(dev, "tegra186_power_domain",
                                         "tegra186_power_domain",
-                                        dev_of_offset(dev), &child);
+                                        dev_ofnode(dev), &child);
        if (ret)
                return ret;
 
index 5db3c374ce0a1021f78af71d043df88e6a12272f..93639e198987f9e04f0294ff146334ef76d2043b 100644 (file)
@@ -22,12 +22,12 @@ static int tegra_car_bpmp_bind(struct udevice *dev)
        debug("%s(dev=%p)\n", __func__, dev);
 
        ret = device_bind_driver_to_node(dev, "tegra_car_clk", "tegra_car_clk",
-                                        dev_of_offset(dev), &child);
+                                        dev_ofnode(dev), &child);
        if (ret)
                return ret;
 
        ret = device_bind_driver_to_node(dev, "tegra_car_reset",
-                                        "tegra_car_reset", dev_of_offset(dev),
+                                        "tegra_car_reset", dev_ofnode(dev),
                                         &child);
        if (ret)
                return ret;
index f9ffd6d7254c0fd4570e606cf1b4e9441295625a..72ef42cca883a8853b6265fa5184f9681747302a 100644 (file)
@@ -1008,8 +1008,8 @@ static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
                        slave_name = malloc(20);
                        snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
                        ret = device_bind_driver_to_node(dev, "eth_ks2_sl",
-                                                        slave_name, slave,
-                                                        &sl_dev);
+                                       slave_name, offset_to_ofnode(slave),
+                                       &sl_dev);
                        if (ret) {
                                error("ks2_net - not able to bind slave interfaces\n");
                                return ret;
@@ -1029,7 +1029,7 @@ static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
                slave_name = malloc(20);
                snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
                ret = device_bind_driver_to_node(dev, "eth_ks2_sl", slave_name,
-                                                slave, &sl_dev);
+                                       offset_to_ofnode(slave), &sl_dev);
                if (ret) {
                        error("ks2_net - not able to bind slave interfaces\n");
                        return ret;
index 0633b69bbe90c2919bbdbf048777ff88937b63ef..02e269020df523bba5d74dd65bcdd9e49cf30641 100644 (file)
@@ -121,34 +121,31 @@ static int pinctrl_select_state_full(struct udevice *dev, const char *statename)
  */
 static int pinconfig_post_bind(struct udevice *dev)
 {
-       const void *fdt = gd->fdt_blob;
-       int offset = dev_of_offset(dev);
        bool pre_reloc_only = !(gd->flags & GD_FLG_RELOC);
        const char *name;
+       ofnode node;
        int ret;
 
-       for (offset = fdt_first_subnode(fdt, offset);
-            offset > 0;
-            offset = fdt_next_subnode(fdt, offset)) {
+       dev_for_each_subnode(node, dev) {
                if (pre_reloc_only &&
-                   !dm_fdt_pre_reloc(fdt, offset))
+                   !ofnode_pre_reloc(node))
                        continue;
                /*
                 * If this node has "compatible" property, this is not
                 * a pin configuration node, but a normal device. skip.
                 */
-               fdt_get_property(fdt, offset, "compatible", &ret);
+               ofnode_read_prop(node, "compatible", &ret);
                if (ret >= 0)
                        continue;
 
                if (ret != -FDT_ERR_NOTFOUND)
                        return ret;
 
-               name = fdt_get_name(fdt, offset, NULL);
+               name = ofnode_get_name(node);
                if (!name)
                        return -EINVAL;
                ret = device_bind_driver_to_node(dev, "pinconfig", name,
-                                                offset, NULL);
+                                                node, NULL);
                if (ret)
                        return ret;
        }
index 27018c73b651fb2279c5ce8f8806d95911cf3d58..de101319cdaad82a9a570b4a1bfd25023934c58f 100644 (file)
@@ -227,7 +227,7 @@ static int ti_musb_wrapper_bind(struct udevice *parent)
                case USB_DR_MODE_HOST:
                        /* Bind MUSB host */
                        ret = device_bind_driver_to_node(parent, "ti-musb-host",
-                                                        name, node, &dev);
+                                       name, offset_to_ofnode(node), &dev);
                        if (ret) {
                                error("musb - not able to bind usb host node\n");
                                return ret;
index e634814d741bb0dd8da2b86e57b58c5f35d2ae67..f752792c92ff63d746704728beccf1a3fbe5e826 100644 (file)
@@ -10,6 +10,8 @@
 #include <dm/ofnode.h>
 #include <dm/device.h>
 #include <dm/fdtaddr.h>
+#include <dm/ofnode.h>
+#include <dm/read.h>
 #include <dm/platdata.h>
 #include <dm/uclass.h>
 
index f55c41991b9fb44fcfcd6f4dc884e8f78552a560..d4d82d2fc4ea69441d9aa06058ddac31c02f722a 100644 (file)
@@ -85,7 +85,7 @@ int device_bind_driver(struct udevice *parent, const char *drv_name,
  * @devp:      If non-NULL, returns the newly bound device
  */
 int device_bind_driver_to_node(struct udevice *parent, const char *drv_name,
-                              const char *dev_name, int node,
+                              const char *dev_name, ofnode node,
                               struct udevice **devp);
 
 #endif