usb: typec: mux: Clean up mux_fwnode_match()
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>
Fri, 26 May 2023 13:14:33 +0000 (16:14 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 29 May 2023 14:17:52 +0000 (15:17 +0100)
Removing the "svid" and "accessory" device property checks.
Those properties are not supported on any platform.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/lkml/20230522215348.uoyboow26n2o3tel@ripper/
Reviewed-by: Bjorn Andersson <andersson@kernel.org>
Tested-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230526131434.46920-2-heikki.krogerus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/mux.c

index d9eaf9a0b0bfd7b960f6936b11632ad770b37a0e..f2eee6322815d80cd41afe3cba8b02d5f1b4132f 100644 (file)
@@ -265,60 +265,19 @@ static int mux_fwnode_match(struct device *dev, const void *fwnode)
 static void *typec_mux_match(const struct fwnode_handle *fwnode,
                             const char *id, void *data)
 {
-       const struct typec_altmode_desc *desc = data;
        struct device *dev;
-       bool match;
-       int nval;
-       u16 *val;
-       int ret;
-       int i;
 
        /*
-        * Check has the identifier already been "consumed". If it
-        * has, no need to do any extra connection identification.
+        * Device graph (OF graph) does not give any means to identify the
+        * device type or the device class of the remote port parent that @fwnode
+        * represents, so in order to identify the type or the class of @fwnode
+        * an additional device property is needed. With typec muxes the
+        * property is named "mode-switch" (@id). The value of the device
+        * property is ignored.
         */
-       match = !id;
-       if (match)
-               goto find_mux;
-
-       if (!desc) {
-               /*
-                * Accessory Mode muxes & muxes which explicitly specify
-                * the required identifier can avoid SVID matching.
-                */
-               match = fwnode_property_present(fwnode, "accessory") ||
-                       fwnode_property_present(fwnode, id);
-               if (match)
-                       goto find_mux;
-               return NULL;
-       }
-
-       /* Alternate Mode muxes */
-       nval = fwnode_property_count_u16(fwnode, "svid");
-       if (nval <= 0)
+       if (id && !fwnode_property_present(fwnode, id))
                return NULL;
 
-       val = kcalloc(nval, sizeof(*val), GFP_KERNEL);
-       if (!val)
-               return ERR_PTR(-ENOMEM);
-
-       ret = fwnode_property_read_u16_array(fwnode, "svid", val, nval);
-       if (ret < 0) {
-               kfree(val);
-               return ERR_PTR(ret);
-       }
-
-       for (i = 0; i < nval; i++) {
-               match = val[i] == desc->svid;
-               if (match) {
-                       kfree(val);
-                       goto find_mux;
-               }
-       }
-       kfree(val);
-       return NULL;
-
-find_mux:
        dev = class_find_device(&typec_mux_class, NULL, fwnode,
                                mux_fwnode_match);