Merge tag 'drm-msm-fixes-2022-06-20' of https://gitlab.freedesktop.org/drm/msm into...
[linux-2.6-microblaze.git] / drivers / pinctrl / freescale / pinctrl-imxrt1170.c
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_device.h>
10 #include <linux/pinctrl/pinctrl.h>
11 #include <linux/platform_device.h>
12
13 #include "pinctrl-imx.h"
14
15 enum 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 */
168 static 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
320 static 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
326 static const struct of_device_id imxrt1170_pinctrl_of_match[] = {
327         { .compatible = "fsl,imxrt1170-iomuxc", .data = &imxrt1170_pinctrl_info, },
328         { /* sentinel */ }
329 };
330
331 static int imxrt1170_pinctrl_probe(struct platform_device *pdev)
332 {
333         return imx_pinctrl_probe(pdev, &imxrt1170_pinctrl_info);
334 }
335
336 static 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
345 static int __init imxrt1170_pinctrl_init(void)
346 {
347         return platform_driver_register(&imxrt1170_pinctrl_driver);
348 }
349 arch_initcall(imxrt1170_pinctrl_init);