> -----Original Message----- > From: Heikki Krogerus <heikki.kroge...@linux.intel.com> > Sent: 2019年2月11日 18:46 > To: Jun Li <jun...@nxp.com> > Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>; Andy Shevchenko > <andy.shevche...@gmail.com>; Chen Yu <cheny...@huawei.com>; Hans de > Goede <hdego...@redhat.com>; linux-usb@vger.kernel.org; > linux-ker...@vger.kernel.org > Subject: Re: [PATCH v2 6/9] usb: roles: Find the muxes by also matching > against the > device node > > On Mon, Feb 11, 2019 at 09:58:04AM +0000, Jun Li wrote: > > Hi Heikki, > > > > > @@ -84,7 +85,12 @@ enum usb_role usb_role_switch_get_role(struct > > > usb_role_switch *sw) } > > > EXPORT_SYMBOL_GPL(usb_role_switch_get_role); > > > > > > -static int __switch_match(struct device *dev, const void *name) > > > +static int switch_fwnode_match(struct device *dev, const void > > > +*fwnode) { > > > + return dev_fwnode(dev) == fwnode; > > > > You missed the comment > > https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flkm > > > l.org%2Flkml%2F2019%2F1%2F22%2F437&data=02%7C01%7Cjun.li%40nx > p.com > > %7C8c2d40d5e5d246da34ad08d6900e31cf%7C686ea1d3bc2b4c6fa92cd99c5 > c301635 > > %7C0%7C0%7C636854788040965224&sdata=db4gvXKc9InWiltsweetxXYr > tPbtfX > > jshPh%2FnvA24ig%3D&reserved=0 > > > > return dev_fwnode(dev->parent) == fwnode; > > That's actually not the case. struct usb_role_switch_desc has a member for > fwnode, > and that's what we use with the actual mux device. Check > usb_role_switch_register(): > > ... > sw->dev.fwnode = desc->fwnode; > ... > > Sorry for not realizing it before.
So desc->fwnode should be initialized before do usb_role_switch_register()? But seems usb_role_switch_desc is a read-only object so can't be set at runtime. usb_controller_node { ... usb-role-switch; port { sw_provider_node: endpoint { remote-endpoint = <&sw_consumer_node>; }; }; }; typec_node { ... port { sw_consumer_node: endpoint { remote-endpoint = <&sw_provider_node>; }; }; }; Is my understanding correct? Thanks Jun > > > thanks, > > -- > heikki