On Mon, Mar 02, 2020 at 06:22:59AM +0000, Peter Chen wrote: > > > @@ -613,9 +613,10 @@ static enum usb_role ci_usb_role_switch_get(struct device *dev) > > > return role; > > > } > > > > > > -static int ci_usb_role_switch_set(struct device *dev, enum usb_role role) > > > +static int ci_usb_role_switch_set(struct usb_role_switch *sw, > > > + enum usb_role role) > > > { > > > - struct ci_hdrc *ci = dev_get_drvdata(dev); > > > + struct ci_hdrc *ci = usb_role_switch_get_drvdata(sw); > > > struct ci_hdrc_cable *cable = NULL; > > > enum usb_role current_role = ci_role_to_usb_role(ci); > > > enum ci_role ci_role = usb_role_to_ci_role(role); > > > @@ -1118,6 +1119,7 @@ static int ci_hdrc_probe(struct platform_device *pdev) > > > } > > > > > > if (ci_role_switch.fwnode) { > > > + ci_role_switch.driver_data = ci; > > And chipidea code, better change it like cdns3's, otherwise, the > switch desc for all controllers have the same driver_data. That I'll skip after all... Note that since the context of the switch descriptor is always copied during registration, the driver_data is not going to be the same for every switch. The structure is actually filled in two separate functions, so the change is not straightforward. We can still change that of course, but it's out side the scope of this series, so it needs to be done separately. thanks, -- heikki