[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160506073837.GC32359@shlinux2.ap.freescale.net>
Date: Fri, 6 May 2016 15:38:37 +0800
From: Peter Chen <hzpeterchen@...il.com>
To: Felipe Balbi <balbi@...nel.org>
Cc: "Du, Changbin" <changbin.du@...el.com>,
"gregkh@...uxfoundation.org" <gregkh@...uxfoundation.org>,
"linux-usb@...r.kernel.org" <linux-usb@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] usb: dwc3: usb/dwc3: fake dissconnect event when turn
off pullup
On Fri, May 06, 2016 at 10:01:20AM +0300, Felipe Balbi wrote:
>
> Hi,
>
> Peter Chen <hzpeterchen@...il.com> writes:
> >> "Du, Changbin" <changbin.du@...el.com> 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?
>
> this is the detail that I'm not yet entirely sure is always valid. Would
> there ever be a situation where we want to drop pull-ups but not tell
> the gadget about it ?
Yes, we have.
- We have enabled pullup dp default for most of platforms, and for
gadget obex and uvc will pull down it since it wants app to
control it
- Some USB charger detection design may need it for the secondary
detection.
After checking again for usb_gadget_disconnect and
usb_gadget_disconnect, I think there is no possible that the dp is
still pulled after we call usb_gadget_disconnect, so we don't need
to change anything:)
--
Best Regards,
Peter Chen
Powered by blists - more mailing lists