Hi, On Tue, Oct 15, 2013 at 06:29:22PM +0200, Sebastian Andrzej Siewior wrote: > In commit 001dd84 ("usb: musb: start musb on the udc side, too") it was > ensured that the state engine is started also in OTG mode after a > removal / insertion of the gadget. > Unfortunately this change also introduced a bug: If the device is > configured as OTG and it connected with a remote host _without_ loading > a gadget then we bug() later (because musb->otg->gadget is not > initialized). > Initially I assumed it might be nice to have the host part of musb in > OTG mode working without having a gadget loaded. This bug and fact that > it wasn't working like this before the host/gadget split made me realize > that this was a silly idea. > This patch now introduces back the old behavior where in OTG mode the > host mode is only working after the gadget has been loaded. > > Cc: stable@xxxxxxxxxxxxxxx # v3.11 > Cc: Daniel Mack <zonque@xxxxxxxxx> > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > --- > drivers/usb/musb/musb_virthub.c | 19 ++++++++++++++++++- > 1 file changed, 18 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/musb/musb_virthub.c b/drivers/usb/musb/musb_virthub.c > index d1d6b83..9af6bba 100644 > --- a/drivers/usb/musb/musb_virthub.c > +++ b/drivers/usb/musb/musb_virthub.c > @@ -220,6 +220,23 @@ int musb_hub_status_data(struct usb_hcd *hcd, char *buf) > return retval; > } > > +static int musb_has_gadget(struct musb *musb) > +{ > + /* > + * In host-only mode we start a connection right away. In OTG mode > + * we have to wait until we loaded a gadget. We don't really need a > + * gadget if we operate as a host but we should not start a session > + * as a device without a gadget or else we explode. > + */ > +#ifdef CONFIG_USB_MUSB_HOST > + return 1; > +#else > + if (musb->port_mode == MUSB_PORT_MODE_HOST) > + return 1; > + return musb->g.dev.driver != NULL; > +#endif the logic looks inverted :-s has_gadget() is true when port mode is host or we're in host-only builds :-( -- balbi
Attachment:
signature.asc
Description: Digital signature