From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756737AbcEFHyw (ORCPT ); Fri, 6 May 2016 03:54:52 -0400 Received: from mga01.intel.com ([192.55.52.88]:11025 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751355AbcEFHyu (ORCPT ); Fri, 6 May 2016 03:54:50 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,586,1455004800"; d="asc'?scan'208";a="969932120" From: Felipe Balbi To: Peter Chen 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 In-Reply-To: <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> <20160506073837.GC32359@shlinux2.ap.freescale.net> User-Agent: Notmuch/0.21+96~g9bbc54b (http://notmuchmail.org) Emacs/25.0.90.3 (x86_64-pc-linux-gnu) Date: Fri, 06 May 2016 10:52:35 +0300 Message-ID: <8760uripx8.fsf@intel.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha1; protocol="application/pgp-signature" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi, Peter Chen writes: >> 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. >> >>=20 >> >> 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. >> >>=20 >> >> 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. >> >>=20 >> > >> > If it is a gadget driver, it can call its disconnect explicitly. >> > Another thing is the gadget driver should not call usb_gadget_disconne= ct >> > directly, it should call usb_gadget_deactivate or usb_function_deactiv= ate. >> > >> > Since currently, calling usb_gadget_disconnect may not do real pull do= wn >> > dp, Felipe, will you consider adding gadget_driver->disconnect into >> > usb_gadget_disconnect after pull down dp? >>=20 >> 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. =2D-=20 balbi --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJXLE1EAAoJEIaOsuA1yqREWy4QAKw5iDlnmeSyalUZIk94JTbA dnlQ33r1jw3KxJE6+N3i7TIYDik0VWFzXUOZIiI1x/DBEuXOeHqVg0bdt+sjU2kb txEtQFQH0jT+pqQuHSwv0mlfyA9tt1BTyONOLC3otZY1n+2WcJqFr8ugZhUxaArm 5cVp9a4k3JLzdw51Iva22/Ot+mQ4/eX9MTlATFuoIUK56IbF+rjyIIlnYEQFWf53 ZoGfCxS/Mv3njH5HdQ1MPLlZeqc4N+ksx2TYt+UZkvdCtenRNT2+INNCi1d/57wu s4DicMV79doGA8JaBTMNPdg5dO1JUBr4RJyH7vgBw600pbVRprrv5fwremD/4I/z SQnxjI0c5G0awd5N8woinzVZLFOcf3iyEMy2/e+14QDgZDoEYQswk/PzXh6EkqBZ Rd/gal4oSezuZOYAxH6C56OQPyvKA4Q5OkBci+gNN3NM+qHI65QInPv5scsv5y7U M+CxDddWpHMIdwLIVvYoA1Dy1fiogypaFcvBAGwfIUjGrP08wxzJ1rS0t8Eca2sa 1UZu29PrK7gMlrNcVaBKe/YvbcTJcf0BiXsq9SXASanwaAO3KoIEFHvtYgQ+hb/k IqQemtMcyx5tkBad7lrJGW3EhmPZvupGuUlJ2ydZRn0m/MQsVPqsLzcBzxPDFbKb rO/w8v7iVaJxLUTboW54 =8pdI -----END PGP SIGNATURE----- --=-=-=--