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
24static 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
522static const unsigned emmc_pins[] = {21, 22, 23, 24, 25, 26, 27};
523static const unsigned emmc_muxvals[] = {0, 1, 1, 1, 1, 1, 1};
524static const unsigned emmc_dat8_pins[] = {28, 29, 30, 31};
525static const unsigned emmc_dat8_muxvals[] = {1, 1, 1, 1};
526static const unsigned i2c0_pins[] = {102, 103};
527static const unsigned i2c0_muxvals[] = {0, 0};
528static const unsigned i2c1_pins[] = {104, 105};
529static const unsigned i2c1_muxvals[] = {0, 0};
530static const unsigned i2c2_pins[] = {108, 109};
531static const unsigned i2c2_muxvals[] = {2, 2};
532static const unsigned i2c3_pins[] = {108, 109};
533static const unsigned i2c3_muxvals[] = {3, 3};
534static const unsigned nand_pins[] = {24, 25, 26, 27, 28, 29, 30, 31, 158, 159,
535				     160, 161, 162, 163, 164};
536static const unsigned nand_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
537					0, 0};
538static const unsigned nand_cs1_pins[] = {22, 23};
539static const unsigned nand_cs1_muxvals[] = {0, 0};
540static const unsigned sd_pins[] = {44, 45, 46, 47, 48, 49, 50, 51, 52};
541static const unsigned sd_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
542static const unsigned uart0_pins[] = {85, 88};
543static const unsigned uart0_muxvals[] = {1, 1};
544static const unsigned uart1_pins[] = {155, 156};
545static const unsigned uart1_muxvals[] = {13, 13};
546static const unsigned uart1b_pins[] = {69, 70};
547static const unsigned uart1b_muxvals[] = {23, 23};
548static const unsigned uart2_pins[] = {128, 129};
549static const unsigned uart2_muxvals[] = {13, 13};
550static const unsigned uart3_pins[] = {110, 111};
551static const unsigned uart3_muxvals[] = {1, 1};
552static const unsigned usb0_pins[] = {53, 54};
553static const unsigned usb0_muxvals[] = {0, 0};
554static const unsigned usb1_pins[] = {55, 56};
555static const unsigned usb1_muxvals[] = {0, 0};
556static const unsigned usb2_pins[] = {155, 156};
557static const unsigned usb2_muxvals[] = {4, 4};
558static const unsigned usb2b_pins[] = {67, 68};
559static const unsigned usb2b_muxvals[] = {23, 23};
560static 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};
577static 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};
594static const unsigned port_range1_pins[] = {
595	7,						/* PORT166 */
596};
597static const unsigned port_range1_muxvals[] = {
598	15,						/* PORT166 */
599};
600static 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};
604static 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};
608static const unsigned xirq_range1_pins[] = {
609	134, 63,					/* XIRQ14-15 */
610};
611static const unsigned xirq_range1_muxvals[] = {
612	0, 14,						/* XIRQ14-15 */
613};
614
615static 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
776static const char * const emmc_groups[] = {"emmc", "emmc_dat8"};
777static const char * const i2c0_groups[] = {"i2c0"};
778static const char * const i2c1_groups[] = {"i2c1"};
779static const char * const i2c2_groups[] = {"i2c2"};
780static const char * const i2c3_groups[] = {"i2c3"};
781static const char * const nand_groups[] = {"nand", "nand_cs1"};
782static const char * const sd_groups[] = {"sd"};
783static const char * const uart0_groups[] = {"uart0"};
784static const char * const uart1_groups[] = {"uart1", "uart1b"};
785static const char * const uart2_groups[] = {"uart2"};
786static const char * const uart3_groups[] = {"uart3"};
787static const char * const usb0_groups[] = {"usb0"};
788static const char * const usb1_groups[] = {"usb1"};
789static const char * const usb2_groups[] = {"usb2", "usb2b"};
790static 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};
824static 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
831static 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
850static 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
860static 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
867static 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
873static const struct of_device_id ph1_ld4_pinctrl_match[] = {
874	{ .compatible = "socionext,ph1-ld4-pinctrl" },
875	{ /* sentinel */ }
876};
877MODULE_DEVICE_TABLE(of, ph1_ld4_pinctrl_match);
878
879static struct platform_driver ph1_ld4_pinctrl_driver = {
880	.probe = ph1_ld4_pinctrl_probe,
881	.remove = uniphier_pinctrl_remove,
882	.driver = {
883		.name = DRIVER_NAME,
884		.of_match_table = ph1_ld4_pinctrl_match,
885	},
886};
887module_platform_driver(ph1_ld4_pinctrl_driver);
888
889MODULE_AUTHOR("Masahiro Yamada <yamada.masahiro@socionext.com>");
890MODULE_DESCRIPTION("UniPhier PH1-LD4 pinctrl driver");
891MODULE_LICENSE("GPL");
892