On Wed, Mar 11, 2020 at 07:15:00PM +0000, Bryan O'Donoghue wrote: > diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c > index 2705871ec95e..789e93dd93b4 100644 > --- a/drivers/usb/dwc3/drd.c > +++ b/drivers/usb/dwc3/drd.c > @@ -497,6 +497,8 @@ static int dwc3_usb_role_switch_set(struct usb_role_switch *sw, enum usb_role ro > } > > dwc3_set_mode(dwc, mode); > + raw_notifier_call_chain(&dwc->role_sw_nl, mode, NULL); > + > return 0; > } dwc3_set_mode() is called from a bunch of other places too, is it sufficient to call the notifier only from here? Also, dwc3_set_mode() performs the mode set asynchronously so the mode switch can race with this notifier call, is that OK? Mike Looijmans proposed the control of a vbus regulator from __dwc3_set_mode(), and that would take care of both the points above. Perhaps this notifier call can be moved to the same place or perhaps Mike's patch could even work for you? The only problem is that your switching code in dwc3-qcom.c would have to be modelled as a reulator: https://lore.kernel.org/linux-usb/20200619142512.19824-1-mike.looijmans@xxxxxxxx/