Hi, John Stultz <john.stultz@xxxxxxxxxx> writes: > Support configuring the default role the controller assumes as > host mode when the usb role is USB_ROLE_NONE > > This patch was split out from a larger patch originally by > Yu Chen <chenyu56@xxxxxxxxxx> > > Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Cc: Rob Herring <robh+dt@xxxxxxxxxx> > Cc: Mark Rutland <mark.rutland@xxxxxxx> > CC: ShuFan Lee <shufan_lee@xxxxxxxxxxx> > Cc: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> > Cc: Suzuki K Poulose <suzuki.poulose@xxxxxxx> > Cc: Chunfeng Yun <chunfeng.yun@xxxxxxxxxxxx> > Cc: Yu Chen <chenyu56@xxxxxxxxxx> > Cc: Felipe Balbi <balbi@xxxxxxxxxx> > Cc: Hans de Goede <hdegoede@xxxxxxxxxx> > Cc: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > Cc: Jun Li <lijun.kernel@xxxxxxxxx> > Cc: Valentin Schneider <valentin.schneider@xxxxxxx> > Cc: Jack Pham <jackp@xxxxxxxxxxxxxx> > Cc: linux-usb@xxxxxxxxxxxxxxx > Cc: devicetree@xxxxxxxxxxxxxxx > Signed-off-by: John Stultz <john.stultz@xxxxxxxxxx> > --- > v3: Split this patch out from addition of usb-role-switch > handling > --- > drivers/usb/dwc3/core.h | 3 +++ > drivers/usb/dwc3/drd.c | 20 ++++++++++++++++---- > 2 files changed, 19 insertions(+), 4 deletions(-) > > diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h > index 6f19e9891767..3c879c9ab1aa 100644 > --- a/drivers/usb/dwc3/core.h > +++ b/drivers/usb/dwc3/core.h > @@ -953,6 +953,8 @@ struct dwc3_scratchpad_array { > * - USBPHY_INTERFACE_MODE_UTMI > * - USBPHY_INTERFACE_MODE_UTMIW > * @role_sw: usb_role_switch handle > + * @role_switch_default_mode: default operation mode of controller while > + * usb role is USB_ROLE_NONE. > * @usb2_phy: pointer to USB2 PHY > * @usb3_phy: pointer to USB3 PHY > * @usb2_generic_phy: pointer to USB2 PHY > @@ -1087,6 +1089,7 @@ struct dwc3 { > struct notifier_block edev_nb; > enum usb_phy_interface hsphy_mode; > struct usb_role_switch *role_sw; > + enum usb_dr_mode role_switch_default_mode; > > u32 fladj; > u32 irq_gadget; > diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c > index 61d4fd8aead4..0e3466fe5ac4 100644 > --- a/drivers/usb/dwc3/drd.c > +++ b/drivers/usb/dwc3/drd.c > @@ -489,7 +489,10 @@ static int dwc3_usb_role_switch_set(struct device *dev, enum usb_role role) > mode = DWC3_GCTL_PRTCAP_DEVICE; > break; > default: > - mode = DWC3_GCTL_PRTCAP_DEVICE; > + if (dwc->role_switch_default_mode == USB_DR_MODE_HOST) > + mode = DWC3_GCTL_PRTCAP_HOST; > + else > + mode = DWC3_GCTL_PRTCAP_DEVICE; > break; > } > > @@ -515,7 +518,10 @@ static enum usb_role dwc3_usb_role_switch_get(struct device *dev) > role = dwc->current_otg_role; > break; > default: > - role = USB_ROLE_DEVICE; > + if (dwc->role_switch_default_mode == USB_DR_MODE_HOST) > + role = USB_ROLE_HOST; look at this, we now have 3 different encodings for role which DWC3 needs to understand. One is its own PRTCAP_DIR, then there USB_DR_MODE_* and now USB_ROLE_*, can we make it so that we only have one private encoding and one generic encoding? -- balbi
Attachment:
signature.asc
Description: PGP signature