Message ID | 20090210073525.GE3166@scadufax.research.nokia.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Delegated to: | Felipe Balbi |
Headers | show |
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
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
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
==== 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