Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1395649

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

From Felipe Balbi <balbi@kernel.org>
Newsgroups linux.kernel
Subject Re: [PATCH] usb: dwc3: usb/dwc3: fake dissconnect event when turn off pullup
Date 2016-05-06 09:10 +0200
Message-ID <rvI3D-FN-1@gated-at.bofh.it> (permalink)
References <rstku-6Ff-11@gated-at.bofh.it> <rsu6S-7lj-15@gated-at.bofh.it> <rsvPl-jK-27@gated-at.bofh.it> <rsNVU-720-7@gated-at.bofh.it> <rvmFQ-4se-9@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


[Multipart message — attachments visible in raw view] - view raw

Hi,

Peter Chen <hzpeterchen@gmail.com> writes:
>> "Du, Changbin" <changbin.du@intel.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 ? I'm not sure. Anybody wants to investigate ?
Otherwise I'll add it to my TODO list.

-- 
balbi

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: [PATCH] usb: dwc3: usb/dwc3: fake dissconnect event when turn  off pullup Peter Chen <hzpeterchen@gmail.com> - 2016-05-05 10:20 +0200
  Re: [PATCH] usb: dwc3: usb/dwc3: fake dissconnect event when turn off pullup Felipe Balbi <balbi@kernel.org> - 2016-05-06 09:10 +0200
    Re: [PATCH] usb: dwc3: usb/dwc3: fake dissconnect event when turn  off pullup Peter Chen <hzpeterchen@gmail.com> - 2016-05-06 09:50 +0200
      Re: [PATCH] usb: dwc3: usb/dwc3: fake dissconnect event when turn off pullup Felipe Balbi <balbi@kernel.org> - 2016-05-06 10:00 +0200

csiph-web