From patchwork Tue May 23 11:43:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dong Aisheng X-Patchwork-Id: 765888 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3wXDG251LNz9sPD for ; Tue, 23 May 2017 21:44:26 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1762667AbdEWLoY (ORCPT ); Tue, 23 May 2017 07:44:24 -0400 Received: from mail-by2nam03on0045.outbound.protection.outlook.com ([104.47.42.45]:37568 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1762551AbdEWLoN (ORCPT ); Tue, 23 May 2017 07:44:13 -0400 Received: from BN6PR03CA0042.namprd03.prod.outlook.com (10.175.124.28) by DM2PR0301MB0910.namprd03.prod.outlook.com (10.160.217.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Tue, 23 May 2017 11:44:10 +0000 Received: from BL2FFO11FD017.protection.gbl (2a01:111:f400:7c09::100) by BN6PR03CA0042.outlook.office365.com (2603:10b6:404:10c::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14 via Frontend Transport; Tue, 23 May 2017 11:44:09 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BL2FFO11FD017.mail.protection.outlook.com (10.173.161.35) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Tue, 23 May 2017 11:44:08 +0000 Received: from b29396-OptiPlex-7040.ap.freescale.net (b29396-OptiPlex-7040.ap.freescale.net [10.192.242.182]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v4NBi0Gv023549; Tue, 23 May 2017 04:44:06 -0700 From: Dong Aisheng To: CC: , , , , , , , Dong Aisheng Subject: [PATCH V3 2/2] pinctrl: imx: add imx7ulp driver Date: Tue, 23 May 2017 19:43:49 +0800 Message-ID: <1495539829-23345-2-git-send-email-aisheng.dong@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495539829-23345-1-git-send-email-aisheng.dong@nxp.com> References: <1495539829-23345-1-git-send-email-aisheng.dong@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131400134492750724; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39860400002)(39850400002)(39450400003)(39840400002)(39380400002)(39410400002)(39400400002)(2980300002)(1110001)(1109001)(339900001)(54534003)(189002)(199003)(9170700003)(53936002)(54906002)(8656002)(47776003)(50226002)(4326008)(2906002)(8936002)(8676002)(81166006)(76176999)(85426001)(110136004)(38730400002)(50986999)(48376002)(104016004)(50466002)(498600001)(2950100002)(305945005)(33646002)(6666003)(86362001)(189998001)(6916009)(5660300001)(77096006)(106466001)(105606002)(5003940100001)(36756003)(356003)(2351001)(2004002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR0301MB0910; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD017; 1:ZIZ7EzeJNnvjhB6SDEWcZy648JdifvW5bSmpZSft+vxdnG/55/RgZlhMn4iOFcIKpLk0f+62SP0+6ULXXsSQGE10VlIJiQRtOp5eeGNVM+QXNqo/JDEvPB/Ub0f4lNDwK/SaY51Z3nG9uBRNaOLkSGgFDeHJoX18s4UriXMq3Zwn/ctnlP5M36RYT8Rg54vi9nA0yz8Ut97wALMtub4Pr6FlyMYEoyupKbWO9aljeS/gi2179WPwcKsORdD5YQ9RiF8DmcRoE/1gz4X6jYGGIcLdxtkZrm5VdyrEbT0Ae4lcxgYfkbmyh2fEKJDjYjdYVXeBvNa5yacFJZvpCm457NC+p/gos0Htdql6EKRG8L5Jo0WblkZsIcv9g9aioQAg24uDN3girSnQ9L/rTetckNROzRRvQHzSGwhwegjUcYU6ip6sEkMWTzTl5UMvo0Fg4jErmRBwHj5ynDZTdZf0/8IOYoLePqswmYtL+sGb7732XehtkqxjTH/bFvQLMOQV0uzWHEeRYuvMi0enqokgCuf1wjoBrbkGuRxtNHNPt8ZL+NxDRPjDrRyx/Bw52FHaQUOA6Jr/eg1adxvNxUa7POV4e0gwtH2WLdyiVHt5HrijpQX+9fDgVy3pH9kppXjq8kUKycw8r27cyeGUD4JSZkH/hSbkIPZQxuiCNC9MgCjNtmP+4mYlmcWOLLaE519y0K+QVkdsf1jMhJ4FDyL2Ryiq8jVLDi+gjaYzWPzEaT0= MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM2PR0301MB0910: X-MS-Office365-Filtering-Correlation-Id: 5f61456f-adfd-40e9-971b-08d4a1d10642 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:DM2PR0301MB0910; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0910; 3:GIlIXhSpNLk9jc5T+wLAHSbYwpq+7qXq+4nZb9+tgNhwWXZCBK8H+tQN/ka5QWhgnB1ESe7c3tu6noWg9ZQCvTTyBA4N8MDzU+z1hWLFx5ec99CJadaqJJdh7ajP3n+7bJ2YAW8Fp+t47U7AV5o5qJSqVS73dmkqsup7VSsOOanT+o9elj5z4kwcWQGAcNFHPxRurXY42ACYJcmbEnIS2JKEdf5zO91k5bfWpNqn0oKuTXoT06IQK+LgZf6aWvtJC0gKtWjg9pfxQPLU1j/sI1gTZG1G4fUPiAOInniBiMQYqOksL1lWEejc4stFZv2V9wJh2PuSWnTj790r8LTDJ8qCxiIcen6wXEdTZR2pDClhcabOs1VP6fRRhyMkPYXprUtakqQGmlQMMuWFdyb401C2+otdLliQvj2P02RWEJZGM1Lz248HsyVRku7s5p1x; 25:gnkYnUSQBOWVWbTQ/EVdmHpVUipOANF23kpuIKuC0TWc0/HIPfRMQZyIfNuqI3ajLlfMOaRq5KT5UqqlsYQGb75TwuemaN/Ffdp95dLt9c5O83EhK02fLwo8L5VSyZ6AUNzNyrPT8xQ9pS3or/fyN2dgk69kzZJ2/aXerLweQxUF0+T/Pvn5VENXnJfd4ERLRgPAw4fNzpIg+WejSrl/r0rufXDWK8gaHJfGj49n4duujVy0kkxaG7fq92I7FDfZkeE0S9rzZiXsthptLqHNfjbNFWmsTwhEQggIvdsfVoms92sNTKdMR+5KYIRJO3JXrxDBrIhPZe/EstrHPCcdd1UEezXljwYtK2th5EVyCBIQSEwenNiJku0A1yY/eEuYfHXRgDQHRe3eL1orA0z/bzaPsHgdv+5ZIzT8T0tiEm+QSPoQVgnhqcqEkdSGW+ICRsim/eEsJWGmmdAW3apHkFU/UMwQzTuPE7G97VOvjlE= X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0910; 31:h7fQV/MMte3rNPKz9pngmFpWnWbyP7lz/fd746v9d0E7JRS7ZPgSS90PsOyJzOL/zah99GXRzX6JOU3ewUOqim/OVt/qaQpCPeTvYTcs00xYxSv6k8dMMBq9YZl0MMXjsKStt9y3Q8JMSG1b9PRaA+jLl7VE/z0LkGduMRrjoEfGPfZAUom+LDZ4CG2ed9j/ajfEfkdlQA/5VcW0VuqxYAYgzpb3JJy7ogu7fzM7pz3udO1/Y2u574KeKlmsruYv X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(601004)(2401047)(13023025)(13015025)(8121501046)(13018025)(13024025)(13017025)(5005006)(93006095)(93001095)(10201501046)(3002001)(6055026)(6096035)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123565025)(20161123556025)(20161123561025)(20161123559100)(20161123563025); SRVR:DM2PR0301MB0910; BCL:0; PCL:0; RULEID:(400006); SRVR:DM2PR0301MB0910; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB0910; 4:ElRKVyUgv45yTDnvKguTH+plopuoZClXQQPhcumu?= =?us-ascii?Q?Y2bmBubACrhJvwwmd2IZYqkZyNePADF8B0DTsg+6LRIs800jwyyIk8HTsIaq?= =?us-ascii?Q?lXcLfvhldElRWTn++GZH35dR9hNfrU3Egdhbm6WrfYUw8b19NfbQyywCueKO?= =?us-ascii?Q?XCVquvZAspkmf1xoKqezBepkvvfnxlvzqSRyWRRexFiHIjWpfUp+WacJjZR2?= =?us-ascii?Q?NelmplSlnqtHeJLN4F6p+yp2M3yyD4N/rbWXJfRDU0PdJvnzgFOUEZldEw4T?= =?us-ascii?Q?c4g6MTJD0mfquCGPNd0yz/mYctI+sv9L9sFYf0OhjU3dR2/4TzH5Ibgp7nCy?= =?us-ascii?Q?B6rtdVVjqpjAOJyC8QidGXRaUDmQ3Qi4HpRhrE+kiX87zAqyUIPjfPBWCcrb?= =?us-ascii?Q?xiCW7JHDSHltsiJzmYBqHOfRJC/MIpWRVY4XVG6T+0dzhvnRDEV8e9gHZ3YN?= =?us-ascii?Q?zAosTMmtG2dTx49yWwDujNbybjzl4+UtGEm/+OEGuo722tsCPD3jTVoQmc1D?= =?us-ascii?Q?HeRcPQmNR8ZvuWjPphwM2OcrVW1m+MTOYtV71nGgqgwrPqMr9G5kcXDISEwD?= =?us-ascii?Q?I5lAJ/i7eCFKH08kfE7Si3ztuJavU1V3wGAOI8NlPiB2EC1/UjBL78bOXoMx?= =?us-ascii?Q?fTdeyt7VGuyDzjgYWT5Vrd5OJpWGBQ73btTiZUaqLQJy/W+q3vDL4kLnpgFg?= =?us-ascii?Q?xmNc3/CjnR8noPrMnGGda+LQc94B4Cx3eBsFEjNnEEc7fnIGcsuidNWGr8Dh?= =?us-ascii?Q?8rTAV3r4f2MAKeP9yDuTAPhuVRXaQGGLP0nARtVkV22uq0EuwhmBJDs9h8UI?= =?us-ascii?Q?/6+s5t1kJbD0O72xgSCLcDxY3xbeJpKSL2Um/xNjbPuoUM0M3DLM/sHgZvkk?= =?us-ascii?Q?lWZi2qGaRwwmABa9z0kwqmUeZI+dWhOgOYZzpae8PaOe9E4lm09Y2t5Mkl6J?= =?us-ascii?Q?65ns7PjYrHfhr8jPDkKKS95glWLe/ktH5hBhhKPkzw=3D=3D?= X-Forefront-PRVS: 0316567485 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB0910; 23:0xElCreLV+6re2d38XIs4L7CwBmREANMHP1IVxA?= =?us-ascii?Q?Qbj+sDENn2HerktIn9wNbuUD3YMxLTzl2swi8CCW8sHsCL3f5EvbiQCaI0bY?= =?us-ascii?Q?ArFuTQ+UFViB0BOeAExb0PDq36b1K2cMjTsJjePI/hBqMZmFUeQb6aE1XwA7?= =?us-ascii?Q?bffmMjj1dm+B7ohE+vSPhqXneHhH2fzKlmKIM2Jef4dz4BRrZikQ+hEbz9MW?= =?us-ascii?Q?ZzFmliHNQcHL25R5RbhqccoDlssFu//RlYtbfcpPNBLprAAyBlKtQiLreYh/?= =?us-ascii?Q?r6OJRScNTg/1E98O3AXahic33Pdko6re/AOO6Vm5DgTpgUyEUDLKAnLzmIB6?= =?us-ascii?Q?uH6MdEowYjq5/reb2DkWutc0ZkQpRFSfNVIS5mG40h0kxyHjAKdG3VDrEi42?= =?us-ascii?Q?HBT53hDEAUOcqj1V3RS1e4Q37Uy9a43qe1j4RwlcnFb4+1kpos1L4xI100ep?= =?us-ascii?Q?bHerGAl5Fdpcc17UtPONq8UK0s36ejyw1c0OhdzbgxRZQynbT9pYMpfC41PR?= =?us-ascii?Q?QPbrlQx1OYR3zJY1y7AtD8dm/JIgWyEm1HMyrhv7l9TN3wZrg+s2Vv51ETQ4?= =?us-ascii?Q?EtBG/VIYcutk5KIaUNLZnpX2ECXb4zTSopmDTinPHnrDRpT9wgDBDZd1BXYF?= =?us-ascii?Q?6mvJRNi8t6VAIxbkfReKvQ+/0P4R9fRTBrt3D0bWM9Y7aPW7UgH7kEgqsVKH?= =?us-ascii?Q?dx4LhSRqqUTZXUU0d1eYm7DrgFRrit8dKZKFsO5YFvzVRrjib9Ytf5RVYTH9?= =?us-ascii?Q?sWJZ+kmi9mfk0nuF+Th+spqHxYY1Qlklhzt7cc3MzI9Sqe4dpsXsOV7Bh+oi?= =?us-ascii?Q?pT5T/sMpJkueocIUt3I90J+cQuhds+M8iRMCl+eSYRNdEN5TzDNxSMjXQSUc?= =?us-ascii?Q?ECzObWOO0Ye5VFPpVdhZ2NfGZDHUsnYA8c/iu/qRbKfBcdLIMfGV2Kd0zhgR?= =?us-ascii?Q?VfB51vU5Z4wZ6izzesaXHIuNxwFPIE2iBtwmjHKXyA+XSAiwdoS0HXiFi/xc?= =?us-ascii?Q?MzBZr87j0VA9fxD8qTMr3P5xYkkz5DL32Jq7eYPtQLDBnbY8aCby/BFW6j8p?= =?us-ascii?Q?W1CsdwgXMsbRAJOoI7cdS07Dcq2y5dI5IIbcFEDo+MmMpSM9vh9hMiCM+2dl?= =?us-ascii?Q?bze51X+u0gwfjbnA78xU3TeCMmSFNA7ogP+6IegOsq8Gxg3xJLS6jnWfZgoV?= =?us-ascii?Q?3cmpfyPIIbNfD4Ei1xBUwIl3WGaTG36oolAAom4gAknJvSqu+an4yi6gSgsz?= =?us-ascii?Q?quxvKX2voc6zYbdJ0gvn4ZpXftI3t3DmB9sMTLqdm?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0910; 6:dBBr49dCDkD4Pmnc2iATafz8dqufo8hI9fbKhYKEvAvnhCvs8+ZJFetmfMNFUEiAq5N4X8kR1LRXhGN74pluNstcwxeK3jrkLNkJwpWIsdVjqz0CB04+asWq5A3lATERLiy0aaZ6FNKgSv7MFD4+4nm07Ga0rFOHihQ3c+Jsmr4PI7KHvom8fA2uHqfEfhKgQbjIhF/Oj/UKsTqluFDZ3PIHEse8OANloqbe5bQZtE3LxHgMcZPRaUp0S536D0ghNlHpglykcwEgE4PMl3UKmtnYUL0MaLAa5OIXHel5IYbhojJfQFsc5aWSoDl7zmRTaxungLjUgkBdr8nhDwf64QQqqsSS70l3plTyfABUlh9je+uCsRETPfgE6RXxUIsgrZW5FsUYlU2RBGKXnrvU9qrZMFOzMrBnKQVwyjifJpu3CDHoqKnjxBn995lfHJ3PWlYJlY40ZGgrsx3UazBgf1G6sr21qBiSCMBKKf+jXR1QrJbIc/srGJ43IXZQfayF8FD+U4qwdeyx7JV+UYT5Ow==; 5:J15yKIpmTI6fwlL9OPh6F4OYv6+Ndlhbgml5oMZEBQstqnOwcJAdfmCGU6z+bpK9Zx0/pT5uKclk5qCzujJMumRm/tendlaAiZEGvzYusMQrNdtm2Plhj7jTKxPirARYiu1nHoV0f6TYwWzNQvknIk/9xynRr6kiVAfE4zLDNPiAX8CSpIxWyZ81LPBEuYOF; 24:ppCj0845/q+/OXfNMH9PW/JRNjpJF62YrsG6KiZ67xkF/mvnvv3vV5xhi1ZoyER9mhp4vVMjVo8Ixs12BF8SDCjMrb4MJCUSeMl57EwyRAM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0910; 7:hKqy3xoe83WyAQ+wvRWezlrBwTtu6xInAkIHZ80oH1ymA843/JAbK6OfxWBVLgfXWxHGvhOVNrOJaet3qM8Vkbw5Js1gmp3OieVt6BUAd4OEHD431amtwJ7+jH/oLhdofAN4FcQbdJ1kI98hW+dz3rPOV2b5dvJ86zhCJAYR3l9nqKMKS7YBHYOzNUnM6WcmMumiEJLjF9hQCBel+ZRuMhiitlex955t2fWvLqriawcjkpTmr3tjgKk29MpWzZgJ+OMT5vIK6h44H70Ptv1JACPE7omkwmMSwvz3bzbdkHxRmk6GkwoqIyEDwSlrZ39l+vRNAkdjb0pZwAR2nJLuzw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 May 2017 11:44:08.9786 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB0910 Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org i.MX 7ULP has three IOMUXC instances: IOMUXC0 for M4 ports, IOMUXC1 for A7 ports and IOMUXC DDR for DDR interface. This patch adds the IOMUXC1 support for A7. It only supports generic pin config. Cc: Linus Walleij Cc: Bai Ping Acked-by: Shawn Guo Signed-off-by: Fugang Duan Signed-off-by: Dong Aisheng --- ChangeLog: v2->v3: * Removed custom nxp,[output|input]-buffer-enable properties, instead, use generic input-enable and output enable. v1->v2: * no changes --- drivers/pinctrl/freescale/Kconfig | 7 + drivers/pinctrl/freescale/Makefile | 1 + drivers/pinctrl/freescale/pinctrl-imx7ulp.c | 338 ++++++++++++++++++++++++++++ 3 files changed, 346 insertions(+) create mode 100644 drivers/pinctrl/freescale/pinctrl-imx7ulp.c diff --git a/drivers/pinctrl/freescale/Kconfig b/drivers/pinctrl/freescale/Kconfig index 0b266b2..4dbc576 100644 --- a/drivers/pinctrl/freescale/Kconfig +++ b/drivers/pinctrl/freescale/Kconfig @@ -103,6 +103,13 @@ config PINCTRL_IMX7D help Say Y here to enable the imx7d pinctrl driver +config PINCTRL_IMX7ULP + bool "IMX7ULP pinctrl driver" + depends on SOC_IMX7ULP + select PINCTRL_IMX + help + Say Y here to enable the imx7ulp pinctrl driver + config PINCTRL_VF610 bool "Freescale Vybrid VF610 pinctrl driver" depends on SOC_VF610 diff --git a/drivers/pinctrl/freescale/Makefile b/drivers/pinctrl/freescale/Makefile index d44c9e2..525a5ff 100644 --- a/drivers/pinctrl/freescale/Makefile +++ b/drivers/pinctrl/freescale/Makefile @@ -14,6 +14,7 @@ obj-$(CONFIG_PINCTRL_IMX6SL) += pinctrl-imx6sl.o obj-$(CONFIG_PINCTRL_IMX6SX) += pinctrl-imx6sx.o obj-$(CONFIG_PINCTRL_IMX6UL) += pinctrl-imx6ul.o obj-$(CONFIG_PINCTRL_IMX7D) += pinctrl-imx7d.o +obj-$(CONFIG_PINCTRL_IMX7ULP) += pinctrl-imx7ulp.o obj-$(CONFIG_PINCTRL_VF610) += pinctrl-vf610.o obj-$(CONFIG_PINCTRL_MXS) += pinctrl-mxs.o obj-$(CONFIG_PINCTRL_IMX23) += pinctrl-imx23.o diff --git a/drivers/pinctrl/freescale/pinctrl-imx7ulp.c b/drivers/pinctrl/freescale/pinctrl-imx7ulp.c new file mode 100644 index 0000000..3d8bd7c --- /dev/null +++ b/drivers/pinctrl/freescale/pinctrl-imx7ulp.c @@ -0,0 +1,338 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright (C) 2017 NXP + * + * Author: Dong Aisheng + * + * 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 +#include + +#include "pinctrl-imx.h" + +enum imx7ulp_pads { + ULP1_PAD_PTC0 = 0, + ULP1_PAD_PTC1, + ULP1_PAD_PTC2, + ULP1_PAD_PTC3, + ULP1_PAD_PTC4, + ULP1_PAD_PTC5, + ULP1_PAD_PTC6, + ULP1_PAD_PTC7, + ULP1_PAD_PTC8, + ULP1_PAD_PTC9, + ULP1_PAD_PTC10, + ULP1_PAD_PTC11, + ULP1_PAD_PTC12, + ULP1_PAD_PTC13, + ULP1_PAD_PTC14, + ULP1_PAD_PTC15, + ULP1_PAD_PTC16, + ULP1_PAD_PTC17, + ULP1_PAD_PTC18, + ULP1_PAD_PTC19, + ULP1_PAD_RESERVE0, + ULP1_PAD_RESERVE1, + ULP1_PAD_RESERVE2, + ULP1_PAD_RESERVE3, + ULP1_PAD_RESERVE4, + ULP1_PAD_RESERVE5, + ULP1_PAD_RESERVE6, + ULP1_PAD_RESERVE7, + ULP1_PAD_RESERVE8, + ULP1_PAD_RESERVE9, + ULP1_PAD_RESERVE10, + ULP1_PAD_RESERVE11, + ULP1_PAD_PTD0, + ULP1_PAD_PTD1, + ULP1_PAD_PTD2, + ULP1_PAD_PTD3, + ULP1_PAD_PTD4, + ULP1_PAD_PTD5, + ULP1_PAD_PTD6, + ULP1_PAD_PTD7, + ULP1_PAD_PTD8, + ULP1_PAD_PTD9, + ULP1_PAD_PTD10, + ULP1_PAD_PTD11, + ULP1_PAD_RESERVE12, + ULP1_PAD_RESERVE13, + ULP1_PAD_RESERVE14, + ULP1_PAD_RESERVE15, + ULP1_PAD_RESERVE16, + ULP1_PAD_RESERVE17, + ULP1_PAD_RESERVE18, + ULP1_PAD_RESERVE19, + ULP1_PAD_RESERVE20, + ULP1_PAD_RESERVE21, + ULP1_PAD_RESERVE22, + ULP1_PAD_RESERVE23, + ULP1_PAD_RESERVE24, + ULP1_PAD_RESERVE25, + ULP1_PAD_RESERVE26, + ULP1_PAD_RESERVE27, + ULP1_PAD_RESERVE28, + ULP1_PAD_RESERVE29, + ULP1_PAD_RESERVE30, + ULP1_PAD_RESERVE31, + ULP1_PAD_PTE0, + ULP1_PAD_PTE1, + ULP1_PAD_PTE2, + ULP1_PAD_PTE3, + ULP1_PAD_PTE4, + ULP1_PAD_PTE5, + ULP1_PAD_PTE6, + ULP1_PAD_PTE7, + ULP1_PAD_PTE8, + ULP1_PAD_PTE9, + ULP1_PAD_PTE10, + ULP1_PAD_PTE11, + ULP1_PAD_PTE12, + ULP1_PAD_PTE13, + ULP1_PAD_PTE14, + ULP1_PAD_PTE15, + ULP1_PAD_RESERVE32, + ULP1_PAD_RESERVE33, + ULP1_PAD_RESERVE34, + ULP1_PAD_RESERVE35, + ULP1_PAD_RESERVE36, + ULP1_PAD_RESERVE37, + ULP1_PAD_RESERVE38, + ULP1_PAD_RESERVE39, + ULP1_PAD_RESERVE40, + ULP1_PAD_RESERVE41, + ULP1_PAD_RESERVE42, + ULP1_PAD_RESERVE43, + ULP1_PAD_RESERVE44, + ULP1_PAD_RESERVE45, + ULP1_PAD_RESERVE46, + ULP1_PAD_RESERVE47, + ULP1_PAD_PTF0, + ULP1_PAD_PTF1, + ULP1_PAD_PTF2, + ULP1_PAD_PTF3, + ULP1_PAD_PTF4, + ULP1_PAD_PTF5, + ULP1_PAD_PTF6, + ULP1_PAD_PTF7, + ULP1_PAD_PTF8, + ULP1_PAD_PTF9, + ULP1_PAD_PTF10, + ULP1_PAD_PTF11, + ULP1_PAD_PTF12, + ULP1_PAD_PTF13, + ULP1_PAD_PTF14, + ULP1_PAD_PTF15, + ULP1_PAD_PTF16, + ULP1_PAD_PTF17, + ULP1_PAD_PTF18, + ULP1_PAD_PTF19, +}; + +/* Pad names for the pinmux subsystem */ +static const struct pinctrl_pin_desc imx7ulp_pinctrl_pads[] = { + IMX_PINCTRL_PIN(ULP1_PAD_PTC0), + IMX_PINCTRL_PIN(ULP1_PAD_PTC1), + IMX_PINCTRL_PIN(ULP1_PAD_PTC2), + IMX_PINCTRL_PIN(ULP1_PAD_PTC3), + IMX_PINCTRL_PIN(ULP1_PAD_PTC4), + IMX_PINCTRL_PIN(ULP1_PAD_PTC5), + IMX_PINCTRL_PIN(ULP1_PAD_PTC6), + IMX_PINCTRL_PIN(ULP1_PAD_PTC7), + IMX_PINCTRL_PIN(ULP1_PAD_PTC8), + IMX_PINCTRL_PIN(ULP1_PAD_PTC9), + IMX_PINCTRL_PIN(ULP1_PAD_PTC10), + IMX_PINCTRL_PIN(ULP1_PAD_PTC11), + IMX_PINCTRL_PIN(ULP1_PAD_PTC12), + IMX_PINCTRL_PIN(ULP1_PAD_PTC13), + IMX_PINCTRL_PIN(ULP1_PAD_PTC14), + IMX_PINCTRL_PIN(ULP1_PAD_PTC15), + IMX_PINCTRL_PIN(ULP1_PAD_PTC16), + IMX_PINCTRL_PIN(ULP1_PAD_PTC17), + IMX_PINCTRL_PIN(ULP1_PAD_PTC18), + IMX_PINCTRL_PIN(ULP1_PAD_PTC19), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE0), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE1), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE2), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE3), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE4), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE5), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE6), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE7), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE8), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE9), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE10), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE11), + IMX_PINCTRL_PIN(ULP1_PAD_PTD0), + IMX_PINCTRL_PIN(ULP1_PAD_PTD1), + IMX_PINCTRL_PIN(ULP1_PAD_PTD2), + IMX_PINCTRL_PIN(ULP1_PAD_PTD3), + IMX_PINCTRL_PIN(ULP1_PAD_PTD4), + IMX_PINCTRL_PIN(ULP1_PAD_PTD5), + IMX_PINCTRL_PIN(ULP1_PAD_PTD6), + IMX_PINCTRL_PIN(ULP1_PAD_PTD7), + IMX_PINCTRL_PIN(ULP1_PAD_PTD8), + IMX_PINCTRL_PIN(ULP1_PAD_PTD9), + IMX_PINCTRL_PIN(ULP1_PAD_PTD10), + IMX_PINCTRL_PIN(ULP1_PAD_PTD11), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE12), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE13), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE14), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE15), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE16), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE17), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE18), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE19), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE20), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE21), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE22), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE23), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE24), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE25), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE26), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE27), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE28), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE29), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE30), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE31), + IMX_PINCTRL_PIN(ULP1_PAD_PTE0), + IMX_PINCTRL_PIN(ULP1_PAD_PTE1), + IMX_PINCTRL_PIN(ULP1_PAD_PTE2), + IMX_PINCTRL_PIN(ULP1_PAD_PTE3), + IMX_PINCTRL_PIN(ULP1_PAD_PTE4), + IMX_PINCTRL_PIN(ULP1_PAD_PTE5), + IMX_PINCTRL_PIN(ULP1_PAD_PTE6), + IMX_PINCTRL_PIN(ULP1_PAD_PTE7), + IMX_PINCTRL_PIN(ULP1_PAD_PTE8), + IMX_PINCTRL_PIN(ULP1_PAD_PTE9), + IMX_PINCTRL_PIN(ULP1_PAD_PTE10), + IMX_PINCTRL_PIN(ULP1_PAD_PTE11), + IMX_PINCTRL_PIN(ULP1_PAD_PTE12), + IMX_PINCTRL_PIN(ULP1_PAD_PTE13), + IMX_PINCTRL_PIN(ULP1_PAD_PTE14), + IMX_PINCTRL_PIN(ULP1_PAD_PTE15), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE32), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE33), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE34), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE35), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE36), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE37), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE38), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE39), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE40), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE41), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE42), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE43), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE44), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE45), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE46), + IMX_PINCTRL_PIN(ULP1_PAD_RESERVE47), + IMX_PINCTRL_PIN(ULP1_PAD_PTF0), + IMX_PINCTRL_PIN(ULP1_PAD_PTF1), + IMX_PINCTRL_PIN(ULP1_PAD_PTF2), + IMX_PINCTRL_PIN(ULP1_PAD_PTF3), + IMX_PINCTRL_PIN(ULP1_PAD_PTF4), + IMX_PINCTRL_PIN(ULP1_PAD_PTF5), + IMX_PINCTRL_PIN(ULP1_PAD_PTF6), + IMX_PINCTRL_PIN(ULP1_PAD_PTF7), + IMX_PINCTRL_PIN(ULP1_PAD_PTF8), + IMX_PINCTRL_PIN(ULP1_PAD_PTF9), + IMX_PINCTRL_PIN(ULP1_PAD_PTF10), + IMX_PINCTRL_PIN(ULP1_PAD_PTF11), + IMX_PINCTRL_PIN(ULP1_PAD_PTF12), + IMX_PINCTRL_PIN(ULP1_PAD_PTF13), + IMX_PINCTRL_PIN(ULP1_PAD_PTF14), + IMX_PINCTRL_PIN(ULP1_PAD_PTF15), + IMX_PINCTRL_PIN(ULP1_PAD_PTF16), + IMX_PINCTRL_PIN(ULP1_PAD_PTF17), + IMX_PINCTRL_PIN(ULP1_PAD_PTF18), + IMX_PINCTRL_PIN(ULP1_PAD_PTF19), +}; + +#define BM_LK_ENABLED BIT(15) +#define BM_PULL_ENABLED BIT(1) + +struct imx_cfg_params_decode imx7ulp_cfg_decodes[] = { + IMX_CFG_PARAMS_DECODE(PIN_CONFIG_OUTPUT, BIT(17), 17), + IMX_CFG_PARAMS_DECODE(PIN_CONFIG_INPUT_ENABLE, BIT(16), 16), + IMX_CFG_PARAMS_DECODE(PIN_CONFIG_DRIVE_STRENGTH, BIT(6), 6), + IMX_CFG_PARAMS_DECODE(PIN_CONFIG_DRIVE_PUSH_PULL, BIT(5), 5), + IMX_CFG_PARAMS_DECODE(PIN_CONFIG_SLEW_RATE, BIT(2), 2), + IMX_CFG_PARAMS_DECODE(PIN_CONFIG_BIAS_DISABLE, BIT(1), 1), + IMX_CFG_PARAMS_DECODE(PIN_CONFIG_BIAS_PULL_UP, BIT(0), 0), + + IMX_CFG_PARAMS_DECODE_INVERT(PIN_CONFIG_DRIVE_OPEN_DRAIN, BIT(5), 5), + IMX_CFG_PARAMS_DECODE_INVERT(PIN_CONFIG_BIAS_PULL_DOWN, BIT(0), 0), +}; + +static void imx7ulp_cfg_params_fixup(unsigned long *configs, + unsigned int num_configs, + u32 *raw_config) +{ + enum pin_config_param param; + u32 param_val; + int i; + + /* lock field disabled */ + *raw_config &= ~BM_LK_ENABLED; + + for (i = 0; i < num_configs; i++) { + param = pinconf_to_config_param(configs[i]); + param_val = pinconf_to_config_argument(configs[i]); + + if ((param == PIN_CONFIG_BIAS_PULL_UP) || + (param == PIN_CONFIG_BIAS_PULL_DOWN)) { + /* pull enabled */ + *raw_config |= BM_PULL_ENABLED; + + return; + } + } +} + +static struct imx_pinctrl_soc_info imx7ulp_pinctrl_info = { + .pins = imx7ulp_pinctrl_pads, + .npins = ARRAY_SIZE(imx7ulp_pinctrl_pads), + .flags = ZERO_OFFSET_VALID | SHARE_MUX_CONF_REG, + .mux_mask = 0xf00, + .mux_shift = 8, + .generic_pinconf = true, + .decodes = imx7ulp_cfg_decodes, + .num_decodes = ARRAY_SIZE(imx7ulp_cfg_decodes), + .fixup = imx7ulp_cfg_params_fixup, +}; + +static const struct of_device_id imx7ulp_pinctrl_of_match[] = { + { .compatible = "fsl,imx7ulp-iomuxc1", }, + { /* sentinel */ } +}; + +static int imx7ulp_pinctrl_probe(struct platform_device *pdev) +{ + return imx_pinctrl_probe(pdev, &imx7ulp_pinctrl_info); +} + +static struct platform_driver imx7ulp_pinctrl_driver = { + .driver = { + .name = "imx7ulp-pinctrl", + .of_match_table = of_match_ptr(imx7ulp_pinctrl_of_match), + .suppress_bind_attrs = true, + }, + .probe = imx7ulp_pinctrl_probe, +}; + +static int __init imx7ulp_pinctrl_init(void) +{ + return platform_driver_register(&imx7ulp_pinctrl_driver); +} +arch_initcall(imx7ulp_pinctrl_init);