1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Allwinner D1 SoC pinctrl driver.
4 *
5 * Copyright (c) 2020 wuyan@allwinnertech.com
6 * Copyright (c) 2021-2022 Samuel Holland <samuel@sholland.org>
7 */
8
9#include <linux/module.h>
10#include <linux/platform_device.h>
11#include <linux/of.h>
12#include <linux/pinctrl/pinctrl.h>
13
14#include "pinctrl-sunxi.h"
15
16static const struct sunxi_desc_pin d1_pins[] = {
17	/* PB */
18	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),
19		SUNXI_FUNCTION(0x0, "gpio_in"),
20		SUNXI_FUNCTION(0x1, "gpio_out"),
21		SUNXI_FUNCTION(0x2, "pwm3"),
22		SUNXI_FUNCTION(0x3, "ir"),		/* TX */
23		SUNXI_FUNCTION(0x4, "i2c2"),		/* SCK */
24		SUNXI_FUNCTION(0x5, "spi1"),		/* WP */
25		SUNXI_FUNCTION(0x6, "uart0"),		/* TX */
26		SUNXI_FUNCTION(0x7, "uart2"),		/* TX */
27		SUNXI_FUNCTION(0x8, "spdif"),		/* OUT */
28		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 0)),
29	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),
30		SUNXI_FUNCTION(0x0, "gpio_in"),
31		SUNXI_FUNCTION(0x1, "gpio_out"),
32		SUNXI_FUNCTION(0x2, "pwm4"),
33		SUNXI_FUNCTION(0x3, "i2s2_dout"),	/* DOUT3 */
34		SUNXI_FUNCTION(0x4, "i2c2"),		/* SDA */
35		SUNXI_FUNCTION(0x5, "i2s2_din"),	/* DIN3 */
36		SUNXI_FUNCTION(0x6, "uart0"),		/* RX */
37		SUNXI_FUNCTION(0x7, "uart2"),		/* RX */
38		SUNXI_FUNCTION(0x8, "ir"),		/* RX */
39		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 1)),
40	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),
41		SUNXI_FUNCTION(0x0, "gpio_in"),
42		SUNXI_FUNCTION(0x1, "gpio_out"),
43		SUNXI_FUNCTION(0x2, "lcd0"),		/* D0 */
44		SUNXI_FUNCTION(0x3, "i2s2_dout"),	/* DOUT2 */
45		SUNXI_FUNCTION(0x4, "i2c0"),		/* SDA */
46		SUNXI_FUNCTION(0x5, "i2s2_din"),	/* DIN2 */
47		SUNXI_FUNCTION(0x6, "lcd0"),		/* D18 */
48		SUNXI_FUNCTION(0x7, "uart4"),		/* TX */
49		SUNXI_FUNCTION(0x8, "can0"),		/* TX */
50		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 2)),
51	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),
52		SUNXI_FUNCTION(0x0, "gpio_in"),
53		SUNXI_FUNCTION(0x1, "gpio_out"),
54		SUNXI_FUNCTION(0x2, "lcd0"),		/* D1 */
55		SUNXI_FUNCTION(0x3, "i2s2_dout"),	/* DOUT1 */
56		SUNXI_FUNCTION(0x4, "i2c0"),		/* SCK */
57		SUNXI_FUNCTION(0x5, "i2s2_din"),	/* DIN0 */
58		SUNXI_FUNCTION(0x6, "lcd0"),		/* D19 */
59		SUNXI_FUNCTION(0x7, "uart4"),		/* RX */
60		SUNXI_FUNCTION(0x8, "can0"),		/* RX */
61		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 3)),
62	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4),
63		SUNXI_FUNCTION(0x0, "gpio_in"),
64		SUNXI_FUNCTION(0x1, "gpio_out"),
65		SUNXI_FUNCTION(0x2, "lcd0"),		/* D8 */
66		SUNXI_FUNCTION(0x3, "i2s2_dout"),	/* DOUT0 */
67		SUNXI_FUNCTION(0x4, "i2c1"),		/* SCK */
68		SUNXI_FUNCTION(0x5, "i2s2_din"),	/* DIN1 */
69		SUNXI_FUNCTION(0x6, "lcd0"),		/* D20 */
70		SUNXI_FUNCTION(0x7, "uart5"),		/* TX */
71		SUNXI_FUNCTION(0x8, "can1"),		/* TX */
72		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 4)),
73	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5),
74		SUNXI_FUNCTION(0x0, "gpio_in"),
75		SUNXI_FUNCTION(0x1, "gpio_out"),
76		SUNXI_FUNCTION(0x2, "lcd0"),		/* D9 */
77		SUNXI_FUNCTION(0x3, "i2s2"),		/* BCLK */
78		SUNXI_FUNCTION(0x4, "i2c1"),		/* SDA */
79		SUNXI_FUNCTION(0x5, "pwm0"),
80		SUNXI_FUNCTION(0x6, "lcd0"),		/* D21 */
81		SUNXI_FUNCTION(0x7, "uart5"),		/* RX */
82		SUNXI_FUNCTION(0x8, "can1"),		/* RX */
83		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 5)),
84	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6),
85		SUNXI_FUNCTION(0x0, "gpio_in"),
86		SUNXI_FUNCTION(0x1, "gpio_out"),
87		SUNXI_FUNCTION(0x2, "lcd0"),		/* D16 */
88		SUNXI_FUNCTION(0x3, "i2s2"),		/* LRCK */
89		SUNXI_FUNCTION(0x4, "i2c3"),		/* SCK */
90		SUNXI_FUNCTION(0x5, "pwm1"),
91		SUNXI_FUNCTION(0x6, "lcd0"),		/* D22 */
92		SUNXI_FUNCTION(0x7, "uart3"),		/* TX */
93		SUNXI_FUNCTION(0x8, "bist0"),		/* BIST_RESULT0 */
94		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 6)),
95	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7),
96		SUNXI_FUNCTION(0x0, "gpio_in"),
97		SUNXI_FUNCTION(0x1, "gpio_out"),
98		SUNXI_FUNCTION(0x2, "lcd0"),		/* D17 */
99		SUNXI_FUNCTION(0x3, "i2s2"),		/* MCLK */
100		SUNXI_FUNCTION(0x4, "i2c3"),		/* SDA */
101		SUNXI_FUNCTION(0x5, "ir"),		/* RX */
102		SUNXI_FUNCTION(0x6, "lcd0"),		/* D23 */
103		SUNXI_FUNCTION(0x7, "uart3"),		/* RX */
104		SUNXI_FUNCTION(0x8, "bist1"),		/* BIST_RESULT1 */
105		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 7)),
106	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 8),
107		SUNXI_FUNCTION(0x0, "gpio_in"),
108		SUNXI_FUNCTION(0x1, "gpio_out"),
109		SUNXI_FUNCTION(0x2, "dmic"),		/* DATA3 */
110		SUNXI_FUNCTION(0x3, "pwm5"),
111		SUNXI_FUNCTION(0x4, "i2c2"),		/* SCK */
112		SUNXI_FUNCTION(0x5, "spi1"),		/* HOLD */
113		SUNXI_FUNCTION(0x6, "uart0"),		/* TX */
114		SUNXI_FUNCTION(0x7, "uart1"),		/* TX */
115		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 8)),
116	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 9),
117		SUNXI_FUNCTION(0x0, "gpio_in"),
118		SUNXI_FUNCTION(0x1, "gpio_out"),
119		SUNXI_FUNCTION(0x2, "dmic"),		/* DATA2 */
120		SUNXI_FUNCTION(0x3, "pwm6"),
121		SUNXI_FUNCTION(0x4, "i2c2"),		/* SDA */
122		SUNXI_FUNCTION(0x5, "spi1"),		/* MISO */
123		SUNXI_FUNCTION(0x6, "uart0"),		/* RX */
124		SUNXI_FUNCTION(0x7, "uart1"),		/* RX */
125		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 9)),
126	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 10),
127		SUNXI_FUNCTION(0x0, "gpio_in"),
128		SUNXI_FUNCTION(0x1, "gpio_out"),
129		SUNXI_FUNCTION(0x2, "dmic"),		/* DATA1 */
130		SUNXI_FUNCTION(0x3, "pwm7"),
131		SUNXI_FUNCTION(0x4, "i2c0"),		/* SCK */
132		SUNXI_FUNCTION(0x5, "spi1"),		/* MOSI */
133		SUNXI_FUNCTION(0x6, "clk"),		/* FANOUT0 */
134		SUNXI_FUNCTION(0x7, "uart1"),		/* RTS */
135		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 10)),
136	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 11),
137		SUNXI_FUNCTION(0x0, "gpio_in"),
138		SUNXI_FUNCTION(0x1, "gpio_out"),
139		SUNXI_FUNCTION(0x2, "dmic"),		/* DATA0 */
140		SUNXI_FUNCTION(0x3, "pwm2"),
141		SUNXI_FUNCTION(0x4, "i2c0"),		/* SDA */
142		SUNXI_FUNCTION(0x5, "spi1"),		/* CLK */
143		SUNXI_FUNCTION(0x6, "clk"),		/* FANOUT1 */
144		SUNXI_FUNCTION(0x7, "uart1"),		/* CTS */
145		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 11)),
146	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 12),
147		SUNXI_FUNCTION(0x0, "gpio_in"),
148		SUNXI_FUNCTION(0x1, "gpio_out"),
149		SUNXI_FUNCTION(0x2, "dmic"),		/* CLK */
150		SUNXI_FUNCTION(0x3, "pwm0"),
151		SUNXI_FUNCTION(0x4, "spdif"),		/* IN */
152		SUNXI_FUNCTION(0x5, "spi1"),		/* CS0 */
153		SUNXI_FUNCTION(0x6, "clk"),		/* FANOUT2 */
154		SUNXI_FUNCTION(0x7, "ir"),		/* RX */
155		SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 12)),
156	/* PC */
157	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
158		SUNXI_FUNCTION(0x0, "gpio_in"),
159		SUNXI_FUNCTION(0x1, "gpio_out"),
160		SUNXI_FUNCTION(0x2, "uart2"),		/* TX */
161		SUNXI_FUNCTION(0x3, "i2c2"),		/* SCK */
162		SUNXI_FUNCTION(0x4, "ledc"),
163		SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 0)),
164	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
165		SUNXI_FUNCTION(0x0, "gpio_in"),
166		SUNXI_FUNCTION(0x1, "gpio_out"),
167		SUNXI_FUNCTION(0x2, "uart2"),		/* RX */
168		SUNXI_FUNCTION(0x3, "i2c2"),		/* SDA */
169		SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 1)),
170	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
171		SUNXI_FUNCTION(0x0, "gpio_in"),
172		SUNXI_FUNCTION(0x1, "gpio_out"),
173		SUNXI_FUNCTION(0x2, "spi0"),		/* CLK */
174		SUNXI_FUNCTION(0x3, "mmc2"),		/* CLK */
175		SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 2)),
176	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
177		SUNXI_FUNCTION(0x0, "gpio_in"),
178		SUNXI_FUNCTION(0x1, "gpio_out"),
179		SUNXI_FUNCTION(0x2, "spi0"),		/* CS0 */
180		SUNXI_FUNCTION(0x3, "mmc2"),		/* CMD */
181		SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 3)),
182	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),
183		SUNXI_FUNCTION(0x0, "gpio_in"),
184		SUNXI_FUNCTION(0x1, "gpio_out"),
185		SUNXI_FUNCTION(0x2, "spi0"),		/* MOSI */
186		SUNXI_FUNCTION(0x3, "mmc2"),		/* D2 */
187		SUNXI_FUNCTION(0x4, "boot"),		/* SEL0 */
188		SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 4)),
189	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),
190		SUNXI_FUNCTION(0x0, "gpio_in"),
191		SUNXI_FUNCTION(0x1, "gpio_out"),
192		SUNXI_FUNCTION(0x2, "spi0"),		/* MISO */
193		SUNXI_FUNCTION(0x3, "mmc2"),		/* D1 */
194		SUNXI_FUNCTION(0x4, "boot"),		/* SEL1 */
195		SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 5)),
196	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),
197		SUNXI_FUNCTION(0x0, "gpio_in"),
198		SUNXI_FUNCTION(0x1, "gpio_out"),
199		SUNXI_FUNCTION(0x2, "spi0"),		/* WP */
200		SUNXI_FUNCTION(0x3, "mmc2"),		/* D0 */
201		SUNXI_FUNCTION(0x4, "uart3"),		/* TX */
202		SUNXI_FUNCTION(0x5, "i2c3"),		/* SCK */
203		SUNXI_FUNCTION(0x6, "pll"),		/* DBG-CLK */
204		SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 6)),
205	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),
206		SUNXI_FUNCTION(0x0, "gpio_in"),
207		SUNXI_FUNCTION(0x1, "gpio_out"),
208		SUNXI_FUNCTION(0x2, "spi0"),		/* HOLD */
209		SUNXI_FUNCTION(0x3, "mmc2"),		/* D3 */
210		SUNXI_FUNCTION(0x4, "uart3"),		/* RX */
211		SUNXI_FUNCTION(0x5, "i2c3"),		/* SDA */
212		SUNXI_FUNCTION(0x6, "tcon"),		/* TRIG0 */
213		SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 7)),
214	/* PD */
215	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),
216		SUNXI_FUNCTION(0x0, "gpio_in"),
217		SUNXI_FUNCTION(0x1, "gpio_out"),
218		SUNXI_FUNCTION(0x2, "lcd0"),		/* D2 */
219		SUNXI_FUNCTION(0x3, "lvds0"),		/* V0P */
220		SUNXI_FUNCTION(0x4, "dsi"),		/* D0P */
221		SUNXI_FUNCTION(0x5, "i2c0"),		/* SCK */
222		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 0)),
223	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),
224		SUNXI_FUNCTION(0x0, "gpio_in"),
225		SUNXI_FUNCTION(0x1, "gpio_out"),
226		SUNXI_FUNCTION(0x2, "lcd0"),		/* D3 */
227		SUNXI_FUNCTION(0x3, "lvds0"),		/* V0N */
228		SUNXI_FUNCTION(0x4, "dsi"),		/* D0N */
229		SUNXI_FUNCTION(0x5, "uart2"),		/* TX */
230		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 1)),
231	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
232		SUNXI_FUNCTION(0x0, "gpio_in"),
233		SUNXI_FUNCTION(0x1, "gpio_out"),
234		SUNXI_FUNCTION(0x2, "lcd0"),		/* D4 */
235		SUNXI_FUNCTION(0x3, "lvds0"),		/* V1P */
236		SUNXI_FUNCTION(0x4, "dsi"),		/* D1P */
237		SUNXI_FUNCTION(0x5, "uart2"),		/* RX */
238		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 2)),
239	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
240		SUNXI_FUNCTION(0x0, "gpio_in"),
241		SUNXI_FUNCTION(0x1, "gpio_out"),
242		SUNXI_FUNCTION(0x2, "lcd0"),		/* D5 */
243		SUNXI_FUNCTION(0x3, "lvds0"),		/* V1N */
244		SUNXI_FUNCTION(0x4, "dsi"),		/* D1N */
245		SUNXI_FUNCTION(0x5, "uart2"),		/* RTS */
246		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 3)),
247	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
248		SUNXI_FUNCTION(0x0, "gpio_in"),
249		SUNXI_FUNCTION(0x1, "gpio_out"),
250		SUNXI_FUNCTION(0x2, "lcd0"),		/* D6 */
251		SUNXI_FUNCTION(0x3, "lvds0"),		/* V2P */
252		SUNXI_FUNCTION(0x4, "dsi"),		/* CKP */
253		SUNXI_FUNCTION(0x5, "uart2"),		/* CTS */
254		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 4)),
255	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
256		SUNXI_FUNCTION(0x0, "gpio_in"),
257		SUNXI_FUNCTION(0x1, "gpio_out"),
258		SUNXI_FUNCTION(0x2, "lcd0"),		/* D7 */
259		SUNXI_FUNCTION(0x3, "lvds0"),		/* V2N */
260		SUNXI_FUNCTION(0x4, "dsi"),		/* CKN */
261		SUNXI_FUNCTION(0x5, "uart5"),		/* TX */
262		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 5)),
263	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
264		SUNXI_FUNCTION(0x0, "gpio_in"),
265		SUNXI_FUNCTION(0x1, "gpio_out"),
266		SUNXI_FUNCTION(0x2, "lcd0"),		/* D10 */
267		SUNXI_FUNCTION(0x3, "lvds0"),		/* CKP */
268		SUNXI_FUNCTION(0x4, "dsi"),		/* D2P */
269		SUNXI_FUNCTION(0x5, "uart5"),		/* RX */
270		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 6)),
271	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
272		SUNXI_FUNCTION(0x0, "gpio_in"),
273		SUNXI_FUNCTION(0x1, "gpio_out"),
274		SUNXI_FUNCTION(0x2, "lcd0"),		/* D11 */
275		SUNXI_FUNCTION(0x3, "lvds0"),		/* CKN */
276		SUNXI_FUNCTION(0x4, "dsi"),		/* D2N */
277		SUNXI_FUNCTION(0x5, "uart4"),		/* TX */
278		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 7)),
279	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),
280		SUNXI_FUNCTION(0x0, "gpio_in"),
281		SUNXI_FUNCTION(0x1, "gpio_out"),
282		SUNXI_FUNCTION(0x2, "lcd0"),		/* D12 */
283		SUNXI_FUNCTION(0x3, "lvds0"),		/* V3P */
284		SUNXI_FUNCTION(0x4, "dsi"),		/* D3P */
285		SUNXI_FUNCTION(0x5, "uart4"),		/* RX */
286		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 8)),
287	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),
288		SUNXI_FUNCTION(0x0, "gpio_in"),
289		SUNXI_FUNCTION(0x1, "gpio_out"),
290		SUNXI_FUNCTION(0x2, "lcd0"),		/* D13 */
291		SUNXI_FUNCTION(0x3, "lvds0"),		/* V3N */
292		SUNXI_FUNCTION(0x4, "dsi"),		/* D3N */
293		SUNXI_FUNCTION(0x5, "pwm6"),
294		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 9)),
295	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
296		SUNXI_FUNCTION(0x0, "gpio_in"),
297		SUNXI_FUNCTION(0x1, "gpio_out"),
298		SUNXI_FUNCTION(0x2, "lcd0"),		/* D14 */
299		SUNXI_FUNCTION(0x3, "lvds1"),		/* V0P */
300		SUNXI_FUNCTION(0x4, "spi1"),		/* CS0 */
301		SUNXI_FUNCTION(0x5, "uart3"),		/* TX */
302		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 10)),
303	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
304		SUNXI_FUNCTION(0x0, "gpio_in"),
305		SUNXI_FUNCTION(0x1, "gpio_out"),
306		SUNXI_FUNCTION(0x2, "lcd0"),		/* D15 */
307		SUNXI_FUNCTION(0x3, "lvds1"),		/* V0N */
308		SUNXI_FUNCTION(0x4, "spi1"),		/* CLK */
309		SUNXI_FUNCTION(0x5, "uart3"),		/* RX */
310		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 11)),
311	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
312		SUNXI_FUNCTION(0x0, "gpio_in"),
313		SUNXI_FUNCTION(0x1, "gpio_out"),
314		SUNXI_FUNCTION(0x2, "lcd0"),		/* D18 */
315		SUNXI_FUNCTION(0x3, "lvds1"),		/* V1P */
316		SUNXI_FUNCTION(0x4, "spi1"),		/* MOSI */
317		SUNXI_FUNCTION(0x5, "i2c0"),		/* SDA */
318		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 12)),
319	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
320		SUNXI_FUNCTION(0x0, "gpio_in"),
321		SUNXI_FUNCTION(0x1, "gpio_out"),
322		SUNXI_FUNCTION(0x2, "lcd0"),		/* D19 */
323		SUNXI_FUNCTION(0x3, "lvds1"),		/* V1N */
324		SUNXI_FUNCTION(0x4, "spi1"),		/* MISO */
325		SUNXI_FUNCTION(0x5, "uart3"),		/* RTS */
326		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 13)),
327	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
328		SUNXI_FUNCTION(0x0, "gpio_in"),
329		SUNXI_FUNCTION(0x1, "gpio_out"),
330		SUNXI_FUNCTION(0x2, "lcd0"),		/* D20 */
331		SUNXI_FUNCTION(0x3, "lvds1"),		/* V2P */
332		SUNXI_FUNCTION(0x4, "spi1"),		/* HOLD */
333		SUNXI_FUNCTION(0x5, "uart3"),		/* CTS */
334		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 14)),
335	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
336		SUNXI_FUNCTION(0x0, "gpio_in"),
337		SUNXI_FUNCTION(0x1, "gpio_out"),
338		SUNXI_FUNCTION(0x2, "lcd0"),		/* D21 */
339		SUNXI_FUNCTION(0x3, "lvds1"),		/* V2N */
340		SUNXI_FUNCTION(0x4, "spi1"),		/* WP */
341		SUNXI_FUNCTION(0x5, "ir"),		/* RX */
342		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 15)),
343	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
344		SUNXI_FUNCTION(0x0, "gpio_in"),
345		SUNXI_FUNCTION(0x1, "gpio_out"),
346		SUNXI_FUNCTION(0x2, "lcd0"),		/* D22 */
347		SUNXI_FUNCTION(0x3, "lvds1"),		/* CKP */
348		SUNXI_FUNCTION(0x4, "dmic"),		/* DATA3 */
349		SUNXI_FUNCTION(0x5, "pwm0"),
350		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 16)),
351	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
352		SUNXI_FUNCTION(0x0, "gpio_in"),
353		SUNXI_FUNCTION(0x1, "gpio_out"),
354		SUNXI_FUNCTION(0x2, "lcd0"),		/* D23 */
355		SUNXI_FUNCTION(0x3, "lvds1"),		/* CKN */
356		SUNXI_FUNCTION(0x4, "dmic"),		/* DATA2 */
357		SUNXI_FUNCTION(0x5, "pwm1"),
358		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 17)),
359	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),
360		SUNXI_FUNCTION(0x0, "gpio_in"),
361		SUNXI_FUNCTION(0x1, "gpio_out"),
362		SUNXI_FUNCTION(0x2, "lcd0"),		/* CLK */
363		SUNXI_FUNCTION(0x3, "lvds1"),		/* V3P */
364		SUNXI_FUNCTION(0x4, "dmic"),		/* DATA1 */
365		SUNXI_FUNCTION(0x5, "pwm2"),
366		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 18)),
367	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),
368		SUNXI_FUNCTION(0x0, "gpio_in"),
369		SUNXI_FUNCTION(0x1, "gpio_out"),
370		SUNXI_FUNCTION(0x2, "lcd0"),		/* DE */
371		SUNXI_FUNCTION(0x3, "lvds1"),		/* V3N */
372		SUNXI_FUNCTION(0x4, "dmic"),		/* DATA0 */
373		SUNXI_FUNCTION(0x5, "pwm3"),
374		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 19)),
375	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),
376		SUNXI_FUNCTION(0x0, "gpio_in"),
377		SUNXI_FUNCTION(0x1, "gpio_out"),
378		SUNXI_FUNCTION(0x2, "lcd0"),		/* HSYNC */
379		SUNXI_FUNCTION(0x3, "i2c2"),		/* SCK */
380		SUNXI_FUNCTION(0x4, "dmic"),		/* CLK */
381		SUNXI_FUNCTION(0x5, "pwm4"),
382		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 20)),
383	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),
384		SUNXI_FUNCTION(0x0, "gpio_in"),
385		SUNXI_FUNCTION(0x1, "gpio_out"),
386		SUNXI_FUNCTION(0x2, "lcd0"),		/* VSYNC */
387		SUNXI_FUNCTION(0x3, "i2c2"),		/* SDA */
388		SUNXI_FUNCTION(0x4, "uart1"),		/* TX */
389		SUNXI_FUNCTION(0x5, "pwm5"),
390		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 21)),
391	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22),
392		SUNXI_FUNCTION(0x0, "gpio_in"),
393		SUNXI_FUNCTION(0x1, "gpio_out"),
394		SUNXI_FUNCTION(0x2, "spdif"),		/* OUT */
395		SUNXI_FUNCTION(0x3, "ir"),		/* RX */
396		SUNXI_FUNCTION(0x4, "uart1"),		/* RX */
397		SUNXI_FUNCTION(0x5, "pwm7"),
398		SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 22)),
399	/* PE */
400	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
401		SUNXI_FUNCTION(0x0, "gpio_in"),
402		SUNXI_FUNCTION(0x1, "gpio_out"),
403		SUNXI_FUNCTION(0x2, "ncsi0"),		/* HSYNC */
404		SUNXI_FUNCTION(0x3, "uart2"),		/* RTS */
405		SUNXI_FUNCTION(0x4, "i2c1"),		/* SCK */
406		SUNXI_FUNCTION(0x5, "lcd0"),		/* HSYNC */
407		SUNXI_FUNCTION(0x8, "emac"),		/* RXCTL/CRS_DV */
408		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 0)),
409	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
410		SUNXI_FUNCTION(0x0, "gpio_in"),
411		SUNXI_FUNCTION(0x1, "gpio_out"),
412		SUNXI_FUNCTION(0x2, "ncsi0"),		/* VSYNC */
413		SUNXI_FUNCTION(0x3, "uart2"),		/* CTS */
414		SUNXI_FUNCTION(0x4, "i2c1"),		/* SDA */
415		SUNXI_FUNCTION(0x5, "lcd0"),		/* VSYNC */
416		SUNXI_FUNCTION(0x8, "emac"),		/* RXD0 */
417		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 1)),
418	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
419		SUNXI_FUNCTION(0x0, "gpio_in"),
420		SUNXI_FUNCTION(0x1, "gpio_out"),
421		SUNXI_FUNCTION(0x2, "ncsi0"),		/* PCLK */
422		SUNXI_FUNCTION(0x3, "uart2"),		/* TX */
423		SUNXI_FUNCTION(0x4, "i2c0"),		/* SCK */
424		SUNXI_FUNCTION(0x5, "clk"),		/* FANOUT0 */
425		SUNXI_FUNCTION(0x6, "uart0"),		/* TX */
426		SUNXI_FUNCTION(0x8, "emac"),		/* RXD1 */
427		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 2)),
428	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
429		SUNXI_FUNCTION(0x0, "gpio_in"),
430		SUNXI_FUNCTION(0x1, "gpio_out"),
431		SUNXI_FUNCTION(0x2, "ncsi0"),		/* MCLK */
432		SUNXI_FUNCTION(0x3, "uart2"),		/* RX */
433		SUNXI_FUNCTION(0x4, "i2c0"),		/* SDA */
434		SUNXI_FUNCTION(0x5, "clk"),		/* FANOUT1 */
435		SUNXI_FUNCTION(0x6, "uart0"),		/* RX */
436		SUNXI_FUNCTION(0x8, "emac"),		/* TXCK */
437		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 3)),
438	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
439		SUNXI_FUNCTION(0x0, "gpio_in"),
440		SUNXI_FUNCTION(0x1, "gpio_out"),
441		SUNXI_FUNCTION(0x2, "ncsi0"),		/* D0 */
442		SUNXI_FUNCTION(0x3, "uart4"),		/* TX */
443		SUNXI_FUNCTION(0x4, "i2c2"),		/* SCK */
444		SUNXI_FUNCTION(0x5, "clk"),		/* FANOUT2 */
445		SUNXI_FUNCTION(0x6, "d_jtag"),		/* MS */
446		SUNXI_FUNCTION(0x7, "r_jtag"),		/* MS */
447		SUNXI_FUNCTION(0x8, "emac"),		/* TXD0 */
448		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 4)),
449	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
450		SUNXI_FUNCTION(0x0, "gpio_in"),
451		SUNXI_FUNCTION(0x1, "gpio_out"),
452		SUNXI_FUNCTION(0x2, "ncsi0"),		/* D1 */
453		SUNXI_FUNCTION(0x3, "uart4"),		/* RX */
454		SUNXI_FUNCTION(0x4, "i2c2"),		/* SDA */
455		SUNXI_FUNCTION(0x5, "ledc"),
456		SUNXI_FUNCTION(0x6, "d_jtag"),		/* DI */
457		SUNXI_FUNCTION(0x7, "r_jtag"),		/* DI */
458		SUNXI_FUNCTION(0x8, "emac"),		/* TXD1 */
459		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 5)),
460	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
461		SUNXI_FUNCTION(0x0, "gpio_in"),
462		SUNXI_FUNCTION(0x1, "gpio_out"),
463		SUNXI_FUNCTION(0x2, "ncsi0"),		/* D2 */
464		SUNXI_FUNCTION(0x3, "uart5"),		/* TX */
465		SUNXI_FUNCTION(0x4, "i2c3"),		/* SCK */
466		SUNXI_FUNCTION(0x5, "spdif"),		/* IN */
467		SUNXI_FUNCTION(0x6, "d_jtag"),		/* DO */
468		SUNXI_FUNCTION(0x7, "r_jtag"),		/* DO */
469		SUNXI_FUNCTION(0x8, "emac"),		/* TXCTL/TXEN */
470		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 6)),
471	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
472		SUNXI_FUNCTION(0x0, "gpio_in"),
473		SUNXI_FUNCTION(0x1, "gpio_out"),
474		SUNXI_FUNCTION(0x2, "ncsi0"),		/* D3 */
475		SUNXI_FUNCTION(0x3, "uart5"),		/* RX */
476		SUNXI_FUNCTION(0x4, "i2c3"),		/* SDA */
477		SUNXI_FUNCTION(0x5, "spdif"),		/* OUT */
478		SUNXI_FUNCTION(0x6, "d_jtag"),		/* CK */
479		SUNXI_FUNCTION(0x7, "r_jtag"),		/* CK */
480		SUNXI_FUNCTION(0x8, "emac"),		/* CK */
481		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 7)),
482	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
483		SUNXI_FUNCTION(0x0, "gpio_in"),
484		SUNXI_FUNCTION(0x1, "gpio_out"),
485		SUNXI_FUNCTION(0x2, "ncsi0"),		/* D4 */
486		SUNXI_FUNCTION(0x3, "uart1"),		/* RTS */
487		SUNXI_FUNCTION(0x4, "pwm2"),
488		SUNXI_FUNCTION(0x5, "uart3"),		/* TX */
489		SUNXI_FUNCTION(0x6, "jtag"),		/* MS */
490		SUNXI_FUNCTION(0x8, "emac"),		/* MDC */
491		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 8)),
492	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
493		SUNXI_FUNCTION(0x0, "gpio_in"),
494		SUNXI_FUNCTION(0x1, "gpio_out"),
495		SUNXI_FUNCTION(0x2, "ncsi0"),		/* D5 */
496		SUNXI_FUNCTION(0x3, "uart1"),		/* CTS */
497		SUNXI_FUNCTION(0x4, "pwm3"),
498		SUNXI_FUNCTION(0x5, "uart3"),		/* RX */
499		SUNXI_FUNCTION(0x6, "jtag"),		/* DI */
500		SUNXI_FUNCTION(0x8, "emac"),		/* MDIO */
501		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 9)),
502	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10),
503		SUNXI_FUNCTION(0x0, "gpio_in"),
504		SUNXI_FUNCTION(0x1, "gpio_out"),
505		SUNXI_FUNCTION(0x2, "ncsi0"),		/* D6 */
506		SUNXI_FUNCTION(0x3, "uart1"),		/* TX */
507		SUNXI_FUNCTION(0x4, "pwm4"),
508		SUNXI_FUNCTION(0x5, "ir"),		/* RX */
509		SUNXI_FUNCTION(0x6, "jtag"),		/* DO */
510		SUNXI_FUNCTION(0x8, "emac"),		/* EPHY-25M */
511		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 10)),
512	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11),
513		SUNXI_FUNCTION(0x0, "gpio_in"),
514		SUNXI_FUNCTION(0x1, "gpio_out"),
515		SUNXI_FUNCTION(0x2, "ncsi0"),		/* D7 */
516		SUNXI_FUNCTION(0x3, "uart1"),		/* RX */
517		SUNXI_FUNCTION(0x4, "i2s0_dout"),	/* DOUT3 */
518		SUNXI_FUNCTION(0x5, "i2s0_din"),	/* DIN3 */
519		SUNXI_FUNCTION(0x6, "jtag"),		/* CK */
520		SUNXI_FUNCTION(0x8, "emac"),		/* TXD2 */
521		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 11)),
522	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12),
523		SUNXI_FUNCTION(0x0, "gpio_in"),
524		SUNXI_FUNCTION(0x1, "gpio_out"),
525		SUNXI_FUNCTION(0x2, "i2c2"),		/* SCK */
526		SUNXI_FUNCTION(0x3, "ncsi0"),		/* FIELD */
527		SUNXI_FUNCTION(0x4, "i2s0_dout"),	/* DOUT2 */
528		SUNXI_FUNCTION(0x5, "i2s0_din"),	/* DIN2 */
529		SUNXI_FUNCTION(0x8, "emac"),		/* TXD3 */
530		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 12)),
531	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 13),
532		SUNXI_FUNCTION(0x0, "gpio_in"),
533		SUNXI_FUNCTION(0x1, "gpio_out"),
534		SUNXI_FUNCTION(0x2, "i2c2"),		/* SDA */
535		SUNXI_FUNCTION(0x3, "pwm5"),
536		SUNXI_FUNCTION(0x4, "i2s0_dout"),	/* DOUT0 */
537		SUNXI_FUNCTION(0x5, "i2s0_din"),	/* DIN1 */
538		SUNXI_FUNCTION(0x6, "dmic"),		/* DATA3 */
539		SUNXI_FUNCTION(0x8, "emac"),		/* RXD2 */
540		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 13)),
541	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 14),
542		SUNXI_FUNCTION(0x0, "gpio_in"),
543		SUNXI_FUNCTION(0x1, "gpio_out"),
544		SUNXI_FUNCTION(0x2, "i2c1"),		/* SCK */
545		SUNXI_FUNCTION(0x3, "d_jtag"),		/* MS */
546		SUNXI_FUNCTION(0x4, "i2s0_dout"),	/* DOUT1 */
547		SUNXI_FUNCTION(0x5, "i2s0_din"),	/* DIN0 */
548		SUNXI_FUNCTION(0x6, "dmic"),		/* DATA2 */
549		SUNXI_FUNCTION(0x8, "emac"),		/* RXD3 */
550		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 14)),
551	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 15),
552		SUNXI_FUNCTION(0x0, "gpio_in"),
553		SUNXI_FUNCTION(0x1, "gpio_out"),
554		SUNXI_FUNCTION(0x2, "i2c1"),		/* SDA */
555		SUNXI_FUNCTION(0x3, "d_jtag"),		/* DI */
556		SUNXI_FUNCTION(0x4, "pwm6"),
557		SUNXI_FUNCTION(0x5, "i2s0"),		/* LRCK */
558		SUNXI_FUNCTION(0x6, "dmic"),		/* DATA1 */
559		SUNXI_FUNCTION(0x8, "emac"),		/* RXCK */
560		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 15)),
561	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 16),
562		SUNXI_FUNCTION(0x0, "gpio_in"),
563		SUNXI_FUNCTION(0x1, "gpio_out"),
564		SUNXI_FUNCTION(0x2, "i2c3"),		/* SCK */
565		SUNXI_FUNCTION(0x3, "d_jtag"),		/* DO */
566		SUNXI_FUNCTION(0x4, "pwm7"),
567		SUNXI_FUNCTION(0x5, "i2s0"),		/* BCLK */
568		SUNXI_FUNCTION(0x6, "dmic"),		/* DATA0 */
569		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 16)),
570	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 17),
571		SUNXI_FUNCTION(0x0, "gpio_in"),
572		SUNXI_FUNCTION(0x1, "gpio_out"),
573		SUNXI_FUNCTION(0x2, "i2c3"),		/* SDA */
574		SUNXI_FUNCTION(0x3, "d_jtag"),		/* CK */
575		SUNXI_FUNCTION(0x4, "ir"),		/* TX */
576		SUNXI_FUNCTION(0x5, "i2s0"),		/* MCLK */
577		SUNXI_FUNCTION(0x6, "dmic"),		/* CLK */
578		SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 17)),
579	/* PF */
580	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),
581		SUNXI_FUNCTION(0x0, "gpio_in"),
582		SUNXI_FUNCTION(0x1, "gpio_out"),
583		SUNXI_FUNCTION(0x2, "mmc0"),		/* D1 */
584		SUNXI_FUNCTION(0x3, "jtag"),		/* MS */
585		SUNXI_FUNCTION(0x4, "r_jtag"),		/* MS */
586		SUNXI_FUNCTION(0x5, "i2s2_dout"),	/* DOUT1 */
587		SUNXI_FUNCTION(0x6, "i2s2_din"),	/* DIN0 */
588		SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 0)),
589	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),
590		SUNXI_FUNCTION(0x0, "gpio_in"),
591		SUNXI_FUNCTION(0x1, "gpio_out"),
592		SUNXI_FUNCTION(0x2, "mmc0"),		/* D0 */
593		SUNXI_FUNCTION(0x3, "jtag"),		/* DI */
594		SUNXI_FUNCTION(0x4, "r_jtag"),		/* DI */
595		SUNXI_FUNCTION(0x5, "i2s2_dout"),	/* DOUT0 */
596		SUNXI_FUNCTION(0x6, "i2s2_din"),	/* DIN1 */
597		SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 1)),
598	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),
599		SUNXI_FUNCTION(0x0, "gpio_in"),
600		SUNXI_FUNCTION(0x1, "gpio_out"),
601		SUNXI_FUNCTION(0x2, "mmc0"),		/* CLK */
602		SUNXI_FUNCTION(0x3, "uart0"),		/* TX */
603		SUNXI_FUNCTION(0x4, "i2c0"),		/* SCK */
604		SUNXI_FUNCTION(0x5, "ledc"),
605		SUNXI_FUNCTION(0x6, "spdif"),		/* IN */
606		SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 2)),
607	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),
608		SUNXI_FUNCTION(0x0, "gpio_in"),
609		SUNXI_FUNCTION(0x1, "gpio_out"),
610		SUNXI_FUNCTION(0x2, "mmc0"),		/* CMD */
611		SUNXI_FUNCTION(0x3, "jtag"),		/* DO */
612		SUNXI_FUNCTION(0x4, "r_jtag"),		/* DO */
613		SUNXI_FUNCTION(0x5, "i2s2"),		/* BCLK */
614		SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 3)),
615	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),
616		SUNXI_FUNCTION(0x0, "gpio_in"),
617		SUNXI_FUNCTION(0x1, "gpio_out"),
618		SUNXI_FUNCTION(0x2, "mmc0"),		/* D3 */
619		SUNXI_FUNCTION(0x3, "uart0"),		/* RX */
620		SUNXI_FUNCTION(0x4, "i2c0"),		/* SDA */
621		SUNXI_FUNCTION(0x5, "pwm6"),
622		SUNXI_FUNCTION(0x6, "ir"),		/* TX */
623		SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 4)),
624	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
625		SUNXI_FUNCTION(0x0, "gpio_in"),
626		SUNXI_FUNCTION(0x1, "gpio_out"),
627		SUNXI_FUNCTION(0x2, "mmc0"),		/* D2 */
628		SUNXI_FUNCTION(0x3, "jtag"),		/* CK */
629		SUNXI_FUNCTION(0x4, "r_jtag"),		/* CK */
630		SUNXI_FUNCTION(0x5, "i2s2"),		/* LRCK */
631		SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 5)),
632	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6),
633		SUNXI_FUNCTION(0x0, "gpio_in"),
634		SUNXI_FUNCTION(0x1, "gpio_out"),
635		SUNXI_FUNCTION(0x3, "spdif"),		/* OUT */
636		SUNXI_FUNCTION(0x4, "ir"),		/* RX */
637		SUNXI_FUNCTION(0x5, "i2s2"),		/* MCLK */
638		SUNXI_FUNCTION(0x6, "pwm5"),
639		SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 6)),
640	/* PG */
641	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),
642		SUNXI_FUNCTION(0x0, "gpio_in"),
643		SUNXI_FUNCTION(0x1, "gpio_out"),
644		SUNXI_FUNCTION(0x2, "mmc1"),		/* CLK */
645		SUNXI_FUNCTION(0x3, "uart3"),		/* TX */
646		SUNXI_FUNCTION(0x4, "emac"),		/* RXCTRL/CRS_DV */
647		SUNXI_FUNCTION(0x5, "pwm7"),
648		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 0)),
649	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),
650		SUNXI_FUNCTION(0x0, "gpio_in"),
651		SUNXI_FUNCTION(0x1, "gpio_out"),
652		SUNXI_FUNCTION(0x2, "mmc1"),		/* CMD */
653		SUNXI_FUNCTION(0x3, "uart3"),		/* RX */
654		SUNXI_FUNCTION(0x4, "emac"),		/* RXD0 */
655		SUNXI_FUNCTION(0x5, "pwm6"),
656		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 1)),
657	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),
658		SUNXI_FUNCTION(0x0, "gpio_in"),
659		SUNXI_FUNCTION(0x1, "gpio_out"),
660		SUNXI_FUNCTION(0x2, "mmc1"),		/* D0 */
661		SUNXI_FUNCTION(0x3, "uart3"),		/* RTS */
662		SUNXI_FUNCTION(0x4, "emac"),		/* RXD1 */
663		SUNXI_FUNCTION(0x5, "uart4"),		/* TX */
664		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 2)),
665	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),
666		SUNXI_FUNCTION(0x0, "gpio_in"),
667		SUNXI_FUNCTION(0x1, "gpio_out"),
668		SUNXI_FUNCTION(0x2, "mmc1"),		/* D1 */
669		SUNXI_FUNCTION(0x3, "uart3"),		/* CTS */
670		SUNXI_FUNCTION(0x4, "emac"),		/* TXCK */
671		SUNXI_FUNCTION(0x5, "uart4"),		/* RX */
672		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 3)),
673	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),
674		SUNXI_FUNCTION(0x0, "gpio_in"),
675		SUNXI_FUNCTION(0x1, "gpio_out"),
676		SUNXI_FUNCTION(0x2, "mmc1"),		/* D2 */
677		SUNXI_FUNCTION(0x3, "uart5"),		/* TX */
678		SUNXI_FUNCTION(0x4, "emac"),		/* TXD0 */
679		SUNXI_FUNCTION(0x5, "pwm5"),
680		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 4)),
681	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),
682		SUNXI_FUNCTION(0x0, "gpio_in"),
683		SUNXI_FUNCTION(0x1, "gpio_out"),
684		SUNXI_FUNCTION(0x2, "mmc1"),		/* D3 */
685		SUNXI_FUNCTION(0x3, "uart5"),		/* RX */
686		SUNXI_FUNCTION(0x4, "emac"),		/* TXD1 */
687		SUNXI_FUNCTION(0x5, "pwm4"),
688		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 5)),
689	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),
690		SUNXI_FUNCTION(0x0, "gpio_in"),
691		SUNXI_FUNCTION(0x1, "gpio_out"),
692		SUNXI_FUNCTION(0x2, "uart1"),		/* TX */
693		SUNXI_FUNCTION(0x3, "i2c2"),		/* SCK */
694		SUNXI_FUNCTION(0x4, "emac"),		/* TXD2 */
695		SUNXI_FUNCTION(0x5, "pwm1"),
696		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 6)),
697	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),
698		SUNXI_FUNCTION(0x0, "gpio_in"),
699		SUNXI_FUNCTION(0x1, "gpio_out"),
700		SUNXI_FUNCTION(0x2, "uart1"),		/* RX */
701		SUNXI_FUNCTION(0x3, "i2c2"),		/* SDA */
702		SUNXI_FUNCTION(0x4, "emac"),		/* TXD3 */
703		SUNXI_FUNCTION(0x5, "spdif"),		/* IN */
704		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 7)),
705	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),
706		SUNXI_FUNCTION(0x0, "gpio_in"),
707		SUNXI_FUNCTION(0x1, "gpio_out"),
708		SUNXI_FUNCTION(0x2, "uart1"),		/* RTS */
709		SUNXI_FUNCTION(0x3, "i2c1"),		/* SCK */
710		SUNXI_FUNCTION(0x4, "emac"),		/* RXD2 */
711		SUNXI_FUNCTION(0x5, "uart3"),		/* TX */
712		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 8)),
713	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),
714		SUNXI_FUNCTION(0x0, "gpio_in"),
715		SUNXI_FUNCTION(0x1, "gpio_out"),
716		SUNXI_FUNCTION(0x2, "uart1"),		/* CTS */
717		SUNXI_FUNCTION(0x3, "i2c1"),		/* SDA */
718		SUNXI_FUNCTION(0x4, "emac"),		/* RXD3 */
719		SUNXI_FUNCTION(0x5, "uart3"),		/* RX */
720		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 9)),
721	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),
722		SUNXI_FUNCTION(0x0, "gpio_in"),
723		SUNXI_FUNCTION(0x1, "gpio_out"),
724		SUNXI_FUNCTION(0x2, "pwm3"),
725		SUNXI_FUNCTION(0x3, "i2c3"),		/* SCK */
726		SUNXI_FUNCTION(0x4, "emac"),		/* RXCK */
727		SUNXI_FUNCTION(0x5, "clk"),		/* FANOUT0 */
728		SUNXI_FUNCTION(0x6, "ir"),		/* RX */
729		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 10)),
730	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),
731		SUNXI_FUNCTION(0x0, "gpio_in"),
732		SUNXI_FUNCTION(0x1, "gpio_out"),
733		SUNXI_FUNCTION(0x2, "i2s1"),		/* MCLK */
734		SUNXI_FUNCTION(0x3, "i2c3"),		/* SDA */
735		SUNXI_FUNCTION(0x4, "emac"),		/* EPHY-25M */
736		SUNXI_FUNCTION(0x5, "clk"),		/* FANOUT1 */
737		SUNXI_FUNCTION(0x6, "tcon"),		/* TRIG0 */
738		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 11)),
739	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),
740		SUNXI_FUNCTION(0x0, "gpio_in"),
741		SUNXI_FUNCTION(0x1, "gpio_out"),
742		SUNXI_FUNCTION(0x2, "i2s1"),		/* LRCK */
743		SUNXI_FUNCTION(0x3, "i2c0"),		/* SCK */
744		SUNXI_FUNCTION(0x4, "emac"),		/* TXCTL/TXEN */
745		SUNXI_FUNCTION(0x5, "clk"),		/* FANOUT2 */
746		SUNXI_FUNCTION(0x6, "pwm0"),
747		SUNXI_FUNCTION(0x7, "uart1"),		/* TX */
748		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 12)),
749	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),
750		SUNXI_FUNCTION(0x0, "gpio_in"),
751		SUNXI_FUNCTION(0x1, "gpio_out"),
752		SUNXI_FUNCTION(0x2, "i2s1"),		/* BCLK */
753		SUNXI_FUNCTION(0x3, "i2c0"),		/* SDA */
754		SUNXI_FUNCTION(0x4, "emac"),		/* CLKIN/RXER */
755		SUNXI_FUNCTION(0x5, "pwm2"),
756		SUNXI_FUNCTION(0x6, "ledc"),
757		SUNXI_FUNCTION(0x7, "uart1"),		/* RX */
758		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 13)),
759	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 14),
760		SUNXI_FUNCTION(0x0, "gpio_in"),
761		SUNXI_FUNCTION(0x1, "gpio_out"),
762		SUNXI_FUNCTION(0x2, "i2s1_din"),	/* DIN0 */
763		SUNXI_FUNCTION(0x3, "i2c2"),		/* SCK */
764		SUNXI_FUNCTION(0x4, "emac"),		/* MDC */
765		SUNXI_FUNCTION(0x5, "i2s1_dout"),	/* DOUT1 */
766		SUNXI_FUNCTION(0x6, "spi0"),		/* WP */
767		SUNXI_FUNCTION(0x7, "uart1"),		/* RTS */
768		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 14)),
769	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 15),
770		SUNXI_FUNCTION(0x0, "gpio_in"),
771		SUNXI_FUNCTION(0x1, "gpio_out"),
772		SUNXI_FUNCTION(0x2, "i2s1_dout"),	/* DOUT0 */
773		SUNXI_FUNCTION(0x3, "i2c2"),		/* SDA */
774		SUNXI_FUNCTION(0x4, "emac"),		/* MDIO */
775		SUNXI_FUNCTION(0x5, "i2s1_din"),	/* DIN1 */
776		SUNXI_FUNCTION(0x6, "spi0"),		/* HOLD */
777		SUNXI_FUNCTION(0x7, "uart1"),		/* CTS */
778		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 15)),
779	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 16),
780		SUNXI_FUNCTION(0x0, "gpio_in"),
781		SUNXI_FUNCTION(0x1, "gpio_out"),
782		SUNXI_FUNCTION(0x2, "ir"),		/* RX */
783		SUNXI_FUNCTION(0x3, "tcon"),		/* TRIG0 */
784		SUNXI_FUNCTION(0x4, "pwm5"),
785		SUNXI_FUNCTION(0x5, "clk"),		/* FANOUT2 */
786		SUNXI_FUNCTION(0x6, "spdif"),		/* IN */
787		SUNXI_FUNCTION(0x7, "ledc"),
788		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 16)),
789	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 17),
790		SUNXI_FUNCTION(0x0, "gpio_in"),
791		SUNXI_FUNCTION(0x1, "gpio_out"),
792		SUNXI_FUNCTION(0x2, "uart2"),		/* TX */
793		SUNXI_FUNCTION(0x3, "i2c3"),		/* SCK */
794		SUNXI_FUNCTION(0x4, "pwm7"),
795		SUNXI_FUNCTION(0x5, "clk"),		/* FANOUT0 */
796		SUNXI_FUNCTION(0x6, "ir"),		/* TX */
797		SUNXI_FUNCTION(0x7, "uart0"),		/* TX */
798		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 17)),
799	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 18),
800		SUNXI_FUNCTION(0x0, "gpio_in"),
801		SUNXI_FUNCTION(0x1, "gpio_out"),
802		SUNXI_FUNCTION(0x2, "uart2"),		/* RX */
803		SUNXI_FUNCTION(0x3, "i2c3"),		/* SDA */
804		SUNXI_FUNCTION(0x4, "pwm6"),
805		SUNXI_FUNCTION(0x5, "clk"),		/* FANOUT1 */
806		SUNXI_FUNCTION(0x6, "spdif"),		/* OUT */
807		SUNXI_FUNCTION(0x7, "uart0"),		/* RX */
808		SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 18)),
809};
810
811static const unsigned int d1_irq_bank_map[] = { 1, 2, 3, 4, 5, 6 };
812
813static const struct sunxi_pinctrl_desc d1_pinctrl_data = {
814	.pins			= d1_pins,
815	.npins			= ARRAY_SIZE(d1_pins),
816	.irq_banks		= ARRAY_SIZE(d1_irq_bank_map),
817	.irq_bank_map		= d1_irq_bank_map,
818	.io_bias_cfg_variant	= BIAS_VOLTAGE_PIO_POW_MODE_CTL,
819};
820
821static int d1_pinctrl_probe(struct platform_device *pdev)
822{
823	unsigned long variant = (unsigned long)of_device_get_match_data(&pdev->dev);
824
825	return sunxi_pinctrl_init_with_variant(pdev, &d1_pinctrl_data, variant);
826}
827
828static const struct of_device_id d1_pinctrl_match[] = {
829	{
830		.compatible = "allwinner,sun20i-d1-pinctrl",
831		.data = (void *)PINCTRL_SUN20I_D1
832	},
833	{}
834};
835
836static struct platform_driver d1_pinctrl_driver = {
837	.probe	= d1_pinctrl_probe,
838	.driver	= {
839		.name		= "sun20i-d1-pinctrl",
840		.of_match_table	= d1_pinctrl_match,
841	},
842};
843builtin_platform_driver(d1_pinctrl_driver);
844