Message ID | 1559115828-19146-7-git-send-email-chunfeng.yun@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | add USB Type-B GPIO connector driver | expand |
Hi, Thanks for the patch > Subject: [PATCH v6 06/10] device connection: Add > fwnode_connection_find_match() > > From: Heikki Krogerus <heikki.krogerus@linux.intel.com> > > 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@linux.intel.com> Tested-by: Biju Das <biju.das@bp.renesas.com> > --- > 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
Hi, On Wed, May 29, 2019 at 03:43:44PM +0800, Chunfeng Yun wrote: > From: Heikki Krogerus <heikki.krogerus@linux.intel.com> > > 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@linux.intel.com> This one is also missing your SoB. There are now some other changes to the devcon API in Rafael's tree [1] that will conflict with this one. I'm attaching a modified version of the patch that is rebased on top of today's linux-next. If you use it, you should make a note (probable in the cover letter) that the series now depends on Rafael's tree. [1] https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git/log/?h=linux-next thanks,
Hi Heikki, On Fri, 2019-06-07 at 13:30 +0300, Heikki Krogerus wrote: > Hi, > > On Wed, May 29, 2019 at 03:43:44PM +0800, Chunfeng Yun wrote: > > From: Heikki Krogerus <heikki.krogerus@linux.intel.com> > > > > 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@linux.intel.com> > > This one is also missing your SoB. > > There are now some other changes to the devcon API in Rafael's tree > [1] that will conflict with this one. I'm attaching a modified version > of the patch that is rebased on top of today's linux-next. If you use > it, you should make a note (probable in the cover letter) that the > series now depends on Rafael's tree. Got it, thanks > > [1] https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git/log/?h=linux-next > > > thanks, >
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);