xref: /linux/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c (revision 96851d391d02142f358fe7030f8795f84921329b)
1*96851d39SAndre Przywara /*
2*96851d39SAndre Przywara  * Allwinner A64 SoCs pinctrl driver.
3*96851d39SAndre Przywara  *
4*96851d39SAndre Przywara  * Copyright (C) 2016 - ARM Ltd.
5*96851d39SAndre Przywara  * Author: Andre Przywara <andre.przywara@arm.com>
6*96851d39SAndre Przywara  *
7*96851d39SAndre Przywara  * Based on pinctrl-sun7i-a20.c, which is:
8*96851d39SAndre Przywara  * Copyright (C) 2014 Maxime Ripard <maxime.ripard@free-electrons.com>
9*96851d39SAndre Przywara  *
10*96851d39SAndre Przywara  * This file is licensed under the terms of the GNU General Public
11*96851d39SAndre Przywara  * License version 2.  This program is licensed "as is" without any
12*96851d39SAndre Przywara  * warranty of any kind, whether express or implied.
13*96851d39SAndre Przywara  */
14*96851d39SAndre Przywara 
15*96851d39SAndre Przywara #include <linux/module.h>
16*96851d39SAndre Przywara #include <linux/platform_device.h>
17*96851d39SAndre Przywara #include <linux/of.h>
18*96851d39SAndre Przywara #include <linux/of_device.h>
19*96851d39SAndre Przywara #include <linux/pinctrl/pinctrl.h>
20*96851d39SAndre Przywara 
21*96851d39SAndre Przywara #include "pinctrl-sunxi.h"
22*96851d39SAndre Przywara 
23*96851d39SAndre Przywara static const struct sunxi_desc_pin a64_pins[] = {
24*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),
25*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
26*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
27*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart2"),		/* TX */
28*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "jtag"),		/* MS0 */
29*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),	/* EINT0 */
30*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),
31*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
32*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
33*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart2"),		/* RX */
34*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "jtag"),		/* CK0 */
35*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "sim"),		/* VCCEN */
36*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),		/* EINT1 */
37*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),
38*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
39*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
40*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart2"),		/* RTS */
41*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "jtag"),		/* DO0 */
42*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "sim"),		/* VPPEN */
43*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),		/* EINT2 */
44*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),
45*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
46*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
47*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart2"),		/* CTS */
48*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "i2s0"),		/* MCLK */
49*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "jtag"),		/* DI0 */
50*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "sim"),		/* VPPPP */
51*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),		/* EINT3 */
52*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4),
53*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
54*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
55*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "aif2"),		/* SYNC */
56*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "i2s0"),		/* SYNC */
57*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "sim"),		/* CLK */
58*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),		/* EINT4 */
59*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5),
60*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
61*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
62*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "aif2"),		/* BCLK */
63*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "i2s0"),		/* BCLK */
64*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "sim"),		/* DATA */
65*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)),		/* EINT5 */
66*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6),
67*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
68*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
69*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "aif2"),		/* DOUT */
70*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "i2s0"),		/* DOUT */
71*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "sim"),		/* RST */
72*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)),		/* EINT6 */
73*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7),
74*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
75*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
76*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "aif2"),		/* DIN */
77*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "i2s0"),		/* DIN */
78*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "sim"),		/* DET */
79*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),		/* EINT7 */
80*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 8),
81*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
82*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
83*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "uart0"),		/* TX */
84*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),		/* EINT8 */
85*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 9),
86*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
87*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
88*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "uart0"),		/* RX */
89*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),		/* EINT9 */
90*96851d39SAndre Przywara 	/* Hole */
91*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
92*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
93*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
94*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NWE */
95*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "spi0")),		/* MOSI */
96*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
97*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
98*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
99*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NALE */
100*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2"),		/* DS */
101*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "spi0")),		/* MISO */
102*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
103*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
104*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
105*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NCLE */
106*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "spi0")),		/* SCK */
107*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
108*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
109*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
110*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NCE1 */
111*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "spi0")),		/* CS */
112*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),
113*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
114*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
115*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0")),	/* NCE0 */
116*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),
117*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
118*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
119*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NRE# */
120*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* CLK */
121*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),
122*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
123*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
124*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NRB0 */
125*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* CMD */
126*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),
127*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
128*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
129*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0")),	/* NRB1 */
130*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8),
131*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
132*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
133*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ0 */
134*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D0 */
135*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9),
136*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
137*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
138*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ1 */
139*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D1 */
140*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10),
141*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
142*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
143*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ2 */
144*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D2 */
145*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11),
146*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
147*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
148*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ3 */
149*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D3 */
150*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),
151*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
152*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
153*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ4 */
154*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D4 */
155*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),
156*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
157*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
158*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ5 */
159*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D5 */
160*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
161*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
162*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
163*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ6 */
164*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D6 */
165*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
166*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
167*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
168*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ7 */
169*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D7 */
170*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),
171*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
172*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
173*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQS */
174*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* RST */
175*96851d39SAndre Przywara 	/* Hole */
176*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),
177*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
178*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
179*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D2 */
180*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "uart3"),		/* TX */
181*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "spi1"),		/* CS */
182*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* CLK */
183*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),
184*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
185*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
186*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D3 */
187*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "uart3"),		/* RX */
188*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "spi1"),		/* CLK */
189*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* DE */
190*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
191*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
192*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
193*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D4 */
194*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "uart4"),		/* TX */
195*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "spi1"),		/* MOSI */
196*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* HSYNC */
197*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
198*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
199*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
200*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D5 */
201*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "uart4"),		/* RX */
202*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "spi1"),		/* MISO */
203*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* VSYNC */
204*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
205*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
206*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
207*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D6 */
208*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "uart4"),		/* RTS */
209*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* D0 */
210*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
211*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
212*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
213*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D7 */
214*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "uart4"),		/* CTS */
215*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* D1 */
216*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
217*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
218*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
219*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D10 */
220*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* D2 */
221*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
222*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
223*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
224*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D11 */
225*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* D3 */
226*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),
227*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
228*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
229*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D12 */
230*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac"),		/* ERXD3 */
231*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* D4 */
232*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),
233*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
234*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
235*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D13 */
236*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac"),		/* ERXD2 */
237*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* D5 */
238*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
239*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
240*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
241*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D14 */
242*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* ERXD1 */
243*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
244*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
245*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
246*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D15 */
247*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* ERXD0 */
248*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
249*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
250*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
251*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D18 */
252*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VP0 */
253*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* ERXCK */
254*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
255*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
256*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
257*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D19 */
258*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VN0 */
259*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* ERXCTL */
260*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
261*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
262*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
263*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D20 */
264*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VP1 */
265*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* ENULL */
266*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
267*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
268*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
269*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D21 */
270*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VN1 */
271*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac"),		/* ETXD3 */
272*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* D6 */
273*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
274*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
275*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
276*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D22 */
277*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VP2 */
278*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac"),		/* ETXD2 */
279*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x5, "ccir")),		/* D7 */
280*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
281*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
282*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
283*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D23 */
284*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VN2 */
285*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* ETXD1 */
286*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),
287*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
288*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
289*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* CLK */
290*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VPC */
291*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* ETXD0 */
292*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),
293*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
294*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
295*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* DE */
296*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VNC */
297*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* ETXCK */
298*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),
299*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
300*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
301*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* HSYNC */
302*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VP3 */
303*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* ETXCTL */
304*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),
305*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
306*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
307*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* VSYNC */
308*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VN3 */
309*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* ECLKIN */
310*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22),
311*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
312*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
313*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "pwm"),		/* PWM0 */
314*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* EMDC */
315*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 23),
316*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
317*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
318*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "emac")),		/* EMDIO */
319*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 24),
320*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
321*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out")),
322*96851d39SAndre Przywara 	/* Hole */
323*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
324*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
325*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
326*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* PCK */
327*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* CLK */
328*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
329*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
330*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
331*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* CK */
332*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* ERR */
333*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
334*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
335*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
336*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* HSYNC */
337*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* SYNC */
338*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
339*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
340*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
341*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* VSYNC */
342*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* DVLD */
343*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
344*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
345*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
346*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* D0 */
347*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* D0 */
348*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
349*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
350*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
351*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* D1 */
352*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* D1 */
353*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
354*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
355*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
356*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* D2 */
357*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* D2 */
358*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
359*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
360*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
361*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* D3 */
362*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* D3 */
363*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
364*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
365*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
366*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* D4 */
367*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* D4 */
368*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
369*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
370*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
371*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* D5 */
372*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* D5 */
373*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10),
374*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
375*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
376*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* D6 */
377*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* D6 */
378*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11),
379*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
380*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
381*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0"),		/* D7 */
382*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "ts0")),		/* D7 */
383*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12),
384*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
385*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
386*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0")),		/* SCK */
387*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 13),
388*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
389*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
390*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "csi0")),		/* SDA */
391*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 14),
392*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
393*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
394*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "pll"),		/* LOCK_DBG */
395*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "i2c2")),		/* SCK */
396*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 15),
397*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
398*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
399*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "i2c2")),		/* SDA */
400*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 16),
401*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
402*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out")),
403*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 17),
404*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
405*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out")),
406*96851d39SAndre Przywara 	/* Hole */
407*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),
408*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
409*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
410*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D1 */
411*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "jtag")),		/* MSI */
412*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),
413*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
414*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
415*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D0 */
416*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "jtag")),		/* DI1 */
417*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),
418*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
419*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
420*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CLK */
421*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "uart0")),	/* TX */
422*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),
423*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
424*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
425*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CMD */
426*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "jtag")),		/* DO1 */
427*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),
428*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
429*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
430*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D3 */
431*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x4, "uart0")),	/* RX */
432*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
433*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
434*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
435*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D2 */
436*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "jtag")),		/* CK1 */
437*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6),
438*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
439*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out")),
440*96851d39SAndre Przywara 	/* Hole */
441*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),
442*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
443*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
444*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CLK */
445*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)),	/* EINT0 */
446*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),
447*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
448*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
449*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CMD */
450*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)),	/* EINT1 */
451*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),
452*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
453*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
454*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D0 */
455*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)),	/* EINT2 */
456*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),
457*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
458*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
459*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D1 */
460*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)),	/* EINT3 */
461*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),
462*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
463*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
464*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D2 */
465*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)),	/* EINT4 */
466*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),
467*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
468*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
469*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D3 */
470*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)),	/* EINT5 */
471*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),
472*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
473*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
474*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart1"),		/* TX */
475*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)),	/* EINT6 */
476*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),
477*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
478*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
479*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart1"),		/* RX */
480*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 7)),	/* EINT7 */
481*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),
482*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
483*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
484*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart1"),		/* RTS */
485*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 8)),	/* EINT8 */
486*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),
487*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
488*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
489*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart1"),		/* CTS */
490*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 9)),	/* EINT9 */
491*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),
492*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
493*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
494*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "aif3"),		/* SYNC */
495*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "i2s1"),		/* SYNC */
496*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 10)),	/* EINT10 */
497*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),
498*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
499*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
500*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "aif3"),		/* BCLK */
501*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "i2s1"),		/* BCLK */
502*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 11)),	/* EINT11 */
503*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),
504*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
505*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
506*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "aif3"),		/* DOUT */
507*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "i2s1"),		/* DOUT */
508*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 12)),	/* EINT12 */
509*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),
510*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
511*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
512*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "aif3"),		/* DIN */
513*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x3, "i2s1"),		/* DIN */
514*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 13)),	/* EINT13 */
515*96851d39SAndre Przywara 	/* Hole */
516*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 0),
517*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
518*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
519*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SCK */
520*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 0)),	/* EINT0 */
521*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1),
522*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
523*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
524*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SDA */
525*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 1)),	/* EINT1 */
526*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2),
527*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
528*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
529*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SCK */
530*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 2)),	/* EINT2 */
531*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3),
532*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
533*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
534*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SDA */
535*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 3)),	/* EINT3 */
536*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4),
537*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
538*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
539*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart3"),		/* TX */
540*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 4)),	/* EINT4 */
541*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5),
542*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
543*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
544*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart3"),		/* RX */
545*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 5)),	/* EINT5 */
546*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6),
547*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
548*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
549*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart3"),		/* RTS */
550*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 6)),	/* EINT6 */
551*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7),
552*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
553*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
554*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "uart3"),		/* CTS */
555*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 7)),	/* EINT7 */
556*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8),
557*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
558*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
559*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "spdif"),		/* OUT */
560*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 8)),	/* EINT8 */
561*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 9),
562*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
563*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
564*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 9)),	/* EINT9 */
565*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 10),
566*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
567*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
568*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mic"),		/* CLK */
569*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 10)),	/* EINT10 */
570*96851d39SAndre Przywara 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 11),
571*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x0, "gpio_in"),
572*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x1, "gpio_out"),
573*96851d39SAndre Przywara 		  SUNXI_FUNCTION(0x2, "mic"),		/* DATA */
574*96851d39SAndre Przywara 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 11)),	/* EINT11 */
575*96851d39SAndre Przywara };
576*96851d39SAndre Przywara 
577*96851d39SAndre Przywara static const struct sunxi_pinctrl_desc a64_pinctrl_data = {
578*96851d39SAndre Przywara 	.pins = a64_pins,
579*96851d39SAndre Przywara 	.npins = ARRAY_SIZE(a64_pins),
580*96851d39SAndre Przywara 	.irq_banks = 3,
581*96851d39SAndre Przywara };
582*96851d39SAndre Przywara 
583*96851d39SAndre Przywara static int a64_pinctrl_probe(struct platform_device *pdev)
584*96851d39SAndre Przywara {
585*96851d39SAndre Przywara 	return sunxi_pinctrl_init(pdev,
586*96851d39SAndre Przywara 				  &a64_pinctrl_data);
587*96851d39SAndre Przywara }
588*96851d39SAndre Przywara 
589*96851d39SAndre Przywara static const struct of_device_id a64_pinctrl_match[] = {
590*96851d39SAndre Przywara 	{ .compatible = "allwinner,sun50i-a64-pinctrl", },
591*96851d39SAndre Przywara 	{}
592*96851d39SAndre Przywara };
593*96851d39SAndre Przywara 
594*96851d39SAndre Przywara static struct platform_driver a64_pinctrl_driver = {
595*96851d39SAndre Przywara 	.probe	= a64_pinctrl_probe,
596*96851d39SAndre Przywara 	.driver	= {
597*96851d39SAndre Przywara 		.name		= "sun50i-a64-pinctrl",
598*96851d39SAndre Przywara 		.of_match_table	= a64_pinctrl_match,
599*96851d39SAndre Przywara 	},
600*96851d39SAndre Przywara };
601*96851d39SAndre Przywara builtin_platform_driver(a64_pinctrl_driver);
602