Re: [PATCH 1/5] usb: musb: call musb_start() only once in OTG mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux