
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.jz@bp.renesas.com Reviewed-by: Lad Prabhakar prabhakar.mahadev-lad.rj@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 *