350 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 20224 * Author(s): Jesse Taube <Mr.Bossman075@gmail.com>5 */6 7#include <linux/err.h>8#include <linux/init.h>9#include <linux/of.h>10#include <linux/pinctrl/pinctrl.h>11#include <linux/platform_device.h>12 13#include "pinctrl-imx.h"14 15enum imxrt1170_pads {16 IMXRT1170_PAD_RESERVE0,17 IMXRT1170_PAD_RESERVE1,18 IMXRT1170_PAD_RESERVE2,19 IMXRT1170_PAD_RESERVE3,20 IMXRT1170_PAD_EMC_B1_00,21 IMXRT1170_PAD_EMC_B1_01,22 IMXRT1170_PAD_EMC_B1_02,23 IMXRT1170_PAD_EMC_B1_03,24 IMXRT1170_PAD_EMC_B1_04,25 IMXRT1170_PAD_EMC_B1_05,26 IMXRT1170_PAD_EMC_B1_06,27 IMXRT1170_PAD_EMC_B1_07,28 IMXRT1170_PAD_EMC_B1_08,29 IMXRT1170_PAD_EMC_B1_09,30 IMXRT1170_PAD_EMC_B1_10,31 IMXRT1170_PAD_EMC_B1_11,32 IMXRT1170_PAD_EMC_B1_12,33 IMXRT1170_PAD_EMC_B1_13,34 IMXRT1170_PAD_EMC_B1_14,35 IMXRT1170_PAD_EMC_B1_15,36 IMXRT1170_PAD_EMC_B1_16,37 IMXRT1170_PAD_EMC_B1_17,38 IMXRT1170_PAD_EMC_B1_18,39 IMXRT1170_PAD_EMC_B1_19,40 IMXRT1170_PAD_EMC_B1_20,41 IMXRT1170_PAD_EMC_B1_21,42 IMXRT1170_PAD_EMC_B1_22,43 IMXRT1170_PAD_EMC_B1_23,44 IMXRT1170_PAD_EMC_B1_24,45 IMXRT1170_PAD_EMC_B1_25,46 IMXRT1170_PAD_EMC_B1_26,47 IMXRT1170_PAD_EMC_B1_27,48 IMXRT1170_PAD_EMC_B1_28,49 IMXRT1170_PAD_EMC_B1_29,50 IMXRT1170_PAD_EMC_B1_30,51 IMXRT1170_PAD_EMC_B1_31,52 IMXRT1170_PAD_EMC_B1_32,53 IMXRT1170_PAD_EMC_B1_33,54 IMXRT1170_PAD_EMC_B1_34,55 IMXRT1170_PAD_EMC_B1_35,56 IMXRT1170_PAD_EMC_B1_36,57 IMXRT1170_PAD_EMC_B1_37,58 IMXRT1170_PAD_EMC_B1_38,59 IMXRT1170_PAD_EMC_B1_39,60 IMXRT1170_PAD_EMC_B1_40,61 IMXRT1170_PAD_EMC_B1_41,62 IMXRT1170_PAD_EMC_B2_00,63 IMXRT1170_PAD_EMC_B2_01,64 IMXRT1170_PAD_EMC_B2_02,65 IMXRT1170_PAD_EMC_B2_03,66 IMXRT1170_PAD_EMC_B2_04,67 IMXRT1170_PAD_EMC_B2_05,68 IMXRT1170_PAD_EMC_B2_06,69 IMXRT1170_PAD_EMC_B2_07,70 IMXRT1170_PAD_EMC_B2_08,71 IMXRT1170_PAD_EMC_B2_09,72 IMXRT1170_PAD_EMC_B2_10,73 IMXRT1170_PAD_EMC_B2_11,74 IMXRT1170_PAD_EMC_B2_12,75 IMXRT1170_PAD_EMC_B2_13,76 IMXRT1170_PAD_EMC_B2_14,77 IMXRT1170_PAD_EMC_B2_15,78 IMXRT1170_PAD_EMC_B2_16,79 IMXRT1170_PAD_EMC_B2_17,80 IMXRT1170_PAD_EMC_B2_18,81 IMXRT1170_PAD_EMC_B2_19,82 IMXRT1170_PAD_EMC_B2_20,83 IMXRT1170_PAD_AD_00,84 IMXRT1170_PAD_AD_01,85 IMXRT1170_PAD_AD_02,86 IMXRT1170_PAD_AD_03,87 IMXRT1170_PAD_AD_04,88 IMXRT1170_PAD_AD_05,89 IMXRT1170_PAD_AD_06,90 IMXRT1170_PAD_AD_07,91 IMXRT1170_PAD_AD_08,92 IMXRT1170_PAD_AD_09,93 IMXRT1170_PAD_AD_10,94 IMXRT1170_PAD_AD_11,95 IMXRT1170_PAD_AD_12,96 IMXRT1170_PAD_AD_13,97 IMXRT1170_PAD_AD_14,98 IMXRT1170_PAD_AD_15,99 IMXRT1170_PAD_AD_16,100 IMXRT1170_PAD_AD_17,101 IMXRT1170_PAD_AD_18,102 IMXRT1170_PAD_AD_19,103 IMXRT1170_PAD_AD_20,104 IMXRT1170_PAD_AD_21,105 IMXRT1170_PAD_AD_22,106 IMXRT1170_PAD_AD_23,107 IMXRT1170_PAD_AD_24,108 IMXRT1170_PAD_AD_25,109 IMXRT1170_PAD_AD_26,110 IMXRT1170_PAD_AD_27,111 IMXRT1170_PAD_AD_28,112 IMXRT1170_PAD_AD_29,113 IMXRT1170_PAD_AD_30,114 IMXRT1170_PAD_AD_31,115 IMXRT1170_PAD_AD_32,116 IMXRT1170_PAD_AD_33,117 IMXRT1170_PAD_AD_34,118 IMXRT1170_PAD_AD_35,119 IMXRT1170_PAD_SD_B1_00,120 IMXRT1170_PAD_SD_B1_01,121 IMXRT1170_PAD_SD_B1_02,122 IMXRT1170_PAD_SD_B1_03,123 IMXRT1170_PAD_SD_B1_04,124 IMXRT1170_PAD_SD_B1_05,125 IMXRT1170_PAD_SD_B2_00,126 IMXRT1170_PAD_SD_B2_01,127 IMXRT1170_PAD_SD_B2_02,128 IMXRT1170_PAD_SD_B2_03,129 IMXRT1170_PAD_SD_B2_04,130 IMXRT1170_PAD_SD_B2_05,131 IMXRT1170_PAD_SD_B2_06,132 IMXRT1170_PAD_SD_B2_07,133 IMXRT1170_PAD_SD_B2_08,134 IMXRT1170_PAD_SD_B2_09,135 IMXRT1170_PAD_SD_B2_10,136 IMXRT1170_PAD_SD_B2_11,137 IMXRT1170_PAD_DISP_B1_00,138 IMXRT1170_PAD_DISP_B1_01,139 IMXRT1170_PAD_DISP_B1_02,140 IMXRT1170_PAD_DISP_B1_03,141 IMXRT1170_PAD_DISP_B1_04,142 IMXRT1170_PAD_DISP_B1_05,143 IMXRT1170_PAD_DISP_B1_06,144 IMXRT1170_PAD_DISP_B1_07,145 IMXRT1170_PAD_DISP_B1_08,146 IMXRT1170_PAD_DISP_B1_09,147 IMXRT1170_PAD_DISP_B1_10,148 IMXRT1170_PAD_DISP_B1_11,149 IMXRT1170_PAD_DISP_B2_00,150 IMXRT1170_PAD_DISP_B2_01,151 IMXRT1170_PAD_DISP_B2_02,152 IMXRT1170_PAD_DISP_B2_03,153 IMXRT1170_PAD_DISP_B2_04,154 IMXRT1170_PAD_DISP_B2_05,155 IMXRT1170_PAD_DISP_B2_06,156 IMXRT1170_PAD_DISP_B2_07,157 IMXRT1170_PAD_DISP_B2_08,158 IMXRT1170_PAD_DISP_B2_09,159 IMXRT1170_PAD_DISP_B2_10,160 IMXRT1170_PAD_DISP_B2_11,161 IMXRT1170_PAD_DISP_B2_12,162 IMXRT1170_PAD_DISP_B2_13,163 IMXRT1170_PAD_DISP_B2_14,164 IMXRT1170_PAD_DISP_B2_15,165};166 167/* Pad names for the pinmux subsystem */168static const struct pinctrl_pin_desc imxrt1170_pinctrl_pads[] = {169 IMX_PINCTRL_PIN(IMXRT1170_PAD_RESERVE0),170 IMX_PINCTRL_PIN(IMXRT1170_PAD_RESERVE1),171 IMX_PINCTRL_PIN(IMXRT1170_PAD_RESERVE2),172 IMX_PINCTRL_PIN(IMXRT1170_PAD_RESERVE3),173 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_00),174 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_01),175 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_02),176 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_03),177 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_04),178 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_05),179 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_06),180 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_07),181 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_08),182 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_09),183 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_10),184 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_11),185 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_12),186 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_13),187 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_14),188 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_15),189 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_16),190 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_17),191 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_18),192 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_19),193 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_20),194 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_21),195 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_22),196 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_23),197 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_24),198 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_25),199 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_26),200 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_27),201 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_28),202 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_29),203 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_30),204 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_31),205 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_32),206 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_33),207 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_34),208 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_35),209 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_36),210 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_37),211 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_38),212 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_39),213 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_40),214 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B1_41),215 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_00),216 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_01),217 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_02),218 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_03),219 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_04),220 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_05),221 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_06),222 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_07),223 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_08),224 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_09),225 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_10),226 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_11),227 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_12),228 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_13),229 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_14),230 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_15),231 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_16),232 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_17),233 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_18),234 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_19),235 IMX_PINCTRL_PIN(IMXRT1170_PAD_EMC_B2_20),236 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_00),237 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_01),238 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_02),239 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_03),240 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_04),241 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_05),242 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_06),243 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_07),244 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_08),245 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_09),246 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_10),247 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_11),248 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_12),249 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_13),250 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_14),251 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_15),252 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_16),253 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_17),254 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_18),255 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_19),256 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_20),257 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_21),258 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_22),259 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_23),260 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_24),261 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_25),262 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_26),263 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_27),264 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_28),265 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_29),266 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_30),267 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_31),268 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_32),269 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_33),270 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_34),271 IMX_PINCTRL_PIN(IMXRT1170_PAD_AD_35),272 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B1_00),273 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B1_01),274 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B1_02),275 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B1_03),276 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B1_04),277 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B1_05),278 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_00),279 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_01),280 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_02),281 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_03),282 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_04),283 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_05),284 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_06),285 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_07),286 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_08),287 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_09),288 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_10),289 IMX_PINCTRL_PIN(IMXRT1170_PAD_SD_B2_11),290 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_00),291 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_01),292 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_02),293 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_03),294 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_04),295 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_05),296 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_06),297 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_07),298 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_08),299 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_09),300 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_10),301 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B1_11),302 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_00),303 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_01),304 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_02),305 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_03),306 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_04),307 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_05),308 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_06),309 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_07),310 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_08),311 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_09),312 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_10),313 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_11),314 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_12),315 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_13),316 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_14),317 IMX_PINCTRL_PIN(IMXRT1170_PAD_DISP_B2_15),318};319 320static const struct imx_pinctrl_soc_info imxrt1170_pinctrl_info = {321 .pins = imxrt1170_pinctrl_pads,322 .npins = ARRAY_SIZE(imxrt1170_pinctrl_pads),323 .gpr_compatible = "fsl,imxrt1170-iomuxc-gpr",324};325 326static const struct of_device_id imxrt1170_pinctrl_of_match[] = {327 { .compatible = "fsl,imxrt1170-iomuxc", .data = &imxrt1170_pinctrl_info, },328 { /* sentinel */ }329};330 331static int imxrt1170_pinctrl_probe(struct platform_device *pdev)332{333 return imx_pinctrl_probe(pdev, &imxrt1170_pinctrl_info);334}335 336static struct platform_driver imxrt1170_pinctrl_driver = {337 .driver = {338 .name = "imxrt1170-pinctrl",339 .of_match_table = of_match_ptr(imxrt1170_pinctrl_of_match),340 .suppress_bind_attrs = true,341 },342 .probe = imxrt1170_pinctrl_probe,343};344 345static int __init imxrt1170_pinctrl_init(void)346{347 return platform_driver_register(&imxrt1170_pinctrl_driver);348}349arch_initcall(imxrt1170_pinctrl_init);350