Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752424AbcDZAHM (ORCPT ); Mon, 25 Apr 2016 20:07:12 -0400 Received: from mail-am1on0056.outbound.protection.outlook.com ([157.56.112.56]:34213 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752081AbcDZAHF convert rfc822-to-8bit (ORCPT ); Mon, 25 Apr 2016 20:07:05 -0400 From: Jun Li To: Roger Quadros , "stern@rowland.harvard.edu" , "balbi@kernel.org" , "gregkh@linuxfoundation.org" , "peter.chen@freescale.com" CC: "dan.j.williams@intel.com" , "jun.li@freescale.com" , "mathias.nyman@linux.intel.com" , "tony@atomide.com" , "Joao.Pinto@synopsys.com" , "abrestic@chromium.org" , "r.baldyga@samsung.com" , "linux-usb@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-omap@vger.kernel.org" Subject: RE: [PATCH v6 09/12] usb: gadget: udc: adapt to OTG core Thread-Topic: [PATCH v6 09/12] usb: gadget: udc: adapt to OTG core Thread-Index: AQHRj0RV7MO/tAbHz06QbtTGgchQCZ+UDbgwgAbKaYCAAKHoAA== Date: Tue, 26 Apr 2016 00:07:00 +0000 Message-ID: References: <1459865117-7032-1-git-send-email-rogerq@ti.com> <1459865117-7032-10-git-send-email-rogerq@ti.com> <571E23D7.5070501@ti.com> In-Reply-To: <571E23D7.5070501@ti.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: ti.com; dkim=none (message not signed) header.d=none;ti.com; dmarc=none action=none header.from=nxp.com; x-originating-ip: [123.151.195.53] x-ms-office365-filtering-correlation-id: a7cf3cc4-a2b2-48c7-ff97-08d36d66b0e5 x-microsoft-exchange-diagnostics: 1;AM4PR04MB2129;5:zttqw21Z+EcHqp8RY7cnlwi4hQhB+oHSvo30FtV7doA5RX5nGDbyVSbP0qnkLt1tOx6jZoFtNrrsODfqIeUceVhYW/BAAUpTisRanz/DHliMnMgF652s1FSMJlvTnK27c8a7oMKacvrCQtJo2cXhpQ==;24:dQb6heZKb5/rxXqQhsh/fwcQXSc3grE3d9eRvSHLdg25dTphicC0c4QDQDWObZnblF+Gma9gvkaSm0E3AiQKTxi/jwpYPsedkpbv3frRtKY=;7:hWLIcimwi7sMsmB1Q/Zkt8SLSW6oPJTNRP2xH+SI8xkiwjj9tuJ/roz4gZbkD9JGvcYhfmBgBTzPMj10+u131HYygdj3Gyrh6SOQZveTop/k664DG9rYu5/W1sysNtJk47qLsKFbJy7K6CCvS/bJe3NOwXLCA7m/fGSLVP6shyIthSFutOc7I36JRkEgGy94 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM4PR04MB2129; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(9101521072)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026);SRVR:AM4PR04MB2129;BCL:0;PCL:0;RULEID:;SRVR:AM4PR04MB2129; x-forefront-prvs: 0924C6A0D5 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(24454002)(13464003)(377454003)(106116001)(77096005)(5008740100001)(2201001)(66066001)(6116002)(3846002)(102836003)(1096002)(1220700001)(19580395003)(19580405001)(5003600100002)(86362001)(93886004)(92566002)(5002640100001)(586003)(5004730100002)(122556002)(3280700002)(2900100001)(189998001)(2950100001)(3660700001)(74316001)(81166005)(2171001)(50986999)(87936001)(76176999)(54356999)(9686002)(2906002)(5001770100001)(76576001)(10400500002)(33656002)(2501003)(7059030);DIR:OUT;SFP:1101;SCL:1;SRVR:AM4PR04MB2129;H:AM4PR04MB2130.eurprd04.prod.outlook.com;FPR:;SPF:None;MLV:sfv;LANG:en; spamdiagnosticoutput: 1:23 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Apr 2016 00:07:00.9608 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR04MB2129 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3751 Lines: 133 Hi > -----Original Message----- > From: Roger Quadros [mailto:rogerq@ti.com] > Sent: Monday, April 25, 2016 10:04 PM > To: Jun Li ; stern@rowland.harvard.edu; balbi@kernel.org; > gregkh@linuxfoundation.org; peter.chen@freescale.com > Cc: dan.j.williams@intel.com; jun.li@freescale.com; > mathias.nyman@linux.intel.com; tony@atomide.com; Joao.Pinto@synopsys.com; > abrestic@chromium.org; r.baldyga@samsung.com; linux-usb@vger.kernel.org; > linux-kernel@vger.kernel.org; linux-omap@vger.kernel.org > Subject: Re: [PATCH v6 09/12] usb: gadget: udc: adapt to OTG core > > Hi, > > On 21/04/16 09:38, Jun Li wrote: > > Hi, > > > > ... > >> > >> /** > >> + * usb_gadget_start - start the usb gadget controller and connect to > >> +bus > >> + * @gadget: the gadget device to start > >> + * > >> + * This is external API for use by OTG core. > >> + * > >> + * Start the usb device controller and connect to bus (enable pull). > >> + */ > >> +static int usb_gadget_start(struct usb_gadget *gadget) { > >> + int ret; > >> + struct usb_udc *udc = NULL; > >> + > >> + dev_dbg(&gadget->dev, "%s\n", __func__); > >> + mutex_lock(&udc_lock); > >> + list_for_each_entry(udc, &udc_list, list) > >> + if (udc->gadget == gadget) > >> + goto found; > >> + > >> + dev_err(gadget->dev.parent, "%s: gadget not registered.\n", > >> + __func__); > >> + mutex_unlock(&udc_lock); > >> + return -EINVAL; > >> + > >> +found: > >> + ret = usb_gadget_udc_start(udc); > >> + if (ret) > >> + dev_err(&udc->dev, "USB Device Controller didn't start: %d\n", > >> + ret); > >> + else > >> + usb_udc_connect_control(udc); > > > > For drd, it's fine, but for real otg, gadget connect should be done by > > loc_conn() instead of gadget start. > > It is upto the OTG state machine to call gadget_start() when it needs to > connect to the bus (i.e. loc_conn()). I see no point in calling gadget > start before. > > Do you see any issue in doing so? This is what OTG state machine does: case OTG_STATE_B_PERIPHERAL: otg_chrg_vbus(otg, 0); otg_loc_sof(otg, 0); otg_set_protocol(fsm, PROTO_GADGET); otg_loc_conn(otg, 1); break; You intend to abstract something common in this api when start gadget, which should be called by otg_set_protocol(fsm, PROTO_GADGET); and drd_set_protocol(fsm, PROTO_GADGET); right? So you may move usb_udc_connect_control(IMO usb_gadget_connect() is better)out of usb_gadget_start(), then for drd: case OTG_STATE_B_PERIPHERAL: drd_set_protocol(fsm, PROTO_GADGET); otg_drv_vbus(otg, 0); usb_gadget_connect(); Li Jun > > cheers, > -roger > > > > >> + > >> + mutex_unlock(&udc_lock); > >> + > >> + return ret; > >> +} > >> + > >> +/** > >> + * usb_gadget_stop - disconnect from bus and stop the usb gadget > >> + * @gadget: The gadget device we want to stop > >> + * > >> + * This is external API for use by OTG core. > >> + * > >> + * Disconnect from the bus (disable pull) and stop the > >> + * gadget controller. > >> + */ > >> +static int usb_gadget_stop(struct usb_gadget *gadget) { > >> + struct usb_udc *udc = NULL; > >> + > >> + dev_dbg(&gadget->dev, "%s\n", __func__); > >> + mutex_lock(&udc_lock); > >> + list_for_each_entry(udc, &udc_list, list) > >> + if (udc->gadget == gadget) > >> + goto found; > >> + > >> + dev_err(gadget->dev.parent, "%s: gadget not registered.\n", > >> + __func__); > >> + mutex_unlock(&udc_lock); > >> + return -EINVAL; > >> + > >> +found: > >> + usb_gadget_disconnect(udc->gadget); > > > > Likewise, gadget disconnect also should be done by loc_conn() instead > > of gadget stop. > > > >> + udc->driver->disconnect(udc->gadget); > >> + usb_gadget_udc_stop(udc); > >> + mutex_unlock(&udc_lock); > >> + > >> + return 0; > >> +} > >> + > > > > Li Jun > >