Message ID | 87io4zgcc1.fsf@saruman.tx.rr.com |
---|---|
State | New |
Headers | show |
Hi, Robert Jarzmik <robert.jarzmik@free.fr> writes: > Felipe Balbi <balbi@ti.com> writes: > >> Hi, >> >> this could be a bug in either g_ether or pxa27x... Seems like something >> is enabling endpoints which were already enabled. Not sure if this is >> pxa27x not _really_ disabling endpoints or g_ether being stupid. > You're probably right. > From what I remember, g_ether is enabling already enabled endpoints upon resume, > but that memory is pretty thin and goes back to 2008 when I created the driver, > so I'm not sure anymore. > >> yeah, so something is not disabling endpoints when they should :-) So >> this could be a bug with your suspend/resume callbacks. If you're going >> to disconnect from the bus, you need to tell the gadget driver about it, >> which means after disabling pullups, you should call >> gadget_driver->disconnect(). > Okay. > >> Can you see if this *stupid* and *untested* diff helps : > ...zip... > Yes it does. I don't understand why, but it does fix it, and the logs "already > enabled" are still gone. I wasn't aware that a disconnect was required in the > suspend, nor did I see it in another udc driver (in 2008 of course). it's not required on suspend :-) It's required because you disconnect data pullups and, essentially, disconnected from the bus. You won't get an IRQ for it however :-) I'll send this as a fix tomorrow, I'm pretty much done for today. How far back should this be backported ? Does it cover your side if we backport to v3.10+ ? >> I'm not 100% sure this is enough, as I'm not at all familiar with >> pxa27x, but that driver looks hugely unmaintained. > That would be my fault, as I'm maintaining it. That's the reason I'm seeing the > regression. If you have on mind improvements required just say so, I'll see what > I can do. > >> Which device are you using for development/test ? Is it this Mio A701 ? > Yes it is. cool. >> I can't find any sources of it :-s > What about arch/arm/mach-pxa/mioa701.c ? I mean a real-world source (ebay, amazon, etc) :-) -- balbi
diff --git a/drivers/usb/gadget/udc/pxa27x_udc.c b/drivers/usb/gadget/udc/pxa27x_udc.c index 670ac0b12f00..a08ae19ca410 100644 --- a/drivers/usb/gadget/udc/pxa27x_udc.c +++ b/drivers/usb/gadget/udc/pxa27x_udc.c @@ -2535,6 +2535,7 @@ static int pxa_udc_suspend(struct platform_device *_dev, pm_message_t state) udc_disable(udc); udc->pullup_resume = udc->pullup_on; dplus_pullup(udc, 0); + udc->driver->disconnect(&udc->gadget); return 0; }