Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752489AbcCaGUT (ORCPT ); Thu, 31 Mar 2016 02:20:19 -0400 Received: from mga03.intel.com ([134.134.136.65]:11923 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751105AbcCaGUR (ORCPT ); Thu, 31 Mar 2016 02:20:17 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,420,1455004800"; d="asc'?scan'208";a="948560019" From: Felipe Balbi To: Baolin Wang Cc: Jun Li , Peter Chen , Greg KH , Sebastian Reichel , Dmitry Eremin-Solenikov , David Woodhouse , Peter Chen , Alan Stern , "r.baldyga\@samsung.com" , Yoshihiro Shimoda , Lee Jones , Mark Brown , Charles Keepax , "patches\@opensource.wolfsonmicro.com" , Linux PM list , USB , "device-mainlining\@lists.linuxfoundation.org" , LKML Subject: Re: [PATCH v8 0/4] Introduce usb charger framework to deal with the usb gadget power negotation In-Reply-To: References: <20160325070937.GA22398@peterchendt> <878u10jjie.fsf@intel.com> User-Agent: Notmuch/0.21+96~g9bbc54b (http://notmuchmail.org) Emacs/25.0.90.3 (x86_64-pc-linux-gnu) Date: Thu, 31 Mar 2016 09:18:21 +0300 Message-ID: <87y48zgogi.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-Length: 3812 Lines: 97 --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi, Baolin Wang writes: > [ text/plain ] > On 30 March 2016 at 19:24, Felipe Balbi wrote: >>>> >> >> > >>>> >> >> > Seems you don't want to guarantee charger type detection is do= ne >>>> >> >> > before gadget connection(pullup DP), right? >>>> >> >> > I see you call usb_charger_detect_type() in each gadget usb >>>> >> >> > state >>>> >> >> changes. >>>> >> >> >>>> >> >> I am not sure I get your point correctly, please correct me if I >>>> >> >> misunderstand you. >>>> >> >> We need to check the charger type at every event comes from the >>>> >> >> usb gadget state changes or the extcon device state changes, whi= ch >>>> >> >> means a new charger plugin or pullup. >>>> >> >> >>>> >> > >>>> >> > According to usb charger spec, my understanding is you can't do >>>> >> > real charger detection procedure *after* gadget _connection_(pull= up >>>> >> > DP), also I don't >>>> >> >>>> >> Why can not? Charger detection is usually from PMIC. >>>> > >>>> > Charger detection process will impact DP/DM line state, see usb >>>> > charger spec v1.2 for detail detection process, section 4.6.3 says: >>>> > >>>> > "A PD is allowed to *disconnect* and repeat the charger detection >>>> > process multiple times while attached. The PD is required to wait for >>>> > a time of at least TCP_VDM_EN max between disconnecting and restarti= ng >>>> > the charger detection process." >>>> > >>>> > As Peter mentioned, the charger detection should happen between VBUS >>>> > detection and gadget pull up DP for first plug in case. So when&after >>>> > gadget connect (pullup DP), you should already know the charger type. >>>> >>>> Make sense. In our company's solution, charger detection can be done by >>>> hardware from PMIC at first, then it will not affect the DP/DM line wh= en >>>> gadget starts to enumeration. >>> >>> I see, charger type detection is done automatically by PMIC when VBUS >>> is detected in your case, you just assume the process is complete >> >> assuming this finishes before gadget starts is a bad idea. It would've >> been much more robust to delay usb_gadget_connect() until we KNOW >> charger detection has completed. > > It is hardware action to detect the charger type quickly. It actually > *gets* the charger type and does not means *detect* charger type in > 'usb_charger_detect_type()' function. Maybe I need to change the > function name as 'usb_charger_get_type()'. yes. > If some udc drivers want to detect charger type in > 'gadget->ops->get_charger_type()' callback, they should avoid > impacting DP/DM line state at the right gadget state. Thanks. they shouldn't detect is get_type(), the semantics doesn't work. If, at some point, we have to do SW detection of the charger, then a new =2D>charger_detect() method will have to be added. =2D-=20 balbi --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJW/MEtAAoJEIaOsuA1yqREczsQAIUxKA5T+vxl+AMvAdDNUXLb FK8LO4vubXsGTRrxuEXaG0mm6BOajMiYrQPZZ7+/EbxgEIW1nw8NTChYIR036KvD PUJ1EbyEWj5YiJ5l/c62H3ZnR7UBMkgOg8n7R+SrYCC/H2IGeVXZgD/rgQDwvWCy ZxCSE9/HBhV/gj9bxONZH/6ANKFfzOm/A7ZtOY8PgzOaalusbYgnBb+1AYCn1/LS 6QXiNlZQGRFYlsVADRMLRjFeHKtpp21drgTRqtHDYshKvZQULAe6Eo7NYbSlwsfu qmjqiIs+d1SeCOXii4tOqv5OYw0Yol4Gr+MRZ7GCJSJuqbDHbkvqZ2SzKfcez9Kw q8U+Ma9Eh08yLVaR9PdpjFZDsq9J+8hCo5YNbiL7AVU3K+LjRo5cAzZjgF99AcqC sebadGyGBx/YGOgIfnTX4r7pSzaTAWvumuYSA6xKSTQQsww96ilfausg6gIulxZF 5p5G2jw5ZEOgRCyxWBei23cCt6viIha78xtPljscwDnpWBN1gOIKFBFPRJ1IAtWl lw4s07ZkaeVN+8EKPO1j6QV4pACiWY5xSfiGtkfQ+Vtfnj2qSTFo0CYbz4sTcVBZ IWPaS0TPf/wd6U0qOy05jgYbYBS6/h4eY0z+WKai+HIGp2PEFuwbrmrLeTgxEGVu xAZm0VoKkEqG20MtAl+b =HMbA -----END PGP SIGNATURE----- --=-=-=--