Re: [PATCH 6/7] usb: dwc3: Add support for a role-switch notifier

From: Vincent Whitchurch
Date: Thu Jul 23 2020 - 04:13:58 EST


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/