1e87623cbSJens Kuske /*
2e87623cbSJens Kuske  * Allwinner H3 SoCs pinctrl driver.
3e87623cbSJens Kuske  *
4e87623cbSJens Kuske  * Copyright (C) 2015 Jens Kuske <jenskuske@gmail.com>
5e87623cbSJens Kuske  *
6e87623cbSJens Kuske  * Based on pinctrl-sun8i-a23.c, which is:
7e87623cbSJens Kuske  * Copyright (C) 2014 Chen-Yu Tsai <wens@csie.org>
8e87623cbSJens Kuske  * Copyright (C) 2014 Maxime Ripard <maxime.ripard@free-electrons.com>
9e87623cbSJens Kuske  *
10e87623cbSJens Kuske  * This file is licensed under the terms of the GNU General Public
11e87623cbSJens Kuske  * License version 2.  This program is licensed "as is" without any
12e87623cbSJens Kuske  * warranty of any kind, whether express or implied.
13e87623cbSJens Kuske  */
14e87623cbSJens Kuske 
15e87623cbSJens Kuske #include <linux/module.h>
16e87623cbSJens Kuske #include <linux/platform_device.h>
17e87623cbSJens Kuske #include <linux/of.h>
18e87623cbSJens Kuske #include <linux/of_device.h>
19e87623cbSJens Kuske #include <linux/pinctrl/pinctrl.h>
20e87623cbSJens Kuske 
21e87623cbSJens Kuske #include "pinctrl-sunxi.h"
22e87623cbSJens Kuske 
23e87623cbSJens Kuske static const struct sunxi_desc_pin sun8i_h3_pins[] = {
24e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 0),
25e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
26e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
27e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "uart2"),		/* TX */
28e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "jtag"),		/* MS */
29e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),	/* PA_EINT0 */
30e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 1),
31e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
32e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
33e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "uart2"),		/* RX */
34e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "jtag"),		/* CK */
35e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),	/* PA_EINT1 */
36e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 2),
37e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
38e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
39e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "uart2"),		/* RTS */
40e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "jtag"),		/* DO */
41e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),	/* PA_EINT2 */
42e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 3),
43e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
44e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
45e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "uart2"),		/* CTS */
46e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "jtag"),		/* DI */
47e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),	/* PA_EINT3 */
48e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 4),
49e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
50e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
51e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "uart0"),		/* TX */
52e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),	/* PA_EINT4 */
53e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 5),
54e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
55e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
56e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "uart0"),		/* RX */
57e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "pwm0"),
58e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)),	/* PA_EINT5 */
59e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 6),
60e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
61e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
62e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "sim"),		/* PWREN */
63e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)),	/* PA_EINT6 */
64e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 7),
65e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
66e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
67e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "sim"),		/* CLK */
68e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),	/* PA_EINT7 */
69e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 8),
70e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
71e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
72e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "sim"),		/* DATA */
73e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),	/* PA_EINT8 */
74e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 9),
75e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
76e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
77e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "sim"),		/* RST */
78e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),	/* PA_EINT9 */
79e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 10),
80e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
81e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
82e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "sim"),		/* DET */
83e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)),	/* PA_EINT10 */
84e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 11),
85e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
86e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
87e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SCK */
88e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "di"),		/* TX */
89e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 11)),	/* PA_EINT11 */
90e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 12),
91e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
92e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
93e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SDA */
94e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "di"),		/* RX */
95e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 12)),	/* PA_EINT12 */
96e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 13),
97e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
98e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
99e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "spi1"),		/* CS */
100e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "uart3"),		/* TX */
101e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 13)),	/* PA_EINT13 */
102e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 14),
103e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
104e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
105e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "spi1"),		/* CLK */
106e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "uart3"),		/* RX */
107e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)),	/* PA_EINT14 */
108e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 15),
109e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
110e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
111e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "spi1"),		/* MOSI */
112e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "uart3"),		/* RTS */
113e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)),	/* PA_EINT15 */
114e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 16),
115e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
116e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
117e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "spi1"),		/* MISO */
118e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "uart3"),		/* CTS */
119e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)),	/* PA_EINT16 */
120e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 17),
121e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
122e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
123e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "spdif"),		/* OUT */
124e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 17)),	/* PA_EINT17 */
125e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 18),
126e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
127e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
128e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "i2s0"),		/* SYNC */
129e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "i2c1"),		/* SCK */
130e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 18)),	/* PA_EINT18 */
131e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 19),
132e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
133e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
134e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "i2s0"),		/* CLK */
135e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "i2c1"),		/* SDA */
136e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 19)),	/* PA_EINT19 */
137e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 20),
138e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
139e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
140e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "i2s0"),		/* DOUT */
141e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "sim"),		/* VPPEN */
142e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 20)),	/* PA_EINT20 */
143e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 21),
144e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
145e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
146e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "i2s0"),		/* DIN */
147e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "sim"),		/* VPPPP */
148e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 21)),	/* PA_EINT21 */
149e87623cbSJens Kuske 	/* Hole */
150e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
151e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
152e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
153e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* WE */
154e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "spi0")),		/* MOSI */
155e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
156e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
157e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
158e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* ALE */
159e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "spi0")),		/* MISO */
160e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
161e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
162e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
163e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* CLE */
164e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "spi0")),		/* CLK */
165e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
166e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
167e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
168e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* CE1 */
169e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "spi0")),		/* CS */
170e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),
171e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
172e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
173e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0")),	/* CE0 */
174e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),
175e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
176e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
177e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* RE */
178e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* CLK */
179e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),
180e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
181e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
182e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* RB0 */
183e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* CMD */
184e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),
185e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
186e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
187e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0")),	/* RB1 */
188e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8),
189e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
190e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
191e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ0 */
192e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D0 */
193e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9),
194e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
195e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
196e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ1 */
197e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D1 */
198e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10),
199e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
200e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
201e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ2 */
202e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D2 */
203e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11),
204e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
205e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
206e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ3 */
207e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D3 */
208e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),
209e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
210e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
211e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ4 */
212e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D4 */
213e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),
214e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
215e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
216e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ5 */
217e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D5 */
218e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
219e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
220e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
221bc0f566aSIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ6 */
222e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D6 */
223e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
224e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
225e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
226bc0f566aSIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ7 */
227e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D7 */
228e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),
229e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
230e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
231bc0f566aSIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQS */
232e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* RST */
233e87623cbSJens Kuske 	/* Hole */
234e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),
235e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
236e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
237e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* RXD3 */
238e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),
239e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
240e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
241e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* RXD2 */
242e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
243e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
244e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
245e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* RXD1 */
246e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
247e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
248e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
249e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* RXD0 */
250e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
251e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
252e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
253e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* RXCK */
254e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
255e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
256e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
257e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* RXCTL/RXDV */
258e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
259e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
260e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
261e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* RXERR */
262e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
263e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
264e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
265e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* TXD3 */
266e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),
267e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
268e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
269e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* TXD2 */
270e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),
271e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
272e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
273e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* TXD1 */
274e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
275e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
276e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
277e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* TXD0 */
278e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
279e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
280e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
281e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* CRS */
282e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
283e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
284e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
285e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* TXCK */
286e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
287e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
288e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
289e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* TXCTL/TXEN */
290e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
291e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
292e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
293e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* TXERR */
294e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
295e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
296e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
297e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* CLKIN/COL */
298e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
299e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
300e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
301e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* MDC */
302e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
303e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
304e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
305e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "emac")),		/* MDIO */
306e87623cbSJens Kuske 	/* Hole */
307e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
308e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
309e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
310e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* PCLK */
311e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* CLK */
312e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
313e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
314e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
315e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* MCLK */
316e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* ERR */
317e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
318e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
319e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
320e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* HSYNC */
321e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* SYNC */
322e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
323e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
324e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
325e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* VSYNC */
326e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* DVLD */
327e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
328e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
329e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
330e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* D0 */
331e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* D0 */
332e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
333e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
334e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
335e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* D1 */
336e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* D1 */
337e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
338e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
339e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
340e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* D2 */
341e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* D2 */
342e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
343e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
344e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
345e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* D3 */
346e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* D3 */
347e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
348e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
349e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
350e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* D4 */
351e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* D4 */
352e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
353e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
354e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
355e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* D5 */
356e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* D5 */
357e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10),
358e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
359e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
360e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* D6 */
361e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* D6 */
362e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11),
363e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
364e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
365e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* D7 */
366e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "ts")),		/* D7 */
367e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12),
368e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
369e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
370e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* SCK */
371e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "i2c2")),		/* SCK */
372e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 13),
373e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
374e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
375e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "csi"),		/* SDA */
376e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "i2c2")),		/* SDA */
377e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 14),
378e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
379e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out")),
380e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 15),
381e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
382e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out")),
383e87623cbSJens Kuske 	/* Hole */
384e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),
385e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
386e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
387e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D1 */
388e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "jtag")),		/* MS */
389e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),
390e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
391e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
392e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D0 */
393e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "jtag")),		/* DI */
394e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),
395e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
396e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
397e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CLK */
398e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "uart0")),	/* TX */
399e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),
400e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
401e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
402e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CMD */
403e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "jtag")),		/* DO */
404e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),
405e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
406e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
407e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D3 */
408e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "uart0")),	/* RX */
409e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
410e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
411e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
412e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D2 */
413e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x3, "jtag")),		/* CK */
414e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6),
415e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
416e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out")),
417e87623cbSJens Kuske 	/* Hole */
418e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),
419e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
420e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
421e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CLK */
422e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)),	/* PG_EINT0 */
423e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),
424e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
425e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
426e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CMD */
427e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)),	/* PG_EINT1 */
428e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),
429e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
430e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
431e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D0 */
432e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)),	/* PG_EINT2 */
433e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),
434e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
435e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
436e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D1 */
437e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)),	/* PG_EINT3 */
438e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),
439e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
440e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
441e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D2 */
442e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)),	/* PG_EINT4 */
443e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),
444e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
445e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
446e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D3 */
447e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)),	/* PG_EINT5 */
448e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),
449e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
450e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
451e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "uart1"),		/* TX */
452e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)),	/* PG_EINT6 */
453e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),
454e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
455e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
456e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "uart1"),		/* RX */
457e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 7)),	/* PG_EINT7 */
458e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),
459e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
460e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
461e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "uart1"),		/* RTS */
462e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 8)),	/* PG_EINT8 */
463e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),
464e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
465e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
466e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "uart1"),		/* CTS */
467e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 9)),	/* PG_EINT9 */
468e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),
469e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
470e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
471e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "i2s1"),		/* SYNC */
472e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 10)),	/* PG_EINT10 */
473e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),
474e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
475e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
476e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "i2s1"),		/* CLK */
477e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 11)),	/* PG_EINT11 */
478e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),
479e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
480e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
481e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "i2s1"),		/* DOUT */
482e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 12)),	/* PG_EINT12 */
483e87623cbSJens Kuske 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),
484e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x0, "gpio_in"),
485e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x1, "gpio_out"),
486e87623cbSJens Kuske 		  SUNXI_FUNCTION(0x2, "i2s1"),		/* DIN */
487e87623cbSJens Kuske 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 13)),	/* PG_EINT13 */
488e87623cbSJens Kuske };
489e87623cbSJens Kuske 
490e87623cbSJens Kuske static const struct sunxi_pinctrl_desc sun8i_h3_pinctrl_data = {
491e87623cbSJens Kuske 	.pins = sun8i_h3_pins,
492e87623cbSJens Kuske 	.npins = ARRAY_SIZE(sun8i_h3_pins),
493e87623cbSJens Kuske 	.irq_banks = 2,
494cd70387fSMaxime Ripard 	.irq_read_needs_mux = true,
495cd70387fSMaxime Ripard 	.disable_strict_mode = true,
496e87623cbSJens Kuske };
497e87623cbSJens Kuske 
498e87623cbSJens Kuske static int sun8i_h3_pinctrl_probe(struct platform_device *pdev)
499e87623cbSJens Kuske {
500e87623cbSJens Kuske 	return sunxi_pinctrl_init(pdev,
501e87623cbSJens Kuske 				  &sun8i_h3_pinctrl_data);
502e87623cbSJens Kuske }
503e87623cbSJens Kuske 
504e87623cbSJens Kuske static const struct of_device_id sun8i_h3_pinctrl_match[] = {
505e87623cbSJens Kuske 	{ .compatible = "allwinner,sun8i-h3-pinctrl", },
506e87623cbSJens Kuske 	{}
507e87623cbSJens Kuske };
508e87623cbSJens Kuske 
509e87623cbSJens Kuske static struct platform_driver sun8i_h3_pinctrl_driver = {
510e87623cbSJens Kuske 	.probe	= sun8i_h3_pinctrl_probe,
511e87623cbSJens Kuske 	.driver	= {
512e87623cbSJens Kuske 		.name		= "sun8i-h3-pinctrl",
513e87623cbSJens Kuske 		.of_match_table	= sun8i_h3_pinctrl_match,
514e87623cbSJens Kuske 	},
515e87623cbSJens Kuske };
516e87623cbSJens Kuske builtin_platform_driver(sun8i_h3_pinctrl_driver);
517