From patchwork Wed Jan 4 13:22:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manish Narani X-Patchwork-Id: 9497829 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 398D7606A9 for ; Wed, 4 Jan 2017 21:22:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2E8421FF15 for ; Wed, 4 Jan 2017 21:22:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2162828339; Wed, 4 Jan 2017 21:22:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED,RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7D1BE2824F for ; Wed, 4 Jan 2017 21:22:39 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1cOszl-0007Mg-DZ; Wed, 04 Jan 2017 21:21:17 +0000 Received: from casper.infradead.org ([2001:770:15f::2]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1cOsqJ-0005NE-N2 for linux-arm-kernel@bombadil.infradead.org; Wed, 04 Jan 2017 21:11:32 +0000 Received: from mail-bl2nam02on0061.outbound.protection.outlook.com ([104.47.38.61] helo=NAM02-BL2-obe.outbound.protection.outlook.com) by casper.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1cOlXb-0007b6-99 for linux-arm-kernel@lists.infradead.org; Wed, 04 Jan 2017 13:23:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=sJWl/JMZzaqR1NvJjzNnO6vk8m+cAYy/tWWInb4Pkwk=; b=YR9uHzADhIGyWXYEInolEVG94B2HTw3uaB+uVM4h2n98t7MIpa0/BIhQEINQDCoq+5cuSev1s2wztY80Rkhiapum5VHHXyZVt4Exw46wD/FX8qU/VxMQgQO+D4G/dv7ojs21rx256W8nWizrzDhIilX8fkGaWyEyYwFDlrk7ecY= Received: from BY1PR0201CA0017.namprd02.prod.outlook.com (10.160.191.155) by BY2PR02MB201.namprd02.prod.outlook.com (10.242.232.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.817.10; Wed, 4 Jan 2017 13:23:17 +0000 Received: from SN1NAM02FT025.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e44::209) by BY1PR0201CA0017.outlook.office365.com (2a01:111:e400:4814::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.817.10 via Frontend Transport; Wed, 4 Jan 2017 13:23:17 +0000 Authentication-Results: spf=pass (sender IP is 149.199.60.100) smtp.mailfrom=xilinx.com; apm.com; dkim=none (message not signed) header.d=none;apm.com; dmarc=bestguesspass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.60.100 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.100; helo=xsj-pvapsmtpgw02; Received: from xsj-pvapsmtpgw02 (149.199.60.100) by SN1NAM02FT025.mail.protection.outlook.com (10.152.72.87) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.803.8 via Frontend Transport; Wed, 4 Jan 2017 13:23:17 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66]:36919 helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw02 with esmtp (Exim 4.63) (envelope-from ) id 1cOlX9-00005A-S1; Wed, 04 Jan 2017 05:23:16 -0800 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1cOlX9-0007f7-Nq; Wed, 04 Jan 2017 05:23:15 -0800 Received: from [172.23.64.139] (helo=xhd-lin64re116.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1cOlX3-0007ct-H5; Wed, 04 Jan 2017 05:23:09 -0800 Received: by xhd-lin64re116.xilinx.com (Postfix, from userid 16987) id B7172302685; Wed, 4 Jan 2017 18:53:08 +0530 (IST) From: Manish Narani To: , , , , , , , , , , , , , , , , , , Subject: [RFC PATCH] usb: dwc3: gadget: add support for OTG in gadget framework Date: Wed, 4 Jan 2017 18:52:58 +0530 Message-ID: <1483536181-22356-4-git-send-email-mnarani@xilinx.com> X-Mailer: git-send-email 2.1.1 In-Reply-To: <1483536181-22356-1-git-send-email-mnarani@xilinx.com> References: <1483536181-22356-1-git-send-email-mnarani@xilinx.com> X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.0.0.1202-22802.006 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.100; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(39850400002)(39410400002)(39840400002)(39450400003)(39860400002)(2980300002)(438002)(199003)(189002)(106466001)(81166006)(2906002)(90966002)(48376002)(54906002)(47776003)(4326007)(46386002)(45336002)(50466002)(5003940100001)(103686003)(5660300001)(6666003)(107886002)(76176999)(50986999)(189998001)(8676002)(8936002)(38730400001)(63266004)(7416002)(42186005)(33646002)(92566002)(2950100002)(626004)(36386004)(36756003)(575784001)(2201001)(50226002)(305945005)(4001430100002)(52956003)(5001770100001)(356003)(81156014)(107986001)(921003)(83996005)(5001870100001)(2101003)(1121003); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR02MB201; H:xsj-pvapsmtpgw02; FPR:; SPF:Pass; PTR:xapps1.xilinx.com,unknown-60-100.xilinx.com; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02FT025; 1:OJvFLBotcUqZ9CuOcMvldlQQBehNEhOkyhMyGsF7Ux6EspLVlb6WjPCJwvYe4s7olMUVJV2iZ0W+A/kehSQ6N4q3h0xCHi8UuOA3i8yBV7pZJGaQbIUQ0hwGcQ9EqJcmaNjMB2xHsUeXZdK/XJVE56FAbeZhdrok8VjL0gEOjC11TKGiAFPE2pTTSW9TKTvAgkgSA5SGJ6EOhaIe8Z+BmUNr0/dusr8fhWVgtbQfcVYFS+MMK1I8QTWVIluY2MnHqFvHjUsW9k/H8zU+WUj60TUjwi1qhGf+wVgDjimmuwsnT+DI2wXj4A+LImJQRS7S31lRGbE889agmYD+j2ac1iF/40UFw+qVCdsvtNMca5FlmstJC/Y1R/zi+e/zZFCCVK458M+guYMeYsHyrVwiq2xjhaO4bMva7+qSH4iBNXOQyZJKdS5OfxOlCuIy+c8ycI21izDco01tv6ZYHUi2PvWJEarBTdJuCDcBZI4Cvw+8+nWAeAdt18GSdmReN66ET+wHMqj47mwlfmANnVp3OHIoAzoOg+N7A9zZz6E8iidPSyA6eIYWxpK8Lf9AJ8Thnio864Qq3Wv4aT0hAim6SQkLXU1/rYnk4/YnE3S2/ptFzbaGp7m3oXh89bzPzlNadGQG+097etUfUpHsGurtqg== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: d53292fb-2f58-4d0e-85bd-08d434a4d86d X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(8251501002); SRVR:BY2PR02MB201; X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB201; 3:1tCtWlMcDnj9nyOoqt9Ter18fgEDQoQyh1eCN8ECTend/xfvdjTX9ADlFOVr8gX0RFTQ0XmNGSdSIGgcWhCRUkYBIWzuJ3R0ornu0BG0NOh7wfVQby2wpUm0axtDXmli0V6Dp0vecJUtRtcgMDgcfb0rUQ4YAwJRUWeiapWsO5Bl6g6cmM1eLwdYv4IP77a+PnL7u7uoVf9C88xitgn1w+cML3UxSATU+vbhvYTQYUCis8/EkJciy+pDqmzVW39U395dUluSXfN7tw0Xb9Jt6wOhRt1PseOAPV5+IQnvVrnDNKJXzR8IjUMgrp8on9+OE4xp8GShCzkOU6wIJd+voLYfNpgE2hGIdyXxx06BM1zHHL5E5F5qvPjvIGycagsM/3tF0w0I+DJfA5scqh16Ug== X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB201; 25:aZwCtkyYRRIh9OFLRXIiY+SCOnK+eydCY/Ic8PwGpNAtZ32mQ7HJv+6543wjiQ+JI19tp7TuEGjWMPOjH+KXujAJ5v/GM+yhjA0TPMaemSzYazZk5c2tUiofHjw0ydSWS6sWnQj4KIo8rBHbRV2kPzRkgR7G6klfYyOi1yQch7xyb89PQRqcNDVXvhqexGJL0PLrMWS2abHSZ0mPnlb4bspFFu3XezCJWyIP2WpNcExVounaZIqsL7Pc9MlaXUrN/cto8aynawAjBO+6lDpGu7+kbZrjvtBmSw4LDtaXl/zwS62bcIoGPmTdgYQ57r82X6YBRheKpghmGTPzJRRXcgo4LEf/rdR3u3XhI1OC9JaNZMfmx01G+wVnJulvOL1Z+mdOk7a662DQVSdpYknI0oT0Sqk3XVt79e1gkbs7+Ml1Eh+uiWo8OBFvt2Rbr9SpYIkC1OdloRqmNrQSjvtLvVZXUtGVQUVn7WDg6lOntY72VYxR2YJ1eOIWJI6xEBUdnF7Sg0gKIlS1EllDTAniZVYlOVo3haEREispIV4l3tNIX4YqgwHYKlc1yxFz0lipKH6QvqYhltubiR9cR9zbc3uN1/KPn2ejlMBRBWfdSy0iROBtkR4rGTsVyCwrVBD0lcyyG4aSv2Yn6IxQbpvaOuaxmFMpb08sQQ80al+hYtzoplnm/FxqHWuD0JaQjhGFgM4umpRxL7WsqFtUqAYDvGTnMWzfRzvxHiriWkDM2wG/tZLFY3w1bQlw8NItMwrQKjsgZcKOxdqVg6cx7KEkp0b3qgHeYpif5ZQFAOeWh/afD8P3GnL6137KHqO2PuO9 X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB201; 31:HP9+XTG9L5NvGNOs43D6/6fqKpyCvWrJlt2qvyVBDGH30oli7/GPMsm68GkOeKWWAACXGHXsxGH2bTPfQgXlyHgebcWAccIJP9haSTq53Vby4XseOq0q5Bs/c69mLwLUOGhHoKXI8+uKITntkhLjwePWgKqPCd2TGRsz8wyY+VASFpSbjD+9UNlL+28jCDlXyXLvG49TtbX91CDQRyodzF0hRK9i+k0VOe5+yZKpbFDtRrcQD4SUFflCcCPuJkvrjQCVOyubdhyvUPu8kIGvpg==; 20:Wm8H2hml1KbwII4clUIdS20MxFSNIeE/g8oYETIqwncY4cwblauSpd8a4feQSxSkyUjootAK+irrLRS93HKLXFwqNBvvwnMGhOzqtFTeyLXH3rQeOALU9eFKSPEoyj7jJjx0bA02zfrDCr8l6ehVEuunxomBigk/E+UqfSchqo8uU0CoG1SOWXfYE4r5QCO/9FFe8IFI/EN3TVrwP/3GtqxYMY2uZeJJEW6eJQHg9zWECT9yDff7YTFdgflR+uuigSmk+WNEHUN97+tmibyd6tE0SPDhcIcJhS7Wb2YkBcxR20rLe5eGLXTRkEr7Ws/iAaJpF2cmoLduse39yz7ditnFq7qn4HPv3nUfcVS3FGCzo+Nhs1Bux9GCHG5J2ArXE8ColjwiIu4+KMqqeiUdA+Nr8PXC3+rHnf0i3xktiVpSep9DZEcX9anKu1FYOwEUXSHZlibqooAIOM9e5rQD/k677s6nrw27IekdScOyyBRXcmfSmg+sIaEmJWyvEJi8 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(13023025)(13024025)(13015025)(13017025)(13018025)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041248)(20161123555025)(20161123560025)(20161123558021)(20161123564025)(20161123562025)(6072148); SRVR:BY2PR02MB201; BCL:0; PCL:0; RULEID:; SRVR:BY2PR02MB201; X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB201; 4:ZOVjBjJlKn5gXRUSA4ZeaX6ecF1Z1fBLR9MUu6o5DrmA3bVMXf/zGbG0XiR7qHx4K9uhwKMuOJE+GtGOxmTQjDB+7pddMQTlFZTbgpZ3D6OP/2/u0tKdg8xJquQuWfMQfOyTcJAP0mJFEFGDwpVd11ufQqppFAO2o69kNge2yv7tROSsZ8hR5DPyujhJ5tnu24LMURFolishsRMY95hytWv7yMcwZAhBv4e61N8J9rXAuruUGGu7rR5J8EcKodYLF0aW33bOvzi3HlGK2ayZCkj/3qfj5Np2HDm8YkcelguZI9R9acl1G1D5pbPn+Atc+0VIL63cSFihAbE6DmfdzB/3DC4Nq5aMwO7otiKYGN3BFWk+DcTfPhLVrpP6lMGiAHsmVE+Q2PVbASsA//hFDkb40W0UrOvx7iv3L7JcwzJVRsPo8U+OB1VHF3xfc5df9N2mGx4JQ6qnih1e3iUfQGiwsvkgFJE8LVR2NOE4EKNZ37R1cuXzWUX5rfevqD2hLB1QmTIX5zeMkUYTwo7aLePVBD6+Rd4obz95Xu0e5vFMtorebDrfTJ3baqpmyq/L8C+EsIc9WaMxbeppc28UglXeR1nwgv5En6a6KvhGI90qah4Hfa1p6r1DRYHcxq1w1s1arGvRY0OUf2Lm3cJP+WWkfjJRCfFrdIx5tF8qptYralf783sbSJuESc1cvgEbWhGqK9fbpODuQo8d1ZujdGZkTvXaxjK3IiWHWaG6Ok6u5q2UlB/+CmD0l/yFZ9AVcQxv+pt6irPUp9OP3/Vw2g== X-Forefront-PRVS: 0177904E6B X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR02MB201; 23:TKeidehDA7iNCjQtZnomUQdQ8zxmYRBZN1JF1Pwa2J?= =?us-ascii?Q?tRjKEQ0/SnPLdcDhpllriPOiUV5WHGpw1hUsTMHQF3EYK9f1Vo9DWbDOiGAz?= =?us-ascii?Q?HmXW+KQWy9Ogb8ceib7WAoG+wUrZfUJHjHplyT+4QPk2+enKW1G6AR1M5ksH?= =?us-ascii?Q?kJkUgRlsNKRGF3kV8LC8nqQrSUyC9WttCdmEPsWrVBGNwDE93HK7/aEItSaK?= =?us-ascii?Q?zuzEnkv5kIdFVN4fD9bvHGhwAKOU4ITL/ornUCHTkC/sCbLE4cm26NRCfqzc?= =?us-ascii?Q?WmC3ghk6he75wuHyS8D1oK2qRFPfL8ag/NF5oMEyJHefSkdh3TQSRQiTMIie?= =?us-ascii?Q?U7nkUErqhf2BYKN/VKZI8R6vBbHtHo3ac0gioHEOcuGPNQUHI2yc+F/By+Bx?= =?us-ascii?Q?Gdko+W82jlWFUR36q+rmR6fIRDB8M8+fngEwV2QvabRAp9wf5ivB414nIylv?= =?us-ascii?Q?+QpxOmod8p3BpkwfmLQL6p961J1ELrRZiFM2WweE3Ikfp01X49qAcL/EiNmd?= =?us-ascii?Q?e26/WUs1rfVlvRxPGZEovbdZ2jUg+tOmStLVIVSPT5tMEglY9jPexdj32GY/?= =?us-ascii?Q?sO4LC6PYCTYZywBZ3rwIeEXvHprH1zSqtdgvETD5nwhXUPRTCoPiqBaogFXR?= =?us-ascii?Q?+kZOWRViHMs7FxLtaSxb6RY5/czj9/xiyaPgBdWndQHmg4uy1Ikgk0GtEXXU?= =?us-ascii?Q?USnfDn5ao6Lu8U24Vrk+rAWibdRFRjIQ6BvdItCKZu/6zqYSjCTgR0Fzx9JI?= =?us-ascii?Q?slnjR2tOb1kJnqk00DLuiqsx6vSh7un7rCWzrCLE/qWa9bDNzpdS4NqiblO3?= =?us-ascii?Q?AKR/PVOCqwcp8pMajyTNXnt0L4+7fwPTTXgdwbWPaLUYnVqCkxoB+ncXN19w?= =?us-ascii?Q?gjRuvTK4SGtJhR2jSwzQ8HZOC/G/DOzoTuRAsEZB4mkYWfJabxKXJ7AL0Wqz?= =?us-ascii?Q?7pW4sDTG/c/32EPlEdNt5htPh85R0ooSBxVMn1qmLuHDYbalNzTJMrFbIBU4?= =?us-ascii?Q?sx9O8jU0XW3ofLQPNWKO83OwDfAv6O858MWSn26YJFF2CbwfdCQZJzcvQ2KC?= =?us-ascii?Q?8+xqLrybw09jlSpumQcjORpfBcLJrq0SVEKq8IRbxcmsQ2xBhaMlBUWg4wqh?= =?us-ascii?Q?GIrlfML9RtaBVen/K0xSpViswBsn/4+SMmgVZKKzfXrvQUlqb2aX5TYInuH+?= =?us-ascii?Q?BgMEV9fqJjK2dwzCLlPAP79eDoH4mqQlI2m/GjOk8ncg4/RO4T+oq/FPL9dm?= =?us-ascii?Q?F0bxCaDDzpkuPWGGt00i08d/0yt1gaOYGKVy/y8fBLSfzs+9anIGXUNo/zPa?= =?us-ascii?Q?vGpPBGiWvvGKJBGYQ8iC67fBAov6Sgw/XjbY002SH851DyeP8hH0Sm8+4MuT?= =?us-ascii?Q?+o5maFNK4GOraDXpyvDnRhfLDcl2aTfbyej2O6ULLc1BKx?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB201; 6:z7azRCh+BkzBuGmshzbeGFwCMmkmHzF6yxIzjJDdMC/CL4XiJyjzCwl9pWJIx+UdSAwMwijTiuHTY7oeM2Z63N8uwQOQgWAjToAqRUs2IiEbUvrGsL73YruUNEwdP/NKKN9Q/Ka5gyBriDwuDWeXfvi4s/WUeTCxT2UfYfe76vIq4VoFlxR5VZPPB5oKUbDbl5pDBB0/FnCgzMmeLPkyYJPUjMtqNaYf5qISyuG3yHT6DdOSfFHkE7qm5CoI29C1LXS8yoYRnHpw39B7aquryV5wvh4oZ8mENeQE9ZoKPsfSZR2iFJn8vVf9xTlxscIzsjrh4cf8zx0GZsSubg2BSkFFRzKFGy0zbLKpP9Fl9Yac4jMPTfGMQFS55fDeiOGY85kD75XUmpWNtWHkuSUTKpUDZEDfkZcQmuM/fPAxeLf4Tajxpr1qNTcs7B4EpTY/1c9uaNDEbGTMnJ9UBeKmyQ==; 5:IFhwLkYJmaqfwtVGUS2ko0Qe97fk24iFJ5suTF7PmymeN/v2X/7pqdKbw+wYzCREzC6BadJ3t+b2ZqvvRfNfrLE3wdsC3OIFUJVTKky/cacMj3ZCIJpF0hTKUSjp4cuW3F5tefmYtIVZWkmHUR2haPaOEoMTGRan0ousycn/MeY=; 24:xVlmCqu2rKyCrQP1q+MDlBb67TJGN35tNWzDH5qe3MIrmTGuda+h2UwEu3WwYPe6lXTy1I+VBUSQg4DoH2rYW76I1lq0/Jp/PbvNJ7zrBaQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB201; 7:QwRcJQH1llOosvh3aLDhKNMwM2sDhJvIAuC3GVAzcIxkQqGuRXDRZvt7BMacTYL4GOcguC1w/bCeFhF+PsFiAemz2aS/SD3CmNHJZMSpi8ra6wijv7uSyX1VajMVG7uWwvf37PgUoNLK2Uwz50UXRLAoK8nwh6YdZcPWh8xLoqRYu9aqaLMSxJ4MUCCtAujUa32s4uoiPGhzTuPxpzAApeOgBBmNtRTeLVZSC+mRbHBszS8UgUFdE6OgFWcLqobTWVP4DrENejakfp8aqufClmy3aCo+z+dMC9ceRYYO3jtjutc6eK5GpMKP5dQtA07DEjv8CjBiSA6xbODShIArogPqpHFTJZc7k5Mm3FUM1MqACGxGtojx5wCGWXWYmaevqojxI5nmPNiXhNMM9mSCGarwjIX+7JOifC+BxMGD136x8fJ1HktQBPuGL6VQV6JuM0WRzNwc888SBwDHwb4k2w== X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jan 2017 13:23:17.0482 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.60.100]; Helo=[xsj-pvapsmtpgw02] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR02MB201 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170104_132343_631167_60FB9B7F X-CRM114-Status: GOOD ( 18.20 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: anuragku@xilinx.com, anirudh@xilinx.com Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP This patch adds support for OTG in DWC3 gadget framework. This also adds support for HNP polling by host while in OTG mode. Modifications in couple of functions to make it in sync with OTG driver while keeping its original functionality intact. Signed-off-by: Manish Narani --- drivers/usb/dwc3/ep0.c | 49 +++++++++++++++++++++++--- drivers/usb/dwc3/gadget.c | 87 +++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 116 insertions(+), 20 deletions(-) diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index 4878d18..aa78c1b 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -334,6 +334,8 @@ static int dwc3_ep0_handle_status(struct dwc3 *dwc, usb_status |= 1 << USB_DEV_STAT_U2_ENABLED; } + usb_status |= dwc->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP; + break; case USB_RECIP_INTERFACE: @@ -448,11 +450,45 @@ static int dwc3_ep0_handle_device(struct dwc3 *dwc, switch (wValue) { case USB_DEVICE_REMOTE_WAKEUP: + if (set) + dwc->remote_wakeup = 1; + else + dwc->remote_wakeup = 0; break; - /* - * 9.4.1 says only only for SS, in AddressState only for - * default control pipe - */ + case USB_DEVICE_B_HNP_ENABLE: + dev_dbg(dwc->dev, + "SET_FEATURE: USB_DEVICE_B_HNP_ENABLE\n"); + if (set && dwc->gadget.is_otg) { + if (dwc->gadget.host_request_flag) { + struct usb_phy *phy = + usb_get_phy(USB_PHY_TYPE_USB3); + + dwc->gadget.b_hnp_enable = 0; + dwc->gadget.host_request_flag = 0; + otg_start_hnp(phy->otg); + usb_put_phy(phy); + } else { + dwc->gadget.b_hnp_enable = 1; + } + } else + return -EINVAL; + break; + + case USB_DEVICE_A_HNP_SUPPORT: + /* RH port supports HNP */ + dev_dbg(dwc->dev, + "SET_FEATURE: USB_DEVICE_A_HNP_SUPPORT\n"); + break; + + case USB_DEVICE_A_ALT_HNP_SUPPORT: + /* other RH port does */ + dev_dbg(dwc->dev, + "SET_FEATURE: USB_DEVICE_A_ALT_HNP_SUPPORT\n"); + break; + /* + * 9.4.1 says only only for SS, in AddressState only for + * default control pipe + */ case USB_DEVICE_U1_ENABLE: ret = dwc3_ep0_handle_u1(dwc, state, set); break; @@ -759,7 +795,10 @@ static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) switch (ctrl->bRequest) { case USB_REQ_GET_STATUS: - ret = dwc3_ep0_handle_status(dwc, ctrl); + if (le16_to_cpu(ctrl->wIndex) == OTG_STS_SELECTOR) + ret = dwc3_ep0_delegate_req(dwc, ctrl); + else + ret = dwc3_ep0_handle_status(dwc, ctrl); break; case USB_REQ_CLEAR_FEATURE: ret = dwc3_ep0_handle_feature(dwc, ctrl, 0); diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 6785595..3b0b771 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -34,6 +34,7 @@ #include "core.h" #include "gadget.h" #include "io.h" +#include "otg.h" /** * dwc3_gadget_set_test_mode - Enables USB2 Test Modes @@ -1792,25 +1793,51 @@ static int dwc3_gadget_start(struct usb_gadget *g, int ret = 0; int irq; - irq = dwc->irq_gadget; - ret = request_threaded_irq(irq, dwc3_interrupt, dwc3_thread_interrupt, - IRQF_SHARED, "dwc3", dwc->ev_buf); - if (ret) { - dev_err(dwc->dev, "failed to request irq #%d --> %d\n", - irq, ret); - goto err0; - } - spin_lock_irqsave(&dwc->lock, flags); if (dwc->gadget_driver) { dev_err(dwc->dev, "%s is already bound to %s\n", dwc->gadget.name, dwc->gadget_driver->driver.name); ret = -EBUSY; - goto err1; + goto err0; } - dwc->gadget_driver = driver; + if (g->is_otg) { + static struct usb_gadget_driver *prev_driver; + /* There are two instances where OTG functionality is enabled : + * 1. This function will be called from OTG driver to start the + * gadget + * 2. This function will be called by the Linux Class Driver to + * start the gadget + * Below code will keep synchronization between these calls. The + * "driver" argument will be NULL when it is called from the OTG + * driver, so we are maintaning a global variable "prev_driver" + * to assign value of argument "driver" (from class driver) to + * dwc->gadget_driver when it is called from OTG. + */ + if (driver) { + prev_driver = driver; + if (dwc->otg) { + struct dwc3_otg *otg = dwc->otg; + + if ((otg->host_started || + (!otg->peripheral_started))) + goto err0; + } + dwc->gadget_driver = driver; + } else + dwc->gadget_driver = prev_driver; + } else + dwc->gadget_driver = driver; + + irq = dwc->irq_gadget; + ret = request_threaded_irq(irq, dwc3_interrupt, dwc3_thread_interrupt, + IRQF_SHARED, "dwc3", dwc->ev_buf); + if (ret) { + dev_err(dwc->dev, "failed to request irq #%d --> %d\n", + irq, ret); + goto err0; + } if (pm_runtime_active(dwc->dev)) __dwc3_gadget_start(dwc); @@ -1819,11 +1846,9 @@ static int dwc3_gadget_start(struct usb_gadget *g, return 0; -err1: - spin_unlock_irqrestore(&dwc->lock, flags); - free_irq(irq, dwc); - err0: + dwc->gadget_driver = NULL; + spin_unlock_irqrestore(&dwc->lock, flags); return ret; } @@ -2977,6 +3002,18 @@ int dwc3_gadget_init(struct dwc3 *dwc) dwc->irq_gadget = irq; + if (dwc->dr_mode == USB_DR_MODE_OTG) { + struct usb_phy *phy; + /* Switch otg to peripheral mode */ + phy = usb_get_phy(USB_PHY_TYPE_USB3); + if (!IS_ERR(phy)) { + if (phy && phy->otg) + otg_set_peripheral(phy->otg, + (struct usb_gadget *)(long)1); + usb_put_phy(phy); + } + } + dwc->ctrl_req = dma_alloc_coherent(dwc->sysdev, sizeof(*dwc->ctrl_req), &dwc->ctrl_req_addr, GFP_KERNEL); if (!dwc->ctrl_req) { @@ -3066,6 +3103,26 @@ int dwc3_gadget_init(struct dwc3 *dwc) goto err5; } + if (dwc->dr_mode == USB_DR_MODE_OTG) { + struct usb_phy *phy; + + phy = usb_get_phy(USB_PHY_TYPE_USB3); + if (!IS_ERR(phy)) { + if (phy && phy->otg) { + ret = otg_set_peripheral(phy->otg, + &dwc->gadget); + if (ret) { + usb_put_phy(phy); + phy = NULL; + goto err5; + } + } else { + usb_put_phy(phy); + phy = NULL; + } + } + } + return 0; err5: