Re: [RFC 2/2] usb: musb: start musb on the udc side, too

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

 



Hi,

On Thu, Oct 10, 2013 at 06:28:32PM +0200, Sebastian Andrzej Siewior wrote:
> I have am335x-evm with one port running in OTG mode. Since commit
> fe4cb09 ("usb: musb: gadget: remove hcd initialization") the loaded
> gadget does non pop up on the host. All I see is
> |usb 4-5: new high-speed USB device number 52 using ehci-pci
> |usb 4-5: device descriptor read/64, error -110
> 
> A few commits later, commit 2cc65fe ("usb: musb: add musb_host_setup()
> and musb_host_cleanup()) the gadget shows up on the host again but only
> in OTG mode (because we have the host init code running). It does not
> work in device only mode.
> If running in OTG mode and the gadget is removed and added back then the
> same error is pops up on the hos side.
> 
> This patch fixes the problem for me. My question how do we do a pretty
> version of this hack?
> 
> Cc: Daniel Mack <zonque@xxxxxxxxx>
> Cc: Peter Korsgaard <jacmet@xxxxxxxxxx>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
> ---
>  drivers/usb/musb/musb_gadget.c  | 3 +++
>  drivers/usb/musb/musb_virthub.c | 2 +-
>  2 files changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
> index b19ed21..bb1c5bd 100644
> --- a/drivers/usb/musb/musb_gadget.c
> +++ b/drivers/usb/musb/musb_gadget.c
> @@ -1832,6 +1832,7 @@ void musb_gadget_cleanup(struct musb *musb)
>   * @param driver the gadget driver
>   * @return <0 if error, 0 if everything is fine
>   */
> +void musb_start(struct musb *musb);
>  static int musb_gadget_start(struct usb_gadget *g,
>  		struct usb_gadget_driver *driver)
>  {
> @@ -1858,6 +1859,8 @@ static int musb_gadget_start(struct usb_gadget *g,
>  	musb->xceiv->state = OTG_STATE_B_IDLE;
>  	spin_unlock_irqrestore(&musb->lock, flags);
>  
> +	musb_start(musb);
> +
>  	/* REVISIT:  funcall to other code, which also
>  	 * handles power budgeting ... this way also
>  	 * ensures HdrcStart is indirectly called.
> diff --git a/drivers/usb/musb/musb_virthub.c b/drivers/usb/musb/musb_virthub.c
> index a523950..f717073 100644
> --- a/drivers/usb/musb/musb_virthub.c
> +++ b/drivers/usb/musb/musb_virthub.c
> @@ -47,7 +47,7 @@
>  /*
>  * Program the HDRC to start (enable interrupts, dma, etc.).
>  */
> -static void musb_start(struct musb *musb)
> +void musb_start(struct musb *musb)

then perhaps musb_start() should be moved out of virthub and into
core.c ?

-- 
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