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


Groups > linux.kernel > #1394930 > unrolled thread

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

Started byPeter Chen <hzpeterchen@gmail.com>
First post2016-05-05 10:20 +0200
Last post2016-05-06 10:00 +0200
Articles 4 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  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

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

FromPeter Chen <hzpeterchen@gmail.com>
Date2016-05-05 10:20 +0200
SubjectRe: [PATCH] usb: dwc3: usb/dwc3: fake dissconnect event when turn off pullup
Message-ID<rvmFQ-4se-9@gated-at.bofh.it>
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@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?

-- 

Best Regards,
Peter Chen

[toc] | [next] | [standalone]


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

FromFelipe Balbi <balbi@kernel.org>
Date2016-05-06 09:10 +0200
SubjectRe: [PATCH] usb: dwc3: usb/dwc3: fake dissconnect event when turn off pullup
Message-ID<rvI3D-FN-1@gated-at.bofh.it>
In reply to#1394930

[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

[toc] | [prev] | [next] | [standalone]


#1395674

FromPeter Chen <hzpeterchen@gmail.com>
Date2016-05-06 09:50 +0200
Message-ID<rvIGm-ZB-13@gated-at.bofh.it>
In reply to#1395649
On Fri, May 06, 2016 at 10:01:20AM +0300, Felipe Balbi wrote:
> 
> 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 ?

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

[toc] | [prev] | [next] | [standalone]


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

FromFelipe Balbi <balbi@kernel.org>
Date2016-05-06 10:00 +0200
SubjectRe: [PATCH] usb: dwc3: usb/dwc3: fake dissconnect event when turn off pullup
Message-ID<rvIQ1-14x-1@gated-at.bofh.it>
In reply to#1395674

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

Hi,

Peter Chen <hzpeterchen@gmail.com> writes:
>> 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 ?
>
> 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:)

alright, cool. So we'll keep the requirement to call
gadget_driver->disconnect() for anybody who calls
usb_gadget_disconnect(). Caller should know if we need to notify
gadget_driver or not about that disconnect.

-- 
balbi

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web