GNU Linux-libre 6.7.9-gnu
[releases.git] / drivers / pinctrl / freescale / pinctrl-imxrt1050.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2020
4  * 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
15 enum 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 */
148 static 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
280 static 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
286 static const struct of_device_id imxrt1050_pinctrl_of_match[] = {
287         { .compatible = "fsl,imxrt1050-iomuxc", .data = &imxrt1050_pinctrl_info, },
288         { /* sentinel */ }
289 };
290
291 static int imxrt1050_pinctrl_probe(struct platform_device *pdev)
292 {
293         return imx_pinctrl_probe(pdev, &imxrt1050_pinctrl_info);
294 }
295
296 static 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
305 static int __init imxrt1050_pinctrl_init(void)
306 {
307         return platform_driver_register(&imxrt1050_pinctrl_driver);
308 }
309 arch_initcall(imxrt1050_pinctrl_init);