Hi Dmitry, Thank you for the patch. On Wed, Jul 01, 2020 at 10:42:31AM +0300, Dmitry Osipenko wrote: > In some cases it's very useful to silently check whether port node exists > at all in a device-tree before proceeding with parsing the graph. The DRM > bridges code is one example of such case where absence of a graph in a > device-tree is a legit condition. > > This patch adds of_graph_is_present() which returns true if given > device-tree node contains OF graph port. > > Reviewed-by: Rob Herring <robh@xxxxxxxxxx> > Signed-off-by: Dmitry Osipenko <digetx@xxxxxxxxx> Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > --- > drivers/of/property.c | 23 +++++++++++++++++++++++ > include/linux/of_graph.h | 6 ++++++ > 2 files changed, 29 insertions(+) > > diff --git a/drivers/of/property.c b/drivers/of/property.c > index 6a5760f0d6cd..fed7229d9d9f 100644 > --- a/drivers/of/property.c > +++ b/drivers/of/property.c > @@ -29,6 +29,29 @@ > > #include "of_private.h" > > +/** > + * of_graph_is_present() - check graph's presence > + * @node: pointer to device_node containing graph port > + * > + * Return: True if @node has a port or ports (with a port) sub-node, > + * false otherwise. > + */ > +bool of_graph_is_present(const struct device_node *node) > +{ > + struct device_node *ports, *port; > + > + ports = of_get_child_by_name(node, "ports"); > + if (ports) > + node = ports; > + > + port = of_get_child_by_name(node, "port"); > + of_node_put(ports); > + of_node_put(port); > + > + return !!port; > +} > +EXPORT_SYMBOL(of_graph_is_present); > + > /** > * of_property_count_elems_of_size - Count the number of elements in a property > * > diff --git a/include/linux/of_graph.h b/include/linux/of_graph.h > index 01038a6aade0..4d7756087b6b 100644 > --- a/include/linux/of_graph.h > +++ b/include/linux/of_graph.h > @@ -38,6 +38,7 @@ struct of_endpoint { > child = of_graph_get_next_endpoint(parent, child)) > > #ifdef CONFIG_OF > +bool of_graph_is_present(const struct device_node *node); > int of_graph_parse_endpoint(const struct device_node *node, > struct of_endpoint *endpoint); > int of_graph_get_endpoint_count(const struct device_node *np); > @@ -56,6 +57,11 @@ struct device_node *of_graph_get_remote_node(const struct device_node *node, > u32 port, u32 endpoint); > #else > > +static inline bool of_graph_is_present(const struct device_node *node) > +{ > + return false; > +} > + > static inline int of_graph_parse_endpoint(const struct device_node *node, > struct of_endpoint *endpoint) > { -- Regards, Laurent Pinchart