310 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 20204 * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.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 imxrt1050_pads {16 IMXRT1050_PAD_RESERVE0,17 IMXRT1050_PAD_RESERVE1,18 IMXRT1050_PAD_RESERVE2,19 IMXRT1050_PAD_RESERVE3,20 IMXRT1050_PAD_RESERVE4,21 IMXRT1050_PAD_EMC_00,22 IMXRT1050_PAD_EMC_01,23 IMXRT1050_PAD_EMC_02,24 IMXRT1050_PAD_EMC_03,25 IMXRT1050_PAD_EMC_04,26 IMXRT1050_PAD_EMC_05,27 IMXRT1050_PAD_EMC_06,28 IMXRT1050_PAD_EMC_07,29 IMXRT1050_PAD_EMC_08,30 IMXRT1050_PAD_EMC_09,31 IMXRT1050_PAD_EMC_10,32 IMXRT1050_PAD_EMC_11,33 IMXRT1050_PAD_EMC_12,34 IMXRT1050_PAD_EMC_13,35 IMXRT1050_PAD_EMC_14,36 IMXRT1050_PAD_EMC_15,37 IMXRT1050_PAD_EMC_16,38 IMXRT1050_PAD_EMC_17,39 IMXRT1050_PAD_EMC_18,40 IMXRT1050_PAD_EMC_19,41 IMXRT1050_PAD_EMC_20,42 IMXRT1050_PAD_EMC_21,43 IMXRT1050_PAD_EMC_22,44 IMXRT1050_PAD_EMC_23,45 IMXRT1050_PAD_EMC_24,46 IMXRT1050_PAD_EMC_25,47 IMXRT1050_PAD_EMC_26,48 IMXRT1050_PAD_EMC_27,49 IMXRT1050_PAD_EMC_28,50 IMXRT1050_PAD_EMC_29,51 IMXRT1050_PAD_EMC_30,52 IMXRT1050_PAD_EMC_31,53 IMXRT1050_PAD_EMC_32,54 IMXRT1050_PAD_EMC_33,55 IMXRT1050_PAD_EMC_34,56 IMXRT1050_PAD_EMC_35,57 IMXRT1050_PAD_EMC_36,58 IMXRT1050_PAD_EMC_37,59 IMXRT1050_PAD_EMC_38,60 IMXRT1050_PAD_EMC_39,61 IMXRT1050_PAD_EMC_40,62 IMXRT1050_PAD_EMC_41,63 IMXRT1050_PAD_AD_B0_00,64 IMXRT1050_PAD_AD_B0_01,65 IMXRT1050_PAD_AD_B0_02,66 IMXRT1050_PAD_AD_B0_03,67 IMXRT1050_PAD_AD_B0_04,68 IMXRT1050_PAD_AD_B0_05,69 IMXRT1050_PAD_AD_B0_06,70 IMXRT1050_PAD_AD_B0_07,71 IMXRT1050_PAD_AD_B0_08,72 IMXRT1050_PAD_AD_B0_09,73 IMXRT1050_PAD_AD_B0_10,74 IMXRT1050_PAD_AD_B0_11,75 IMXRT1050_PAD_AD_B0_12,76 IMXRT1050_PAD_AD_B0_13,77 IMXRT1050_PAD_AD_B0_14,78 IMXRT1050_PAD_AD_B0_15,79 IMXRT1050_PAD_AD_B1_00,80 IMXRT1050_PAD_AD_B1_01,81 IMXRT1050_PAD_AD_B1_02,82 IMXRT1050_PAD_AD_B1_03,83 IMXRT1050_PAD_AD_B1_04,84 IMXRT1050_PAD_AD_B1_05,85 IMXRT1050_PAD_AD_B1_06,86 IMXRT1050_PAD_AD_B1_07,87 IMXRT1050_PAD_AD_B1_08,88 IMXRT1050_PAD_AD_B1_09,89 IMXRT1050_PAD_AD_B1_10,90 IMXRT1050_PAD_AD_B1_11,91 IMXRT1050_PAD_AD_B1_12,92 IMXRT1050_PAD_AD_B1_13,93 IMXRT1050_PAD_AD_B1_14,94 IMXRT1050_PAD_AD_B1_15,95 IMXRT1050_PAD_B0_00,96 IMXRT1050_PAD_B0_01,97 IMXRT1050_PAD_B0_02,98 IMXRT1050_PAD_B0_03,99 IMXRT1050_PAD_B0_04,100 IMXRT1050_PAD_B0_05,101 IMXRT1050_PAD_B0_06,102 IMXRT1050_PAD_B0_07,103 IMXRT1050_PAD_B0_08,104 IMXRT1050_PAD_B0_09,105 IMXRT1050_PAD_B0_10,106 IMXRT1050_PAD_B0_11,107 IMXRT1050_PAD_B0_12,108 IMXRT1050_PAD_B0_13,109 IMXRT1050_PAD_B0_14,110 IMXRT1050_PAD_B0_15,111 IMXRT1050_PAD_B1_00,112 IMXRT1050_PAD_B1_01,113 IMXRT1050_PAD_B1_02,114 IMXRT1050_PAD_B1_03,115 IMXRT1050_PAD_B1_04,116 IMXRT1050_PAD_B1_05,117 IMXRT1050_PAD_B1_06,118 IMXRT1050_PAD_B1_07,119 IMXRT1050_PAD_B1_08,120 IMXRT1050_PAD_B1_09,121 IMXRT1050_PAD_B1_10,122 IMXRT1050_PAD_B1_11,123 IMXRT1050_PAD_B1_12,124 IMXRT1050_PAD_B1_13,125 IMXRT1050_PAD_B1_14,126 IMXRT1050_PAD_B1_15,127 IMXRT1050_PAD_SD_B0_00,128 IMXRT1050_PAD_SD_B0_01,129 IMXRT1050_PAD_SD_B0_02,130 IMXRT1050_PAD_SD_B0_03,131 IMXRT1050_PAD_SD_B0_04,132 IMXRT1050_PAD_SD_B0_05,133 IMXRT1050_PAD_SD_B1_00,134 IMXRT1050_PAD_SD_B1_01,135 IMXRT1050_PAD_SD_B1_02,136 IMXRT1050_PAD_SD_B1_03,137 IMXRT1050_PAD_SD_B1_04,138 IMXRT1050_PAD_SD_B1_05,139 IMXRT1050_PAD_SD_B1_06,140 IMXRT1050_PAD_SD_B1_07,141 IMXRT1050_PAD_SD_B1_08,142 IMXRT1050_PAD_SD_B1_09,143 IMXRT1050_PAD_SD_B1_10,144 IMXRT1050_PAD_SD_B1_11,145};146 147/* Pad names for the pinmux subsystem */148static const struct pinctrl_pin_desc imxrt1050_pinctrl_pads[] = {149 IMX_PINCTRL_PIN(IMXRT1050_PAD_RESERVE0),150 IMX_PINCTRL_PIN(IMXRT1050_PAD_RESERVE1),151 IMX_PINCTRL_PIN(IMXRT1050_PAD_RESERVE2),152 IMX_PINCTRL_PIN(IMXRT1050_PAD_RESERVE3),153 IMX_PINCTRL_PIN(IMXRT1050_PAD_RESERVE4),154 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_00),155 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_01),156 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_02),157 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_03),158 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_04),159 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_05),160 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_06),161 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_07),162 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_08),163 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_09),164 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_10),165 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_11),166 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_12),167 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_13),168 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_14),169 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_15),170 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_16),171 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_17),172 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_18),173 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_19),174 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_20),175 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_21),176 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_22),177 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_23),178 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_24),179 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_25),180 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_26),181 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_27),182 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_28),183 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_29),184 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_30),185 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_31),186 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_32),187 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_33),188 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_34),189 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_35),190 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_36),191 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_37),192 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_38),193 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_39),194 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_40),195 IMX_PINCTRL_PIN(IMXRT1050_PAD_EMC_41),196 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_00),197 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_01),198 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_02),199 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_03),200 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_04),201 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_05),202 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_06),203 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_07),204 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_08),205 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_09),206 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_10),207 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_11),208 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_12),209 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_13),210 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_14),211 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B0_15),212 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_00),213 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_01),214 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_02),215 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_03),216 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_04),217 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_05),218 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_06),219 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_07),220 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_08),221 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_09),222 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_10),223 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_11),224 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_12),225 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_13),226 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_14),227 IMX_PINCTRL_PIN(IMXRT1050_PAD_AD_B1_15),228 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_00),229 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_01),230 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_02),231 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_03),232 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_04),233 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_05),234 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_06),235 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_07),236 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_08),237 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_09),238 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_10),239 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_11),240 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_12),241 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_13),242 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_14),243 IMX_PINCTRL_PIN(IMXRT1050_PAD_B0_15),244 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_00),245 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_01),246 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_02),247 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_03),248 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_04),249 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_05),250 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_06),251 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_07),252 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_08),253 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_09),254 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_10),255 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_11),256 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_12),257 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_13),258 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_14),259 IMX_PINCTRL_PIN(IMXRT1050_PAD_B1_15),260 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B0_00),261 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B0_01),262 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B0_02),263 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B0_03),264 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B0_04),265 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B0_05),266 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_00),267 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_01),268 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_02),269 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_03),270 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_04),271 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_05),272 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_06),273 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_07),274 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_08),275 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_09),276 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_10),277 IMX_PINCTRL_PIN(IMXRT1050_PAD_SD_B1_11),278};279 280static const struct imx_pinctrl_soc_info imxrt1050_pinctrl_info = {281 .pins = imxrt1050_pinctrl_pads,282 .npins = ARRAY_SIZE(imxrt1050_pinctrl_pads),283 .gpr_compatible = "fsl,imxrt1050-iomuxc-gpr",284};285 286static const struct of_device_id imxrt1050_pinctrl_of_match[] = {287 { .compatible = "fsl,imxrt1050-iomuxc", .data = &imxrt1050_pinctrl_info, },288 { /* sentinel */ }289};290 291static int imxrt1050_pinctrl_probe(struct platform_device *pdev)292{293 return imx_pinctrl_probe(pdev, &imxrt1050_pinctrl_info);294}295 296static struct platform_driver imxrt1050_pinctrl_driver = {297 .driver = {298 .name = "imxrt1050-pinctrl",299 .of_match_table = of_match_ptr(imxrt1050_pinctrl_of_match),300 .suppress_bind_attrs = true,301 },302 .probe = imxrt1050_pinctrl_probe,303};304 305static int __init imxrt1050_pinctrl_init(void)306{307 return platform_driver_register(&imxrt1050_pinctrl_driver);308}309arch_initcall(imxrt1050_pinctrl_init);310