[PATCH] musb: move usb_add_hcd to the core init code from gadget code (v2)

Bryan Wu bryan.wu at canonical.com
Mon Aug 9 13:24:01 UTC 2010


Felipe,

Any comments on this patch?

Thanks a lot,
-Bryan


On 07/23/2010 10:36 PM, Bryan Wu wrote:
> BugLink: http://bugs.launchpad.net/bugs/608312
>
> v2:
> fix the building error on latest 2.6.35-rc kernel, since v1 was generated in
> 2.6.33 kernel.
>
> v1:
> usb_add_hcd was only called when we insmod the gadget class module or built-in
> that gadget class driver. If musb is configured as OTG controller, we need to
> insmod or built-in gadget class driver to make our Host mode fucntion works.
>
> In our Ubuntu system, normally we compiled all the gadget class drivers as
> modules. Then users can insmod the gadget modules as they want. But without the
> gadget class driver running, we needs host function to support common USB
> devices.
>
> This patch fix this issue and tested on omap3 beagle board and Gumstix board.
>
> Signed-off-by: Bryan Wu<bryan.wu at canonical.com>
> ---
>   drivers/usb/musb/musb_core.c   |   13 +++++--------
>   drivers/usb/musb/musb_gadget.c |   18 ------------------
>   2 files changed, 5 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
> index 3b795c5..1b6d74c 100644
> --- a/drivers/usb/musb/musb_core.c
> +++ b/drivers/usb/musb/musb_core.c
> @@ -1583,14 +1583,6 @@ irqreturn_t musb_interrupt(struct musb *musb)
>   		(devctl&  MUSB_DEVCTL_HM) ? "host" : "peripheral",
>   		musb->int_usb, musb->int_tx, musb->int_rx);
>
> -#ifdef CONFIG_USB_GADGET_MUSB_HDRC
> -	if (is_otg_enabled(musb) || is_peripheral_enabled(musb))
> -		if (!musb->gadget_driver) {
> -			DBG(5, "No gadget driver loaded\n");
> -			return IRQ_HANDLED;
> -		}
> -#endif
> -
>   	/* the core can interrupt us for multiple reasons; docs have
>   	 * a generic interrupt flowchart to follow
>   	 */
> @@ -2128,6 +2120,11 @@ bad_config:
>
>   		status = musb_gadget_setup(musb);
>
> +		if (is_otg_enabled(musb)) {
> +			status = usb_add_hcd(musb_to_hcd(musb), -1, 0);
> +			musb_start(musb);
> +		}
> +
>   		DBG(1, "%s mode, status %d, dev%02x\n",
>   			is_otg_enabled(musb) ? "OTG" : "PERIPHERAL",
>   			status,
> diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
> index 6fca870..9e55534 100644
> --- a/drivers/usb/musb/musb_gadget.c
> +++ b/drivers/usb/musb/musb_gadget.c
> @@ -1761,24 +1761,6 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
>   		otg_set_peripheral(musb->xceiv,&musb->g);
>
>   		spin_unlock_irqrestore(&musb->lock, flags);
> -
> -		if (is_otg_enabled(musb)) {
> -			DBG(3, "OTG startup...\n");
> -
> -			/* REVISIT:  funcall to other code, which also
> -			 * handles power budgeting ... this way also
> -			 * ensures HdrcStart is indirectly called.
> -			 */
> -			retval = usb_add_hcd(musb_to_hcd(musb), -1, 0);
> -			if (retval<  0) {
> -				DBG(1, "add_hcd failed, %d\n", retval);
> -				spin_lock_irqsave(&musb->lock, flags);
> -				otg_set_peripheral(musb->xceiv, NULL);
> -				musb->gadget_driver = NULL;
> -				musb->g.dev.driver = NULL;
> -				spin_unlock_irqrestore(&musb->lock, flags);
> -			}
> -		}
>   	}
>
>   	return retval;





More information about the kernel-team mailing list