summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2015-04-28 20:25:04 -0600
committerSimon Glass <sjg@chromium.org>2015-04-29 21:02:32 -0600
commit5b9000dd25052310ee2d76a295dbe77a2edc5f81 (patch)
treef2df9a191452d37ca3be9a6541fce2b24914ef55
parent4c509343abe693d7ee835c39ded1dc10149ff91c (diff)
downloadtalos-obmc-uboot-5b9000dd25052310ee2d76a295dbe77a2edc5f81.tar.gz
talos-obmc-uboot-5b9000dd25052310ee2d76a295dbe77a2edc5f81.zip
dm: core: Add a function to bind a driver for a device tree node
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>
-rw-r--r--drivers/core/lists.c9
-rw-r--r--include/dm/lists.h16
2 files changed, 24 insertions, 1 deletions
diff --git a/drivers/core/lists.c b/drivers/core/lists.c
index 647e390bfe..0c49d99f47 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 1b50af9f23..61610e69aa 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
OpenPOWER on IntegriCloud