[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4C600171.5020405@canonical.com>
Date: Mon, 09 Aug 2010 21:24:01 +0800
From: Bryan Wu <bryan.wu@...onical.com>
To: felipe.balbi@...ia.com, linux-usb@...r.kernel.org
CC: david-b@...bell.net, kernel-team@...ts.ubuntu.com,
linux-kernel@...r.kernel.org, ricardo.salveti@...onical.com,
linux-omap@...r.kernel.org
Subject: Re: [PATCH] musb: move usb_add_hcd to the core init code from gadget
code (v2)
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@...onical.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;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists