Add of_match_node() helper function to iterate over the device tree
and tell if a device_node has a matching of_match structure.

Signed-off-by: Biju Das <biju.das...@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad...@bp.renesas.com>
---
 drivers/core/device.c | 21 +++++++++++++++++++++
 include/dm/device.h   | 13 +++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/drivers/core/device.c b/drivers/core/device.c
index e90d70101c..79076d9c78 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -997,6 +997,27 @@ bool of_machine_is_compatible(const char *compat)
        return !fdt_node_check_compatible(fdt, 0, compat);
 }
 
+static
+const struct udevice_id *__of_match_node(const struct udevice_id *matches,
+                                        const ofnode node)
+{
+       if (!matches)
+               return NULL;
+
+       for (; matches && matches->compatible; matches++) {
+               if (ofnode_device_is_compatible(node, matches->compatible))
+                       return matches;
+       }
+
+       return NULL;
+}
+
+const struct udevice_id *of_match_node(const struct udevice_id *matches,
+                                      const ofnode node)
+{
+       return __of_match_node(matches, node);
+}
+
 int dev_disable_by_path(const char *path)
 {
        struct uclass *uc;
diff --git a/include/dm/device.h b/include/dm/device.h
index ac3b6c1b8a..0e9c37e64e 100644
--- a/include/dm/device.h
+++ b/include/dm/device.h
@@ -740,6 +740,19 @@ bool device_is_compatible(const struct udevice *dev, const 
char *compat);
  */
 bool of_machine_is_compatible(const char *compat);
 
+/**
+ * of_match_node() - Tell if a device_node has a matching of_match structure
+ *
+ *
+ * Low level utility function used by device matching.
+ *
+ * @matches:   array of of device match structures to search in
+ * @node:      the of device structure to match against
+ * @return matching structure on success, NULL if the match is not found
+ */
+const struct udevice_id *of_match_node(const struct udevice_id *matches,
+                                      const ofnode node);
+
 /**
  * dev_disable_by_path() - Disable a device given its device tree path
  *
-- 
2.17.1

Reply via email to