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 <[email protected]>
Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Heikki Krogerus <[email protected]>
Cc: [email protected]
Signed-off-by: Suzuki K Poulose <[email protected]>
---
 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

Reply via email to