From patchwork Fri May 19 07:05:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dong Aisheng X-Patchwork-Id: 764460 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 3wTfM947fdz9s7v for ; Fri, 19 May 2017 17:09:57 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753680AbdESHGO (ORCPT ); Fri, 19 May 2017 03:06:14 -0400 Received: from mail-cys01nam02on0070.outbound.protection.outlook.com ([104.47.37.70]:52688 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752870AbdESHGI (ORCPT ); Fri, 19 May 2017 03:06:08 -0400 Received: from MWHPR03CA0021.namprd03.prod.outlook.com (10.175.133.159) by BLUPR03MB165.namprd03.prod.outlook.com (10.255.212.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16; Fri, 19 May 2017 07:06:00 +0000 Received: from BN1BFFO11FD023.protection.gbl (2a01:111:f400:7c10::1:164) by MWHPR03CA0021.outlook.office365.com (2603:10b6:300:117::31) 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; Fri, 19 May 2017 07:05:59 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) 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.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BN1BFFO11FD023.mail.protection.outlook.com (10.58.144.86) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Fri, 19 May 2017 07:05:59 +0000 Received: from b29396-OptiPlex-7040.ap.freescale.net (b29396-OptiPlex-7040.ap.freescale.net [10.192.242.182]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id v4J75bFo023171; Fri, 19 May 2017 00:05:55 -0700 From: Dong Aisheng To: CC: , , , , , , , Dong Aisheng Subject: [PATCH V2 5/5] pinctrl: imx: add imx7ulp driver Date: Fri, 19 May 2017 15:05:45 +0800 Message-ID: <1495177545-23006-6-git-send-email-aisheng.dong@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495177545-23006-1-git-send-email-aisheng.dong@nxp.com> References: <1495177545-23006-1-git-send-email-aisheng.dong@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131396511595329689; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39860400002)(39450400003)(39400400002)(39410400002)(39840400002)(39380400002)(39850400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(9170700003)(105606002)(54906002)(77096006)(5003940100001)(5660300001)(8656002)(85426001)(498600001)(104016004)(189998001)(36756003)(48376002)(50466002)(76176999)(2906002)(81166006)(8936002)(8676002)(4326008)(50986999)(53936002)(38730400002)(110136004)(356003)(2351001)(106466001)(2950100002)(6916009)(6666003)(305945005)(86362001)(50226002)(33646002)(47776003)(2004002); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR03MB165; H:az84smr01.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD023; 1:FwAfXAM6dk9cJhasfJRKkJ8yggHf/d70k+oPsW4x+MOwu5vMk1EZTqR7afBybzVh+H/L50SnPRjknvrFgB6/7uXxnsOnNlASEW31xiPCvxFfsQCb8SL3e2XynTsKk2pBulYoGl4IifcN8NfAxkyv5oHgbXIhDrLXHWZMrNLnu0Wyt/yBf+t2YwXHh7goXTohd8aQddx/R9es0YCwJAxQiClYB1gOF2aPOAm8VmDjvcPJCZFTF+tCTv6Rnx+uJOpTLTwm/DJNyZE4bMG1ilQ0ezW5d8cc5vYpWDtm2rL3V0lhBxTTsmF946hIlgnMC7zcir6VeLSnQQFdWztNycGnNB55BI6ywZtHajkuJrG1C6DSNW3iMiBZ7qjf8uDdCg7S9oKRjLWM3E1sRZTFPOryheJ9yMP/x55+KccknN6sbw+Ijoxte2Ia3uKYm12UH+gn9CkF+HdcBR0qi/hEyyOPwpZUQEo/099POrqPZbmKsD/wfkd6risujXYHUMAgRsI/qvazCfJfuXtjO1AWYNT+P8AMXm/ZqlfidEaIUTmeC+Z1i8611qALcdmvMjNcc4C64WREnK7mGRbxfWU32tnEB99kaWaBstcPOMZMssO7SBC+CQX8we7HxrMLlT4oJ8HL7km7Vv7BIyWcbZlDwbvx9xMEh/BmTwASWWnoAAbEDkorKXO5OWXrjlmW0wvNQOHkVXj1PF0+Fbf83F7BCUT4h0HyhpOFFo9PVqdRv8sTjJ8= MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2a8d104e-138f-4aa5-7899-08d49e8580d4 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BLUPR03MB165; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB165; 3:U1rV3jwefVv9EG0YT9i70Ru+aY6OqULe4+PFy7hVFb/czwUvSnT93n0sw7Z8d47TKUkB06lxSshtNp6J+oQzTx4CAx0dq+pkA5c/crRQ1bWnTZMDKVxaKq0d+xkv70bFnWB5wV3VQl4l2qcPv6ZIaSeJTYFaorQ4qV3xjjzILd+YY8lBMH2fDtumV02IzsS++r/LanPEVbltC3AoJ+3la7kmx9CnGKZ5cQJrsdyI3hnPlSXm8f4xbfmHOUGVfq605GAYtcieW94ZC39tK/MBlq+skmkZPzN9vitPOHADqgUHoIuDP2TiqJme3y3Sujm/p6IlNxLQD48ZTeW31UTuuxKJzvGBGMD2ODkdmnWdLB6NImjC4Ds5L1BfxdClZyVLZ8rmZvEsEAc4LSN/xbyB+zMD3aYA8kSGT1trq72Ivb4f7Y4MvLbmFprBpTSDtNRs; 25:TYbatUjp1phPKvNx7rw0mzj6zW8yMami1gQfjs8yDlpWISS/s1OXZ4WgGUAroybxp0JMvfFH7nAdCaTKbUOPcE0PaQL4jEqwzQWTMqtqIBt3os7O3qTZqLBVNl7EAU3sT5KrPbnSDoINiWAx5xGDep69sFCIQp92hgxwEDAMOUZSjfiu/PlWtjxmPxiNdaiSkrtUtEFBurAXOUKs9c+Z5cpmBnrIzHfgtp4ps9T1MK7A5DSQ4Y4M7GCCcVVTUcfy95kS1U4ocfsDOXe05ZwYsm+CS66LBWbnQSPMaUTl5paXSTBfjSQ2GljC4whZfR7qo5kPr7ppT5cPEqV+Mn3hCn1TW/2BwkFTmGpA8a0CF4y0YtwOihKCXVZA3r8a/Tp6aihgp90azZRV0gAxZq9M7u6NFu5ES4OjSmXhT4hHQrG+8iusTWnALK04H1svKMU2+r7N0FniNt7tnWRuwo74Aw== X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB165; 31:BdWtQpLQIGDWVTaQdYX5awV4QyB6SNA4ctxnCPDABuA9iGVezmSqkDGUkxgAfMTP314FSq4etbdntP5KKa4lf/2uULTm8u7rQbn0EgUImwjEnz+2MJdxJY3yYFIIA4bdzYX/d/1GiFkMXOHGhf8ZAQDqGzBXWZkNQIYfNUt06Mmw03qJIhkf0oHHlWM/fICEtd0B2NtSmGm91ghqJC0v+ziqCf9Tc8p51tIApudjCHtTi8BJxbFueW+nbiPqYGdy 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)(13024025)(13023025)(8121501046)(13018025)(5005006)(13015025)(13017025)(3002001)(10201501046)(93006095)(93001095)(6055026)(6096035)(20161123565025)(20161123556025)(20161123563025)(201703131430075)(201703131441075)(201703131448075)(201703131433075)(201703161259150)(20161123559100)(20161123561025); SRVR:BLUPR03MB165; BCL:0; PCL:0; RULEID:(400006); SRVR:BLUPR03MB165; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR03MB165; 4:x81SpTtAitwVZ9TMHyg17bm5F4H4t787tfalAjPNSoL?= =?us-ascii?Q?xv9Q9VBOlmkc0hvYc23Nl5CkfqHTuBCca21hm4M0wCGg5jOks2SdNAa4F90f?= =?us-ascii?Q?vJZLnZNZUKk5p86ZBQuV5tvl5Cu/l1oQNZogv24Mi4I2nhF2PiZ62WzBXSyk?= =?us-ascii?Q?xgb+GapLbVQXw7ERn6WI0QJNY42nXJAwNK+6sOoRzXtlKok8Nc6BstEBKie9?= =?us-ascii?Q?vGYVekoZX2X4/651aE3yKZUFxHFBARPxnRIuZ8zCfWkfStaopx3EGgxN7TdQ?= =?us-ascii?Q?2NOnkf/JEAqK43OsjIinfcNC7IzRxHK0EU/+F4tGiXFK5+g7J0S5Mv6TNZJi?= =?us-ascii?Q?HmNBG+KDkv6UGSa9rUH02TJSEKAywGPF9VhmVmvb1iQ++RcwmK5CJwaVLrk9?= =?us-ascii?Q?7IKmQhXODY2bYQIDF6om6CxCS+igJAxnTxAUwbXvPx6XTtw08wXNzXfOGA2S?= =?us-ascii?Q?0kci1yBA0D1q9NmLwigDaqOCj86er9UNaKHu8CApJfRG2vNXwPQucUCk4cjE?= =?us-ascii?Q?Yo+T82oRSBiTzubSNzlnfIb3ELTRAHXROPLpy/NQpASIPwJlif2waAfU4L5E?= =?us-ascii?Q?KvZmeetZuhHe8uLq3u0tUjwDEV89nB2Z9qJLlCB8iCAJrpO6oiHe17+dOayt?= =?us-ascii?Q?uu0FPRkPRkaj1AR/DfAViGU8Fc44MRLPnmRLERPfEzTs0uZDbrjWl8PqHXxD?= =?us-ascii?Q?ZWOO1gSzIEDLILxN+PiXasp6YJBPP03+T7qzn7Sxs/6XB2ji0v2AuZsaW+ev?= =?us-ascii?Q?k7WRKZo81Ap89vBc+kjYEjyJgg+QBYjJSnhSWsYhEue3YhBI8AFtQXDBFpgk?= =?us-ascii?Q?IDGTLVSe0QIlorQj6r7PW3EtF6G9TIOfKMnUyW90E5o9ETr4J8zrg6NG/AYQ?= =?us-ascii?Q?y2iFDGU0y7ygMkA2xfY5igT08Lv7lfos3p5fH6weLXbOEp3sxQ4+u4zRaSWp?= =?us-ascii?Q?zcpLS/iiPWtdd5WMqGmk4ztqNxY1N12y/L/0JUg=3D=3D?= X-Forefront-PRVS: 031257FE13 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR03MB165; 23:ovQl/0KlkhZLSv+J1wh7ECcfVwZAkTUsFJDIz9SvZE?= =?us-ascii?Q?45B9kK5JPKQcohEo6tNHE2L8hv/66klwcHzI/CFex1yoKk6DDCF4u0UMSZoB?= =?us-ascii?Q?fkyihyZ/2pON7SscLPwFWtsS6vCm9MEU0rrdbfFCNKtsmfSYe8C30KgsfuA+?= =?us-ascii?Q?Qs/DKBeJlTx4yJXrudZdUrrXMN3BND70bxGibovSm1jHRZ+DxBeYNwMpt/wR?= =?us-ascii?Q?KJ+YOY7INW1H/A6yPO3NIrRNFVyYn83wV9SXHacUpitlVR1yTFMa5+4mSC+O?= =?us-ascii?Q?/GOM4QK7v+uFSRnE8c6kBE6YN8vH230xit5C/G9T0abV3dNbS41GRgvz2Kan?= =?us-ascii?Q?GYIPskrB7xHnrReVevY3XZiSN5kRpVTn3cU2qQqE4cE0k7zTlm12je7qarfT?= =?us-ascii?Q?iAsi3svyRrRX0+Rp0xImQQ7hgjJYzgTGBOJWbkGHETd9R3M+Nn7KeBipRLFW?= =?us-ascii?Q?XXxkIyoRqDWXb9MPUOvEVPh8bRdndUVSUwfdaP/nsxRQMq12QYFMZctPmsS9?= =?us-ascii?Q?+ag1xPc8WRiNPc4ahIVGlpkRnQkl9XhgCXYwfwH4C1hBNpyXE9rY/rz2ho0K?= =?us-ascii?Q?gIjQ40J8GWt65+MLo3Ma4X6J0tuDoYz9pcZH3v9vnjLS8yzkShIUHR47g4uW?= =?us-ascii?Q?yO9cR08vA9je+7e7Ep6V1QpKrlRU01bAYL8ygKrLeUp3/r4EDLfMWB/I0yg7?= =?us-ascii?Q?HdImukKdf8XFNMIARbxC883Gxlt3+Y6pXjqSdRR4Uu2JyDfZ38mHeVYNm6IF?= =?us-ascii?Q?C9i0eJjYD0XBovO4liqQBxOhQwDuy41gbFSCmGdaokfVDRiDgxi7RrxzogWe?= =?us-ascii?Q?MjlXBbmDoOlepRzmXhCriRoxkI2sR5HTj6MUF1QbYcP3FzNDnfR5tz3F/api?= =?us-ascii?Q?Lkwq3TnW2iIt1M4htAx02CyNk0RE6R+qYtiiUeOygFxsJ8/ve4c+DZuaaR/m?= =?us-ascii?Q?UUNE4M+L4RAEES1v441QAjaTHD+w2+5pjPKUDIeuXs/laB3ccAyJD5kdFEmf?= =?us-ascii?Q?zfEHONIctL79TF2X41AtopBKuG7WiuisE2FuJdOBeeVIEVbV32TRbKGzrlnb?= =?us-ascii?Q?AA4XKyjWglmVKxcCL3qg/Q4hm1bZqQBmRLZZHTYwcenmgeFVfX5wpgx5PknX?= =?us-ascii?Q?Pl9HTdlLshWpTLoJaIMpgNi3chtnTR7tv9co7ZEN2d9UmMny/kBKTvDOrmax?= =?us-ascii?Q?zKJsRGI7bhloBqOUA1raUWT3Jz8ySqzhR/2/Pko2H/WSobl+9iQ7qK5DC3zl?= =?us-ascii?Q?q+4v33lAXCF/uND6U=3D?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB165; 6:aUBFHZFpf9t8g25fJGeQrEjO/LZNVElKmkzfiujO62mSC9oeOIhgUykpIEthfhrpbRyAa2FIHSU5SRWn6BdSN8xAleM9cGbR/u+fq/5M5vsXNSzXVFv+5jZmbLXBxlpuCQcqYIFADBhJY29gm+aS4YgiegtTYIgXWpPO6DXJxfPn06UAJTzEsiRxYpiB5ZdJ9gytOHUIeQa7g/aJZVWbW4yg01QMxhC4NvX/EQ2HJoXeEzHhdojkTEnfU+6lsQaR2n8gctdRBA1OTJIrJAeBPE7dOV9WUXnYzrizwoIs2ffIqRDtpL8n2p2qTJnOpIi12aznfcwYJMshOGUSiOORu1oaR2qXLujl0IzHIdQlslffTcsS2HxrDKI118ZU63B2yOtKxVBQyZ4PiZ1VoYejXBVA/c4HtFjX8CQ5sj34vqcsReQBZvPiYITkJrZyjUSa/xg606An+i/KRXuo5rufNj5jpkKvZVPXpr8ObNjSBjTJZq2mh4JZfVLBBYK+nQYHtyOI8vh+4WWIWZ4kk4k1PQ==; 5:EyQnhqxZWiFRv7F1dDdnY/ecr/K9WJ1oFIN/CGb9zCUrfnYXuOfMCUVGy3U0OReKP9NkYB+RmB1K7lVABcyoq+T+kxpBrhniRq/h6L3tRfwpVA3L1t++QetqMshhfIshgdDsTP7gy+/CktRBOU8ZRRZN48cMI0rj+/8eVJdSSnGMLKSwDNdbOQJQA6xVqGdO; 24:5f7cJ2e9Br5ah+Ny7A8vK2ohtG+oDUSR3K98GdqtPaP0mQ1VaVsQajPid0cGPy1yFgo/l5PJyq9P3Rd94JFOmJpCKgXbIZq7V9DOOLgjaxQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB165; 7:Pm592gYCAa8Q9YvIQR1rnYabE7gw91PWYuFb0K+iZfUzYOkEbIbnMzypw/sVTwfSnWi7VfwHJjJCeCqDNZWeFr99n2+sPEOZ6JmyBY1nblhum9W4kLFHy+/Gy9d9XUG2n4UCzeQLznGdVWA9TW7MV9816CyZSZs30pFkhc/KBGhQdvCaBIsf+GTUSOPxHCKn4gcIgsAyOKjcK57If54QL9W8AYv0UDdK8BO4Enlx+RY3MwRivbL1dw5H/Ai05v5WED/hvVMRx9JczFiazTNY0g3eBTq06u0BcbbcRnwkFr07Wn5vyQXAxGho7Ypn1pYqLAKjLnVjl2c+XEz2CRwbiA== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2017 07:05:59.2365 (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.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB165 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: Shawn Guo Cc: Bai Ping Cc: Fugang Duan Signed-off-by: Dong Aisheng Acked-by: Shawn Guo --- * no changes --- drivers/pinctrl/freescale/Kconfig | 7 + drivers/pinctrl/freescale/Makefile | 1 + drivers/pinctrl/freescale/pinctrl-imx7ulp.c | 358 ++++++++++++++++++++++++++++ 3 files changed, 366 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..dead416 --- /dev/null +++ b/drivers/pinctrl/freescale/pinctrl-imx7ulp.c @@ -0,0 +1,358 @@ +/* + * 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) + +enum imx7ulp_pinconf_param { + PIN_CONFIG_NXP_OUTPUT_BUFFER_ENABLE = PIN_CONFIG_END + 1, + PIN_CONFIG_NXP_INPUT_BUFFER_ENABLE, +}; + +static const struct pinconf_generic_params imx7ulp_cfg_params[] = { + { + .property = "nxp,output-buffer-enable", + .param = PIN_CONFIG_NXP_OUTPUT_BUFFER_ENABLE, + .default_value = 1, + }, { + .property = "nxp,input-buffer-enable", + .param = PIN_CONFIG_NXP_INPUT_BUFFER_ENABLE, + .default_value = 1, + }, +}; + +struct imx_cfg_params_decode imx7ulp_cfg_decodes[] = { + IMX_CFG_PARAMS_DECODE(PIN_CONFIG_NXP_OUTPUT_BUFFER_ENABLE, BIT(17), 17), + IMX_CFG_PARAMS_DECODE(PIN_CONFIG_NXP_INPUT_BUFFER_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, + .custom_params = imx7ulp_cfg_params, + .num_custom_params = ARRAY_SIZE(imx7ulp_cfg_params), + .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);