From patchwork Thu Mar 30 02:16:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yoshihiro Shimoda X-Patchwork-Id: 9652863 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 84D3760350 for ; Thu, 30 Mar 2017 02:18:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 75F622856E for ; Thu, 30 Mar 2017 02:18:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6ACBB28579; Thu, 30 Mar 2017 02:18:33 +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 E62E528577 for ; Thu, 30 Mar 2017 02:18:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753775AbdC3CS1 (ORCPT ); Wed, 29 Mar 2017 22:18:27 -0400 Received: from relmlor3.renesas.com ([210.160.252.173]:45827 "EHLO relmlie2.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753284AbdC3CSY (ORCPT ); Wed, 29 Mar 2017 22:18:24 -0400 Received: from unknown (HELO relmlir4.idc.renesas.com) ([10.200.68.154]) by relmlie2.idc.renesas.com with ESMTP; 30 Mar 2017 11:18:21 +0900 Received: from relmlac2.idc.renesas.com (relmlac2.idc.renesas.com [10.200.69.22]) by relmlir4.idc.renesas.com (Postfix) with ESMTP id 507D33DDF8; Thu, 30 Mar 2017 11:18:21 +0900 (JST) Received: by relmlac2.idc.renesas.com (Postfix, from userid 0) id 44E4128076; Thu, 30 Mar 2017 11:18:21 +0900 (JST) Received: from relmlac2.idc.renesas.com (localhost [127.0.0.1]) by relmlac2.idc.renesas.com (Postfix) with ESMTP id 38F6128070; Thu, 30 Mar 2017 11:18:21 +0900 (JST) Received: from relmlii2.idc.renesas.com [10.200.68.66] by relmlac2.idc.renesas.com with ESMTP id MAG04671; Thu, 30 Mar 2017 11:18:21 +0900 X-IronPort-AV: E=Sophos;i="5.36,244,1486393200"; d="scan'208";a="239032493" Received: from mail-sg2apc01lp0246.outbound.protection.outlook.com (HELO APC01-SG2-obe.outbound.protection.outlook.com) ([65.55.88.246]) by relmlii2.idc.renesas.com with ESMTP/TLS/AES256-SHA256; 30 Mar 2017 11:18:20 +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=KRBLCC0RSGSNn/fr//r6h8lvyo8Cnf7zRYwo3ASbiGo=; b=n3SDDD03syN1Aih4Uk0LmjP5laC+TsCYF0JIvYjqOzxy6FJPAKqNchT8EOaSAvSqwXNBBytgJMcpvrlIZ2XBTE1TEMre9/4meRA1riegEpbO3v/NoO0SjVD3zgFKgh6y5A37V2mFSb/zfxZK+bWh//0oFo05MpJgaqjog4Ao9Os= 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 SG2PR06MB1693.apcprd06.prod.outlook.com (10.167.82.135) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1005.10; Thu, 30 Mar 2017 02:18:18 +0000 From: Yoshihiro Shimoda To: CC: , , , Yoshihiro Shimoda Subject: [PATCH v3 2/3] usb: gadget: udc: renesas_usb3: add extcon support Date: Thu, 30 Mar 2017 11:16:05 +0900 Message-ID: <1490840166-18449-3-git-send-email-yoshihiro.shimoda.uh@renesas.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1490840166-18449-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> References: <1490840166-18449-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> MIME-Version: 1.0 X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: TY1PR0201CA0042.apcprd02.prod.outlook.com (10.164.90.180) To SG2PR06MB1693.apcprd06.prod.outlook.com (10.167.82.135) X-MS-Office365-Filtering-Correlation-Id: 6ef9a467-dd93-4f4a-9497-08d47713081a X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(201703131423075)(201703031133081); SRVR:SG2PR06MB1693; X-Microsoft-Exchange-Diagnostics: 1; SG2PR06MB1693; 3:syRDAHdwU8lrS5OF3zYDhWLlLo2aqtb+Yq9QcQnbMphlLP/zI8Wl8msTzNp9z/2tvnyysnNH05HdKieNA3Ssa1YQ3ILgRdGUKFyJZoq34pm/W2L7fI7pff1TuN5XizPO2FOqCcv6qcTkNf5GWMnpYQM314eGmR9yjfIsJvoCVEMngEToCAxrS8D6VkTOXt1DD4aZ543bPvyruXEp3SjqbXZ72OCuf4S2RpU86aUD8Ho5zDMLWFRQgtGQdVvRvgsfThRnF94z3zMwundgmR2KdCDhigNUabatwC7D+JCvjhZeJYabbxOi/QUm09pV7gvETeGRxbjd14m93fv/Bwl4dafnzO/z6BtHXIWn0bPStsI=; 25:eks7jrLy2mZxKg0cUsChqoi+BiHC9kzlQvRdZ713/zGeI+RVyYqHyd1Ablnjgj2/Yv9MzxjXsswzkagc1vgIrtQGaLVT/QT7WxbqN46unO4LgQz5KlfeeJx3vOaBfzQx7l0WSyqU2pey2wH86q6+Y65hKIZk2A/NzIEDHZyge++Q5UJTwXItSg96D8dUlB1uOLqAxfpwt0029Dt3xCib6Zz4aUSHME3/34FKKjGfIRDPgLbvuosoTt5l4jWhHLSHtwn0WEVTnH93AYYmnUC7COCk7qJPl+A4D7aluqH1yZ1egX/w1HxArgxoTRogjTgUzRzkTow95H1rRdqbfI75kA/I+ZRL9EjfUKZ6W9+/riuknd0oeooV8I8fkb9dJOeT11ipqgQCFNIpPxze8IUmHqVZElr4vOtegnABjNYacQfo2qyi8io1SUVpo/j0BR5HQoECWRisSW5lt68os7fTUw== X-Microsoft-Exchange-Diagnostics: 1; SG2PR06MB1693; 31:HP9s/iPxN3GpjKJQoDqifPnggf3/lhD88M2Kx4u4ZaNTphDcvKC2Xx8gnxadyWLgqOgotrzWKgHjoxyQfNC+3z85mqoc0m4tMdf02rs9+3GKPBbaq+Cu+e3cJ+gHPOX2HCLIacAJiHXyWM6D8k+ubWVu9rKzWaXTTXBDGV/Kop4/bfx2nh6Y12w/nltha6UErg8lt9uN6rAXCwn8ZG/UQpDRm34AZT+qGLZfkRgINv8=; 20:2xL8QeSMnItDFHiJu1QCiwCpZwxFzasb9fe3goLRbTzbOS8pIV0bJ4oe4ne6dvFJ1PRoLnKvV+goUAscJAl2m04SzSyyA8CYkEKGpkPSUJC79WhJ29YHDWO0SLF7uLdA7J8j6xcQMyXY76ZVP8vsJplPd2EwLw3bgtx9HPJfB4LfrG39sIucKBlJYF8cOwbngmdbUfhwEjsdVpzS8Iuy3xd5/QNA2LfRlHrfV4/B/ACMRPM01TTioOAJnW1x+3Uyt3PwQgEJpThXsUR7M4TOgS6FwaIqzoHY+u91++VxzOm67TPPZOi4l4rE4b9CGzXDNM0pa80rtqZFmy9cXpPyBZBY7Tx3DkmIXPC0aUBPGtnKrnjxHo9aHbaewz+r4Adtdo8dQRE7lIFN+hR/4CpuZP0Fb8ibR+apQc2WGjhegOHdfAx64dZCaRtea9DQd0TL/0oLvOq3nwF39YiVk3kFjLvoI6g3EdpvwPVnu9hTpfvqGm4m0UU7YVSLxUmIpS0K 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)(6055026)(6041248)(20161123558025)(201703131423075)(201702281528075)(201703061421075)(201703061750075)(20161123560025)(20161123555025)(20161123562025)(20161123564025)(6072148); SRVR:SG2PR06MB1693; BCL:0; PCL:0; RULEID:; SRVR:SG2PR06MB1693; X-Microsoft-Exchange-Diagnostics: 1; SG2PR06MB1693; 4:m7cfeB2rH+QgLDkUL/zet9jYMNHWok4YsOmg2d/1Eqp+26GOePzVTiqLbxR/d5mfbI//p322SPWLFQB+SW8ul7dAsoI7gcwZUYQCKghEiV5NmAhbbXshxZ/CupyCOOUXcYY8RiSnxRY+cO9kW+1vQIog8yp77g/tCGEoHBQrRXbdjMUQXcFlPJlpun4+DqLIZpIJ1UJwxrpp0KK/UTdarjT/qLAAcujLxiyB6Qqm8UdGQgXCI/84w67xWjNOOwenLyyH5DVixKgWXqgtFBftKHkykokDQXltFky5VQb4McblOQ0EvWMxSKpo95mo0vlqIkauO0W1dN39ofXDgh3jhQYlirQPt4r4yq5sgSNqQaTkPSYFJ9nf0lh7dVsTQdV1crK39YuXiupjmU3pzn5sxYj+lBsYuzTBVZKBow0lSGOSsNPtu3KTsiCZOJjJV6Yvk9wO8Ed1NPhRXzDEinrBEtZ2FHj3XMO8LrtIfyyg3dif5RZ7o72MNlkk6TbkQqTighCsglkFyDWa40rmrXXuSWof58ppP6r2e2uaBERXIlkn3J80PKS/LvSxaNGwXjzDD+AueqicyoE7BQZWFCMge6qDitCFxVVOIdg8dTyCN+L+QhclKIZtzz1ooGP9ImmnbaQEr5M3KG3HiwTFdPjkvT0Zs9ncqs6635r67pDSyQX8bbyID1+moBmQKZ6p0QGiRJNKAZPdjQszWwFQdvR8iq0pJwXKhShqB9PmhIZc1o3BCMngcxd+3T6mcC1YVEn3vi52GzTVT7cKNXt9MmMs+w== X-Forefront-PRVS: 02622CEF0A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(6069001)(39840400002)(39860400002)(39450400003)(39400400002)(39410400002)(39850400002)(6486002)(110136004)(107886003)(38730400002)(5003940100001)(25786009)(6506006)(2906002)(6666003)(36756003)(2950100002)(42882006)(6916009)(33646002)(4326008)(6512007)(5660300001)(3846002)(6116002)(78352004)(76176999)(8676002)(81166006)(7736002)(48376002)(50466002)(50226002)(2351001)(50986999)(305945005)(47776003)(53936002)(54906002)(66066001)(189998001)(42186005); DIR:OUT; SFP:1102; SCL:1; SRVR:SG2PR06MB1693; H:localhost.localdomain; FPR:; SPF:None; MLV:ovrnspm; PTR:InfoNoRecords; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SG2PR06MB1693; 23:SpKShLC3sgYS8kmlnffjVM2v5DACA0OCH1q7coOyy?= =?us-ascii?Q?IqDl2UCW/sKgB4h5z2i//bZwLyZSD9m8B+nT2b+xwenIjHvHzRyEC4WX0KUL?= =?us-ascii?Q?68dQpc5ylxX4E2VjvnHmf4p6oRSFz2KB8hQjhWFl5EOICgichR8dOcKWWHP3?= =?us-ascii?Q?qBZFrUQV5+ber6OqnEsRYWJd2bKzeYtxNlTATzvVqbeN1DSC8egRMo+YNMMh?= =?us-ascii?Q?pDfRv83vqNSwmjwNY1URpb1/nmKqCDTykADlq0rzi+Y2X2pe4EVFijxhEVy+?= =?us-ascii?Q?3zeUDHaiIbxy+QoACatzkotfNmuT8pnJf8YHn7ugad2IjYQ15g6+MVpVyVAj?= =?us-ascii?Q?aQmdjpbfYS/Q/fGoaRDJ3HZKWfuOJi8NmlKRv8IBfSqJkXcANrn2DxlFO+7S?= =?us-ascii?Q?5Pqol1hR44KFuEgNOp5XXisiB+wcHLdHiNE2xT8aWER6TGslskpG2MC3OJVU?= =?us-ascii?Q?9NHtCj9y6Djpf3nsEhV/6kgm5yIodpxWbLNCsjHhT4A02s8/SDEQEEl0of3s?= =?us-ascii?Q?VbLKretMedGaSODd/+DyDLqZfbNlfUmYzuZKtRe1yXyBX3/tKcGvTr5QsYPg?= =?us-ascii?Q?50kHj/VQphqwp1X1Qehoso0fg1grB42gC9Il4thHchGIqs5gNQSbslhDGBBr?= =?us-ascii?Q?8xN8G39WiMYXXJB0f6K0dgprSk9eMNnm4jdVoCnWezCpShrtVNQo1MjQoL5A?= =?us-ascii?Q?dn3qZkf9nbbwHPmgI/K4R3Dsp3IOwmUavgwdjfWOdEW2p8tveV0SGXH2sOwE?= =?us-ascii?Q?q7yTVPztGupBffKF2LmS9sx3muWfgKyDB+AwI2uv7dYLp+aOaQKCwhsBzN9X?= =?us-ascii?Q?Fn7ydWpVxDW7XsM+6H3VUSQ0Yir+Ow/BSmmo19itLeCkydoa0TQS7mEMVZk2?= =?us-ascii?Q?WnxV7Z7LnSvrVtf8bidT8uFHUI0jn+STCObsapkJJgm4bn4VemTzPnmFjzK0?= =?us-ascii?Q?b3N7X2S8qYOxwy9PDOutHMcUhxZwUnhgk5QZAE3JPXIFPJK2X4BXnBERvaoe?= =?us-ascii?Q?lQn0A8SfQbFB2lvPRnQ9PdSptGflK62W+Qu1i1mHQNQ9N/jNbxC62SvS+1hv?= =?us-ascii?Q?/H+gxYZ1JbnNkElMi6/YRnqqv8dwnPyhqAJmvXstBQqkxBqyD+Nm/m+ld9Z6?= =?us-ascii?Q?eesqFQbVTeR2OP3N31JiqUBEuqqS66x?= X-Microsoft-Exchange-Diagnostics: 1; SG2PR06MB1693; 6:zSTwPKUECDaNQxCGL05w9CeiUe+oaB/2LladVM42XqVvAvh3eBr3UfNTdnu57UONRoK3166nXVNMT7KIhZq89TL6SqMN8O8KaBsnXL69TeRkMCZZ53yQopNzaFRFbQY05w5kPCMEjAypTFuXbYI6w5OACe8N2gtpDSCFFpWM1UuyOkPo3lrU/VKnWNs4j/YvH3Zqli4zA/Ytm2YsEecNdroPbo9qNCDCkNhHh6Ndy9OnpdlzkbxKMRcP5e2yQjdkIXL8keY04nckDJBxf3SEsiYahwLjUVWhHRv0IBtkyfpyRmZdmyZPYRroudmyq5iH6WR2+oGVx7C/KYURqG2eA2Gy3hvTzVDub1P/7uLDlirb+rsDOJsGgv6c1CL8+DkIq2tdqidCPQKrMtS0xl2VlkDWtKLyZYvE3O3jMsOUppA=; 5:jbAmYhuK5WsYCR5Q43kZvHAYAL3hC42Emc5SQymxiB1wt2EnG9n3h3FLdsbOA7j9p82TFk1AVaLkrrEib4xHh25KJPNtnXbTIKVeMy3UhnFMxrSMPzB0q2KmlRqYinWJ8fVtFpdlGcYVrOTR8K4OGKWKHPpJ9PYfcowb0v0+JFE=; 24:RvIgZ/b/f7iG+6rDW80eHmfucKJQhIj67HEXSyNCYnk1SufpxvG8kK5Gw3jCefSbewOwm9Eo6Qg0XxfK1TI3UmndmV0TzvcxPfDVpmLlGJg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SG2PR06MB1693; 7:FEIJjc9DXRFVuUvbvX+aYeU4awonbTAGs5ED4OuVAzLI1mAtdE5TMf4p6kfVjpfj/wGpK/oa9n8q/z+mjfkupPNOEarQXyipQOm1ZI937aFPhzlAmOcUOo0FzqNxkZAw6GQV8uuZVvHrQlkLeFarwB8vlTEkciOdHKEYqIMvG5pwoHvHBlLzTHrSf6ktvQauElp4U59eWhsLV289/WMoWTcT6GEF8c0jN9kZJbSiwdBKEmpagZIE4UVozkVS8DihaqNENuxKg/jB7txI4Oru1OKBhTjwZ0UCpDsAWs64YbzbNeZHCdWVY6fZoaUinB3fVf3LAJHDnaurlKq1gMj78Q==; 20:c+2rhZXMWZJRyFQd5JO+wscscqtr62Ur8kfJ0G4Yj2fw8pjLTuiysrl54YNs+5I2EOyXMv8I3LaKFfVlzqdpUHHkqbu78+rJx4pqFALyhvm2dEoL5UtBu23lStlV8H6izqrTMtdEkvAQ4VAekdX1VgPAULwYR0LQCO0GbFPbHYE= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Mar 2017 02:18:18.4501 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2PR06MB1693 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 3e96c56..a1e79fc 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); @@ -533,10 +547,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); } } @@ -569,10 +587,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_config(usb3, true, true); else usb3_mode_config(usb3, false, false); + + schedule_work(&usb3->extcon_work); } static void renesas_usb3_init_controller(struct renesas_usb3 *usb3) @@ -1953,6 +1975,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; @@ -1996,6 +2024,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)