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: [email protected] # v3.11
> Cc: Daniel Mack <[email protected]>
> Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
> ---
> 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;
> +#endifthe logic looks inverted :-s has_gadget() is true when port mode is host or we're in host-only builds :-( -- balbi
signature.asc
Description: Digital signature
