1 /*
2  * Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  */
14 
15 #include <linux/kernel.h>
16 #include <linux/module.h>
17 #include <linux/pinctrl/pinctrl.h>
18 #include <linux/platform_device.h>
19 
20 #include "pinctrl-uniphier.h"
21 
22 #define DRIVER_NAME "ph1-ld4-pinctrl"
23 
24 static const struct pinctrl_pin_desc ph1_ld4_pins[] = {
25 	UNIPHIER_PINCTRL_PIN(0, "EA1", UNIPHIER_PIN_IECTRL_NONE,
26 			     8, UNIPHIER_PIN_DRV_4_8,
27 			     8, UNIPHIER_PIN_PULL_DOWN),
28 	UNIPHIER_PINCTRL_PIN(1, "EA2", UNIPHIER_PIN_IECTRL_NONE,
29 			     9, UNIPHIER_PIN_DRV_4_8,
30 			     9, UNIPHIER_PIN_PULL_DOWN),
31 	UNIPHIER_PINCTRL_PIN(2, "EA3", UNIPHIER_PIN_IECTRL_NONE,
32 			     10, UNIPHIER_PIN_DRV_4_8,
33 			     10, UNIPHIER_PIN_PULL_DOWN),
34 	UNIPHIER_PINCTRL_PIN(3, "EA4", UNIPHIER_PIN_IECTRL_NONE,
35 			     11, UNIPHIER_PIN_DRV_4_8,
36 			     11, UNIPHIER_PIN_PULL_DOWN),
37 	UNIPHIER_PINCTRL_PIN(4, "EA5", UNIPHIER_PIN_IECTRL_NONE,
38 			     12, UNIPHIER_PIN_DRV_4_8,
39 			     12, UNIPHIER_PIN_PULL_DOWN),
40 	UNIPHIER_PINCTRL_PIN(5, "EA6", UNIPHIER_PIN_IECTRL_NONE,
41 			     13, UNIPHIER_PIN_DRV_4_8,
42 			     13, UNIPHIER_PIN_PULL_DOWN),
43 	UNIPHIER_PINCTRL_PIN(6, "EA7", UNIPHIER_PIN_IECTRL_NONE,
44 			     14, UNIPHIER_PIN_DRV_4_8,
45 			     14, UNIPHIER_PIN_PULL_DOWN),
46 	UNIPHIER_PINCTRL_PIN(7, "EA8", 0,
47 			     15, UNIPHIER_PIN_DRV_4_8,
48 			     15, UNIPHIER_PIN_PULL_DOWN),
49 	UNIPHIER_PINCTRL_PIN(8, "EA9", 0,
50 			     16, UNIPHIER_PIN_DRV_4_8,
51 			     16, UNIPHIER_PIN_PULL_DOWN),
52 	UNIPHIER_PINCTRL_PIN(9, "EA10", 0,
53 			     17, UNIPHIER_PIN_DRV_4_8,
54 			     17, UNIPHIER_PIN_PULL_DOWN),
55 	UNIPHIER_PINCTRL_PIN(10, "EA11", 0,
56 			     18, UNIPHIER_PIN_DRV_4_8,
57 			     18, UNIPHIER_PIN_PULL_DOWN),
58 	UNIPHIER_PINCTRL_PIN(11, "EA12", 0,
59 			     19, UNIPHIER_PIN_DRV_4_8,
60 			     19, UNIPHIER_PIN_PULL_DOWN),
61 	UNIPHIER_PINCTRL_PIN(12, "EA13", 0,
62 			     20, UNIPHIER_PIN_DRV_4_8,
63 			     20, UNIPHIER_PIN_PULL_DOWN),
64 	UNIPHIER_PINCTRL_PIN(13, "EA14", 0,
65 			     21, UNIPHIER_PIN_DRV_4_8,
66 			     21, UNIPHIER_PIN_PULL_DOWN),
67 	UNIPHIER_PINCTRL_PIN(14, "EA15", 0,
68 			     22, UNIPHIER_PIN_DRV_4_8,
69 			     22, UNIPHIER_PIN_PULL_DOWN),
70 	UNIPHIER_PINCTRL_PIN(15, "ECLK", UNIPHIER_PIN_IECTRL_NONE,
71 			     23, UNIPHIER_PIN_DRV_4_8,
72 			     23, UNIPHIER_PIN_PULL_DOWN),
73 	UNIPHIER_PINCTRL_PIN(16, "XERWE0", UNIPHIER_PIN_IECTRL_NONE,
74 			     24, UNIPHIER_PIN_DRV_4_8,
75 			     24, UNIPHIER_PIN_PULL_UP),
76 	UNIPHIER_PINCTRL_PIN(17, "XERWE1", UNIPHIER_PIN_IECTRL_NONE,
77 			     25, UNIPHIER_PIN_DRV_4_8,
78 			     25, UNIPHIER_PIN_PULL_UP),
79 	UNIPHIER_PINCTRL_PIN(18, "ES0", UNIPHIER_PIN_IECTRL_NONE,
80 			     27, UNIPHIER_PIN_DRV_4_8,
81 			     27, UNIPHIER_PIN_PULL_UP),
82 	UNIPHIER_PINCTRL_PIN(19, "ES1", UNIPHIER_PIN_IECTRL_NONE,
83 			     28, UNIPHIER_PIN_DRV_4_8,
84 			     28, UNIPHIER_PIN_PULL_UP),
85 	UNIPHIER_PINCTRL_PIN(20, "ES2", UNIPHIER_PIN_IECTRL_NONE,
86 			     29, UNIPHIER_PIN_DRV_4_8,
87 			     29, UNIPHIER_PIN_PULL_UP),
88 	UNIPHIER_PINCTRL_PIN(21, "XERST", UNIPHIER_PIN_IECTRL_NONE,
89 			     38, UNIPHIER_PIN_DRV_4_8,
90 			     38, UNIPHIER_PIN_PULL_UP),
91 	UNIPHIER_PINCTRL_PIN(22, "MMCCLK", UNIPHIER_PIN_IECTRL_NONE,
92 			     0, UNIPHIER_PIN_DRV_8_12_16_20,
93 			     146, UNIPHIER_PIN_PULL_UP),
94 	UNIPHIER_PINCTRL_PIN(23, "MMCCMD", UNIPHIER_PIN_IECTRL_NONE,
95 			     4, UNIPHIER_PIN_DRV_8_12_16_20,
96 			     147, UNIPHIER_PIN_PULL_UP),
97 	UNIPHIER_PINCTRL_PIN(24, "MMCDAT0", UNIPHIER_PIN_IECTRL_NONE,
98 			     8, UNIPHIER_PIN_DRV_8_12_16_20,
99 			     148, UNIPHIER_PIN_PULL_UP),
100 	UNIPHIER_PINCTRL_PIN(25, "MMCDAT1", UNIPHIER_PIN_IECTRL_NONE,
101 			     12, UNIPHIER_PIN_DRV_8_12_16_20,
102 			     149, UNIPHIER_PIN_PULL_UP),
103 	UNIPHIER_PINCTRL_PIN(26, "MMCDAT2", UNIPHIER_PIN_IECTRL_NONE,
104 			     16, UNIPHIER_PIN_DRV_8_12_16_20,
105 			     150, UNIPHIER_PIN_PULL_UP),
106 	UNIPHIER_PINCTRL_PIN(27, "MMCDAT3", UNIPHIER_PIN_IECTRL_NONE,
107 			     20, UNIPHIER_PIN_DRV_8_12_16_20,
108 			     151, UNIPHIER_PIN_PULL_UP),
109 	UNIPHIER_PINCTRL_PIN(28, "MMCDAT4", UNIPHIER_PIN_IECTRL_NONE,
110 			     24, UNIPHIER_PIN_DRV_8_12_16_20,
111 			     152, UNIPHIER_PIN_PULL_UP),
112 	UNIPHIER_PINCTRL_PIN(29, "MMCDAT5", UNIPHIER_PIN_IECTRL_NONE,
113 			     28, UNIPHIER_PIN_DRV_8_12_16_20,
114 			     153, UNIPHIER_PIN_PULL_UP),
115 	UNIPHIER_PINCTRL_PIN(30, "MMCDAT6", UNIPHIER_PIN_IECTRL_NONE,
116 			     32, UNIPHIER_PIN_DRV_8_12_16_20,
117 			     154, UNIPHIER_PIN_PULL_UP),
118 	UNIPHIER_PINCTRL_PIN(31, "MMCDAT7", UNIPHIER_PIN_IECTRL_NONE,
119 			     36, UNIPHIER_PIN_DRV_8_12_16_20,
120 			     155, UNIPHIER_PIN_PULL_UP),
121 	UNIPHIER_PINCTRL_PIN(32, "RMII_RXD0", 6,
122 			     39, UNIPHIER_PIN_DRV_4_8,
123 			     39, UNIPHIER_PIN_PULL_DOWN),
124 	UNIPHIER_PINCTRL_PIN(33, "RMII_RXD1", 6,
125 			     40, UNIPHIER_PIN_DRV_4_8,
126 			     40, UNIPHIER_PIN_PULL_DOWN),
127 	UNIPHIER_PINCTRL_PIN(34, "RMII_CRS_DV", 6,
128 			     41, UNIPHIER_PIN_DRV_4_8,
129 			     41, UNIPHIER_PIN_PULL_DOWN),
130 	UNIPHIER_PINCTRL_PIN(35, "RMII_RXER", 6,
131 			     42, UNIPHIER_PIN_DRV_4_8,
132 			     42, UNIPHIER_PIN_PULL_DOWN),
133 	UNIPHIER_PINCTRL_PIN(36, "RMII_REFCLK", 6,
134 			     43, UNIPHIER_PIN_DRV_4_8,
135 			     43, UNIPHIER_PIN_PULL_DOWN),
136 	UNIPHIER_PINCTRL_PIN(37, "RMII_TXD0", 6,
137 			     44, UNIPHIER_PIN_DRV_4_8,
138 			     44, UNIPHIER_PIN_PULL_DOWN),
139 	UNIPHIER_PINCTRL_PIN(38, "RMII_TXD1", 6,
140 			     45, UNIPHIER_PIN_DRV_4_8,
141 			     45, UNIPHIER_PIN_PULL_DOWN),
142 	UNIPHIER_PINCTRL_PIN(39, "RMII_TXEN", 6,
143 			     46, UNIPHIER_PIN_DRV_4_8,
144 			     46, UNIPHIER_PIN_PULL_DOWN),
145 	UNIPHIER_PINCTRL_PIN(40, "MDC", 6,
146 			     47, UNIPHIER_PIN_DRV_4_8,
147 			     47, UNIPHIER_PIN_PULL_DOWN),
148 	UNIPHIER_PINCTRL_PIN(41, "MDIO", 6,
149 			     48, UNIPHIER_PIN_DRV_4_8,
150 			     48, UNIPHIER_PIN_PULL_DOWN),
151 	UNIPHIER_PINCTRL_PIN(42, "MDIO_INTL", 6,
152 			     49, UNIPHIER_PIN_DRV_4_8,
153 			     49, UNIPHIER_PIN_PULL_DOWN),
154 	UNIPHIER_PINCTRL_PIN(43, "PHYRSTL", 6,
155 			     50, UNIPHIER_PIN_DRV_4_8,
156 			     50, UNIPHIER_PIN_PULL_DOWN),
157 	UNIPHIER_PINCTRL_PIN(44, "SDCLK", UNIPHIER_PIN_IECTRL_NONE,
158 			     40, UNIPHIER_PIN_DRV_8_12_16_20,
159 			     156, UNIPHIER_PIN_PULL_UP),
160 	UNIPHIER_PINCTRL_PIN(45, "SDCMD", UNIPHIER_PIN_IECTRL_NONE,
161 			     44, UNIPHIER_PIN_DRV_8_12_16_20,
162 			     157, UNIPHIER_PIN_PULL_UP),
163 	UNIPHIER_PINCTRL_PIN(46, "SDDAT0", UNIPHIER_PIN_IECTRL_NONE,
164 			     48, UNIPHIER_PIN_DRV_8_12_16_20,
165 			     158, UNIPHIER_PIN_PULL_UP),
166 	UNIPHIER_PINCTRL_PIN(47, "SDDAT1", UNIPHIER_PIN_IECTRL_NONE,
167 			     52, UNIPHIER_PIN_DRV_8_12_16_20,
168 			     159, UNIPHIER_PIN_PULL_UP),
169 	UNIPHIER_PINCTRL_PIN(48, "SDDAT2", UNIPHIER_PIN_IECTRL_NONE,
170 			     56, UNIPHIER_PIN_DRV_8_12_16_20,
171 			     160, UNIPHIER_PIN_PULL_UP),
172 	UNIPHIER_PINCTRL_PIN(49, "SDDAT3", UNIPHIER_PIN_IECTRL_NONE,
173 			     60, UNIPHIER_PIN_DRV_8_12_16_20,
174 			     161, UNIPHIER_PIN_PULL_UP),
175 	UNIPHIER_PINCTRL_PIN(50, "SDCD", UNIPHIER_PIN_IECTRL_NONE,
176 			     51, UNIPHIER_PIN_DRV_4_8,
177 			     51, UNIPHIER_PIN_PULL_UP),
178 	UNIPHIER_PINCTRL_PIN(51, "SDWP", UNIPHIER_PIN_IECTRL_NONE,
179 			     52, UNIPHIER_PIN_DRV_4_8,
180 			     52, UNIPHIER_PIN_PULL_UP),
181 	UNIPHIER_PINCTRL_PIN(52, "SDVOLC", UNIPHIER_PIN_IECTRL_NONE,
182 			     53, UNIPHIER_PIN_DRV_4_8,
183 			     53, UNIPHIER_PIN_PULL_UP),
184 	UNIPHIER_PINCTRL_PIN(53, "USB0VBUS", 0,
185 			     54, UNIPHIER_PIN_DRV_4_8,
186 			     54, UNIPHIER_PIN_PULL_DOWN),
187 	UNIPHIER_PINCTRL_PIN(54, "USB0OD", 0,
188 			     55, UNIPHIER_PIN_DRV_4_8,
189 			     55, UNIPHIER_PIN_PULL_DOWN),
190 	UNIPHIER_PINCTRL_PIN(55, "USB1VBUS", 0,
191 			     56, UNIPHIER_PIN_DRV_4_8,
192 			     56, UNIPHIER_PIN_PULL_DOWN),
193 	UNIPHIER_PINCTRL_PIN(56, "USB1OD", 0,
194 			     57, UNIPHIER_PIN_DRV_4_8,
195 			     57, UNIPHIER_PIN_PULL_DOWN),
196 	UNIPHIER_PINCTRL_PIN(57, "PCRESET", 0,
197 			     58, UNIPHIER_PIN_DRV_4_8,
198 			     58, UNIPHIER_PIN_PULL_DOWN),
199 	UNIPHIER_PINCTRL_PIN(58, "PCREG", 0,
200 			     59, UNIPHIER_PIN_DRV_4_8,
201 			     59, UNIPHIER_PIN_PULL_DOWN),
202 	UNIPHIER_PINCTRL_PIN(59, "PCCE2", 0,
203 			     60, UNIPHIER_PIN_DRV_4_8,
204 			     60, UNIPHIER_PIN_PULL_DOWN),
205 	UNIPHIER_PINCTRL_PIN(60, "PCVS1", 0,
206 			     61, UNIPHIER_PIN_DRV_4_8,
207 			     61, UNIPHIER_PIN_PULL_DOWN),
208 	UNIPHIER_PINCTRL_PIN(61, "PCCD2", 0,
209 			     62, UNIPHIER_PIN_DRV_4_8,
210 			     62, UNIPHIER_PIN_PULL_DOWN),
211 	UNIPHIER_PINCTRL_PIN(62, "PCCD1", 0,
212 			     63, UNIPHIER_PIN_DRV_4_8,
213 			     63, UNIPHIER_PIN_PULL_DOWN),
214 	UNIPHIER_PINCTRL_PIN(63, "PCREADY", 0,
215 			     64, UNIPHIER_PIN_DRV_4_8,
216 			     64, UNIPHIER_PIN_PULL_DOWN),
217 	UNIPHIER_PINCTRL_PIN(64, "PCDOE", 0,
218 			     65, UNIPHIER_PIN_DRV_4_8,
219 			     65, UNIPHIER_PIN_PULL_DOWN),
220 	UNIPHIER_PINCTRL_PIN(65, "PCCE1", 0,
221 			     66, UNIPHIER_PIN_DRV_4_8,
222 			     66, UNIPHIER_PIN_PULL_DOWN),
223 	UNIPHIER_PINCTRL_PIN(66, "PCWE", 0,
224 			     67, UNIPHIER_PIN_DRV_4_8,
225 			     67, UNIPHIER_PIN_PULL_DOWN),
226 	UNIPHIER_PINCTRL_PIN(67, "PCOE", 0,
227 			     68, UNIPHIER_PIN_DRV_4_8,
228 			     68, UNIPHIER_PIN_PULL_DOWN),
229 	UNIPHIER_PINCTRL_PIN(68, "PCWAIT", 0,
230 			     69, UNIPHIER_PIN_DRV_4_8,
231 			     69, UNIPHIER_PIN_PULL_DOWN),
232 	UNIPHIER_PINCTRL_PIN(69, "PCIOWR", 0,
233 			     70, UNIPHIER_PIN_DRV_4_8,
234 			     70, UNIPHIER_PIN_PULL_DOWN),
235 	UNIPHIER_PINCTRL_PIN(70, "PCIORD", 0,
236 			     71, UNIPHIER_PIN_DRV_4_8,
237 			     71, UNIPHIER_PIN_PULL_DOWN),
238 	UNIPHIER_PINCTRL_PIN(71, "HS0DIN0", 0,
239 			     72, UNIPHIER_PIN_DRV_4_8,
240 			     72, UNIPHIER_PIN_PULL_DOWN),
241 	UNIPHIER_PINCTRL_PIN(72, "HS0DIN1", 0,
242 			     73, UNIPHIER_PIN_DRV_4_8,
243 			     73, UNIPHIER_PIN_PULL_DOWN),
244 	UNIPHIER_PINCTRL_PIN(73, "HS0DIN2", 0,
245 			     74, UNIPHIER_PIN_DRV_4_8,
246 			     74, UNIPHIER_PIN_PULL_DOWN),
247 	UNIPHIER_PINCTRL_PIN(74, "HS0DIN3", 0,
248 			     75, UNIPHIER_PIN_DRV_4_8,
249 			     75, UNIPHIER_PIN_PULL_DOWN),
250 	UNIPHIER_PINCTRL_PIN(75, "HS0DIN4", 0,
251 			     76, UNIPHIER_PIN_DRV_4_8,
252 			     76, UNIPHIER_PIN_PULL_DOWN),
253 	UNIPHIER_PINCTRL_PIN(76, "HS0DIN5", 0,
254 			     77, UNIPHIER_PIN_DRV_4_8,
255 			     77, UNIPHIER_PIN_PULL_DOWN),
256 	UNIPHIER_PINCTRL_PIN(77, "HS0DIN6", 0,
257 			     78, UNIPHIER_PIN_DRV_4_8,
258 			     78, UNIPHIER_PIN_PULL_DOWN),
259 	UNIPHIER_PINCTRL_PIN(78, "HS0DIN7", 0,
260 			     79, UNIPHIER_PIN_DRV_4_8,
261 			     79, UNIPHIER_PIN_PULL_DOWN),
262 	UNIPHIER_PINCTRL_PIN(79, "HS0BCLKIN", 0,
263 			     80, UNIPHIER_PIN_DRV_4_8,
264 			     80, UNIPHIER_PIN_PULL_DOWN),
265 	UNIPHIER_PINCTRL_PIN(80, "HS0VALIN", 0,
266 			     81, UNIPHIER_PIN_DRV_4_8,
267 			     81, UNIPHIER_PIN_PULL_DOWN),
268 	UNIPHIER_PINCTRL_PIN(81, "HS0SYNCIN", 0,
269 			     82, UNIPHIER_PIN_DRV_4_8,
270 			     82, UNIPHIER_PIN_PULL_DOWN),
271 	UNIPHIER_PINCTRL_PIN(82, "HSDOUT0", 0,
272 			     83, UNIPHIER_PIN_DRV_4_8,
273 			     83, UNIPHIER_PIN_PULL_DOWN),
274 	UNIPHIER_PINCTRL_PIN(83, "HSDOUT1", 0,
275 			     84, UNIPHIER_PIN_DRV_4_8,
276 			     84, UNIPHIER_PIN_PULL_DOWN),
277 	UNIPHIER_PINCTRL_PIN(84, "HSDOUT2", 0,
278 			     85, UNIPHIER_PIN_DRV_4_8,
279 			     85, UNIPHIER_PIN_PULL_DOWN),
280 	UNIPHIER_PINCTRL_PIN(85, "HSDOUT3", 0,
281 			     86, UNIPHIER_PIN_DRV_4_8,
282 			     86, UNIPHIER_PIN_PULL_DOWN),
283 	UNIPHIER_PINCTRL_PIN(86, "HSDOUT4", 0,
284 			     87, UNIPHIER_PIN_DRV_4_8,
285 			     87, UNIPHIER_PIN_PULL_DOWN),
286 	UNIPHIER_PINCTRL_PIN(87, "HSDOUT5", 0,
287 			     88, UNIPHIER_PIN_DRV_4_8,
288 			     88, UNIPHIER_PIN_PULL_DOWN),
289 	UNIPHIER_PINCTRL_PIN(88, "HSDOUT6", 0,
290 			     89, UNIPHIER_PIN_DRV_4_8,
291 			     89, UNIPHIER_PIN_PULL_DOWN),
292 	UNIPHIER_PINCTRL_PIN(89, "HSDOUT7", 0,
293 			     90, UNIPHIER_PIN_DRV_4_8,
294 			     90, UNIPHIER_PIN_PULL_DOWN),
295 	UNIPHIER_PINCTRL_PIN(90, "HSBCLKOUT", 0,
296 			     91, UNIPHIER_PIN_DRV_4_8,
297 			     91, UNIPHIER_PIN_PULL_DOWN),
298 	UNIPHIER_PINCTRL_PIN(91, "HSVALOUT", 0,
299 			     92, UNIPHIER_PIN_DRV_4_8,
300 			     92, UNIPHIER_PIN_PULL_DOWN),
301 	UNIPHIER_PINCTRL_PIN(92, "HSSYNCOUT", 0,
302 			     93, UNIPHIER_PIN_DRV_4_8,
303 			     93, UNIPHIER_PIN_PULL_DOWN),
304 	UNIPHIER_PINCTRL_PIN(93, "AGCI", 3,
305 			     -1, UNIPHIER_PIN_DRV_FIXED_4,
306 			     162, UNIPHIER_PIN_PULL_DOWN),
307 	UNIPHIER_PINCTRL_PIN(94, "AGCR", 4,
308 			     -1, UNIPHIER_PIN_DRV_FIXED_4,
309 			     163, UNIPHIER_PIN_PULL_DOWN),
310 	UNIPHIER_PINCTRL_PIN(95, "AGCBS", 5,
311 			     -1, UNIPHIER_PIN_DRV_FIXED_4,
312 			     164, UNIPHIER_PIN_PULL_DOWN),
313 	UNIPHIER_PINCTRL_PIN(96, "IECOUT", 0,
314 			     94, UNIPHIER_PIN_DRV_4_8,
315 			     94, UNIPHIER_PIN_PULL_DOWN),
316 	UNIPHIER_PINCTRL_PIN(97, "ASMCK", 0,
317 			     95, UNIPHIER_PIN_DRV_4_8,
318 			     95, UNIPHIER_PIN_PULL_DOWN),
319 	UNIPHIER_PINCTRL_PIN(98, "ABCKO", UNIPHIER_PIN_IECTRL_NONE,
320 			     96, UNIPHIER_PIN_DRV_4_8,
321 			     96, UNIPHIER_PIN_PULL_DOWN),
322 	UNIPHIER_PINCTRL_PIN(99, "ALRCKO", UNIPHIER_PIN_IECTRL_NONE,
323 			     97, UNIPHIER_PIN_DRV_4_8,
324 			     97, UNIPHIER_PIN_PULL_DOWN),
325 	UNIPHIER_PINCTRL_PIN(100, "ASDOUT0", UNIPHIER_PIN_IECTRL_NONE,
326 			     98, UNIPHIER_PIN_DRV_4_8,
327 			     98, UNIPHIER_PIN_PULL_DOWN),
328 	UNIPHIER_PINCTRL_PIN(101, "ARCOUT", 0,
329 			     99, UNIPHIER_PIN_DRV_4_8,
330 			     99, UNIPHIER_PIN_PULL_DOWN),
331 	UNIPHIER_PINCTRL_PIN(102, "SDA0", UNIPHIER_PIN_IECTRL_NONE,
332 			     -1, UNIPHIER_PIN_DRV_FIXED_4,
333 			     -1, UNIPHIER_PIN_PULL_NONE),
334 	UNIPHIER_PINCTRL_PIN(103, "SCL0", UNIPHIER_PIN_IECTRL_NONE,
335 			     -1, UNIPHIER_PIN_DRV_FIXED_4,
336 			     -1, UNIPHIER_PIN_PULL_NONE),
337 	UNIPHIER_PINCTRL_PIN(104, "SDA1", UNIPHIER_PIN_IECTRL_NONE,
338 			     -1, UNIPHIER_PIN_DRV_FIXED_4,
339 			     -1, UNIPHIER_PIN_PULL_NONE),
340 	UNIPHIER_PINCTRL_PIN(105, "SCL1", UNIPHIER_PIN_IECTRL_NONE,
341 			     -1, UNIPHIER_PIN_DRV_FIXED_4,
342 			     -1, UNIPHIER_PIN_PULL_NONE),
343 	UNIPHIER_PINCTRL_PIN(106, "DMDSDA0", UNIPHIER_PIN_IECTRL_NONE,
344 			     -1, UNIPHIER_PIN_DRV_FIXED_4,
345 			     -1, UNIPHIER_PIN_PULL_NONE),
346 	UNIPHIER_PINCTRL_PIN(107, "DMDSCL0", UNIPHIER_PIN_IECTRL_NONE,
347 			     -1, UNIPHIER_PIN_DRV_FIXED_4,
348 			     -1, UNIPHIER_PIN_PULL_NONE),
349 	UNIPHIER_PINCTRL_PIN(108, "DMDSDA1", UNIPHIER_PIN_IECTRL_NONE,
350 			     -1, UNIPHIER_PIN_DRV_FIXED_4,
351 			     -1, UNIPHIER_PIN_PULL_NONE),
352 	UNIPHIER_PINCTRL_PIN(109, "DMDSCL1", UNIPHIER_PIN_IECTRL_NONE,
353 			     -1, UNIPHIER_PIN_DRV_FIXED_4,
354 			     -1, UNIPHIER_PIN_PULL_NONE),
355 	UNIPHIER_PINCTRL_PIN(110, "SBO0", UNIPHIER_PIN_IECTRL_NONE,
356 			     100, UNIPHIER_PIN_DRV_4_8,
357 			     100, UNIPHIER_PIN_PULL_UP),
358 	UNIPHIER_PINCTRL_PIN(111, "SBI0", UNIPHIER_PIN_IECTRL_NONE,
359 			     101, UNIPHIER_PIN_DRV_4_8,
360 			     101, UNIPHIER_PIN_PULL_UP),
361 	UNIPHIER_PINCTRL_PIN(112, "HIN", 1,
362 			     -1, UNIPHIER_PIN_DRV_FIXED_5,
363 			     -1, UNIPHIER_PIN_PULL_NONE),
364 	UNIPHIER_PINCTRL_PIN(113, "VIN", 2,
365 			     -1, UNIPHIER_PIN_DRV_FIXED_5,
366 			     -1, UNIPHIER_PIN_PULL_NONE),
367 	UNIPHIER_PINCTRL_PIN(114, "TCON0", UNIPHIER_PIN_IECTRL_NONE,
368 			     102, UNIPHIER_PIN_DRV_4_8,
369 			     102, UNIPHIER_PIN_PULL_DOWN),
370 	UNIPHIER_PINCTRL_PIN(115, "TCON1", UNIPHIER_PIN_IECTRL_NONE,
371 			     103, UNIPHIER_PIN_DRV_4_8,
372 			     103, UNIPHIER_PIN_PULL_DOWN),
373 	UNIPHIER_PINCTRL_PIN(116, "TCON2", UNIPHIER_PIN_IECTRL_NONE,
374 			     104, UNIPHIER_PIN_DRV_4_8,
375 			     104, UNIPHIER_PIN_PULL_DOWN),
376 	UNIPHIER_PINCTRL_PIN(117, "TCON3", UNIPHIER_PIN_IECTRL_NONE,
377 			     105, UNIPHIER_PIN_DRV_4_8,
378 			     105, UNIPHIER_PIN_PULL_DOWN),
379 	UNIPHIER_PINCTRL_PIN(118, "TCON4", UNIPHIER_PIN_IECTRL_NONE,
380 			     106, UNIPHIER_PIN_DRV_4_8,
381 			     106, UNIPHIER_PIN_PULL_DOWN),
382 	UNIPHIER_PINCTRL_PIN(119, "TCON5", UNIPHIER_PIN_IECTRL_NONE,
383 			     107, UNIPHIER_PIN_DRV_4_8,
384 			     107, UNIPHIER_PIN_PULL_DOWN),
385 	UNIPHIER_PINCTRL_PIN(120, "TCON6", 0,
386 			     108, UNIPHIER_PIN_DRV_4_8,
387 			     108, UNIPHIER_PIN_PULL_DOWN),
388 	UNIPHIER_PINCTRL_PIN(121, "TCON7", 0,
389 			     109, UNIPHIER_PIN_DRV_4_8,
390 			     109, UNIPHIER_PIN_PULL_DOWN),
391 	UNIPHIER_PINCTRL_PIN(122, "PWMA", 0,
392 			     110, UNIPHIER_PIN_DRV_4_8,
393 			     110, UNIPHIER_PIN_PULL_DOWN),
394 	UNIPHIER_PINCTRL_PIN(123, "XIRQ1", 0,
395 			     111, UNIPHIER_PIN_DRV_4_8,
396 			     111, UNIPHIER_PIN_PULL_DOWN),
397 	UNIPHIER_PINCTRL_PIN(124, "XIRQ2", 0,
398 			     112, UNIPHIER_PIN_DRV_4_8,
399 			     112, UNIPHIER_PIN_PULL_DOWN),
400 	UNIPHIER_PINCTRL_PIN(125, "XIRQ3", 0,
401 			     113, UNIPHIER_PIN_DRV_4_8,
402 			     113, UNIPHIER_PIN_PULL_DOWN),
403 	UNIPHIER_PINCTRL_PIN(126, "XIRQ4", 0,
404 			     114, UNIPHIER_PIN_DRV_4_8,
405 			     114, UNIPHIER_PIN_PULL_DOWN),
406 	UNIPHIER_PINCTRL_PIN(127, "XIRQ5", 0,
407 			     115, UNIPHIER_PIN_DRV_4_8,
408 			     115, UNIPHIER_PIN_PULL_DOWN),
409 	UNIPHIER_PINCTRL_PIN(128, "XIRQ6", 0,
410 			     116, UNIPHIER_PIN_DRV_4_8,
411 			     116, UNIPHIER_PIN_PULL_DOWN),
412 	UNIPHIER_PINCTRL_PIN(129, "XIRQ7", 0,
413 			     117, UNIPHIER_PIN_DRV_4_8,
414 			     117, UNIPHIER_PIN_PULL_DOWN),
415 	UNIPHIER_PINCTRL_PIN(130, "XIRQ8", 0,
416 			     118, UNIPHIER_PIN_DRV_4_8,
417 			     118, UNIPHIER_PIN_PULL_DOWN),
418 	UNIPHIER_PINCTRL_PIN(131, "XIRQ9", 0,
419 			     119, UNIPHIER_PIN_DRV_4_8,
420 			     119, UNIPHIER_PIN_PULL_DOWN),
421 	UNIPHIER_PINCTRL_PIN(132, "XIRQ10", 0,
422 			     120, UNIPHIER_PIN_DRV_4_8,
423 			     120, UNIPHIER_PIN_PULL_DOWN),
424 	UNIPHIER_PINCTRL_PIN(133, "XIRQ11", 0,
425 			     121, UNIPHIER_PIN_DRV_4_8,
426 			     121, UNIPHIER_PIN_PULL_DOWN),
427 	UNIPHIER_PINCTRL_PIN(134, "XIRQ14", 0,
428 			     122, UNIPHIER_PIN_DRV_4_8,
429 			     122, UNIPHIER_PIN_PULL_DOWN),
430 	UNIPHIER_PINCTRL_PIN(135, "PORT00", 0,
431 			     123, UNIPHIER_PIN_DRV_4_8,
432 			     123, UNIPHIER_PIN_PULL_DOWN),
433 	UNIPHIER_PINCTRL_PIN(136, "PORT01", 0,
434 			     124, UNIPHIER_PIN_DRV_4_8,
435 			     124, UNIPHIER_PIN_PULL_DOWN),
436 	UNIPHIER_PINCTRL_PIN(137, "PORT02", 0,
437 			     125, UNIPHIER_PIN_DRV_4_8,
438 			     125, UNIPHIER_PIN_PULL_DOWN),
439 	UNIPHIER_PINCTRL_PIN(138, "PORT03", 0,
440 			     126, UNIPHIER_PIN_DRV_4_8,
441 			     126, UNIPHIER_PIN_PULL_DOWN),
442 	UNIPHIER_PINCTRL_PIN(139, "PORT04", 0,
443 			     127, UNIPHIER_PIN_DRV_4_8,
444 			     127, UNIPHIER_PIN_PULL_DOWN),
445 	UNIPHIER_PINCTRL_PIN(140, "PORT05", 0,
446 			     128, UNIPHIER_PIN_DRV_4_8,
447 			     128, UNIPHIER_PIN_PULL_DOWN),
448 	UNIPHIER_PINCTRL_PIN(141, "PORT06", 0,
449 			     129, UNIPHIER_PIN_DRV_4_8,
450 			     129, UNIPHIER_PIN_PULL_DOWN),
451 	UNIPHIER_PINCTRL_PIN(142, "PORT07", 0,
452 			     130, UNIPHIER_PIN_DRV_4_8,
453 			     130, UNIPHIER_PIN_PULL_DOWN),
454 	UNIPHIER_PINCTRL_PIN(143, "PORT10", 0,
455 			     131, UNIPHIER_PIN_DRV_4_8,
456 			     131, UNIPHIER_PIN_PULL_DOWN),
457 	UNIPHIER_PINCTRL_PIN(144, "PORT11", 0,
458 			     132, UNIPHIER_PIN_DRV_4_8,
459 			     132, UNIPHIER_PIN_PULL_DOWN),
460 	UNIPHIER_PINCTRL_PIN(145, "PORT12", 0,
461 			     133, UNIPHIER_PIN_DRV_4_8,
462 			     133, UNIPHIER_PIN_PULL_DOWN),
463 	UNIPHIER_PINCTRL_PIN(146, "PORT13", 0,
464 			     134, UNIPHIER_PIN_DRV_4_8,
465 			     134, UNIPHIER_PIN_PULL_DOWN),
466 	UNIPHIER_PINCTRL_PIN(147, "PORT14", 0,
467 			     135, UNIPHIER_PIN_DRV_4_8,
468 			     135, UNIPHIER_PIN_PULL_DOWN),
469 	UNIPHIER_PINCTRL_PIN(148, "PORT15", 0,
470 			     136, UNIPHIER_PIN_DRV_4_8,
471 			     136, UNIPHIER_PIN_PULL_DOWN),
472 	UNIPHIER_PINCTRL_PIN(149, "PORT16", 0,
473 			     137, UNIPHIER_PIN_DRV_4_8,
474 			     137, UNIPHIER_PIN_PULL_DOWN),
475 	UNIPHIER_PINCTRL_PIN(150, "PORT17", UNIPHIER_PIN_IECTRL_NONE,
476 			     138, UNIPHIER_PIN_DRV_4_8,
477 			     138, UNIPHIER_PIN_PULL_DOWN),
478 	UNIPHIER_PINCTRL_PIN(151, "PORT20", 0,
479 			     139, UNIPHIER_PIN_DRV_4_8,
480 			     139, UNIPHIER_PIN_PULL_DOWN),
481 	UNIPHIER_PINCTRL_PIN(152, "PORT21", 0,
482 			     140, UNIPHIER_PIN_DRV_4_8,
483 			     140, UNIPHIER_PIN_PULL_DOWN),
484 	UNIPHIER_PINCTRL_PIN(153, "PORT22", 0,
485 			     141, UNIPHIER_PIN_DRV_4_8,
486 			     141, UNIPHIER_PIN_PULL_DOWN),
487 	UNIPHIER_PINCTRL_PIN(154, "PORT23", 0,
488 			     142, UNIPHIER_PIN_DRV_4_8,
489 			     142, UNIPHIER_PIN_PULL_DOWN),
490 	UNIPHIER_PINCTRL_PIN(155, "PORT24", UNIPHIER_PIN_IECTRL_NONE,
491 			     143, UNIPHIER_PIN_DRV_4_8,
492 			     143, UNIPHIER_PIN_PULL_DOWN),
493 	UNIPHIER_PINCTRL_PIN(156, "PORT25", 0,
494 			     144, UNIPHIER_PIN_DRV_4_8,
495 			     144, UNIPHIER_PIN_PULL_DOWN),
496 	UNIPHIER_PINCTRL_PIN(157, "PORT26", 0,
497 			     145, UNIPHIER_PIN_DRV_4_8,
498 			     145, UNIPHIER_PIN_PULL_DOWN),
499 	UNIPHIER_PINCTRL_PIN(158, "XNFRE", UNIPHIER_PIN_IECTRL_NONE,
500 			     31, UNIPHIER_PIN_DRV_4_8,
501 			     31, UNIPHIER_PIN_PULL_UP),
502 	UNIPHIER_PINCTRL_PIN(159, "XNFWE", UNIPHIER_PIN_IECTRL_NONE,
503 			     32, UNIPHIER_PIN_DRV_4_8,
504 			     32, UNIPHIER_PIN_PULL_UP),
505 	UNIPHIER_PINCTRL_PIN(160, "NFALE", UNIPHIER_PIN_IECTRL_NONE,
506 			     33, UNIPHIER_PIN_DRV_4_8,
507 			     33, UNIPHIER_PIN_PULL_DOWN),
508 	UNIPHIER_PINCTRL_PIN(161, "NFCLE", UNIPHIER_PIN_IECTRL_NONE,
509 			     34, UNIPHIER_PIN_DRV_4_8,
510 			     34, UNIPHIER_PIN_PULL_DOWN),
511 	UNIPHIER_PINCTRL_PIN(162, "XNFWP", UNIPHIER_PIN_IECTRL_NONE,
512 			     35, UNIPHIER_PIN_DRV_4_8,
513 			     35, UNIPHIER_PIN_PULL_DOWN),
514 	UNIPHIER_PINCTRL_PIN(163, "XNFCE0", UNIPHIER_PIN_IECTRL_NONE,
515 			     36, UNIPHIER_PIN_DRV_4_8,
516 			     36, UNIPHIER_PIN_PULL_UP),
517 	UNIPHIER_PINCTRL_PIN(164, "NANDRYBY0", UNIPHIER_PIN_IECTRL_NONE,
518 			     37, UNIPHIER_PIN_DRV_4_8,
519 			     37, UNIPHIER_PIN_PULL_UP),
520 };
521 
522 static const unsigned emmc_pins[] = {21, 22, 23, 24, 25, 26, 27};
523 static const unsigned emmc_muxvals[] = {0, 1, 1, 1, 1, 1, 1};
524 static const unsigned emmc_dat8_pins[] = {28, 29, 30, 31};
525 static const unsigned emmc_dat8_muxvals[] = {1, 1, 1, 1};
526 static const unsigned i2c0_pins[] = {102, 103};
527 static const unsigned i2c0_muxvals[] = {0, 0};
528 static const unsigned i2c1_pins[] = {104, 105};
529 static const unsigned i2c1_muxvals[] = {0, 0};
530 static const unsigned i2c2_pins[] = {108, 109};
531 static const unsigned i2c2_muxvals[] = {2, 2};
532 static const unsigned i2c3_pins[] = {108, 109};
533 static const unsigned i2c3_muxvals[] = {3, 3};
534 static const unsigned nand_pins[] = {24, 25, 26, 27, 28, 29, 30, 31, 158, 159,
535 				     160, 161, 162, 163, 164};
536 static const unsigned nand_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
537 					0, 0};
538 static const unsigned nand_cs1_pins[] = {22, 23};
539 static const unsigned nand_cs1_muxvals[] = {0, 0};
540 static const unsigned sd_pins[] = {44, 45, 46, 47, 48, 49, 50, 51, 52};
541 static const unsigned sd_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
542 static const unsigned uart0_pins[] = {85, 88};
543 static const unsigned uart0_muxvals[] = {1, 1};
544 static const unsigned uart1_pins[] = {155, 156};
545 static const unsigned uart1_muxvals[] = {13, 13};
546 static const unsigned uart1b_pins[] = {69, 70};
547 static const unsigned uart1b_muxvals[] = {23, 23};
548 static const unsigned uart2_pins[] = {128, 129};
549 static const unsigned uart2_muxvals[] = {13, 13};
550 static const unsigned uart3_pins[] = {110, 111};
551 static const unsigned uart3_muxvals[] = {1, 1};
552 static const unsigned usb0_pins[] = {53, 54};
553 static const unsigned usb0_muxvals[] = {0, 0};
554 static const unsigned usb1_pins[] = {55, 56};
555 static const unsigned usb1_muxvals[] = {0, 0};
556 static const unsigned usb2_pins[] = {155, 156};
557 static const unsigned usb2_muxvals[] = {4, 4};
558 static const unsigned usb2b_pins[] = {67, 68};
559 static const unsigned usb2b_muxvals[] = {23, 23};
560 static const unsigned port_range0_pins[] = {
561 	135, 136, 137, 138, 139, 140, 141, 142,		/* PORT0x */
562 	143, 144, 145, 146, 147, 148, 149, 150,		/* PORT1x */
563 	151, 152, 153, 154, 155, 156, 157, 0,		/* PORT2x */
564 	1, 2, 3, 4, 5, 120, 121, 122,			/* PORT3x */
565 	24, 25, 26, 27, 28, 29, 30, 31,			/* PORT4x */
566 	40, 41, 42, 43, 44, 45, 46, 47,			/* PORT5x */
567 	48, 49, 50, 51, 52, 53, 54, 55,			/* PORT6x */
568 	56, 85, 84, 59, 82, 61, 64, 65,			/* PORT7x */
569 	8, 9, 10, 11, 12, 13, 14, 15,			/* PORT8x */
570 	66, 67, 68, 69, 70, 71, 72, 73,			/* PORT9x */
571 	74, 75, 89, 86, 78, 79, 80, 81,			/* PORT10x */
572 	60, 83, 58, 57, 88, 87, 77, 76,			/* PORT11x */
573 	90, 91, 92, 93, 94, 95, 96, 97,			/* PORT12x */
574 	98, 99, 100, 6, 101, 114, 115, 116,		/* PORT13x */
575 	103, 108, 21, 22, 23, 117, 118, 119,		/* PORT14x */
576 };
577 static const unsigned port_range0_muxvals[] = {
578 	0, 0, 0, 0, 0, 0, 0, 0,				/* PORT0x */
579 	0, 0, 0, 0, 0, 0, 0, 0,				/* PORT1x */
580 	0, 0, 0, 0, 0, 0, 0, 15,			/* PORT2x */
581 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT3x */
582 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT4x */
583 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT5x */
584 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT6x */
585 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT7x */
586 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT8x */
587 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT9x */
588 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT10x */
589 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT11x */
590 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT12x */
591 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT13x */
592 	15, 15, 15, 15, 15, 15, 15, 15,			/* PORT14x */
593 };
594 static const unsigned port_range1_pins[] = {
595 	7,						/* PORT166 */
596 };
597 static const unsigned port_range1_muxvals[] = {
598 	15,						/* PORT166 */
599 };
600 static const unsigned xirq_range0_pins[] = {
601 	151, 123, 124, 125, 126, 127, 128, 129,		/* XIRQ0-7 */
602 	130, 131, 132, 133, 62,				/* XIRQ8-12 */
603 };
604 static const unsigned xirq_range0_muxvals[] = {
605 	14, 0, 0, 0, 0, 0, 0, 0,			/* XIRQ0-7 */
606 	0, 0, 0, 0, 14,					/* XIRQ8-12 */
607 };
608 static const unsigned xirq_range1_pins[] = {
609 	134, 63,					/* XIRQ14-15 */
610 };
611 static const unsigned xirq_range1_muxvals[] = {
612 	0, 14,						/* XIRQ14-15 */
613 };
614 
615 static const struct uniphier_pinctrl_group ph1_ld4_groups[] = {
616 	UNIPHIER_PINCTRL_GROUP(emmc),
617 	UNIPHIER_PINCTRL_GROUP(emmc_dat8),
618 	UNIPHIER_PINCTRL_GROUP(i2c0),
619 	UNIPHIER_PINCTRL_GROUP(i2c1),
620 	UNIPHIER_PINCTRL_GROUP(i2c2),
621 	UNIPHIER_PINCTRL_GROUP(i2c3),
622 	UNIPHIER_PINCTRL_GROUP(nand),
623 	UNIPHIER_PINCTRL_GROUP(nand_cs1),
624 	UNIPHIER_PINCTRL_GROUP(sd),
625 	UNIPHIER_PINCTRL_GROUP(uart0),
626 	UNIPHIER_PINCTRL_GROUP(uart1),
627 	UNIPHIER_PINCTRL_GROUP(uart1b),
628 	UNIPHIER_PINCTRL_GROUP(uart2),
629 	UNIPHIER_PINCTRL_GROUP(uart3),
630 	UNIPHIER_PINCTRL_GROUP(usb0),
631 	UNIPHIER_PINCTRL_GROUP(usb1),
632 	UNIPHIER_PINCTRL_GROUP(usb2),
633 	UNIPHIER_PINCTRL_GROUP(usb2b),
634 	UNIPHIER_PINCTRL_GROUP_GPIO_RANGE_PORT(port_range0),
635 	UNIPHIER_PINCTRL_GROUP_GPIO_RANGE_PORT(port_range1),
636 	UNIPHIER_PINCTRL_GROUP_GPIO_RANGE_IRQ(xirq_range0),
637 	UNIPHIER_PINCTRL_GROUP_GPIO_RANGE_IRQ(xirq_range1),
638 	UNIPHIER_PINCTRL_GROUP_SINGLE(port00, port_range0, 0),
639 	UNIPHIER_PINCTRL_GROUP_SINGLE(port01, port_range0, 1),
640 	UNIPHIER_PINCTRL_GROUP_SINGLE(port02, port_range0, 2),
641 	UNIPHIER_PINCTRL_GROUP_SINGLE(port03, port_range0, 3),
642 	UNIPHIER_PINCTRL_GROUP_SINGLE(port04, port_range0, 4),
643 	UNIPHIER_PINCTRL_GROUP_SINGLE(port05, port_range0, 5),
644 	UNIPHIER_PINCTRL_GROUP_SINGLE(port06, port_range0, 6),
645 	UNIPHIER_PINCTRL_GROUP_SINGLE(port07, port_range0, 7),
646 	UNIPHIER_PINCTRL_GROUP_SINGLE(port10, port_range0, 8),
647 	UNIPHIER_PINCTRL_GROUP_SINGLE(port11, port_range0, 9),
648 	UNIPHIER_PINCTRL_GROUP_SINGLE(port12, port_range0, 10),
649 	UNIPHIER_PINCTRL_GROUP_SINGLE(port13, port_range0, 11),
650 	UNIPHIER_PINCTRL_GROUP_SINGLE(port14, port_range0, 12),
651 	UNIPHIER_PINCTRL_GROUP_SINGLE(port15, port_range0, 13),
652 	UNIPHIER_PINCTRL_GROUP_SINGLE(port16, port_range0, 14),
653 	UNIPHIER_PINCTRL_GROUP_SINGLE(port17, port_range0, 15),
654 	UNIPHIER_PINCTRL_GROUP_SINGLE(port20, port_range0, 16),
655 	UNIPHIER_PINCTRL_GROUP_SINGLE(port21, port_range0, 17),
656 	UNIPHIER_PINCTRL_GROUP_SINGLE(port22, port_range0, 18),
657 	UNIPHIER_PINCTRL_GROUP_SINGLE(port23, port_range0, 19),
658 	UNIPHIER_PINCTRL_GROUP_SINGLE(port24, port_range0, 20),
659 	UNIPHIER_PINCTRL_GROUP_SINGLE(port25, port_range0, 21),
660 	UNIPHIER_PINCTRL_GROUP_SINGLE(port26, port_range0, 22),
661 	UNIPHIER_PINCTRL_GROUP_SINGLE(port27, port_range0, 23),
662 	UNIPHIER_PINCTRL_GROUP_SINGLE(port30, port_range0, 24),
663 	UNIPHIER_PINCTRL_GROUP_SINGLE(port31, port_range0, 25),
664 	UNIPHIER_PINCTRL_GROUP_SINGLE(port32, port_range0, 26),
665 	UNIPHIER_PINCTRL_GROUP_SINGLE(port33, port_range0, 27),
666 	UNIPHIER_PINCTRL_GROUP_SINGLE(port34, port_range0, 28),
667 	UNIPHIER_PINCTRL_GROUP_SINGLE(port35, port_range0, 29),
668 	UNIPHIER_PINCTRL_GROUP_SINGLE(port36, port_range0, 30),
669 	UNIPHIER_PINCTRL_GROUP_SINGLE(port37, port_range0, 31),
670 	UNIPHIER_PINCTRL_GROUP_SINGLE(port40, port_range0, 32),
671 	UNIPHIER_PINCTRL_GROUP_SINGLE(port41, port_range0, 33),
672 	UNIPHIER_PINCTRL_GROUP_SINGLE(port42, port_range0, 34),
673 	UNIPHIER_PINCTRL_GROUP_SINGLE(port43, port_range0, 35),
674 	UNIPHIER_PINCTRL_GROUP_SINGLE(port44, port_range0, 36),
675 	UNIPHIER_PINCTRL_GROUP_SINGLE(port45, port_range0, 37),
676 	UNIPHIER_PINCTRL_GROUP_SINGLE(port46, port_range0, 38),
677 	UNIPHIER_PINCTRL_GROUP_SINGLE(port47, port_range0, 39),
678 	UNIPHIER_PINCTRL_GROUP_SINGLE(port50, port_range0, 40),
679 	UNIPHIER_PINCTRL_GROUP_SINGLE(port51, port_range0, 41),
680 	UNIPHIER_PINCTRL_GROUP_SINGLE(port52, port_range0, 42),
681 	UNIPHIER_PINCTRL_GROUP_SINGLE(port53, port_range0, 43),
682 	UNIPHIER_PINCTRL_GROUP_SINGLE(port54, port_range0, 44),
683 	UNIPHIER_PINCTRL_GROUP_SINGLE(port55, port_range0, 45),
684 	UNIPHIER_PINCTRL_GROUP_SINGLE(port56, port_range0, 46),
685 	UNIPHIER_PINCTRL_GROUP_SINGLE(port57, port_range0, 47),
686 	UNIPHIER_PINCTRL_GROUP_SINGLE(port60, port_range0, 48),
687 	UNIPHIER_PINCTRL_GROUP_SINGLE(port61, port_range0, 49),
688 	UNIPHIER_PINCTRL_GROUP_SINGLE(port62, port_range0, 50),
689 	UNIPHIER_PINCTRL_GROUP_SINGLE(port63, port_range0, 51),
690 	UNIPHIER_PINCTRL_GROUP_SINGLE(port64, port_range0, 52),
691 	UNIPHIER_PINCTRL_GROUP_SINGLE(port65, port_range0, 53),
692 	UNIPHIER_PINCTRL_GROUP_SINGLE(port66, port_range0, 54),
693 	UNIPHIER_PINCTRL_GROUP_SINGLE(port67, port_range0, 55),
694 	UNIPHIER_PINCTRL_GROUP_SINGLE(port70, port_range0, 56),
695 	UNIPHIER_PINCTRL_GROUP_SINGLE(port71, port_range0, 57),
696 	UNIPHIER_PINCTRL_GROUP_SINGLE(port72, port_range0, 58),
697 	UNIPHIER_PINCTRL_GROUP_SINGLE(port73, port_range0, 59),
698 	UNIPHIER_PINCTRL_GROUP_SINGLE(port74, port_range0, 60),
699 	UNIPHIER_PINCTRL_GROUP_SINGLE(port75, port_range0, 61),
700 	UNIPHIER_PINCTRL_GROUP_SINGLE(port76, port_range0, 62),
701 	UNIPHIER_PINCTRL_GROUP_SINGLE(port77, port_range0, 63),
702 	UNIPHIER_PINCTRL_GROUP_SINGLE(port80, port_range0, 64),
703 	UNIPHIER_PINCTRL_GROUP_SINGLE(port81, port_range0, 65),
704 	UNIPHIER_PINCTRL_GROUP_SINGLE(port82, port_range0, 66),
705 	UNIPHIER_PINCTRL_GROUP_SINGLE(port83, port_range0, 67),
706 	UNIPHIER_PINCTRL_GROUP_SINGLE(port84, port_range0, 68),
707 	UNIPHIER_PINCTRL_GROUP_SINGLE(port85, port_range0, 69),
708 	UNIPHIER_PINCTRL_GROUP_SINGLE(port86, port_range0, 70),
709 	UNIPHIER_PINCTRL_GROUP_SINGLE(port87, port_range0, 71),
710 	UNIPHIER_PINCTRL_GROUP_SINGLE(port90, port_range0, 72),
711 	UNIPHIER_PINCTRL_GROUP_SINGLE(port91, port_range0, 73),
712 	UNIPHIER_PINCTRL_GROUP_SINGLE(port92, port_range0, 74),
713 	UNIPHIER_PINCTRL_GROUP_SINGLE(port93, port_range0, 75),
714 	UNIPHIER_PINCTRL_GROUP_SINGLE(port94, port_range0, 76),
715 	UNIPHIER_PINCTRL_GROUP_SINGLE(port95, port_range0, 77),
716 	UNIPHIER_PINCTRL_GROUP_SINGLE(port96, port_range0, 78),
717 	UNIPHIER_PINCTRL_GROUP_SINGLE(port97, port_range0, 79),
718 	UNIPHIER_PINCTRL_GROUP_SINGLE(port100, port_range0, 80),
719 	UNIPHIER_PINCTRL_GROUP_SINGLE(port101, port_range0, 81),
720 	UNIPHIER_PINCTRL_GROUP_SINGLE(port102, port_range0, 82),
721 	UNIPHIER_PINCTRL_GROUP_SINGLE(port103, port_range0, 83),
722 	UNIPHIER_PINCTRL_GROUP_SINGLE(port104, port_range0, 84),
723 	UNIPHIER_PINCTRL_GROUP_SINGLE(port105, port_range0, 85),
724 	UNIPHIER_PINCTRL_GROUP_SINGLE(port106, port_range0, 86),
725 	UNIPHIER_PINCTRL_GROUP_SINGLE(port107, port_range0, 87),
726 	UNIPHIER_PINCTRL_GROUP_SINGLE(port110, port_range0, 88),
727 	UNIPHIER_PINCTRL_GROUP_SINGLE(port111, port_range0, 89),
728 	UNIPHIER_PINCTRL_GROUP_SINGLE(port112, port_range0, 90),
729 	UNIPHIER_PINCTRL_GROUP_SINGLE(port113, port_range0, 91),
730 	UNIPHIER_PINCTRL_GROUP_SINGLE(port114, port_range0, 92),
731 	UNIPHIER_PINCTRL_GROUP_SINGLE(port115, port_range0, 93),
732 	UNIPHIER_PINCTRL_GROUP_SINGLE(port116, port_range0, 94),
733 	UNIPHIER_PINCTRL_GROUP_SINGLE(port117, port_range0, 95),
734 	UNIPHIER_PINCTRL_GROUP_SINGLE(port120, port_range0, 96),
735 	UNIPHIER_PINCTRL_GROUP_SINGLE(port121, port_range0, 97),
736 	UNIPHIER_PINCTRL_GROUP_SINGLE(port122, port_range0, 98),
737 	UNIPHIER_PINCTRL_GROUP_SINGLE(port123, port_range0, 99),
738 	UNIPHIER_PINCTRL_GROUP_SINGLE(port124, port_range0, 100),
739 	UNIPHIER_PINCTRL_GROUP_SINGLE(port125, port_range0, 101),
740 	UNIPHIER_PINCTRL_GROUP_SINGLE(port126, port_range0, 102),
741 	UNIPHIER_PINCTRL_GROUP_SINGLE(port127, port_range0, 103),
742 	UNIPHIER_PINCTRL_GROUP_SINGLE(port130, port_range0, 104),
743 	UNIPHIER_PINCTRL_GROUP_SINGLE(port131, port_range0, 105),
744 	UNIPHIER_PINCTRL_GROUP_SINGLE(port132, port_range0, 106),
745 	UNIPHIER_PINCTRL_GROUP_SINGLE(port133, port_range0, 107),
746 	UNIPHIER_PINCTRL_GROUP_SINGLE(port134, port_range0, 108),
747 	UNIPHIER_PINCTRL_GROUP_SINGLE(port135, port_range0, 109),
748 	UNIPHIER_PINCTRL_GROUP_SINGLE(port136, port_range0, 110),
749 	UNIPHIER_PINCTRL_GROUP_SINGLE(port137, port_range0, 111),
750 	UNIPHIER_PINCTRL_GROUP_SINGLE(port140, port_range0, 112),
751 	UNIPHIER_PINCTRL_GROUP_SINGLE(port141, port_range0, 113),
752 	UNIPHIER_PINCTRL_GROUP_SINGLE(port142, port_range0, 114),
753 	UNIPHIER_PINCTRL_GROUP_SINGLE(port143, port_range0, 115),
754 	UNIPHIER_PINCTRL_GROUP_SINGLE(port144, port_range0, 116),
755 	UNIPHIER_PINCTRL_GROUP_SINGLE(port145, port_range0, 117),
756 	UNIPHIER_PINCTRL_GROUP_SINGLE(port146, port_range0, 118),
757 	UNIPHIER_PINCTRL_GROUP_SINGLE(port147, port_range0, 119),
758 	UNIPHIER_PINCTRL_GROUP_SINGLE(port165, port_range1, 0),
759 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq0, xirq_range0, 0),
760 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq1, xirq_range0, 1),
761 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq2, xirq_range0, 2),
762 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq3, xirq_range0, 3),
763 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq4, xirq_range0, 4),
764 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq5, xirq_range0, 5),
765 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq6, xirq_range0, 6),
766 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq7, xirq_range0, 7),
767 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq8, xirq_range0, 8),
768 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq9, xirq_range0, 9),
769 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq10, xirq_range0, 10),
770 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq11, xirq_range0, 11),
771 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq12, xirq_range0, 12),
772 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq14, xirq_range1, 0),
773 	UNIPHIER_PINCTRL_GROUP_SINGLE(xirq15, xirq_range1, 1),
774 };
775 
776 static const char * const emmc_groups[] = {"emmc", "emmc_dat8"};
777 static const char * const i2c0_groups[] = {"i2c0"};
778 static const char * const i2c1_groups[] = {"i2c1"};
779 static const char * const i2c2_groups[] = {"i2c2"};
780 static const char * const i2c3_groups[] = {"i2c3"};
781 static const char * const nand_groups[] = {"nand", "nand_cs1"};
782 static const char * const sd_groups[] = {"sd"};
783 static const char * const uart0_groups[] = {"uart0"};
784 static const char * const uart1_groups[] = {"uart1", "uart1b"};
785 static const char * const uart2_groups[] = {"uart2"};
786 static const char * const uart3_groups[] = {"uart3"};
787 static const char * const usb0_groups[] = {"usb0"};
788 static const char * const usb1_groups[] = {"usb1"};
789 static const char * const usb2_groups[] = {"usb2", "usb2b"};
790 static const char * const port_groups[] = {
791 	"port00",  "port01",  "port02",  "port03",
792 	"port04",  "port05",  "port06",  "port07",
793 	"port10",  "port11",  "port12",  "port13",
794 	"port14",  "port15",  "port16",  "port17",
795 	"port20",  "port21",  "port22",  "port23",
796 	"port24",  "port25",  "port26",  "port27",
797 	"port30",  "port31",  "port32",  "port33",
798 	"port34",  "port35",  "port36",  "port37",
799 	"port40",  "port41",  "port42",  "port43",
800 	"port44",  "port45",  "port46",  "port47",
801 	"port50",  "port51",  "port52",  "port53",
802 	"port54",  "port55",  "port56",  "port57",
803 	"port60",  "port61",  "port62",  "port63",
804 	"port64",  "port65",  "port66",  "port67",
805 	"port70",  "port71",  "port72",  "port73",
806 	"port74",  "port75",  "port76",  "port77",
807 	"port80",  "port81",  "port82",  "port83",
808 	"port84",  "port85",  "port86",  "port87",
809 	"port90",  "port91",  "port92",  "port93",
810 	"port94",  "port95",  "port96",  "port97",
811 	"port100", "port101", "port102", "port103",
812 	"port104", "port105", "port106", "port107",
813 	"port110", "port111", "port112", "port113",
814 	"port114", "port115", "port116", "port117",
815 	"port120", "port121", "port122", "port123",
816 	"port124", "port125", "port126", "port127",
817 	"port130", "port131", "port132", "port133",
818 	"port134", "port135", "port136", "port137",
819 	"port140", "port141", "port142", "port143",
820 	"port144", "port145", "port146", "port147",
821 	/* port150-164 missing */
822 	/* none */ "port165",
823 };
824 static const char * const xirq_groups[] = {
825 	"xirq0",  "xirq1",  "xirq2",  "xirq3",
826 	"xirq4",  "xirq5",  "xirq6",  "xirq7",
827 	"xirq8",  "xirq9",  "xirq10", "xirq11",
828 	"xirq12", /* none*/ "xirq14", "xirq15",
829 };
830 
831 static const struct uniphier_pinmux_function ph1_ld4_functions[] = {
832 	UNIPHIER_PINMUX_FUNCTION(emmc),
833 	UNIPHIER_PINMUX_FUNCTION(i2c0),
834 	UNIPHIER_PINMUX_FUNCTION(i2c1),
835 	UNIPHIER_PINMUX_FUNCTION(i2c2),
836 	UNIPHIER_PINMUX_FUNCTION(i2c3),
837 	UNIPHIER_PINMUX_FUNCTION(nand),
838 	UNIPHIER_PINMUX_FUNCTION(sd),
839 	UNIPHIER_PINMUX_FUNCTION(uart0),
840 	UNIPHIER_PINMUX_FUNCTION(uart1),
841 	UNIPHIER_PINMUX_FUNCTION(uart2),
842 	UNIPHIER_PINMUX_FUNCTION(uart3),
843 	UNIPHIER_PINMUX_FUNCTION(usb0),
844 	UNIPHIER_PINMUX_FUNCTION(usb1),
845 	UNIPHIER_PINMUX_FUNCTION(usb2),
846 	UNIPHIER_PINMUX_FUNCTION(port),
847 	UNIPHIER_PINMUX_FUNCTION(xirq),
848 };
849 
850 static struct uniphier_pinctrl_socdata ph1_ld4_pindata = {
851 	.groups = ph1_ld4_groups,
852 	.groups_count = ARRAY_SIZE(ph1_ld4_groups),
853 	.functions = ph1_ld4_functions,
854 	.functions_count = ARRAY_SIZE(ph1_ld4_functions),
855 	.mux_bits = 8,
856 	.reg_stride = 4,
857 	.load_pinctrl = false,
858 };
859 
860 static struct pinctrl_desc ph1_ld4_pinctrl_desc = {
861 	.name = DRIVER_NAME,
862 	.pins = ph1_ld4_pins,
863 	.npins = ARRAY_SIZE(ph1_ld4_pins),
864 	.owner = THIS_MODULE,
865 };
866 
867 static int ph1_ld4_pinctrl_probe(struct platform_device *pdev)
868 {
869 	return uniphier_pinctrl_probe(pdev, &ph1_ld4_pinctrl_desc,
870 				      &ph1_ld4_pindata);
871 }
872 
873 static const struct of_device_id ph1_ld4_pinctrl_match[] = {
874 	{ .compatible = "socionext,ph1-ld4-pinctrl" },
875 	{ /* sentinel */ }
876 };
877 MODULE_DEVICE_TABLE(of, ph1_ld4_pinctrl_match);
878 
879 static struct platform_driver ph1_ld4_pinctrl_driver = {
880 	.probe = ph1_ld4_pinctrl_probe,
881 	.driver = {
882 		.name = DRIVER_NAME,
883 		.of_match_table = ph1_ld4_pinctrl_match,
884 	},
885 };
886 module_platform_driver(ph1_ld4_pinctrl_driver);
887 
888 MODULE_AUTHOR("Masahiro Yamada <yamada.masahiro@socionext.com>");
889 MODULE_DESCRIPTION("UniPhier PH1-LD4 pinctrl driver");
890 MODULE_LICENSE("GPL");
891