From patchwork Fri May 12 12:38:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dong Aisheng X-Patchwork-Id: 761612 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 3wPTzT26tZz9s7h for ; Fri, 12 May 2017 22:38:29 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756785AbdELMi1 (ORCPT ); Fri, 12 May 2017 08:38:27 -0400 Received: from mail-cys01nam02on0050.outbound.protection.outlook.com ([104.47.37.50]:60384 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756277AbdELMiZ (ORCPT ); Fri, 12 May 2017 08:38:25 -0400 Received: from BLUPR0301CA0033.namprd03.prod.outlook.com (10.162.113.171) by BY1PR0301MB0904.namprd03.prod.outlook.com (10.160.195.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16; Fri, 12 May 2017 12:38:22 +0000 Received: from BY2FFO11FD039.protection.gbl (2a01:111:f400:7c0c::146) by BLUPR0301CA0033.outlook.office365.com (2a01:111:e400:5259::43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16 via Frontend Transport; Fri, 12 May 2017 12:38:21 +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 BY2FFO11FD039.mail.protection.outlook.com (10.1.14.224) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Fri, 12 May 2017 12:38:21 +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 v4CCc1r7022286; Fri, 12 May 2017 05:38:18 -0700 From: Dong Aisheng To: CC: , , , , , , , Dong Aisheng Subject: [PATCH 4/5] pinctrl: imx: add imx7ulp driver Date: Fri, 12 May 2017 20:38:05 +0800 Message-ID: <1494592686-30967-6-git-send-email-aisheng.dong@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1494592686-30967-1-git-send-email-aisheng.dong@nxp.com> References: <1494592686-30967-1-git-send-email-aisheng.dong@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131390663017134855; (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)(39450400003)(39860400002)(39840400002)(39410400002)(39380400002)(39850400002)(39400400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(9170700003)(356003)(8936002)(77096006)(81166006)(8676002)(50466002)(86362001)(50226002)(4326008)(2906002)(104016004)(48376002)(85426001)(189998001)(106466001)(53936002)(105606002)(5003940100001)(2351001)(498600001)(54906002)(8656002)(33646002)(2950100002)(6916009)(36756003)(110136004)(6666003)(38730400002)(76176999)(50986999)(5660300001)(47776003)(305945005)(2004002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0301MB0904; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD039; 1:Ph1rO3iadglCPFy5XQYSkzlRLa8o9sG99x7GoGa6PD6vbmMo7ffwJrvQvnyq0cTk4zKrICT0KAlwRsxeUZfCb5kRTR9c87hWQSShf5KFLh3IaPiAexanVCPuWEhMqNTIg868ahnqnV7ev3kSSLKQoiLU/4H882AM9sJkE5Uy3sq1eOBN/X9OxeOPL1OHNxju6FJsNC8rI2KbEyGykRC3b/wvyzxY61UvYy4zm54t7HjgdiPO2Ke8gOB356rMWvHgAWt1dNcanfzTcYGcpNFBF4+izePConJch8LY+FNNjKM10QPdMVWRniw6BdIz8uMFxNIXLF06Ebj1xVGYc5aB625PlHXz2wlXDdwrfOQ80cqjWn3jEacr56K811NCvHy1Ew+VhIiDgVaWuP5EwPYxyUGXU889Bdnt24Izyr8j86a4CLy/c4+q76rqnr+arqek3ocQ7YkS8ilLNKec3q3ZNvr6nyVJdEufqtCzwY4eYlDcON+ZUz6fFGt98VFk3T3nFEttTWvCZj8MrJow+a67vLXWFrRbfMU6C1Qd4L/BM6QELAkLOpa4p5evii6ZG5xfy6DyMs8R/D0jER7z7RPAu2zLhBHL6vYAFqimVa0N2EoQcbcwes6xdeTSROgLyEg5zq4SrA/mzalzpI5SqZndV07d2GOiI44z7k9MpygCBBS6gLiPQyqaquiOkfv5fNJeabpziOCvvcnIdvxmLEyaRYPet0klmFeJL6zT28T0j3g= MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: afa7114d-f81e-4557-7b07-08d49933c667 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BY1PR0301MB0904; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB0904; 3:e+eWCMsSwmmC4AvaKgnmNJbaZQLrlqWb+Zoarka74zeu9TbypL3g6VbkQTKRLtMDadECvw/uBlYjOIyj+VQi6YkMJgpRxhOJLqhhQRAaUVYX0pntw9jaf1P8XXulN6xDz9bwPHlRZtazAqK+7a41pKxOGFDO7Ay8ZVsCfxU3q2lm/YAzYNj1oZ9Vk4LpwH0Fzw2dvIG9i8KcMyUnk8FIb0QaGybbllLDtGOiGwQhYiO4FykmuA3P3sKJzZSmKMrDqK6NJvMlsPIvi6/53wya5/mLdXeou9rZCCljh3VGc9hLa8Y79DytHJIo40lBDRLvX+hVpq9PPum4w9+91KlijJea13auj39a7PyXkvEVS7ZOSCtKLuxsrbI4ogB2CVh9EeOB6PcViTULWAJAwAICqcV/xXR5cARlNa8dCxxkJCi4bxiuK6j3gFOiXNZmirzG; 25:MmqVDSdVKDJTkL3QyrInbR1IU/gUDYmUQw37uwFPbW4l1zuczhko0sikbmlSmdqoByMY+QHRfHjae3Hh6B+4iTlffjojCWZ2KeMsIVt+HWnuusaXS/qyehAL700kve5bXeRYWlaSh083rKhxGYn8p7Jy1/qed0Recoj+WcmFPDYDbA15alfdfCpCxR94rr3M5p2fieNRthhYNpHDZ5Jzq7xFD+RcvDx5khiGFsTsHdIMHHM3ezPYXimzxoOUbAQS5kIx2Q49RShdeDZcsbUG2OV/bBhtCIZhA4TGqpjVgBKY5TaNrPzvNZGya+g8rHMDQjuiQH5P/eZn6d1rDXWXxMf4aUyMr8wKOvK990bL7nnfivSMLXUMwZmmtLw0l4vlAvlN60DAjQkgsUycxCitDOYBlk11MsHKy6TZbqa2KRGA5CqYdGpcFBHoWjsL8m038dRzV1jx9tGDtwJ0VK5R4w== X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB0904; 31:z4Q/vxZzSp0ryoC3TA3HRm76feABmsQfm3f195fiUa5FIDvv9CsAdzMJ+QEaSJExF8Hc6plSZPqWHB1LU+e3dUgA5jefDlUWasMkTSv+5oSCP1iH6dGYtgKtI6l/4cKTIKrhQwaeTWgdLChSpNpiSe0BZZQxX9H0NGjqjo75e+WqUYlImXvdLgoAbYwomy4zz4nyACLuJcorcwcqLv4jlkQGALdiPilWQdlXOyXMUzrYeg0NByWgu+I4U7ltsaDj 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)(8121501046)(13018025)(13024025)(5005006)(13017025)(13015025)(10201501046)(93006095)(93001095)(3002001)(6055026)(6096035)(20161123556025)(20161123565025)(201703131430075)(201703131441075)(201703131448075)(201703131433075)(201703161259150)(20161123561025)(20161123559100)(20161123563025); SRVR:BY1PR0301MB0904; BCL:0; PCL:0; RULEID:(400006); SRVR:BY1PR0301MB0904; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR0301MB0904; 4:kNemAsenMZpCxRtHjtgHcrXobgWWaDdhL20bekAT?= =?us-ascii?Q?94E9BxeNvrV1/BilD9cfpc9YpZFMeoixRd3eYogPIJgPvJyrK/pE7GY8E2xk?= =?us-ascii?Q?4GlS/ladaeK7NvPqi3BcleB9RzRfKtVX1vZ9yR5hkhIeMpOqRn3QwgKvXEjr?= =?us-ascii?Q?B9VSKzMtQIbOpKYDYOU3TegHLHPei16q73OlfD7pA6hmXlegoyKDaqKvd2/E?= =?us-ascii?Q?4LJ2wjxDz1BBpnPTPtg092ScHlTvou+pwisHN16k6SHCJGaP/8m1PI6vXdb6?= =?us-ascii?Q?ezlOAFflOG7LOdCWKdoQJB1LcSOJeOT0eNZeeKsNIQCRm5MyLsGgUfoe3nIk?= =?us-ascii?Q?UWcJxFDMqcGR3DIjV2gMfSTrKUORtfL9MkiTMNbkyHci8CiETwMTSpt3KDEL?= =?us-ascii?Q?8Ah1K7FlWBGMQ3rg2KjGLmnILEhwL9VobF4yOiDPBcjqHXzl+5CqpMCwcQU5?= =?us-ascii?Q?kDS/H53UHZEd7Powqev9wiYbO8M0YQyUUedTcBl408KWWjlhmThKT8yccURf?= =?us-ascii?Q?Wsvf7qvaq1H+wslqTqCNjSjNDEvudwJCr2VtGs6pQa53y7KnfZ0FF3raaulj?= =?us-ascii?Q?NC1swKjfSuunF6Rw3F1NooT3ADLLqhxPnHVXgllz2UjvI/tDA39NWG/p+Xgh?= =?us-ascii?Q?lF+dcuRfGtNYANPlIPvRW89zEsbs3ESrI4UKjvtm00GYGLMAqUgAMXJIP8bo?= =?us-ascii?Q?yHT7o3aMPQ7OxOgwlhD+1lSvOJ3QeXA+ZqWOmxkedIGSHSAxTremWiJfcaQz?= =?us-ascii?Q?nreY7C0wWaVk8on0zkM0VJk3blFcg6TMJNnEO+rBT58KOpdpPSHbuNvm4zzz?= =?us-ascii?Q?34afhKN+OfTZGsBbVzR40tCAcRpRneNPgOFGyo6TssC1hDAX0GZDDWV0iU2I?= =?us-ascii?Q?I0N69aUpIEPalilhzjqd08ovzcQOk1YrjmGxBWm9ZRPD4VPuc7bFgDzpCjmF?= =?us-ascii?Q?xLNLY++xecXg6tHazymHFRrRRtdm8Ka4CYYcKqo+Zw=3D=3D?= X-Forefront-PRVS: 0305463112 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR0301MB0904; 23:mWOybXuy0O+MNsCVcZGypis7bBhJDPVtRJoGBih?= =?us-ascii?Q?x9wMfRc7xuIyU16wDV6RfznYTn5zWGoR09CytrG+Pa9ED5WFI4r95MWsl7IW?= =?us-ascii?Q?R4He5QJcGWF2Yzth5Y9r/uRod9gTIKuzmWmjVxPzBtnzWBxa9+Y4HTAj7Col?= =?us-ascii?Q?g0neMZmlsU3wXGhmADPo1p2DHI+/mvPrpE3/jFoptoJFApfw/mJ5y1QoUD2C?= =?us-ascii?Q?9W+A0dYY69SnW41R4peSdscGFcFCoyuvHdyLAKFsxH9pNhdI4zQGhFhNv2BO?= =?us-ascii?Q?wzbn2wKGRzeFlZwLICisVuZJVLiyWdrDRQ/SSG3XP0IFOkdswOHUE5c+cIUJ?= =?us-ascii?Q?ccmI3nIyQ84S8VBk/ghUWzzn3JSSD0fzhimjhZuLgpdMbIV4VsR2sInPhMw1?= =?us-ascii?Q?dAWF0UAN87e4xajfGwURDHfrE4PFBaDGznB+U/lR+nPovdtj74bvJWH6yWBS?= =?us-ascii?Q?PJPQpETOF6OhawPmJCI+/yTYEFjlLOmdGzd8p4wt7Rv0WycPDyZ1tQRhruaM?= =?us-ascii?Q?KsuTeTxStuynGCHaZAIaiFZ8uglrVB1I2rTGEeO6xjzIoa+Mr8EQR6YL1OMB?= =?us-ascii?Q?H2lhpthusLzL688xY+wQJAk5gqPLsqnFUhrx/cqxBI2LecY2xMHlCsdQl+XZ?= =?us-ascii?Q?UdbbJToxdQXUjbMmE8V11WS0MhrohjCYy4anaAMbJp9v96//RJD7xVYJJnCO?= =?us-ascii?Q?cLT92H94mpVLWROSEmaSCEQei3TnCSqDO48Nvi7Oz2k8ydPpueOxSSDA4wES?= =?us-ascii?Q?PZoDkbgdYGpgR4Dpx4AIzGQGhBMXfCi+6GRLZpmr9lGWl2qNEh7RfstN80Oc?= =?us-ascii?Q?aQHsEeZwPKW6leV5el9wYpVa2U9SMK/Gtiq3IRJ7o896WZ/uDcHQ59p58ubu?= =?us-ascii?Q?OEqD/uOm8/aVurqeMUV0aj8m8od8zqBsg02/Odl4BkQ8tZXFavoSf33zGel6?= =?us-ascii?Q?eeBRXzPF6asJrmnJX8dP3q1z3xCsu+qs+FsMbFf8RXwMRVQQCClF+M45EHX2?= =?us-ascii?Q?qdHcrt3Akgd2wAROlsaPYa13i5tWZlZ+5Y/7GP+xojEXt0XVwc4jMrXNWveX?= =?us-ascii?Q?E+uixxyW0V3vFaD34dK8ZtWYkU5QefptxcoHA8exzOKZ2vzHkrvYjjZ4pxRS?= =?us-ascii?Q?kWLcIpvSEtslkf7cvgjuKAhR0F13tKq/e6P27ARqdMzVFmm9BX5MdD/gHJpL?= =?us-ascii?Q?n4guoT9gvwnr/c1Ruw1RRnUZiLxcDcrWGTdQUzucoNap7OPnfvoCrfLUJW8z?= =?us-ascii?Q?FegHQ7WyavZ6pu8PUdvw=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB0904; 6:f5gLAA/XRS5dLZnhO1qUzmnIQU4pT73N9yPloGinFAo/h8DgAA2/c9IILME/SmA2YO5UJk8G6PIHFGUvktwKyLrv+Zfa3OU9d2Oe0fJaQa4HdslTSEC1viu+ITBXK/rKQTc5AVEk53RY0L16Vaqsx8AbZcievWtpBHwVwp2QSOl8yTGvKYzVON6yfuecHsMPuKm49LOcgOv3wcEPhu0KcNvJK2qIQ2MNuNpyxmqx6ShYsiZ83co0ivQgJUixnz925laQBgeTz2JhQc/kz+1jWvt4jJJvABRF3u5YgE1Xyren+9cDvyXxDAEo4QZuUEBeomkUR5Dxy2iOWO3s6Qw+6xlLq4ZvgtjYL+jLYk9F7tnOjipDR98fhptqBE+l6WD8K45QBGP00t0CNJNdBd/S8BqKshVzBkHtSfNadTxoUg3hFAiCFutWb5r8xEVXITG6HSbUDnwnKJ1JxL8m58FCrjlRx9k13hpeP7X8s79XryjcoR7PjIh72WqjRCD5iaYd3SEtNJnehOlhocZ7S20AwQ==; 5:OPgyW47HV7FYAdkVde8TPMS18FxdwATwahTwvDqWxU3cPgdJMewapsn34e5XChBQAvEFlkrC0KEalLl0iymcREBQ3bw2Kl8mphh2HlCFpfvXh5km6BXbbg8hXRWc2XBI7rXeposuUQWBSwGC051FvE5lzF/GLaXcxfJoXuH0J3KIw2f4/AZgIJCkUFaEti/i; 24:wcJ2JQHAKnSrPdoIHHBhb5A1n2pRvYjCb03SQ5FosVC8Cr9gZjpDpelM3B1/lXHE2m89m4KnE1GtByyyUhF377c+te1GYL9t9i4xoExQGek= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB0904; 7:iEzjdZM7pKPdAY5y5gC5ZEOP+xqiJnJJJqHmwSH5aXSyZG4KJxuZSlDE6PWyjw+6IJ4Kr4pDqJnqpmYAd5nCTUWObLALcEK+xWI57nMUtSihI2yggCt4yA9PMck525cx0P1HdTsFRtjHLTAjcTGCTLeoPIDJkBaMesx4MGabONJJ36nUHCr+qdkl/MPVfYdIBiUSJifalvOcwIOxuZsoArq8oO80oU20G7jjTItjE6c3x0tjxHoCaN/W09SCWpoBNiTpHv7puXgfWiwy4HsJcGS6mj9o35PvnIpY8u3b2YBC624P0kuMGFWRQUy+aT63lCn+JmCFv117jK8QdJ6sMg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2017 12:38:21.5262 (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: BY1PR0301MB0904 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 Signed-off-by: Fugang Duan Signed-off-by: Dong Aisheng --- 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);