On Fri, Jun 14, 2019 at 06:54:09PM +0100, Suzuki K Poulose wrote: > Add a wrapper to class_find_device() to search for a device > by the fwnode pointer, reusing the generic match function. > Also convert the existing users to make use of the new helper. > > Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Cc: "Rafael J. Wysocki" <rafael@xxxxxxxxxx> > Cc: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> > Cc: linux-usb@xxxxxxxxxxxxxxx > Signed-off-by: Suzuki K Poulose <suzuki.poulose@xxxxxxx> Acked-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> > --- > drivers/usb/roles/class.c | 8 +------- > drivers/usb/typec/class.c | 8 +------- > include/linux/device.h | 13 +++++++++++++ > 3 files changed, 15 insertions(+), 14 deletions(-) > > diff --git a/drivers/usb/roles/class.c b/drivers/usb/roles/class.c > index 07aaa96..5cd87d8 100644 > --- a/drivers/usb/roles/class.c > +++ b/drivers/usb/roles/class.c > @@ -85,11 +85,6 @@ enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw) > } > EXPORT_SYMBOL_GPL(usb_role_switch_get_role); > > -static int switch_fwnode_match(struct device *dev, const void *fwnode) > -{ > - return dev_fwnode(dev) == fwnode; > -} > - > static void *usb_role_switch_match(struct device_connection *con, int ep, > void *data) > { > @@ -99,8 +94,7 @@ static void *usb_role_switch_match(struct device_connection *con, int ep, > if (!fwnode_property_present(con->fwnode, con->id)) > return NULL; > > - dev = class_find_device(role_class, NULL, con->fwnode, > - switch_fwnode_match); > + dev = class_find_device_by_fwnode(role_class, con->fwnode); > } else { > dev = class_find_device_by_name(role_class, con->endpoint[ep]); > } > diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c > index 18a0687..af4fb73 100644 > --- a/drivers/usb/typec/class.c > +++ b/drivers/usb/typec/class.c > @@ -205,11 +205,6 @@ static void typec_altmode_put_partner(struct altmode *altmode) > put_device(&adev->dev); > } > > -static int typec_port_fwnode_match(struct device *dev, const void *fwnode) > -{ > - return dev_fwnode(dev) == fwnode; > -} > - > static void *typec_port_match(struct device_connection *con, int ep, void *data) > { > struct device *dev; > @@ -219,8 +214,7 @@ static void *typec_port_match(struct device_connection *con, int ep, void *data) > * we need to return ERR_PTR(-PROBE_DEFER) when there is no device. > */ > if (con->fwnode) > - return class_find_device(typec_class, NULL, con->fwnode, > - typec_port_fwnode_match); > + return class_find_device_by_fwnode(typec_class, con->fwnode); > > dev = class_find_device_by_name(typec_class, con->endpoint[ep]); > > diff --git a/include/linux/device.h b/include/linux/device.h > index 9228502..52ac911 100644 > --- a/include/linux/device.h > +++ b/include/linux/device.h > @@ -509,6 +509,19 @@ class_find_device_by_of_node(struct class *class, const struct device_node *np) > return class_find_device(class, NULL, np, device_match_of_node); > } > > +/** > + * class_find_device_by_fwnode : device iterator for locating a particular device > + * matching the fwnode. > + * @class: class type > + * @fwnode: fwnode of the device to match. > + */ > +static inline struct device * > +class_find_device_by_fwnode(struct class *class, > + const struct fwnode_handle *fwnode) > +{ > + return class_find_device(class, NULL, fwnode, device_match_fwnode); > +} > + > struct class_attribute { > struct attribute attr; > ssize_t (*show)(struct class *class, struct class_attribute *attr, > -- > 2.7.4 thanks, -- heikki