Hi, Thanks for the patch > Subject: [PATCH v6 06/10] device connection: Add > fwnode_connection_find_match() > > From: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> > > The fwnode_connection_find_match() function is exactly the same as > device_connection_find_match(), except it takes struct fwnode_handle as > parameter instead of struct device. > That allows locating device connections before the device entries have been > created. > > Signed-off-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> Tested-by: Biju Das <biju.das@xxxxxxxxxxxxxx> > --- > v6: > new patch > --- > drivers/base/devcon.c | 33 +++++++++++++++++++++++++-------- > include/linux/device.h | 10 +++++++--- > 2 files changed, 32 insertions(+), 11 deletions(-) > > diff --git a/drivers/base/devcon.c b/drivers/base/devcon.c index > 04db9ae235e4..8311b70bbca2 100644 > --- a/drivers/base/devcon.c > +++ b/drivers/base/devcon.c > @@ -12,9 +12,6 @@ > static DEFINE_MUTEX(devcon_lock); > static LIST_HEAD(devcon_list); > > -typedef void *(*devcon_match_fn_t)(struct device_connection *con, int > ep, > - void *data); > - > static void * > fwnode_graph_devcon_match(struct fwnode_handle *fwnode, const char > *con_id, > void *data, devcon_match_fn_t match) @@ -38,6 > +35,28 @@ fwnode_graph_devcon_match(struct fwnode_handle *fwnode, > const char *con_id, > return NULL; > } > > +/** > + * fwnode_connection_find_match - Find connection from a device node > + * @fwnode: Device node with the connection > + * @con_id: Identifier for the connection > + * @data: Data for the match function > + * @match: Function to check and convert the connection description > + * > + * Find a connection with unique identifier @con_id between @fwnode and > +another > + * device node. @match will be used to convert the connection > +description to > + * data the caller is expecting to be returned. > + */ > +void *fwnode_connection_find_match(struct fwnode_handle *fwnode, > + const char *con_id, void *data, > + devcon_match_fn_t match) > +{ > + if (!fwnode || !match) > + return NULL; > + > + return fwnode_graph_devcon_match(fwnode, con_id, data, match); > } > +EXPORT_SYMBOL_GPL(fwnode_connection_find_match); > + > /** > * device_connection_find_match - Find physical connection to a device > * @dev: Device with the connection > @@ -61,11 +80,9 @@ void *device_connection_find_match(struct device > *dev, const char *con_id, > if (!match) > return NULL; > > - if (fwnode) { > - ret = fwnode_graph_devcon_match(fwnode, con_id, data, > match); > - if (ret) > - return ret; > - } > + ret = fwnode_connection_find_match(fwnode, con_id, data, > match); > + if (ret) > + return ret; > > mutex_lock(&devcon_lock); > > diff --git a/include/linux/device.h b/include/linux/device.h index > e85264fb6616..9445f068602f 100644 > --- a/include/linux/device.h > +++ b/include/linux/device.h > @@ -772,10 +772,14 @@ struct device_connection { > struct list_head list; > }; > > +typedef void *(*devcon_match_fn_t)(struct device_connection *con, int > ep, > + void *data); > + > +void *fwnode_connection_find_match(struct fwnode_handle *fwnode, > + const char *con_id, void *data, > + devcon_match_fn_t match); > void *device_connection_find_match(struct device *dev, const char > *con_id, > - void *data, > - void *(*match)(struct device_connection > *con, > - int ep, void *data)); > + void *data, devcon_match_fn_t match); > > struct device *device_connection_find(struct device *dev, const char > *con_id); > > -- > 2.21.0