Hi, Robert Jarzmik <[email protected]> writes: > Robert Jarzmik <[email protected]> writes: > >> Felipe Balbi <[email protected]> writes: >> >>> Hi, >>> >>> without any sort of logs it a bit difficult :-) Care to send some output >>> of the failure ? Are there any oopses or what exactly happens ? >> Ah well, the UDC is the only way to "speak" to the board (no UART), so I >> don't >> have any written feedback available. All I have are the logs displayed on the >> phone's screen in the framebuffer screen. > > I can have logs if I kinda ... revert the patch, applying the diff in [1]. > This enables the suspend/resume to work again, and I can gather the logs when > [1] is applied : > > [ 63.649528] Suspending console(s) (use no_console_suspend to debug) > [ 63.688100] PM: suspend of devices complete after 37.275 msecs > [ 63.690351] PM: late suspend of devices complete after 2.191 msecs > [ 63.692595] PM: noirq suspend of devices complete after 2.196 msecs > [ 63.694387] PM: noirq resume of devices complete after 1.482 msecs > [ 63.696711] PM: early resume of devices complete after 1.533 msecs > [ 63.802930] PM: resume of devices complete after 106.122 msecs > [ 63.804976] Restarting tasks ... > [ 63.821371] pxa27x-udc pxa27x-udc: USB reset > [ 63.822988] done. > [ 63.933666] pxa27x-udc pxa27x-udc: USB reset > [ 64.064026] g_ether gadget: full-speed config #1: CDC Subset/SAFE > [ 64.069692] pxa27x-udc pxa27x-udc: ep3:pxa_ep_enable:usb_ep ep1out-bulk > already enabled, doing nothing
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.
> [1] Stupid diff to renable the suspend/resume to work on 4.4-rc1
> rj@belgarion:~/mio_linux/kernel$ git diff
> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> index 3d583a10b926..2b8dcf546d03 100644
> --- a/include/linux/usb/gadget.h
> +++ b/include/linux/usb/gadget.h
> @@ -267,8 +267,8 @@ static inline int usb_ep_enable(struct usb_ep *ep)
> {
> int ret;
>
> - if (ep->enabled)
> - return 0;
> + /* if (ep->enabled) */
> + /* return 0; */
>
> ret = ep->ops->enable(ep, ep->desc);
> if (ret)
> @@ -295,8 +295,8 @@ static inline int usb_ep_disable(struct usb_ep *ep)
> {
> int ret;
>
> - if (!ep->enabled)
> - return 0;
> + /* if (!ep->enabled) */
> + /* return 0; */
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().
Can you see if this *stupid* and *untested* diff helps :
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;
}
I'm not 100% sure this is enough, as I'm not at all familiar with
pxa27x, but that driver looks hugely unmaintained. Which device are you
using for development/test ? Is it this Mio A701 ? I can't find any
sources of it :-s
--
balbi
signature.asc
Description: PGP signature
