dm: core: Add a function to bind a driver for a device tree node
authorSimon Glass <sjg@chromium.org>
Wed, 29 Apr 2015 02:25:04 +0000 (20:25 -0600)
committerSimon Glass <sjg@chromium.org>
Thu, 30 Apr 2015 03:02:32 +0000 (21:02 -0600)
Some device tree nodes do not have compatible strings but do require
drivers. This is pretty rare, and somewhat unfortunate. Add a function
to permit creation of a driver for any device tree node.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/lists.c
include/dm/lists.h

index 647e390bfe6743984c6d47fd14a9cd8882795c86..0c49d99f47edce622ee70df459191746ae1ee789 100644 (file)
@@ -73,6 +73,13 @@ 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);
+}
+
+int device_bind_driver_to_node(struct udevice *parent, const char *drv_name,
+                              const char *dev_name, int node,
+                              struct udevice **devp)
 {
        struct driver *drv;
        int ret;
@@ -82,7 +89,7 @@ int device_bind_driver(struct udevice *parent, const char *drv_name,
                printf("Cannot find driver '%s'\n", drv_name);
                return -ENOENT;
        }
-       ret = device_bind(parent, drv, dev_name, NULL, -1, devp);
+       ret = device_bind(parent, drv, dev_name, NULL, node, devp);
        if (ret) {
                printf("Cannot create device named '%s' (err=%d)\n",
                       dev_name, ret);
index 1b50af9f23c19af91d8cc61bca853f05ec709982..61610e69aa551532927f7875227c31f3c980784a 100644 (file)
@@ -73,4 +73,20 @@ int lists_bind_fdt(struct udevice *parent, const void *blob, int offset,
 int device_bind_driver(struct udevice *parent, const char *drv_name,
                       const char *dev_name, struct udevice **devp);
 
+/**
+ * device_bind_driver_to_node() - bind a device to a driver for a node
+ *
+ * This binds a new device to a driver for a given device tree node. This
+ * should only be needed if the node lacks a compatible strings.
+ *
+ * @parent:    Parent device
+ * @drv_name:  Name of driver to attach to this parent
+ * @dev_name:  Name of the new device thus created
+ * @node:      Device tree node
+ * @devp:      Returns the newly bound device
+ */
+int device_bind_driver_to_node(struct udevice *parent, const char *drv_name,
+                              const char *dev_name, int node,
+                              struct udevice **devp);
+
 #endif