From patchwork Thu Jun 15 11:34:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yoshihiro Shimoda X-Patchwork-Id: 9788697 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 8795F602CB for ; Thu, 15 Jun 2017 11:37:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 53C5E2810E for ; Thu, 15 Jun 2017 11:37:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 482BB285C1; Thu, 15 Jun 2017 11:37:16 +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 D201E2810E for ; Thu, 15 Jun 2017 11:37:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752552AbdFOLhM (ORCPT ); Thu, 15 Jun 2017 07:37:12 -0400 Received: from relmlor4.renesas.com ([210.160.252.174]:17118 "EHLO relmlie3.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752387AbdFOLhK (ORCPT ); Thu, 15 Jun 2017 07:37:10 -0400 Received: from unknown (HELO relmlir4.idc.renesas.com) ([10.200.68.154]) by relmlie3.idc.renesas.com with ESMTP; 15 Jun 2017 20:37:07 +0900 Received: from relmlii2.idc.renesas.com (relmlii2.idc.renesas.com [10.200.68.66]) by relmlir4.idc.renesas.com (Postfix) with ESMTP id 6A45C613BA; Thu, 15 Jun 2017 20:37:07 +0900 (JST) X-IronPort-AV: E=Sophos;i="5.39,343,1493650800"; d="scan'208";a="247662971" Received: from mail-sg2apc01lp0243.outbound.protection.outlook.com (HELO APC01-SG2-obe.outbound.protection.outlook.com) ([65.55.88.243]) by relmlii2.idc.renesas.com with ESMTP/TLS/AES256-SHA256; 15 Jun 2017 20:37:06 +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=KyIT4NL0ZtSBekvWv9NiRRWVo7R2hhhXJup6J+6SN5k=; b=cURRzvhdPZNukKbdbhv28Wg6ilwJRid/gIM2L/TYmtnCiPVCyO3aNncwcgq5BJYz3C9TVc4nu71/pdvhpyg0SlS/Lyvkr/ET4VWq0EjSoqxN58yVAN5gtUYTUNRWt4Av6cMmzIGw4kYGI1dIsvixSe1N37gqZAO1UwZUG6ZSnwc= Authentication-Results: ti.com; dkim=none (message not signed) header.d=none; ti.com; dmarc=none action=none header.from=renesas.com; Received: from localhost.localdomain (211.11.155.144) by HK2PR06MB0978.apcprd06.prod.outlook.com (2a01:111:e400:589d::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1178.14; Thu, 15 Jun 2017 11:37:04 +0000 From: Yoshihiro Shimoda To: , , CC: , , , Yoshihiro Shimoda Subject: [PATCH/RFC] phy: renesas: rcar-gen3-usb2-clksel: Add R-Car Gen3 USB 2.0 clock selector PHY Date: Thu, 15 Jun 2017 20:34:22 +0900 Message-ID: <1497526462-9179-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: PS1PR0601CA0091.apcprd06.prod.outlook.com (2603:1096:803:1::17) To HK2PR06MB0978.apcprd06.prod.outlook.com (2a01:111:e400:589d::24) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d7670cfd-9a6c-4bcc-6766-08d4b3e2d8e8 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(201703131423075)(201703031133081); SRVR:HK2PR06MB0978; X-Microsoft-Exchange-Diagnostics: 1; HK2PR06MB0978; 3:Pn9DuOdCWU6cUxOQrt063g7zohr0LXzyv3OGoWlYrAANBDT8Rfmg03nPnYKjM10IdGbd8D89LMSEFZ3jiYD8gtkJfC3ATyqLRJXhYwIDE4X2nbillRcStFbQfIVwu1CIolicxps5g2VC5AG8NdWFD9F+izigTDqq3SKJNev0C4PTllsEfjOf9NziTdS3ye/WE8fXX9XlO1mN9HIJEro8QrB0tyVDEq0SJNX2G3kOqYNxumPcllYg0jR2gS16hMZ69/DM27CiMqynmcB2yaZ30bQQkydSPuSRR5JpnIvtxG3NF/lUEsx4fhYBGTXTTBNnzCfnyeMh2Jm7Ls9CLrGL/aFvvdsebIfdz5oYVWeFOTw=; 25:SNpplxmdLpCECTvxBu0v2LnZOpAshWHJj1Uk5oJjDig63b2P2FUtK0dR7/A0mxm3Zus+muBeImhKWNQA+dj7O8ZoSW2DV04rhxHM9bf8ONDNNIhElNsiv/X97uwJXSUHHBdXzY8bj9B030YVrELYJKICJIL/oI+l/PxCsnF5GGs54tCYtxwPFtax6hb6OFXyzgO2dcXxYyI4vK0sNlfOogVnDJ7bJc7kOqeIVwXbhE/RkH5Ko9vJWurmTjTu6tT7GgkbtKByaLPWskKhS6HG4yn69SUk6jn1MgnYnRrAsIK18bd7bOEhr4V8w5Lsr2VvmYKQAPq/g6EwIQzGgUH2p6Id2c1YjEHWx/rRef7f+RY+XSXR32cjyzdu3aul2fljEoQwiyspiByu/ZgnkIUlGmG/UIx9WwwRKVXwinen7y4cCsexfNXoFArm2m6EaPv/8J/LgMJO+RV4jTN0zJESLEcIdG2scHgeBGqJFkFCVd8= X-MS-TrafficTypeDiagnostic: HK2PR06MB0978: X-Microsoft-Exchange-Diagnostics: 1; HK2PR06MB0978; 31:qzsGf3SilQWGNfwtOVOlsD/KnU1U1SIRu1NRAbyNgUxCj+UBiKv5nC9nvW5RVmoADWIMjb5asX5j7djBeXGIVD3pzyrb4x1lu8OUpcyZx/2DkZDpCLRmyL2OVsug/Ql7csf5W4OUv5FQ8H+cNWf8gi92GJAlDCR81qI1pIbNynH9agWTdy9afp7tbIg5H2uhphcrJBmlT2YCCoOeWazbiZil04XmY3nAyEmmlp2UVWk=; 20:954ng2puL/W2ji+CtTM62uPd9SBn6z9lAjAh4l5b0q24D9KF2QFwMdbREYLiHWg+UXhiTUYZlazbMVtSlTNQzLsQMQtWdh9TmiHYlpMjIPP+BgY7m8EArIBc9pmVfNgdbkdFAycCTK07t6eQnrRfwLQijo6hO37PqSJYlnG7pttbQEBAxvE5GYjO74TTHpFyauCdgmNrdef8VJgBZVaSeKJH6A/U7pfqyWa5UwQguXUziygwmcae1roLsxP2XfWsbdYV/kxORdZ0JKnc9YCO399+HmZFF2HK0Yl7J1AWeMS8BNMQP9crlBBkKLkFMFC1onG8hyLT5SBEvpeRsWQR763pYNseOj/X2u6FCp/3oOdwcoyFU5FBslFUMmF2KHvst3cV56XkX2jS7BnoHS29JdN3i+C3B8/EAT5IPoObsC/LEDOpwxtAGTTsiL1ZcXkMuF+TAUOelK8VOgSyhZsuHcj1uiuxsnh0/OdbohCZdXCki9PJcbRBVIMD9ZbJa8mo X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(21532816269658); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(3002001)(10201501046)(93006095)(6055026)(6041248)(20161123562025)(20161123564025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061750153)(20161123560025)(20161123555025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HK2PR06MB0978; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HK2PR06MB0978; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HK2PR06MB0978; 4:8ggLLOAP7Mdkx8tb+CcEy9BqlaKqOzZHnjbJVZg0iU?= =?us-ascii?Q?Ew2AjXldlMqMZwA9HqC3yAV9qOKcqie2ox4zi+gi0zymQ028Yot5qEcDfFRf?= =?us-ascii?Q?uTBJCNteigveXAMZepZDYGrsVgW2lo3Tecoyq+0sGUK1qTT1jspevMerw2uY?= =?us-ascii?Q?YlqaT8AaiUW0tVCCU/Bs0gtAWzDZVZ0/iiPmfE6SS0bgGHCgvhmj0sBhzmk8?= =?us-ascii?Q?RiTubt65dOht+XcrGrDOugTxDdraDu4tAeKAaIK3XCq3tlrznVfbIvyD5fV6?= =?us-ascii?Q?1fAK8NHCNmK5zJMDb0XrUp4HZJ303A8umgxg+hzxw4feRCOL72WHykU3LZDc?= =?us-ascii?Q?XU+/Kf63IAxoMB9NuCGUmqgUoHt5pdsfChmIq1bJMwfVGc6ZivskEuM+7HSP?= =?us-ascii?Q?oRqo0vYh8Up7ZiuWHQwoIfGNzfObYyBA+iZzkibMOF3OAoClOhjd5yGbDZ5j?= =?us-ascii?Q?54YYhGCByNEm9aqB2jEpUituXlSCLswIRuFLDHHrXy+7sqjk8yrxFIMe4wnS?= =?us-ascii?Q?VgCRmA3sCXrejzCOwf0FDk+2VKBdQ5lweCmqtyG/8VKkPx0qT/dLyg+9m9EG?= =?us-ascii?Q?UO72bSKTr++TPhnfKt1D2U92tnDRZY0UiS74f+9NhNsyXcJuSj2aaIkXOuHa?= =?us-ascii?Q?98OsLZCR+7uftcj09fmqBJDICvcJxRkG9EPUeee9bdJm6cH0a+D8RpISIjym?= =?us-ascii?Q?nm/bMQgjOno0k40r3t63LBznkrTtTXDHOoWuNC/EdfOFYQr5m/WAjtirC8XI?= =?us-ascii?Q?tbs697E+CxQnT76W5k54PTuml7Y84a09LaLZ52BFqpEbKjuRw0kI2U1TKuzZ?= =?us-ascii?Q?/72fUwBQzH2pYUppMlCU2WSzJE3GgPjkhqWKhMEnWXVuSA0WCgUoIDq2wqn5?= =?us-ascii?Q?m7CLIe0lcJ2OcrBY9qLxNK8xIb0tx/oSnJee3Csc8Xok+unwcBwaddeTS/YI?= =?us-ascii?Q?ZBhfv4J6vfpBtnBEGMR8Vnjad3isHeo+k6l9KdrPC2plxpOrVvzUUSELto7o?= =?us-ascii?Q?Ew5Y75pwOE4r2AleShLspCfLENe8tBBMwbvQjOBWUkvEIMwlfWFKSadjMnk5?= =?us-ascii?Q?f6QOIi4bo5Lf0YBoRHp4s5p7eeCRlGXwClyNUxwswSOR7RCWI8ODnSQled+g?= =?us-ascii?Q?g5SW+Osu+fCXIgXfvF++yd7/vI4QM4UpvBz3hixFDdEHSasipWL4aBhYcxhD?= =?us-ascii?Q?YNMlsw5VObpIk=3D?= X-Forefront-PRVS: 0339F89554 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6069001)(6009001)(39860400002)(39450400003)(39850400002)(39840400002)(39400400002)(39410400002)(48376002)(42186005)(25786009)(6512007)(54906002)(50466002)(47776003)(5003940100001)(189998001)(50986999)(38730400002)(5660300001)(53936002)(66066001)(305945005)(81166006)(50226002)(33646002)(107886003)(6116002)(3846002)(4326008)(230783001)(2906002)(498600001)(6486002)(8676002)(36756003)(7736002)(42882006)(78352004)(6666003)(575784001)(6506006)(2004002); DIR:OUT; SFP:1102; SCL:1; SRVR:HK2PR06MB0978; H:localhost.localdomain; FPR:; SPF:None; MLV:ovrnspm; PTR:InfoNoRecords; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HK2PR06MB0978; 23:hHf7v3j2tgXmMMEFvFQofur93E7V1kB45zYipbwk8?= =?us-ascii?Q?TkYugXPtCzEHu39WQmhposJtIYP/8yBJYPrmnPVN68oclLjWmWrwCA3wra91?= =?us-ascii?Q?stW9xAliwk8zqPPysdj7R+wP4FxBPlE+T5Wsp8Mc0X/VMyP5CxcUKtGzokjt?= =?us-ascii?Q?v6h27te/XGVt+7nyZAGajlUqlsqnLRmV03p9uQKKtxtylMbK+lfXpRljUCz6?= =?us-ascii?Q?kkzEvmj9+nV4rfgv1viyzriDGyIkS+HsA/QGF6IpfHGsiB1p3SnEmHApoYOE?= =?us-ascii?Q?ros4EpboGOzyf1W0bIX1t7sWqKR3VXWL86cCVM9/CMdtfsyDI5kqk2i9Iufe?= =?us-ascii?Q?MRiBoZfg6oS9PShbA15KAIRWjIPqnlo9Jxn/6Y9AekPsQjkGvq93X02GMU7c?= =?us-ascii?Q?cTR6dXn8S4pQ0vZwIGtUe1kw7+S4eb5j/rN3juWWGnvxWgNGkWrfBWRQWRgd?= =?us-ascii?Q?yqoHIlOx+8RsuwbECs6KqKLPOsbS0wUX6sLjylBjd4V1k3iYoyPvXAhAGY+e?= =?us-ascii?Q?g0+MPh8w4EFlnxOrSpbyo0AV4i/AiOCi7J26Z1cbtktv/xLHrrN1P9zte5JN?= =?us-ascii?Q?PbMa6ISGHz/pQ7IjG+1xQD+sIXzRAe5WhkdLrJvYkGGSUsJN1F5jLqXsUTjs?= =?us-ascii?Q?maklEiKuy5cZux5tvoKvNN4F3P72OjMt6qd+ePzZt/ztcwOdncwcbm47Oqsc?= =?us-ascii?Q?XuiRaHV5k6VcONRqIYXeLifPHX7EFmoZGqkZ9vqlC0XQKt4r0/sgrQ6G9NCJ?= =?us-ascii?Q?faYr4EzZJPpI1aIxU89JcLjsmYETx1ehAfvQMaUNkWrIxP8l5DPU3eUhzreu?= =?us-ascii?Q?I9XRry5BP6i4iauDHy/7Jig0lp11JDVf1G/iSetNQCpTB1TrEYyuNu+UFAs2?= =?us-ascii?Q?InSiVs0RUNbNQ6DUEES8SQc8+Olvs2UMH9eEYU47Nqzix/60O6vroesH8Sx9?= =?us-ascii?Q?kl5L+nZhQOi+GEH2Rs8qwdliMPPx6QljNanwnFMMCere3XcsW5YZvuLYQ2HE?= =?us-ascii?Q?gdvUfvkMobZ2G4Y1Amk4F1+h9zFZyO60GBrTEnmfBdzHVHERqGZavtqxSE2c?= =?us-ascii?Q?/ro7qIdb0doQg7WbqeN2wft5etHmOZMxD6Ho/5pAsXvScLJpydeAVn5rT5A7?= =?us-ascii?Q?ajv+AAR/4g=3D?= X-Microsoft-Exchange-Diagnostics: 1; HK2PR06MB0978; 6:e9XBUyhzsWmimjqkY/SpSJeawQCqXXVsVxewsjcXMDZceF66zhinkIoRbdw0Qh+RFNZLaweiABPF6To8XQ9I/LNBwQowCU5R+12wRiTcYNajYZw/EqrnJHKD6wR++zFKaMJBXnKjgwE6lEnFJl2msoHzVlLEgX/rbwWSDHHDBaIGpDNoe3i8LqeD4XhCOY6sGsQ2P2qbMRQAvpsh1szz9g6P34m8aKmWSGUTwMELy1wb2HqrffbGvvBig73t1abVWBmZcbm44IpV+rHwAx2YrWobkkIzpa5niwCvUdqd53JV5DIlKbE6CNXqPlpSFK+bPDKrE3nFA+foXZzFZRgs0P8dGSbFrJ7RkLAdpeOUY1CWZUE/3Ha2IyN/BJ17D1LIG5Q6kONLAv4JaAlS5MtNaQB0TBIWLfUywkQMYukfgoXXE7lo5WXi0gKiJEv/FzRvukesjXch+ewmKWtUc8skS201Vk8tpTQ5HYiHQ7FsAN8gV7xmvPVyHAZfBH1bV1m1ntQb6eVO0tg2Y9HijlwqzL4BEKcwT7VNFJyGTibFmms= X-Microsoft-Exchange-Diagnostics: 1; HK2PR06MB0978; 5:KEX/mUHRcDvdTvgmLAa/7cw9nFNGImjXkc5c2IvowbpPrwSq6PsvwxB9bL8JqQ1n3AGKzHvuZFcjYCRm/G0U0GqSuYSwIVoqSADjfyUjzHVs5BqRkOEflRFYHZB+6wkExvcV3axxUWN4y9mVwFKj1YaHDe9kYP3by+UkHPgOp4B3mXaW+gG+twSe9u66X84bGm8bQY+2NRFG2Irs6e9AMbYlyTlU/s4TOe1LvfrEniQIQMKs/xlrjma3yNHgsVqiTWnDze10A59ncMVFVXUcf3poU+FDXmjUeNBkcm1sIzoodPJQtBsLv6IGNReAcujmcB5NBwDWiA6nDSd25k0P+xov21AdRTWft2mu7AjXGTu7MHWl+5nI5xQrqBnIfxLXVPmSjVzoSE/wDIVVxI9g2eH927u75yEMuwdDy/mLedSiIxTSdlHweAgjkBSRyg/fU0v1yQldS2tuNDrm4N4oEapGWUdowft2gCwYCbHOkhfPr9K3pmE3ePRj5QwBV1L9; 24:vmyRzZuaM882kfyLpAT/iTpHgfZRwX8i06KmQq27GT80RrfLrEVvgqGXJRPHOQ0U9AAMKyIwf5icMcb20hhfJvrjPxd0sLP3vgqZvoxayso= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HK2PR06MB0978; 7:/kWGxOYzzwQsrGCpr0d7ce8IUDJ8XDIDSurZCogEE1g24VzkRiuaa2m7TXZxreILVO0EyIFVD34JJvzFnAKnx5Fu3tluiZd8gsoGu8ZzoYIa8TaWNBTtwJhIX81zhSzY3kmii4Edx6QcVSQt7U/aZkHZXZBAI85g4kPWux4CCLC5bpIYpyYX0Nzsll86wYOJXCxI+b5fU0DKEYt8GfJAIvqNppgWSPVGfn+IwuH+/KnhqgRlUAP/nHOFuFhD3XtZOguM3fSQe/M3+2o+M8DUtH/QydWmD/3LNL8bc4RyhqQR9RMtlS7QHwbs9i+cS4Sx+g9B+LbJ/VVmcQLIR1zGMA==; 20:yS5WNDLHDNGmbSQI7qAul1lBAeFJRPMel+Vpc3WCQM4pLqXXwsdFkEjonnFAKz1sLzMQtC351JCHNZeu5BBEI3UcsoLi4cj+cKAZlLFaiNi9nePeyEXQshfb/2xFRxu5SWUeaV1SGaZ1JeN84c/IXhOrH8FsHWYwxAiArIV3+OY= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2017 11:37:04.0578 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HK2PR06MB0978 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 USB 2.0 PHY of R-Car Gen3 can change the clock source from an oscillator to an external clock via a register. So, this patch adds support the clock source selector as a generic PHY driver. Signed-off-by: Yoshihiro Shimoda --- This patch is based on the latest linux-phy.git / next branch (commit id = 787f24543c4a599e5d9d311a3fce839ce87bbff0) I'm not sure this driver ss OK or not as a generic phy driver. So, I send this patch as RFC. .../bindings/phy/rcar-gen3-phy-usb2-clksel.txt | 58 +++++++++ drivers/phy/renesas/Kconfig | 8 ++ drivers/phy/renesas/Makefile | 1 + drivers/phy/renesas/phy-rcar-gen3-usb2-clksel.c | 129 +++++++++++++++++++++ 4 files changed, 196 insertions(+) create mode 100644 Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2-clksel.txt create mode 100644 drivers/phy/renesas/phy-rcar-gen3-usb2-clksel.c diff --git a/Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2-clksel.txt b/Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2-clksel.txt new file mode 100644 index 0000000..71b2f1b --- /dev/null +++ b/Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2-clksel.txt @@ -0,0 +1,58 @@ +* Renesas R-Car generation 3 USB 2.0 clock selector PHY + +This file provides information on what the device node for the R-Car generation +3 USB 2.0 clock selector PHY contains. + +If you connect an external clock to the USB_EXTAL pin, you can use the +"renesas,usb_extal_only" property for it. +If you connect an oscillator to both the USB_XTAL and USB_EXTAL, this module +is not needed because this is default setting. + +Case 1: An external clock connects to R-Car SoC + +----------+ +--- R-Car ---------------------+ + |External |---|USB_EXTAL ---> all usb channels| + |clock | |USB_XTAL | + +----------+ +-------------------------------+ +In this case, we need this driver with "usb-extal-only" property. + +Case 2: An oscillator connects to R-Car SoC + +----------+ +--- R-Car ---------------------+ + |Oscillator|---|USB_EXTAL -+-> all usb channels| + | |---|USB_XTAL --+ | + +----------+ +-------------------------------+ +In this case, we don't need this selector. + +Required properties: +- compatible: "renesas,r8a7795-usb2-clksel-phy" if the device is a part of an + R8A7795 SoC. + "renesas,r8a7796-usb2-clksel-phy" if the device is a part of an + R8A7796 SoC. + + When compatible with the generic version, nodes must list the + SoC-specific version corresponding to the platform first + followed by the generic version. + +- reg: offset and length of the USB 2.0 clock selector register block. +- clocks: clock phandle and specifier pair(s). +- #phy-cells: see phy-bindings.txt in the same directory, must be <0>. + +Optional properties: +- renesas,usb-extal-only: to connect a clock generator to USB_EXTAL pin. + +Example (R-Car H3): + + usb2_clksel_phy: usb-phy@e6590630 { + compatible = "renesas,r8a7795-usb2-clksel-phy", + "renesas,rcar-gen3-usb2-clksel-phy"; + reg = <0 0xe6590630 0 0x02>; + clocks = <&cpg CPG_MOD 703>; + renesas,usb-extal-only; + }; + + &ehci0 { + /* We should set usb2_clksel_phy into the first phys prop */ + phys = <&usb2_clksel_phy>, <&usb2_phy0>; + phy-names = "usb_clk", "usb"; + + status = "okay"; + }; diff --git a/drivers/phy/renesas/Kconfig b/drivers/phy/renesas/Kconfig index cb09245..a3b511b 100644 --- a/drivers/phy/renesas/Kconfig +++ b/drivers/phy/renesas/Kconfig @@ -16,6 +16,14 @@ config PHY_RCAR_GEN3_USB2 help Support for USB 2.0 PHY found on Renesas R-Car generation 3 SoCs. +config PHY_RCAR_GEN3_USB2_CLKSEL + tristate "Renesas R-Car generation 3 USB 2.0 clock selector PHY driver" + depends on ARCH_RENESAS + select GENERIC_PHY + help + Support for USB 2.0 clock selector PHY found on Renesas R-Car + generation 3 SoCs. + config PHY_RCAR_GEN3_USB3 tristate "Renesas R-Car generation 3 USB 3.0 PHY driver" depends on ARCH_RENESAS || COMPILE_TEST diff --git a/drivers/phy/renesas/Makefile b/drivers/phy/renesas/Makefile index 8b60259..26175b7 100644 --- a/drivers/phy/renesas/Makefile +++ b/drivers/phy/renesas/Makefile @@ -1,3 +1,4 @@ obj-$(CONFIG_PHY_RCAR_GEN2) += phy-rcar-gen2.o obj-$(CONFIG_PHY_RCAR_GEN3_USB2) += phy-rcar-gen3-usb2.o +obj-$(CONFIG_PHY_RCAR_GEN3_USB2_CLKSEL) += phy-rcar-gen3-usb2-clksel.o obj-$(CONFIG_PHY_RCAR_GEN3_USB3) += phy-rcar-gen3-usb3.o diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2-clksel.c b/drivers/phy/renesas/phy-rcar-gen3-usb2-clksel.c new file mode 100644 index 0000000..e0e41c9 --- /dev/null +++ b/drivers/phy/renesas/phy-rcar-gen3-usb2-clksel.c @@ -0,0 +1,129 @@ +/* + * Renesas R-Car Gen3 for USB2.0 clock selector PHY driver + * + * Copyright (C) 2017 Renesas Electronics Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include + +#define USB20_CLKSET0 0x00 +#define CLKSET0_INTCLK_EN BIT(11) +#define CLKSET0_PRIVATE BIT(0) +#define CLKSET0_EXTAL_ONLY (CLKSET0_INTCLK_EN | CLKSET0_PRIVATE) + +struct rcar_gen3_usb2_clksel { + void __iomem *base; + struct phy *phy; + bool usb_extal_only; +}; + +static int rcar_gen3_usb2_clksel_init(struct phy *p) +{ + struct rcar_gen3_usb2_clksel *r = phy_get_drvdata(p); + u16 val = readw(r->base + USB20_CLKSET0); + + dev_vdbg(&r->phy->dev, "%s: %d, %04x\n", __func__, r->usb_extal_only, + val); + + if (r->usb_extal_only && val != CLKSET0_EXTAL_ONLY) + writew(CLKSET0_EXTAL_ONLY, r->base + USB20_CLKSET0); + + return 0; +} + +static const struct phy_ops rcar_gen3_usb2_clksel_ops = { + .init = rcar_gen3_usb2_clksel_init, + .owner = THIS_MODULE, +}; + +static const struct of_device_id rcar_gen3_usb2_clksel_match_table[] = { + { .compatible = "renesas,rcar-gen3-usb2-clksel-phy" }, + { } +}; +MODULE_DEVICE_TABLE(of, rcar_gen3_usb2_clksel_match_table); + +static int rcar_gen3_usb2_clksel_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct rcar_gen3_usb2_clksel *r; + struct phy_provider *provider; + struct resource *res; + int ret = 0; + + if (!dev->of_node) { + dev_err(dev, "This driver needs device tree\n"); + return -EINVAL; + } + + r = devm_kzalloc(dev, sizeof(*r), GFP_KERNEL); + if (!r) + return -ENOMEM; + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + r->base = devm_ioremap_resource(dev, res); + if (IS_ERR(r->base)) + return PTR_ERR(r->base); + + /* + * devm_phy_create() will call pm_runtime_enable(&phy->dev); + * And then, phy-core will manage runtime pm for this device. + */ + pm_runtime_enable(dev); + + r->phy = devm_phy_create(dev, NULL, &rcar_gen3_usb2_clksel_ops); + if (IS_ERR(r->phy)) { + dev_err(dev, "Failed to create USB 2.0 clock selector PHY\n"); + ret = PTR_ERR(r->phy); + goto error; + } + + r->usb_extal_only = of_property_read_bool(dev->of_node, + "renesas,usb-extal-only"); + + platform_set_drvdata(pdev, r); + phy_set_drvdata(r->phy, r); + + provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); + if (IS_ERR(provider)) { + dev_err(dev, "Failed to register PHY provider\n"); + ret = PTR_ERR(provider); + goto error; + } + + return 0; + +error: + pm_runtime_disable(dev); + + return ret; +} + +static int rcar_gen3_usb2_clksel_remove(struct platform_device *pdev) +{ + pm_runtime_disable(&pdev->dev); + + return 0; +}; + +static struct platform_driver rcar_gen3_usb2_clksel_driver = { + .driver = { + .name = "phy_rcar_gen3_usb2_clksel", + .of_match_table = rcar_gen3_usb2_clksel_match_table, + }, + .probe = rcar_gen3_usb2_clksel_probe, + .remove = rcar_gen3_usb2_clksel_remove, +}; +module_platform_driver(rcar_gen3_usb2_clksel_driver); + +MODULE_LICENSE("GPL v2"); +MODULE_DESCRIPTION("Renesas R-Car Gen3 USB 2.0 clock selector PHY"); +MODULE_AUTHOR("Yoshihiro Shimoda ");