From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757667AbcEFHq5 (ORCPT ); Fri, 6 May 2016 03:46:57 -0400 Received: from mail-pa0-f67.google.com ([209.85.220.67]:36385 "EHLO mail-pa0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751355AbcEFHqy (ORCPT ); Fri, 6 May 2016 03:46:54 -0400 Date: Fri, 6 May 2016 15:38:37 +0800 From: Peter Chen To: Felipe Balbi Cc: "Du, Changbin" , "gregkh@linuxfoundation.org" , "linux-usb@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH] usb: dwc3: usb/dwc3: fake dissconnect event when turn off pullup Message-ID: <20160506073837.GC32359@shlinux2.ap.freescale.net> References: <1461745745-3954-1-git-send-email-changbin.du@intel.com> <87wpnjmm7u.fsf@intel.com> <0C18FE92A7765D4EB9EE5D38D86A563A05D1E1A7@SHSMSX103.ccr.corp.intel.com> <87vb32kz7s.fsf@intel.com> <20160505080637.GA19426@shlinux2.ap.freescale.net> <878tznisan.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <878tznisan.fsf@intel.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, May 06, 2016 at 10:01:20AM +0300, Felipe Balbi wrote: > > Hi, > > Peter Chen writes: > >> "Du, Changbin" 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