1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright 2021 NXP 4 */ 5 6 #include <linux/err.h> 7 #include <linux/init.h> 8 #include <linux/io.h> 9 #include <linux/module.h> 10 #include <linux/of.h> 11 #include <linux/of_device.h> 12 #include <linux/pinctrl/pinctrl.h> 13 14 #include "pinctrl-imx.h" 15 16 enum imx93_pads { 17 IMX93_IOMUXC_DAP_TDI = 0, 18 IMX93_IOMUXC_DAP_TMS_SWDIO = 1, 19 IMX93_IOMUXC_DAP_TCLK_SWCLK = 2, 20 IMX93_IOMUXC_DAP_TDO_TRACESWO = 3, 21 IMX93_IOMUXC_GPIO_IO00 = 4, 22 IMX93_IOMUXC_GPIO_IO01 = 5, 23 IMX93_IOMUXC_GPIO_IO02 = 6, 24 IMX93_IOMUXC_GPIO_IO03 = 7, 25 IMX93_IOMUXC_GPIO_IO04 = 8, 26 IMX93_IOMUXC_GPIO_IO05 = 9, 27 IMX93_IOMUXC_GPIO_IO06 = 10, 28 IMX93_IOMUXC_GPIO_IO07 = 11, 29 IMX93_IOMUXC_GPIO_IO08 = 12, 30 IMX93_IOMUXC_GPIO_IO09 = 13, 31 IMX93_IOMUXC_GPIO_IO10 = 14, 32 IMX93_IOMUXC_GPIO_IO11 = 15, 33 IMX93_IOMUXC_GPIO_IO12 = 16, 34 IMX93_IOMUXC_GPIO_IO13 = 17, 35 IMX93_IOMUXC_GPIO_IO14 = 18, 36 IMX93_IOMUXC_GPIO_IO15 = 19, 37 IMX93_IOMUXC_GPIO_IO16 = 20, 38 IMX93_IOMUXC_GPIO_IO17 = 21, 39 IMX93_IOMUXC_GPIO_IO18 = 22, 40 IMX93_IOMUXC_GPIO_IO19 = 23, 41 IMX93_IOMUXC_GPIO_IO20 = 24, 42 IMX93_IOMUXC_GPIO_IO21 = 25, 43 IMX93_IOMUXC_GPIO_IO22 = 26, 44 IMX93_IOMUXC_GPIO_IO23 = 27, 45 IMX93_IOMUXC_GPIO_IO24 = 28, 46 IMX93_IOMUXC_GPIO_IO25 = 29, 47 IMX93_IOMUXC_GPIO_IO26 = 30, 48 IMX93_IOMUXC_GPIO_IO27 = 31, 49 IMX93_IOMUXC_GPIO_IO28 = 32, 50 IMX93_IOMUXC_GPIO_IO29 = 33, 51 IMX93_IOMUXC_CCM_CLKO1 = 34, 52 IMX93_IOMUXC_CCM_CLKO2 = 35, 53 IMX93_IOMUXC_CCM_CLKO3 = 36, 54 IMX93_IOMUXC_CCM_CLKO4 = 37, 55 IMX93_IOMUXC_ENET1_MDC = 38, 56 IMX93_IOMUXC_ENET1_MDIO = 39, 57 IMX93_IOMUXC_ENET1_TD3 = 40, 58 IMX93_IOMUXC_ENET1_TD2 = 41, 59 IMX93_IOMUXC_ENET1_TD1 = 42, 60 IMX93_IOMUXC_ENET1_TD0 = 43, 61 IMX93_IOMUXC_ENET1_TX_CTL = 44, 62 IMX93_IOMUXC_ENET1_TXC = 45, 63 IMX93_IOMUXC_ENET1_RX_CTL = 46, 64 IMX93_IOMUXC_ENET1_RXC = 47, 65 IMX93_IOMUXC_ENET1_RD0 = 48, 66 IMX93_IOMUXC_ENET1_RD1 = 49, 67 IMX93_IOMUXC_ENET1_RD2 = 50, 68 IMX93_IOMUXC_ENET1_RD3 = 51, 69 IMX93_IOMUXC_ENET2_MDC = 52, 70 IMX93_IOMUXC_ENET2_MDIO = 53, 71 IMX93_IOMUXC_ENET2_TD3 = 54, 72 IMX93_IOMUXC_ENET2_TD2 = 55, 73 IMX93_IOMUXC_ENET2_TD1 = 56, 74 IMX93_IOMUXC_ENET2_TD0 = 57, 75 IMX93_IOMUXC_ENET2_TX_CTL = 58, 76 IMX93_IOMUXC_ENET2_TXC = 59, 77 IMX93_IOMUXC_ENET2_RX_CTL = 60, 78 IMX93_IOMUXC_ENET2_RXC = 61, 79 IMX93_IOMUXC_ENET2_RD0 = 62, 80 IMX93_IOMUXC_ENET2_RD1 = 63, 81 IMX93_IOMUXC_ENET2_RD2 = 64, 82 IMX93_IOMUXC_ENET2_RD3 = 65, 83 IMX93_IOMUXC_SD1_CLK = 66, 84 IMX93_IOMUXC_SD1_CMD = 67, 85 IMX93_IOMUXC_SD1_DATA0 = 68, 86 IMX93_IOMUXC_SD1_DATA1 = 69, 87 IMX93_IOMUXC_SD1_DATA2 = 70, 88 IMX93_IOMUXC_SD1_DATA3 = 71, 89 IMX93_IOMUXC_SD1_DATA4 = 72, 90 IMX93_IOMUXC_SD1_DATA5 = 73, 91 IMX93_IOMUXC_SD1_DATA6 = 74, 92 IMX93_IOMUXC_SD1_DATA7 = 75, 93 IMX93_IOMUXC_SD1_STROBE = 76, 94 IMX93_IOMUXC_SD2_VSELECT = 77, 95 IMX93_IOMUXC_SD3_CLK = 78, 96 IMX93_IOMUXC_SD3_CMD = 79, 97 IMX93_IOMUXC_SD3_DATA0 = 80, 98 IMX93_IOMUXC_SD3_DATA1 = 81, 99 IMX93_IOMUXC_SD3_DATA2 = 82, 100 IMX93_IOMUXC_SD3_DATA3 = 83, 101 IMX93_IOMUXC_SD2_CD_B = 84, 102 IMX93_IOMUXC_SD2_CLK = 85, 103 IMX93_IOMUXC_SD2_CMD = 86, 104 IMX93_IOMUXC_SD2_DATA0 = 87, 105 IMX93_IOMUXC_SD2_DATA1 = 88, 106 IMX93_IOMUXC_SD2_DATA2 = 89, 107 IMX93_IOMUXC_SD2_DATA3 = 90, 108 IMX93_IOMUXC_SD2_RESET_B = 91, 109 IMX93_IOMUXC_I2C1_SCL = 92, 110 IMX93_IOMUXC_I2C1_SDA = 93, 111 IMX93_IOMUXC_I2C2_SCL = 94, 112 IMX93_IOMUXC_I2C2_SDA = 95, 113 IMX93_IOMUXC_UART1_RXD = 96, 114 IMX93_IOMUXC_UART1_TXD = 97, 115 IMX93_IOMUXC_UART2_RXD = 98, 116 IMX93_IOMUXC_UART2_TXD = 99, 117 IMX93_IOMUXC_PDM_CLK = 100, 118 IMX93_IOMUXC_PDM_BIT_STREAM0 = 101, 119 IMX93_IOMUXC_PDM_BIT_STREAM1 = 102, 120 IMX93_IOMUXC_SAI1_TXFS = 103, 121 IMX93_IOMUXC_SAI1_TXC = 104, 122 IMX93_IOMUXC_SAI1_TXD0 = 105, 123 IMX93_IOMUXC_SAI1_RXD0 = 106, 124 IMX93_IOMUXC_WDOG_ANY = 107, 125 }; 126 127 /* Pad names for the pinmux subsystem */ 128 static const struct pinctrl_pin_desc imx93_pinctrl_pads[] = { 129 IMX_PINCTRL_PIN(IMX93_IOMUXC_DAP_TDI), 130 IMX_PINCTRL_PIN(IMX93_IOMUXC_DAP_TMS_SWDIO), 131 IMX_PINCTRL_PIN(IMX93_IOMUXC_DAP_TCLK_SWCLK), 132 IMX_PINCTRL_PIN(IMX93_IOMUXC_DAP_TDO_TRACESWO), 133 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO00), 134 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO01), 135 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO02), 136 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO03), 137 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO04), 138 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO05), 139 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO06), 140 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO07), 141 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO08), 142 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO09), 143 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO10), 144 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO11), 145 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO12), 146 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO13), 147 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO14), 148 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO15), 149 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO16), 150 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO17), 151 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO18), 152 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO19), 153 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO20), 154 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO21), 155 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO22), 156 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO23), 157 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO24), 158 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO25), 159 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO26), 160 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO27), 161 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO28), 162 IMX_PINCTRL_PIN(IMX93_IOMUXC_GPIO_IO29), 163 IMX_PINCTRL_PIN(IMX93_IOMUXC_CCM_CLKO1), 164 IMX_PINCTRL_PIN(IMX93_IOMUXC_CCM_CLKO2), 165 IMX_PINCTRL_PIN(IMX93_IOMUXC_CCM_CLKO3), 166 IMX_PINCTRL_PIN(IMX93_IOMUXC_CCM_CLKO4), 167 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_MDC), 168 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_MDIO), 169 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_TD3), 170 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_TD2), 171 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_TD1), 172 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_TD0), 173 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_TX_CTL), 174 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_TXC), 175 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_RX_CTL), 176 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_RXC), 177 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_RD0), 178 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_RD1), 179 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_RD2), 180 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET1_RD3), 181 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_MDC), 182 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_MDIO), 183 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_TD3), 184 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_TD2), 185 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_TD1), 186 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_TD0), 187 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_TX_CTL), 188 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_TXC), 189 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_RX_CTL), 190 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_RXC), 191 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_RD0), 192 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_RD1), 193 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_RD2), 194 IMX_PINCTRL_PIN(IMX93_IOMUXC_ENET2_RD3), 195 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD1_CLK), 196 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD1_CMD), 197 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD1_DATA0), 198 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD1_DATA1), 199 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD1_DATA2), 200 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD1_DATA3), 201 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD1_DATA4), 202 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD1_DATA5), 203 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD1_DATA6), 204 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD1_DATA7), 205 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD1_STROBE), 206 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD2_VSELECT), 207 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD3_CLK), 208 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD3_CMD), 209 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD3_DATA0), 210 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD3_DATA1), 211 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD3_DATA2), 212 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD3_DATA3), 213 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD2_CD_B), 214 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD2_CLK), 215 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD2_CMD), 216 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD2_DATA0), 217 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD2_DATA1), 218 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD2_DATA2), 219 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD2_DATA3), 220 IMX_PINCTRL_PIN(IMX93_IOMUXC_SD2_RESET_B), 221 IMX_PINCTRL_PIN(IMX93_IOMUXC_I2C1_SCL), 222 IMX_PINCTRL_PIN(IMX93_IOMUXC_I2C1_SDA), 223 IMX_PINCTRL_PIN(IMX93_IOMUXC_I2C2_SCL), 224 IMX_PINCTRL_PIN(IMX93_IOMUXC_I2C2_SDA), 225 IMX_PINCTRL_PIN(IMX93_IOMUXC_UART1_RXD), 226 IMX_PINCTRL_PIN(IMX93_IOMUXC_UART1_TXD), 227 IMX_PINCTRL_PIN(IMX93_IOMUXC_UART2_RXD), 228 IMX_PINCTRL_PIN(IMX93_IOMUXC_UART2_TXD), 229 IMX_PINCTRL_PIN(IMX93_IOMUXC_PDM_CLK), 230 IMX_PINCTRL_PIN(IMX93_IOMUXC_PDM_BIT_STREAM0), 231 IMX_PINCTRL_PIN(IMX93_IOMUXC_PDM_BIT_STREAM1), 232 IMX_PINCTRL_PIN(IMX93_IOMUXC_SAI1_TXFS), 233 IMX_PINCTRL_PIN(IMX93_IOMUXC_SAI1_TXC), 234 IMX_PINCTRL_PIN(IMX93_IOMUXC_SAI1_TXD0), 235 IMX_PINCTRL_PIN(IMX93_IOMUXC_SAI1_RXD0), 236 IMX_PINCTRL_PIN(IMX93_IOMUXC_WDOG_ANY), 237 }; 238 239 static const struct imx_pinctrl_soc_info imx93_pinctrl_info = { 240 .pins = imx93_pinctrl_pads, 241 .npins = ARRAY_SIZE(imx93_pinctrl_pads), 242 .flags = ZERO_OFFSET_VALID, 243 .gpr_compatible = "fsl,imx93-iomuxc-gpr", 244 }; 245 246 static const struct of_device_id imx93_pinctrl_of_match[] = { 247 { .compatible = "fsl,imx93-iomuxc", }, 248 { /* sentinel */ } 249 }; 250 MODULE_DEVICE_TABLE(of, imx93_pinctrl_of_match); 251 252 static int imx93_pinctrl_probe(struct platform_device *pdev) 253 { 254 return imx_pinctrl_probe(pdev, &imx93_pinctrl_info); 255 } 256 257 static struct platform_driver imx93_pinctrl_driver = { 258 .driver = { 259 .name = "imx93-pinctrl", 260 .of_match_table = imx93_pinctrl_of_match, 261 .suppress_bind_attrs = true, 262 }, 263 .probe = imx93_pinctrl_probe, 264 }; 265 266 static int __init imx93_pinctrl_init(void) 267 { 268 return platform_driver_register(&imx93_pinctrl_driver); 269 } 270 arch_initcall(imx93_pinctrl_init); 271 272 MODULE_AUTHOR("Bai Ping <ping.bai@nxp.com>"); 273 MODULE_DESCRIPTION("NXP i.MX93 pinctrl driver"); 274 MODULE_LICENSE("GPL v2"); 275