diff mbox

musb OTG broken in 2.6.29-rc3?

Message ID 20090210073525.GE3166@scadufax.research.nokia.com (mailing list archive)
State Not Applicable, archived
Delegated to: Felipe Balbi
Headers show

Commit Message

Felipe Balbi Feb. 10, 2009, 7:35 a.m. UTC
On Tue, Feb 10, 2009 at 05:47:16AM +0100, Ajay Kumar Gupta wrote:
> > -----Original Message-----
> > From: Steve Sakoman [mailto:sakoman@gmail.com]
> > Sent: Tuesday, February 10, 2009 10:13 AM
> > To: Gupta, Ajay Kumar
> > Cc: linux-omap
> > Subject: Re: musb OTG broken in 2.6.29-rc3?
> >
> > On Mon, Feb 9, 2009 at 8:05 PM, Gupta, Ajay Kumar <ajay.gupta@ti.com> wrote:
> >
> > >> Before I spend too much time debugging, has anyone else been
> > >> successful with musb OTG in 2.6.29-rc3?  A quick search of this list
> > >> didn't turn up any discussion of issues.
> > >
> > > It works fine on OMAP35x EVM too. I had to add a proc entry for session start
> > > (Switching on the vBus).
> >
> > Could you give me a little more detail on what you had to do for
> > session start?  Perhaps I have a similar issue on Overo.
> It is same $ echo "F" >/proc/driver/musb_hdrc, which was earlier
> In musb_procfs.c and now been removed.
> 
> +       case 'F':
> +               reg = musb_readb(mbase, MUSB_DEVCTL);
> +               reg |= MUSB_DEVCTL_SESSION;
> +               musb_writeb(mbase, MUSB_DEVCTL, reg);

a temp sysfs for that will help:

Steve, could you try the following

Comments

Jarkko Nikula Feb. 10, 2009, 8:46 a.m. UTC | #1
On Tue, 10 Feb 2009 08:35:31 +0100
"Balbi Felipe (Nokia-D/Helsinki)" <felipe.balbi@nokia.com> wrote:

> > > Could you give me a little more detail on what you had to do for
> > > session start?  Perhaps I have a similar issue on Overo.
> > It is same $ echo "F" >/proc/driver/musb_hdrc, which was earlier
> > In musb_procfs.c and now been removed.
> >
> > +       case 'F':
> > +               reg = musb_readb(mbase, MUSB_DEVCTL);
> > +               reg |= MUSB_DEVCTL_SESSION;
> > +               musb_writeb(mbase, MUSB_DEVCTL, reg);
> 
> a temp sysfs for that will help:
> 
> Steve, could you try the following
> 
I let Felipe to send new version of the patch where it applies (I had
there spaces instead of tabs?) and condition for session value is not
true for all values ;-)

But for me Beagle work. Ethernet gadget just fine and HS HUB by kicking
the session on.


Jarkko
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Steve Sakoman Feb. 10, 2009, 2:27 p.m. UTC | #2
On Tue, Feb 10, 2009 at 12:46 AM, Jarkko Nikula <jarkko.nikula@nokia.com> wrote:
> On Tue, 10 Feb 2009 08:35:31 +0100
> "Balbi Felipe (Nokia-D/Helsinki)" <felipe.balbi@nokia.com> wrote:
>
>> > > Could you give me a little more detail on what you had to do for
>> > > session start?  Perhaps I have a similar issue on Overo.
>> > It is same $ echo "F" >/proc/driver/musb_hdrc, which was earlier
>> > In musb_procfs.c and now been removed.
>> >
>> > +       case 'F':
>> > +               reg = musb_readb(mbase, MUSB_DEVCTL);
>> > +               reg |= MUSB_DEVCTL_SESSION;
>> > +               musb_writeb(mbase, MUSB_DEVCTL, reg);
>>
>> a temp sysfs for that will help:
>>
>> Steve, could you try the following
>>
> I let Felipe to send new version of the patch where it applies (I had
> there spaces instead of tabs?) and condition for session value is not
> true for all values ;-)

I had the same issue with spaces/tabs.

Heading to the airport now, so won't be able to do further testing
(beyond compile testing) till Friday.

> But for me Beagle work. Ethernet gadget just fine and HS HUB by kicking
> the session on.

What method did you use to kick the session on?  Was this always
required?  I might be misremembering, but I seem to recall that
plugging in a miniA cable resulted in musb automatically switching
modes to host.

Sorry for the perhaps stupid questions, I am *far* from being a USB expert :-)

Regards,

Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jarkko Nikula Feb. 10, 2009, 2:34 p.m. UTC | #3
On Tue, 10 Feb 2009 15:27:18 +0100
ext Steve Sakoman <sakoman@gmail.com> wrote:

> > But for me Beagle work. Ethernet gadget just fine and HS HUB by
> > kicking the session on.
> 
> What method did you use to kick the session on?  Was this always
> required?  I might be misremembering, but I seem to recall that
> plugging in a miniA cable resulted in musb automatically switching
> modes to host.
> 
I used Felipe's patch and "echo 1 >/sys/...musb_something/session". That
was required each time I reconnected the cable.

> Sorry for the perhaps stupid questions, I am *far* from being a USB
> expert :-)
> 
Me too :-)


Jarkko
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

==== cut here ====

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 2cc34fa..0ffd611 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -1713,6 +1713,32 @@  musb_vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
 }
 static DEVICE_ATTR(vbus, 0644, musb_vbus_show, musb_vbus_store);
 
+static ssize_t
+musb_session_store(struct device *dev, struct device_attribute *attr,
+               const char *buf, size_t n)
+{
+       struct musb     *musb = dev_to_musb(dev);
+       unsigned short  session;
+       u8              devctl;
+
+       if (sscanf(buf, "%hu", &session) != 1
+                       || (session != 1) || (session != 0)) {
+               dev_err(dev, "value must be 1 on 0\n");
+               return -EINVAL;
+       }
+
+       devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
+       if (session)
+               devctl |= MUSB_DEVCTL_SESSION;
+       else
+               devctl &= ~MUSB_DEVCTL_SESSION;
+
+       musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
+
+       return n;
+}
+static DEVICE_ATTR(session, 0644, NULL, musb_session_store);
+
 #ifdef CONFIG_USB_GADGET_MUSB_HDRC
 
 /* Gadget drivers can't know that a host is connected so they might want
@@ -1813,6 +1839,7 @@  static void musb_free(struct musb *musb)
         */
 
 #ifdef CONFIG_SYSFS
+       device_remove_file(musb->controller, &dev_attr_session);
        device_remove_file(musb->controller, &dev_attr_mode);
        device_remove_file(musb->controller, &dev_attr_vbus);
 #ifdef CONFIG_USB_MUSB_OTG
@@ -2047,6 +2074,7 @@  bad_config:
        }
 
 #ifdef CONFIG_SYSFS
+       status = device_create_file(dev, &dev_attr_session);
        status = device_create_file(dev, &dev_attr_mode);
        status = device_create_file(dev, &dev_attr_vbus);
 #ifdef CONFIG_USB_GADGET_MUSB_HDRC
@@ -2061,6 +2089,7 @@  bad_config:
 
 fail2:
 #ifdef CONFIG_SYSFS
+       device_remove_file(musb->controller, &dev_attr_session);
        device_remove_file(musb->controller, &dev_attr_mode);
        device_remove_file(musb->controller, &dev_attr_vbus);
 #ifdef CONFIG_USB_MUSB_OTG