1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2022
4 * 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