Re: [PATCH] usb: dwc3: usb/dwc3: fake dissconnect event when turn off pullup

From: Peter Chen
Date: Thu May 05 2016 - 04:15:03 EST


On Thu, Apr 28, 2016 at 09:46:15AM +0300, Felipe Balbi wrote:
>
> Hi,
>
> (we don't top-post on this forum ;-)
>
> "Du, Changbin" <changbin.du@xxxxxxxxx> writes:
> > Hi, Balbi,
> >
> > The step to reproduce this issue is:
> > 1) connect device to a host and wait its enumeration.
> > 2) trigger software disconnect by calling function
> > usb_gadget_disconnect(), which finally call
> > dwc3_gadget_pullup(false). Do not reconnect device
> > (I mean no enumeration go on, keep bit Run/Stop 0.).
> >
> > At here, gadget driver's disconnect callback should be
> > Called, right? We has been disconnected. But no, as
> > You said " not generating disconnect IRQ after you
> > drop Run/Stop is expected".
> >
> > And I am testing on an Android device, Android only
> > use dwc3_gadget_pullup(false) to issue a soft disconnection.
> > This confused user that the UI still show usb as connected
> > State, caused by missing a disconnect event.
>
> okay, so I know what this is. This is caused by Android gadget itself
> not notifying the gadget that a disconnect has happened. Just look at
> udc-core's soft_connect implementation for the sysfs interface, and
> you'll see what I mean.
>
> This should be fixed at Android gadget itself. The only thing we could
> do is introduce a new usb_gadget_soft_connect()/disconnect() to wrap the
> logic so it's easier for Android gadget to use; but even that I'm a
> little bit reluctant to do because Android should be using our
> soft_connect interface instead of reimplementing it (wrongly) by its
> own.
>

If it is a gadget driver, it can call its disconnect explicitly.
Another thing is the gadget driver should not call usb_gadget_disconnect
directly, it should call usb_gadget_deactivate or usb_function_deactivate.

Since currently, calling usb_gadget_disconnect may not do real pull down
dp, Felipe, will you consider adding gadget_driver->disconnect into
usb_gadget_disconnect after pull down dp?

--

Best Regards,
Peter Chen