On Mon, May 22, 2017 at 11:53:22AM +0300, Sakari Ailus wrote: > Add fwnode_graph_get_remote_node() function which is equivalent to > of_graph_get_remote_node() on OF. > > Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > --- > drivers/base/property.c | 37 +++++++++++++++++++++++++++++++++++++ > include/linux/property.h | 2 ++ > 2 files changed, 39 insertions(+) > > diff --git a/drivers/base/property.c b/drivers/base/property.c > index f5ac4cc..b311a6f 100644 > --- a/drivers/base/property.c > +++ b/drivers/base/property.c > @@ -1214,6 +1214,43 @@ fwnode_graph_get_remote_endpoint(struct fwnode_handle *fwnode) > EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_endpoint); > > /** > + * fwnode_graph_get_remote_node - get remote parent node for given port/endpoint > + * @fwnode: pointer to parent fwnode_handle containing graph port/endpoint > + * @port_id: identifier of the parent port node > + * @endpoint_id: identifier of the endpoint node > + * > + * Return: Remote fwnode handle associated with remote endpoint node linked > + * to @node. Use fwnode_node_put() on it when done. > + */ > +struct fwnode_handle *fwnode_graph_get_remote_node( > + struct fwnode_handle *fwnode, u32 port_id, u32 endpoint_id) Write it: struct fwnode_handle *fwnode_graph_get_remote_node(struct fwnode_handle *fwnode, u32 port_id, u32 endpoint_id) instead. > +{ > + struct fwnode_handle *endpoint = NULL; > + > + while ((endpoint = fwnode_graph_get_next_endpoint(fwnode, endpoint))) { > + struct fwnode_endpoint fwnode_ep; > + struct fwnode_handle *remote; > + int ret; > + > + ret = fwnode_graph_parse_endpoint(endpoint, &fwnode_ep); > + if (ret < 0) > + continue; > + > + if (fwnode_ep.port != port_id || fwnode_ep.id != endpoint_id) > + continue; > + > + remote = fwnode_graph_get_remote_port_parent(endpoint); > + if (!remote) > + return NULL; > + > + return fwnode_device_is_available(remote) ? remote : NULL; > + } > + > + return NULL; > +} > +EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_node); > + > +/** > * fwnode_graph_parse_endpoint - parse common endpoint node properties > * @fwnode: pointer to endpoint fwnode_handle > * @endpoint: pointer to the fwnode endpoint data structure > diff --git a/include/linux/property.h b/include/linux/property.h > index 7be014a..b9f4838 100644 > --- a/include/linux/property.h > +++ b/include/linux/property.h > @@ -281,6 +281,8 @@ struct fwnode_handle *fwnode_graph_get_remote_port( > struct fwnode_handle *fwnode); > struct fwnode_handle *fwnode_graph_get_remote_endpoint( > struct fwnode_handle *fwnode); > +struct fwnode_handle *fwnode_graph_get_remote_node( > + struct fwnode_handle *fwnode, u32 port, u32 endpoint); Also here: struct fwnode_handle *fwnode_graph_get_remote_node(struct fwnode_handle *fwnode, u32 port, u32 endpoint); Other than that, I think this is going to the right direction as now we start to use those primitives in more generic code. Hopefully most new functionality will be added here, and the fwnode_operations will not grow anymore ;-) -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html