fwnode_graph_devcon_match(struct fwnode_handle *fwnode, const char *con_id,
                          void *data, devcon_match_fn_t match)
 {
-       struct device_connection con = { .id = con_id };
+       struct fwnode_handle *node;
        struct fwnode_handle *ep;
        void *ret;
 
        fwnode_graph_for_each_endpoint(fwnode, ep) {
-               con.fwnode = fwnode_graph_get_remote_port_parent(ep);
-               if (!fwnode_device_is_available(con.fwnode))
+               node = fwnode_graph_get_remote_port_parent(ep);
+               if (!fwnode_device_is_available(node))
                        continue;
 
-               ret = match(&con, -1, data);
-               fwnode_handle_put(con.fwnode);
+               ret = match(node, con_id, data);
+               fwnode_handle_put(node);
                if (ret) {
                        fwnode_handle_put(ep);
                        return ret;
 fwnode_devcon_match(struct fwnode_handle *fwnode, const char *con_id,
                    void *data, devcon_match_fn_t match)
 {
-       struct device_connection con = { };
+       struct fwnode_handle *node;
        void *ret;
        int i;
 
        for (i = 0; ; i++) {
-               con.fwnode = fwnode_find_reference(fwnode, con_id, i);
-               if (IS_ERR(con.fwnode))
+               node = fwnode_find_reference(fwnode, con_id, i);
+               if (IS_ERR(node))
                        break;
 
-               ret = match(&con, -1, data);
-               fwnode_handle_put(con.fwnode);
+               ret = match(node, NULL, data);
+               fwnode_handle_put(node);
                if (ret)
                        return ret;
        }
 
 }
 EXPORT_SYMBOL_GPL(usb_role_switch_get_role);
 
-static void *usb_role_switch_match(struct device_connection *con, int ep,
+static void *usb_role_switch_match(struct fwnode_handle *fwnode, const char *id,
                                   void *data)
 {
        struct device *dev;
 
-       if (con->fwnode) {
-               if (con->id && !fwnode_property_present(con->fwnode, con->id))
-                       return NULL;
+       if (id && !fwnode_property_present(fwnode, id))
+               return NULL;
 
-               dev = class_find_device_by_fwnode(role_class, con->fwnode);
-       } else {
-               dev = class_find_device_by_name(role_class, con->endpoint[ep]);
-       }
+       dev = class_find_device_by_fwnode(role_class, fwnode);
 
        return dev ? to_role_switch(dev) : ERR_PTR(-EPROBE_DEFER);
 }
 
        return dev_fwnode(dev) == fwnode && dev_name_ends_with(dev, "-switch");
 }
 
-static void *typec_switch_match(struct device_connection *con, int ep,
+static void *typec_switch_match(struct fwnode_handle *fwnode, const char *id,
                                void *data)
 {
        struct device *dev;
 
-       if (con->id && !fwnode_property_present(con->fwnode, con->id))
+       if (id && !fwnode_property_present(fwnode, id))
                return NULL;
 
-       dev = class_find_device(&typec_mux_class, NULL, con->fwnode,
+       dev = class_find_device(&typec_mux_class, NULL, fwnode,
                                switch_fwnode_match);
 
        return dev ? to_typec_switch(dev) : ERR_PTR(-EPROBE_DEFER);
        return dev_fwnode(dev) == fwnode && dev_name_ends_with(dev, "-mux");
 }
 
-static void *typec_mux_match(struct device_connection *con, int ep, void *data)
+static void *typec_mux_match(struct fwnode_handle *fwnode, const char *id,
+                            void *data)
 {
        const struct typec_altmode_desc *desc = data;
        struct device *dev;
         * Check has the identifier already been "consumed". If it
         * has, no need to do any extra connection identification.
         */
-       match = !con->id;
+       match = !id;
        if (match)
                goto find_mux;
 
        /* Accessory Mode muxes */
        if (!desc) {
-               match = fwnode_property_present(con->fwnode, "accessory");
+               match = fwnode_property_present(fwnode, "accessory");
                if (match)
                        goto find_mux;
                return NULL;
        }
 
        /* Alternate Mode muxes */
-       nval = fwnode_property_count_u16(con->fwnode, "svid");
+       nval = fwnode_property_count_u16(fwnode, "svid");
        if (nval <= 0)
                return NULL;
 
        if (!val)
                return ERR_PTR(-ENOMEM);
 
-       nval = fwnode_property_read_u16_array(con->fwnode, "svid", val, nval);
+       nval = fwnode_property_read_u16_array(fwnode, "svid", val, nval);
        if (nval < 0) {
                kfree(val);
                return ERR_PTR(nval);
        return NULL;
 
 find_mux:
-       dev = class_find_device(&typec_mux_class, NULL, con->fwnode,
+       dev = class_find_device(&typec_mux_class, NULL, fwnode,
                                mux_fwnode_match);
 
        return dev ? to_typec_switch(dev) : ERR_PTR(-EPROBE_DEFER);
 
        unsigned long segment_boundary_mask;
 };
 
-/**
- * struct device_connection - Device Connection Descriptor
- * @fwnode: The device node of the connected device
- * @endpoint: The names of the two devices connected together
- * @id: Unique identifier for the connection
- *
- * NOTE: @fwnode is not used together with @endpoint. @fwnode is used when
- * platform firmware defines the connection. When the connection is registered
- * with device_connection_add() @endpoint is used instead.
- */
-struct device_connection {
-       struct fwnode_handle    *fwnode;
-       const char              *endpoint[2];
-       const char              *id;
-};
-
-typedef void *(*devcon_match_fn_t)(struct device_connection *con, int ep,
+typedef void *(*devcon_match_fn_t)(struct fwnode_handle *fwnode, const char *id,
                                   void *data);
 
 void *fwnode_connection_find_match(struct fwnode_handle *fwnode,