It's sometimes useful to get the device associated with a given ofnode.
Implement a function to implement this lookup operation.

Signed-off-by: Mario Six <mario....@gdsys.cc>
---
 drivers/core/ofnode.c | 15 +++++++++++++++
 include/dm/ofnode.h   |  8 ++++++++
 2 files changed, 23 insertions(+)

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index 4e4532651f..ca002063b3 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -16,6 +16,21 @@
 #include <linux/err.h>
 #include <linux/ioport.h>
 
+struct udevice *ofnode_dev(ofnode node)
+{
+       struct uclass *uc;
+       struct udevice *dev;
+
+       list_for_each_entry(uc, &gd->uclass_root, sibling_node) {
+               list_for_each_entry(dev, &uc->dev_head, uclass_node) {
+                       if (ofnode_equal(dev_ofnode(dev), node))
+                               return dev;
+               }
+       }
+
+       return NULL;
+}
+
 int ofnode_read_u32(ofnode node, const char *propname, u32 *outp)
 {
        assert(ofnode_valid(node));
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index 0d008404f9..aec205eb80 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -193,6 +193,14 @@ static inline ofnode ofnode_null(void)
        return node;
 }
 
+/**
+ * ofnode_dev() - Get the device associated with a given ofnode
+ *
+ * @node:      valid node reference to get the corresponding device for
+ * @return a pointer to the udevice if OK, NULL on error
+ */
+struct udevice *ofnode_dev(ofnode node);
+
 /**
  * ofnode_read_u32() - Read a 32-bit integer from a property
  *
-- 
2.16.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to