From patchwork Wed Mar 29 11:42:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yoshihiro Shimoda X-Patchwork-Id: 9651397 X-Patchwork-Delegate: geert@linux-m68k.org 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 78222602BE for ; Wed, 29 Mar 2017 11:45:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 66B63281F9 for ; Wed, 29 Mar 2017 11:45:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5B9BC2846C; Wed, 29 Mar 2017 11:45:35 +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=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E272A28304 for ; Wed, 29 Mar 2017 11:45:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756001AbdC2Lp1 (ORCPT ); Wed, 29 Mar 2017 07:45:27 -0400 Received: from relmlor4.renesas.com ([210.160.252.174]:26248 "EHLO relmlie3.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755940AbdC2LpM (ORCPT ); Wed, 29 Mar 2017 07:45:12 -0400 Received: from unknown (HELO relmlir3.idc.renesas.com) ([10.200.68.153]) by relmlie3.idc.renesas.com with ESMTP; 29 Mar 2017 20:45:10 +0900 Received: from relmlac2.idc.renesas.com (relmlac2.idc.renesas.com [10.200.69.22]) by relmlir3.idc.renesas.com (Postfix) with ESMTP id 554A4717AC; Wed, 29 Mar 2017 20:45:10 +0900 (JST) Received: by relmlac2.idc.renesas.com (Postfix, from userid 0) id 3F39928076; Wed, 29 Mar 2017 20:45:10 +0900 (JST) Received: from relmlac2.idc.renesas.com (localhost [127.0.0.1]) by relmlac2.idc.renesas.com (Postfix) with ESMTP id 3BECE28070; Wed, 29 Mar 2017 20:45:10 +0900 (JST) Received: from relmlii2.idc.renesas.com [10.200.68.66] by relmlac2.idc.renesas.com with ESMTP id WAH05665; Wed, 29 Mar 2017 20:45:10 +0900 X-IronPort-AV: E=Sophos;i="5.36,241,1486393200"; d="scan'208";a="238967670" Received: from mail-pu1apc01lp0020.outbound.protection.outlook.com (HELO APC01-PU1-obe.outbound.protection.outlook.com) ([65.55.88.20]) by relmlii2.idc.renesas.com with ESMTP/TLS/AES256-SHA256; 29 Mar 2017 20:45:09 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=/o8CZVgM/772cNDcSIA38g5aKniineaVmZvrU4/D5ow=; b=SqkrSsZpMawYeem6btQvEIz3IsQrKueawk37j60AKJAAY/QyM+fQ2O7DlII/EexFjcmmZbp5dYQHyWQThcqp0wy1kAIOayUsNoNVZCogBn6GRZ12QBnYxW2yTiQVOk/TINqq2UMjZx/xVlKvghFigBEeAoRzSMI/eHU6aEypMJY= Authentication-Results: kernel.org; dkim=none (message not signed) header.d=none; kernel.org; dmarc=none action=none header.from=renesas.com; Received: from localhost.localdomain (211.11.155.144) by SG2PR06MB1694.apcprd06.prod.outlook.com (10.167.82.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.991.14; Wed, 29 Mar 2017 11:45:06 +0000 From: Yoshihiro Shimoda To: CC: , , , Yoshihiro Shimoda Subject: [PATCH v2 2/3] usb: gadget: udc: renesas_usb3: add extcon support Date: Wed, 29 Mar 2017 20:42:53 +0900 Message-ID: <1490787774-5796-3-git-send-email-yoshihiro.shimoda.uh@renesas.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1490787774-5796-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> References: <1490787774-5796-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> MIME-Version: 1.0 X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: TYXPR01CA0003.jpnprd01.prod.outlook.com (10.168.40.13) To SG2PR06MB1694.apcprd06.prod.outlook.com (10.167.82.136) X-MS-Office365-Filtering-Correlation-Id: d54781b4-d5c9-4fab-1e47-08d476990c28 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(201703131423075)(201703031133081); SRVR:SG2PR06MB1694; X-Microsoft-Exchange-Diagnostics: 1; SG2PR06MB1694; 3:EupRadRAFcA6WgRb3udKzdMV9vWf1X2EXFk3yv9iqMn6t6rMn0IHVd7B5TSc8z63s999vhUMxLMhJ296srSj8sDv3P56zJC/z9kUdpiVWN1EpRoYzADe7Z8l1mZwct5fuum23k4zkyZePGYuB+1/X7Fd6x0SukwKGKHbw4Y8MZSM0fE5JlkviJUra1ylz4bo4nRJGNomk4rED18qixVIqAJ4c0RM6bfq5gc9kXnR/QEmwNvXdpChUP8GdZ7TtWZXqxFAFPFUgth/DWRMJVWC8Lz9O+plpGJ2/wAWslG3ZB8n/tvUdORJQ82QJpf+crGbTRk3cl3SklqDhP9rYMAMKHoFb7yE13HqjllQaNECG8Y=; 25:ASzUbC2j253oPNRsBWwGkMaKYapyf8Q7DC0RByqsGmZhTCZbxfwm2SUF3s643ILlosbCmQ0dJnEijft+N0nV43rOBy+LT3hi4tQ3O+6LYnS3F+WezM7Gf8bRY2jNfCqS6S9YIMs5AwUn32JznRiaE55NOF2JsiwLddeShLoo8nS8tWOGbW3ADTqFGTqS2qtzYBEGYvepdeiIVYrbcclMnLM4o1S1vJabfQ/jXR5kZ/sylIpadG7z0wMPdaLf0Pac8vOykI/X51U8IeabO0/TpDkGOUz29Yhl3GUiY5tQTsAQsKc4XMplvSWdHZ5XaSVaIPv+89bOFXaw1nIrCvj1e9v/jVCdDKxJ5ysr0WrAqQBOjSxU6/xnZRf63WWf9GTbdrPmXferEl1JQHJdSJr8GeVXVRTPSMdW/qYKKaBmH4SNvU+IYScbtYzVrqZzMYxHkUROtmzlqtvrMoN5ZrnSUQ== X-Microsoft-Exchange-Diagnostics: 1; SG2PR06MB1694; 31:OgBgsT1ITbCtmp2r5mKkF5rGTCBNPL0sAyrZElWnKUBPHHi20abFB2VxRJOV6DjEzqG9LRrgA0aZXj4jquyf7Qsgevx/5P3cmxkZtax4Ux8QaaTKWTZroLrT/g/ZMTV4mZMJPtrEFrgGoyOhEbBdcpPUR7vBwzKVhyQGqqhrNjwSHURtKk47R+TR3WoT6arsIPpOZJIBmBafEZe22AbMp3kHLiVofEB7yMdeHWPa0bU=; 20:7Tk1FKwcRFlzrs1oVOUY7Teu3A2MA6kW9KnfEhp1RE6sY1K/MIgPT4gM9M+QbB1Num2s1+sbt69URHjBUX2pNYzcy6/SHPgHqDShcJOOOiWnAQQKVFTJUg8Yg5cymDrbD9nHVHbDqfwmDIZK4ecEPu5M361tEjRNHOn1Izt6IsMWmMQEi6qkJM9Sfjov5iAomSNZu97Zci9yUNcmKHzhMltBoFAO9Mj3LiK1TNta7czUZaNL8C8iO79R8F9cNtW/OqEc5foRzuTS+J8CGn7riteBAR2vlNYPp5aEeehFGhW96qwMf72E+JVllmCPQUrMpmFrMcIOS1T3TY4m7awzQFeeHWdQHtsEBhF3Ge3PK0ofZ7xftJsQio3w4JTnTqxv9e7SSORbaCORds9BJ9tj1Z9UeQ9/9St+r8vuwDMW9Uq36YI4zuM6bWwefrhXghcC+pYG1e04whq5ai6bGB30l0qPcBwB8jhFo1fdt7MD5XyU42GDGwYQBD7E27/ME6Uc X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006041)(6055026)(6041248)(20161123562025)(20161123558025)(201703131423075)(201702281528075)(201703061421075)(201703061750075)(20161123560025)(20161123564025)(20161123555025)(6072148); SRVR:SG2PR06MB1694; BCL:0; PCL:0; RULEID:; SRVR:SG2PR06MB1694; X-Microsoft-Exchange-Diagnostics: 1; SG2PR06MB1694; 4:pZ+lOcDu79ElQymVdGpbO0i1BkyWBtsQnEHddWa3/gz4/5sL0j2wXpdSsxCKgZRlYkHlWpFVaSoLj71Wd2yYjsXGofgTOsCLPEhA8uXnOR2q30wfxiBTn6WUL9yIhe6BY/bzRCshRgmUP9jfKn0+GrBlabuhehsyYu9rsokOZBuuyacrM28Nanpj9m+UtbimIajHjOG5aWndVW2eIEI+DKhcLM6taPL3zpWogj6f0oz4R+4Vp5Ys9zJl2uQuDNSvC1EsXwlH4YRtul20pc3geH1FakxdQ6ycsTnXVQgUIhOkKGwmR585SGml7I6X0KwWaK56Z7Sjg94V+i/N0g4s+AIRy6CohPWQKL2jvk7QszH454mbozVFwNQ6qBpo/fgBnUwa1Xbnt6cxWGw2IBvic45s/RDpwVWr9AR55vcEkLZj+IQCnvowjHWF9vyOYOMnTWKrCOJREZ3sE9glnl8klwXWNwjCJCnoieoon3bwy09zDcI+VPMmgtgIipIAZXlEiAlsudbPYKU+WeRkXq8ve35Z5y/BS9pzv6ZvciZTSGcZuEhgJpm+qo0UamchK4KCs2U2EXJWy6Ck3RqvkhgQ0dee0iSP8d6qVc00eVSQpbLsSZhXqjMbkWPDvZD6GC8RhYynaIRRSUxM4M0EVsWvzzg3pkXBmsMqJs5xw97dDptF85UbMgF1Te+ypfay52aVMCTZ0nBQkj0a0QLt1dRRCfS7rgUtkjQPAzjnQP+vvX5Fi2SN0VqsJzqCOhU4Gam+RulAuaxTX8b8tiwMp/454P6jKChBjdn7VsHa+P/qi7A= X-Forefront-PRVS: 0261CCEEDF X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6069001)(6009001)(39860400002)(39410400002)(39850400002)(39840400002)(39400400002)(39450400003)(6506006)(6116002)(3846002)(2906002)(53936002)(6486002)(54906002)(48376002)(2950100002)(2351001)(42882006)(6916009)(5660300001)(7736002)(189998001)(305945005)(50226002)(42186005)(6512007)(6666003)(110136004)(38730400002)(76176999)(107886003)(33646002)(36756003)(47776003)(78352004)(50466002)(66066001)(8676002)(4326008)(81166006)(5003940100001)(25786009)(50986999); DIR:OUT; SFP:1102; SCL:1; SRVR:SG2PR06MB1694; H:localhost.localdomain; FPR:; SPF:None; MLV:ovrnspm; PTR:InfoNoRecords; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SG2PR06MB1694; 23:ov71LN90cCGs7hBMuyilseYqHFoA+Vlmwy0b4WN40?= =?us-ascii?Q?qzYSSzk3w6EYajii01MMVJ5a9UB+cm40W7tK5m5XEz5I/NSjZESjkbAfjHH4?= =?us-ascii?Q?yvjv0VNok0AYR7Ld/PGf5f9TvkEoPLUsLihFVm90GIIqfsKxQfb5QRMP1mMZ?= =?us-ascii?Q?UBVVmx2L4vD7njGfdTORbJdYB8c87Mkzl5Plnqms/bR1MrqGTac0hS3niW6F?= =?us-ascii?Q?W80u/7IpbiP4qVuRdxrrTvw3hObaePo0ed3AHX+NdIPT46SzpynGz5C27yKD?= =?us-ascii?Q?PJF9Rfew6tXBfKG2SNYlgtqednbyWi1oS/EKYsBFxxRZyNXUTn82XL6sOK2A?= =?us-ascii?Q?6HVRzM6IHhaWdmJ6/iLMsFgx713TkjMCjq1M9rSXmFukhKK02IVKaDglTmvI?= =?us-ascii?Q?H8LS4kd7lWbQtsg6eYkHzmZtrKKlsvENE1HYiHmIfTNou41r1/9c1AKKwMp4?= =?us-ascii?Q?EMUQDTkYO/xB9du9MM8Y9RVE9qGZfhD2U48gGlcH+iVXQrxp5AJ6trHD/9cB?= =?us-ascii?Q?uNLqybzbJaiP1RHxfMEfKCFkeaNhX3XxyC6CZ20bWGW5sRhhi+orhJ+3aT1f?= =?us-ascii?Q?GhJw5KbFHo8O2PW05K+AALYWhXxI3PO1jCREWVt4z7xcwbEyxBh4TSI9KmTO?= =?us-ascii?Q?s70ojMdxeygith7oB+3O1ANsFE4UYP1sblksPZKlbG3BdkCvsQSYBL7l8ec3?= =?us-ascii?Q?SMZzHc4EaeIqcjkdl/5UUaYuEZtbRSTjajA2rypcyZjZ5H08wgFocQP7RyPL?= =?us-ascii?Q?CJ5IxiWFICalT3DCkaA45UNfw4rWS/laG4pwwrJAUig2rWTsVd2o0Dt5/pep?= =?us-ascii?Q?S+OXJIYZC7z6fK0z1iM4o8B4J0Tch3JBWVizu5hRkWPXQzzbc8tAWAT2CbWC?= =?us-ascii?Q?yq4FAqmWbHdXywGbfLW68gW2Ifo2/B4bN3BqJxvehoXZ7TwNWIB/LnZ0IQ4j?= =?us-ascii?Q?w+cwPdkKQikTDlAhnDshwFvW/kThkFfxuQ81A6Q0nPmLhMlGHcEeqOxFYfpv?= =?us-ascii?Q?xgT3p1erej0wzDn5IeFifaoPmaTNrrHceG5KoiI1A/fZ7d1xciwxMWuILRy1?= =?us-ascii?Q?TMBlhj+gbhYtdzU9KqPzrvIPajA7LE/UIdI/RVGp5A6CtB80RJZcMydziFSK?= =?us-ascii?Q?Bo2mqwvdXxgSzWHkj+ptlDEc6q07d0b?= X-Microsoft-Exchange-Diagnostics: 1; SG2PR06MB1694; 6:4f/D8DmqrVnKGY7CLbdkXVBonq9G8BWGW2JrWUxiKm6iTJSm58m9if4fsQjOShNwFqfyXJ6nHxR3vVxbtjhl0bRdvjDWuocslzZsXwBdZOVEQE2syJuOg6687o5KRV5rkg/QQQbW5ejfDUCdv8p5iTnrnEwqZEX8FG6CrpI3r+BfUKvjJvgfMsIiujZmM+HZKzj0BDN7xLlShZKA/Az2RBCkMxX33XdAIAP1aBe4JIV7/tjXzBP+zcJKS69syJyZaWYifpKLtbBPCHt8THMdGdGbj096N/GdUs2Z+kHTjALu5/f3EGOz4oyLt98uVquEYBoP+tVPWCxrV6wL94A9Je0+j5dTSFqVUPc3DYErhZ5kUCC+ZNKwT5sVkkxN71vsoamauql3psp/QXeVhoIvbYLibhhSftt0K0Y9TP/mphs=; 5:J28itaUsnlpwmuH9T4+T+ZCyWMs3snOZHa7TGoLXttfs4Zw2px1qeiuOGOHpKVCwqpEJstZEO/4EmBHeq04PB21RKRyuS5aOawT50DZH6Dg/9Xch/SyiOwVGPGKeItXwCdP2hHQXmERqftClsRAWvw==; 24:m/s7aNObKslQHWHs0N75aHtYonTP6RexcHs61wGnM5o3bEvmdUW9VlSSev1xa5Dl+uNfu3Vh2uDXbyK/scCFFs0u8hRFdP3y0B8NRZCiwMs= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SG2PR06MB1694; 7:nEMGSXaPmrgdbYtWpGrqAosfBX/h8fQZ6uug9IfoH5zBlIKw8UTKcaDL7WpZh10jUyQjMqP4y7/1Hqhbif4p//RjWhFKhCTqPl0WPkfsRe9HQhRaj0Yrm17E8D9bNumVIAk9n7Mw8u+P2q0dw+b1tSMaDMn613GlpPrZ53vQx4+lUCxrmcFVKzWlQqshOrJ1GC0hU3kkXjKSlPFwru7OfO8WzGURzgnNieLh4HcBSTxolzSDASv2ZLVwrpg5oebKQY7t8b7Z8NqJYgyEnWvxdxIXdXllPtIva2xmNCq/xZRelLegFiAQQ1ayw2Rx49FqgOETE6NcuRB+Ued1RDkgNw==; 20:cdXA9icSEsPDZIY+now6oAHIYqvqQ5Ndl/MgYRqTO/O3si9tAV0BW//1J4hpkV69CnFbmWWhEf2y2sVUtzXdJ7SE5qm74CdALe+p1b6dVtnlUjiMMgDlz5H3xNdO9GMLiJOrjgoBEjOh6Up089iIqNoyimtuXrq25wgWJ/t/PO0= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2017 11:45:06.6627 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2PR06MB1694 Sender: linux-renesas-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-renesas-soc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch adds extcon support to see VBUS/ID signal states. Signed-off-by: Yoshihiro Shimoda --- drivers/usb/gadget/udc/Kconfig | 1 + drivers/usb/gadget/udc/renesas_usb3.c | 43 +++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/drivers/usb/gadget/udc/Kconfig b/drivers/usb/gadget/udc/Kconfig index 4b69f28..66cb00b 100644 --- a/drivers/usb/gadget/udc/Kconfig +++ b/drivers/usb/gadget/udc/Kconfig @@ -191,6 +191,7 @@ config USB_RENESAS_USBHS_UDC config USB_RENESAS_USB3 tristate 'Renesas USB3.0 Peripheral controller' depends on ARCH_RENESAS || COMPILE_TEST + depends on EXTCON help Renesas USB3.0 Peripheral controller is a USB peripheral controller that supports super, high, and full speed USB 3.0 data transfers. diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c index dbef4b8..3f04e57 100644 --- a/drivers/usb/gadget/udc/renesas_usb3.c +++ b/drivers/usb/gadget/udc/renesas_usb3.c @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -263,6 +264,8 @@ struct renesas_usb3 { struct usb_gadget gadget; struct usb_gadget_driver *driver; + struct extcon_dev *extcon; + struct work_struct extcon_work; struct renesas_usb3_ep *usb3_ep; int num_usb3_eps; @@ -275,6 +278,8 @@ struct renesas_usb3 { u8 ep0_buf[USB3_EP0_BUF_SIZE]; bool softconnect; bool workaround_for_vbus; + bool extcon_host; /* check id and set EXTCON_USB_HOST */ + bool extcon_usb; /* check vbus and set EXTCON_USB */ }; #define gadget_to_renesas_usb3(_gadget) \ @@ -338,6 +343,15 @@ static int usb3_wait(struct renesas_usb3 *usb3, u32 reg, u32 mask, return -EBUSY; } +static void renesas_usb3_extcon_work(struct work_struct *work) +{ + struct renesas_usb3 *usb3 = container_of(work, struct renesas_usb3, + extcon_work); + + extcon_set_state_sync(usb3->extcon, EXTCON_USB_HOST, usb3->extcon_host); + extcon_set_state_sync(usb3->extcon, EXTCON_USB, usb3->extcon_usb); +} + static void usb3_enable_irq_1(struct renesas_usb3 *usb3, u32 bits) { usb3_set_bit(usb3, bits, USB3_USB_INT_ENA_1); @@ -537,10 +551,14 @@ static void usb3_check_vbus(struct renesas_usb3 *usb3) if (usb3->workaround_for_vbus) { usb3_connect(usb3); } else { - if (usb3_read(usb3, USB3_USB_STA) & USB_STA_VBUS_STA) + usb3->extcon_usb = !!(usb3_read(usb3, USB3_USB_STA) & + USB_STA_VBUS_STA); + if (usb3->extcon_usb) usb3_connect(usb3); else usb3_disconnect(usb3); + + schedule_work(&usb3->extcon_work); } } @@ -563,10 +581,14 @@ static bool usb3_is_a_device(struct renesas_usb3 *usb3) static void usb3_check_id(struct renesas_usb3 *usb3) { - if (usb3_is_a_device(usb3)) + usb3->extcon_host = usb3_is_a_device(usb3); + + if (usb3->extcon_host) usb3_mode_a_host(usb3); else usb3_mode_b_peri(usb3); + + schedule_work(&usb3->extcon_work); } static void renesas_usb3_init_controller(struct renesas_usb3 *usb3) @@ -1947,6 +1969,12 @@ static void renesas_usb3_init_ram(struct renesas_usb3 *usb3, struct device *dev, }; MODULE_DEVICE_TABLE(of, usb3_of_match); +static const unsigned int renesas_usb3_cable[] = { + EXTCON_USB, + EXTCON_USB_HOST, + EXTCON_NONE, +}; + static int renesas_usb3_probe(struct platform_device *pdev) { struct renesas_usb3 *usb3; @@ -1990,6 +2018,17 @@ static int renesas_usb3_probe(struct platform_device *pdev) if (ret < 0) return ret; + INIT_WORK(&usb3->extcon_work, renesas_usb3_extcon_work); + usb3->extcon = devm_extcon_dev_allocate(&pdev->dev, renesas_usb3_cable); + if (IS_ERR(usb3->extcon)) + return PTR_ERR(usb3->extcon); + + ret = devm_extcon_dev_register(&pdev->dev, usb3->extcon); + if (ret < 0) { + dev_err(&pdev->dev, "Failed to register extcon\n"); + return ret; + } + /* for ep0 handling */ usb3->ep0_req = __renesas_usb3_ep_alloc_request(GFP_KERNEL); if (!usb3->ep0_req)