diff mbox

[U-Boot,v2,02/20] dm: core: Add a function to bind a driver for a device tree node

Message ID 1430274322-14383-3-git-send-email-sjg@chromium.org
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass April 29, 2015, 2:25 a.m. UTC
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>
---

Changes in v2: None

 drivers/core/lists.c |  9 ++++++++-
 include/dm/lists.h   | 16 ++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

Comments

Simon Glass April 30, 2015, 4:21 a.m. UTC | #1
On 28 April 2015 at 20:25, Simon Glass <sjg@chromium.org> wrote:
> 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>
> ---
>
> Changes in v2: None
>
>  drivers/core/lists.c |  9 ++++++++-
>  include/dm/lists.h   | 16 ++++++++++++++++
>  2 files changed, 24 insertions(+), 1 deletion(-)

Applied to u-boot-x86.
diff mbox

Patch

diff --git a/drivers/core/lists.c b/drivers/core/lists.c
index 647e390..0c49d99 100644
--- a/drivers/core/lists.c
+++ b/drivers/core/lists.c
@@ -74,6 +74,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);
diff --git a/include/dm/lists.h b/include/dm/lists.h
index 1b50af9..61610e6 100644
--- a/include/dm/lists.h
+++ b/include/dm/lists.h
@@ -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