From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753853AbbIGJV5 (ORCPT ); Mon, 7 Sep 2015 05:21:57 -0400 Received: from mail-bn1bon0135.outbound.protection.outlook.com ([157.56.111.135]:34972 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751018AbbIGJVz (ORCPT ); Mon, 7 Sep 2015 05:21:55 -0400 X-Greylist: delayed 956 seconds by postgrey-1.27 at vger.kernel.org; Mon, 07 Sep 2015 05:21:54 EDT Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=freescale.com; Date: Mon, 7 Sep 2015 15:53:48 +0800 From: Li Jun To: Roger Quadros CC: , , , , , , , , , , , , Subject: Re: [PATCH v4 13/13] usb: otg: Add dual-role device (DRD) support Message-ID: <20150907075347.GB30578@shlinux2> References: <1440422484-4737-1-git-send-email-rogerq@ti.com> <1440422484-4737-14-git-send-email-rogerq@ti.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1440422484-4737-14-git-send-email-rogerq@ti.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD027;1:YGxvpnZ8ypXEjNp3eUM27V6U+wBj5b0zgyxsWDKiCRoxMUTDbPzyFwTnn6h0AJ3iKutEwPC1zQs39BMcLFMl4sl+ELJWkwDY5Svj3hbbec+OcfpqXYp88h4WX5TIbMTUFvZBiutCypkEKF9cNu8JBU+TK2krDBe13FtN/Dh7K1yYLcNSv6PTlNSh3h4uLwCBIPOW8VyA8Xoqc14CUfrclV2QxoouzQ95cKo7YMhgIUNos7ZusdXY3cpvk+jADUfT0tjZitdopoOdunJbhwSUYrJhMHRqR142TsjixE0PAfnyJ6N2HUi0WUJqTfFbRlt3NJ5gycP/WimSgWQaXOlKs7XWh3FKiX63ldKT82TPQjY2du5pYDn1HyWBMTJ01xQTbQqCARCZEBbUWdn3ZmrKoRRKlpcuUD6hr3b3vUCk8UI= X-Forefront-Antispam-Report: CIP:192.88.158.2;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1109001)(339900001)(189002)(24454002)(199003)(97736004)(6806004)(5001830100001)(5007970100001)(46406003)(62966003)(92566002)(23726002)(2950100001)(46102003)(105606002)(33656002)(68736005)(77096005)(106466001)(5001860100001)(110136002)(5001960100002)(50986999)(54356999)(189998001)(85426001)(76176999)(4001540100001)(81156007)(69596002)(4001350100001)(77156002)(19580405001)(19580395003)(87936001)(33716001)(104016003)(5890100001)(47776003)(50466002)(64706001)(83506001)(97756001);DIR:OUT;SFP:1102;SCL:1;SRVR:BY1PR0301MB1223;H:az84smr01.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY1PR0301MB1223;2:l4+HdznMFAbH4uLcyPd/URzR7LNNvyNUjCQodk/3aadLAXQIxT10K1s0ilYSrI+9QuTKRg9GIrWu/xkfdAcJDzT7+RZ3i/ed4bPVOQuTNiWgrTL+HeTag9gt6k0FDBwDDTGYGr9TedDBq7++dfLAZ1F5sfcesXwMWZ58tnttDqA=;3:O0GGup/TO9yZSPtYgT5mFwPSL0F1C2agu1dBwNffvLPlYoU1jDuc9DqXhbT+hdLiQGFHjbtNTGShJ8tTYGxoRJnD2cRwFvOown69WqHS40pV7RgAWchfWRaIXoEWcuUhNEQukTjdzSOMfKkIhpfuwhSRI7bglgV9q0jx0oc8zLH6GSjqKxi4ltcyZbTjn5421PDWlVf+Pz8lUNbUoMAo0Y0Whb9O2ZssSBd8SQQOaHw=;25:8SJnsbnDuyFm0lVWl5o7gJeaEu37JaPnfudVdps6kb/8v9YJ3Bq8BhqzB1kk29G9xaiSI57gH7lm2eXhoP4EFNdWrRAZWxRU8eyRYEJvvl/R/q1aLLWagfrTV7vigQMzkRg0NgZHwu9gqfUBjRWno3JTUUThSO1jT8xwYUWJtux9BeLKx7CXb6MQ/fnPfwgf8AzU66mJeGvyNGEIf6yDgULFRszh3afAKQqksqF6AfCmuNeeqI2fCDNc8ungrMjuYJxyB46VgbGQjx++Ri0hSQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0301MB1223; X-Microsoft-Exchange-Diagnostics: 1;BY1PR0301MB1223;20:9+2gOgxWImfGFnZ7H4K/fF3TPdPoz2aJjhXahxL6xWOZmPax2hPbdXfG/LARizE1t/74e4lywldQmvGaMQnYxDokn0DKv6KrDlr/oMFRnxagbByQCwQfcbmpQCUK86pd1g+izwo6jhujeQ76pL+aLewPKhFlHpdl6oBLwNQez7x6P9fmVcQeLF2u+AokNOb905OS7xkXmhEza/C39NVQIw6t1oJPUcUZOnruck8udxTRONECsLQJE+OX6GEpahWX8sePUwVGJaqPOnIb4Oi8z5M1yWGkwUF5Og6FF+eKyZXXQlyqSDSHJtF9I7n9AKXYGavOGYrIv5B8sOT9k3arFISvFv0cCQIy+xZv5mnCKKU=;4:+NEvwXvTY2xyDjv6YZ4sdyG4lkzzruYVVNziIa8X0hRYFT1/eHLIGB/dH9sQj0DTS25u6Ndvqk/bO/vQPi9LX1FarzMra+R1sTJapZAX9fTN5KWMK0tTM5rvbOiEUGrIEbRlAR4SuQV55ICcQl4Ts3PZmiwcYXg+lSf6F5kzAzho5mYyXxkS3HGJhv/HP8UnF7L4iUio/2rFeX6ert0RWaX7NHn/fwIzDFLwp8UatozLMhIW6BKsYw2SyLLy8VYc6WqPXg/0Wg5A58ODZE/PFw7W3SezUGhze6Pbj5tQ9TnbnvDylcDgnZPt9QRDdifA/zpKghql5Dx6Pn+YXDFcTQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(8121501046)(3002001);SRVR:BY1PR0301MB1223;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0301MB1223; X-Forefront-PRVS: 069255B8B8 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY1PR0301MB1223;23:ubsa/AslggyulJFVQOhb5YslLcN/oO7nYONhbCh?= =?us-ascii?Q?LT94MmNn4XPfTf8jT/AmaJR0TG3+q6e/XoZB3BOzkSl6twtsSNmzugUtMAia?= =?us-ascii?Q?4NTzhPMah85RZRaPSkwadHOuJRjdbN29VfruqzXW0HVMf9AP+LDAuQ0/LR8v?= =?us-ascii?Q?9fzBKvjwAshkVKfoRPcq1P2PkrDyzrwd0h49XQJFRMtjNeFGV+8tjEtBgPIo?= =?us-ascii?Q?mJCOtNsCv46faq6A0QDSy5Qz0FD+TqIC2lXYnc7ufTjv5iLXJ2BM2kg95KCE?= =?us-ascii?Q?OPFc9D3EytTPsqfrBz6yaAKFK1HrUbISwfEaD4P/LwP78Si36BC1g+Vn61zq?= =?us-ascii?Q?CTtGaGckvq0gGnZMkMbBnG37ix5UCVShG4DdiB9LTmtxB22CiwcToTaLpFH7?= =?us-ascii?Q?L4wId8AOQMu9F7ojdazspDk+LVIeOL1pOewWVS8dHmH1pYMja5o6XaR30iY1?= =?us-ascii?Q?xoiPAqRVNm9AfxtM2Bj8dmEFw8CERfIEcSF1AD+qc7DkjDcSK9fdo/W57Jh5?= =?us-ascii?Q?D7EeNuKU3QWM+EeC3YqVbOtK/Ew2F+8iJEhPslL3h0VtorqjO2Jp3O+RvoZk?= =?us-ascii?Q?NQPhZljEMED3g8fM1yChC2EnKlxmqEsc3NPqX1fYMyIyfpojUbYwSoliCFBE?= =?us-ascii?Q?Zpgz9VVkzHza0dTnFgVYo99rxrm51M369TkUgMC7l9zmJkHGh3KFf34LcnMa?= =?us-ascii?Q?LZ+bG4nM7MhRd4ES4MU9vHI8kbcn1NBCZBSa38iLHIZjx9oBDsP7ocJwbiTu?= =?us-ascii?Q?mITZ5HpNeVeyoxpWAK1ekTNCwCcPAJfJF5kv+tcIufn8YehoXwQ7J/GywAnm?= =?us-ascii?Q?Q5p5DsTTsj//oYcchDKycgLDYcOIbL8ckr2JQTa9FOTDMLi4XHrsc2Db7ShB?= =?us-ascii?Q?kXdgXJPFQsOAVreScgRhluwD54/aOJ/xpnPICxz3IU9Tdl38J1SgfT4Mtr7R?= =?us-ascii?Q?RCbgV0qG/VumvZetJxqoO6uTx/eqDgQTV7IsUsBKru4oe3xeBwLtBztpQ+9R?= =?us-ascii?Q?xX0p/LrhVzaKRSlVmaVdbBWbTvjX87wwKeBHU4e1PHlbKYM4Dw2LlB3JVRkh?= =?us-ascii?Q?692XZqCpWPYPCrIUvsOFyebttl4ygKEe1pw8F5J+ijEY+wOpMcKT++3CNl78?= =?us-ascii?Q?FLYQS386275AcENa2C2c1qoFXBkbXRCKA4r3N5PmplYFHrk4TpSacQ7ALMa9?= =?us-ascii?Q?ttcJdCQrEyAOBWDqPhzuA4XKFEcCx21icbKk/Hj/f45MtQnKBc4OF3DJZmw?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY1PR0301MB1223;5:G6xc5gIKFk6WdkPdvcbLYBQkTrVFA5Ga9FMgMBsaROp+ZHArNyu95bYZChl9e/L19iUXgRPK4I97GS6m54+S4rA4UQXi+AXv9T3pqmfVwXw0R25BiBnNGJM2uSkuc/rQgMOiJhrEil/U9nAFt2sKrw==;24:sJ/WmZNEN0HPNUKQJAGkTOfM3B0VPi9KszkI6aBZj/7M0BXKDItlhX4EdKaMLwEr6cdXydgRue8abQHO8hGkZ0hRWUpmpTsuyKIpAH+gKWU=;20:pPHP7DFN1sNRMIPiMjFbAQxFWazgM5Gnl+SfkvxHDFwG2Sd6jU96Mj3actRb7CktI3tcsUsQYRgOctS2F+2o2A== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2015 09:05:55.4716 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d;Ip=[192.88.158.2];Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0301MB1223 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Aug 24, 2015 at 04:21:24PM +0300, Roger Quadros wrote: > DRD mode is a reduced functionality OTG mode. In this mode > we don't support SRP, HNP and dynamic role-swap. > > In DRD operation, the controller mode (Host or Peripheral) > is decided based on the ID pin status. Once a cable plug (Type-A > or Type-B) is attached the controller selects the state > and doesn't change till the cable in unplugged and a different > cable type is inserted. > > As we don't need most of the complex OTG states and OTG timers > we implement a lean DRD state machine in usb-otg.c. > The DRD state machine is only interested in 2 hardware inputs > 'id' and 'b_sess_vld'. > > Signed-off-by: Roger Quadros > --- > drivers/usb/common/usb-otg.c | 178 +++++++++++++++++++++++++++++++++++++++++-- > include/linux/usb/otg-fsm.h | 5 ++ > include/linux/usb/otg.h | 2 + > 3 files changed, 177 insertions(+), 8 deletions(-) > ... ... > +/* Called when entering a DRD state */ > +static void drd_set_state(struct otg_fsm *fsm, enum usb_otg_state new_state) > +{ > + struct usb_otg *otgd = container_of(fsm, struct usb_otg, fsm); > + > + if (fsm->otg->state == new_state) > + return; > + > + fsm->state_changed = 1; > + dev_dbg(otgd->dev, "otg: set state: %s\n", > + usb_otg_state_string(new_state)); > + switch (new_state) { > + case OTG_STATE_B_IDLE: > + drd_set_protocol(fsm, PROTO_UNDEF); You didn't address this comment for your previous version. otg_drv_vbus(fsm, 0); > + break; > + case OTG_STATE_B_PERIPHERAL: > + drd_set_protocol(fsm, PROTO_GADGET); otg_drv_vbus(fsm, 0); > + break; > + case OTG_STATE_A_HOST: otg_drv_vbus(fsm, 1); > + drd_set_protocol(fsm, PROTO_HOST); > + break; > + case OTG_STATE_UNDEFINED: > + case OTG_STATE_B_SRP_INIT: > + case OTG_STATE_B_WAIT_ACON: > + case OTG_STATE_B_HOST: > + case OTG_STATE_A_IDLE: > + case OTG_STATE_A_WAIT_VRISE: > + case OTG_STATE_A_WAIT_BCON: > + case OTG_STATE_A_SUSPEND: > + case OTG_STATE_A_PERIPHERAL: > + case OTG_STATE_A_WAIT_VFALL: > + case OTG_STATE_A_VBUS_ERR: > + default: > + dev_warn(otgd->dev, "%s: otg: invalid state: %s\n", > + __func__, usb_otg_state_string(new_state)); > + break; > + } > + > + fsm->otg->state = new_state; > +} > + ... ...