1c8a83090SIcenowy Zheng // SPDX-License-Identifier: GPL-2.0
2c8a83090SIcenowy Zheng /*
3c8a83090SIcenowy Zheng  * Allwinner H6 SoC pinctrl driver.
4c8a83090SIcenowy Zheng  *
5c8a83090SIcenowy Zheng  * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io>
6c8a83090SIcenowy Zheng  */
7c8a83090SIcenowy Zheng 
8c8a83090SIcenowy Zheng #include <linux/module.h>
9c8a83090SIcenowy Zheng #include <linux/platform_device.h>
10c8a83090SIcenowy Zheng #include <linux/of.h>
11c8a83090SIcenowy Zheng #include <linux/of_device.h>
12c8a83090SIcenowy Zheng #include <linux/pinctrl/pinctrl.h>
13c8a83090SIcenowy Zheng 
14c8a83090SIcenowy Zheng #include "pinctrl-sunxi.h"
15c8a83090SIcenowy Zheng 
16c8a83090SIcenowy Zheng static const struct sunxi_desc_pin h6_pins[] = {
17c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 0),
18c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "emac")),		/* ERXD1 */
19c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 1),
20c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "emac")),		/* ERXD0 */
21c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 2),
22c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "emac")),		/* ECRS_DV */
23c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 3),
24c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "emac")),		/* ERXERR */
25c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 4),
26c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "emac")),		/* ETXD1 */
27c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 5),
28c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "emac")),		/* ETXD0 */
29c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 6),
30c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "emac")),		/* ETXCK */
31c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 7),
32c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "emac")),		/* ETXEN */
33c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 8),
34c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "emac")),		/* EMDC */
35c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 9),
36c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "emac")),		/* EMDIO */
37c8a83090SIcenowy Zheng 	/* Hole */
38c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),
39c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* CLK */
40c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),
41c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),
42c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* DE */
43c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),
44c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),
45c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* HSYNC */
46c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),
47c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),
48c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* VSYNC */
49c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),
50c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4),
51c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* DO0 */
52c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),
53c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5),
54c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* DO1 */
55c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)),
56c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6),
57c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* DO2 */
58c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)),
59c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7),
60c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* DO3 */
61c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),
62c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 8),
63c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* DO4 */
64c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),
65c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 9),
66c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* DO5 */
67c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),
68c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 10),
69c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* DO6 */
70c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)),
71c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 11),
72c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ccir"),		/* DO7 */
73c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 11)),
74c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 12),
75c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2s3"),		/* SYNC */
76c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "h_i2s3"),	/* SYNC */
77c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 12)),
78c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 13),
79c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2s3"),		/* CLK */
80c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "h_i2s3"),	/* CLK */
81c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 13)),
82c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 14),
83c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2s3"),		/* DOUT */
84c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "h_i2s3"),	/* DOUT */
85c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)),
86c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 15),
87c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2s3"),		/* DIN */
88c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "h_i2s3"),	/* DIN */
89c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)),
90c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 16),
91c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2s3"),		/* MCLK */
92c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "h_i2s3"),	/* MCLK */
93c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)),
94c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 17),
95c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2c3"),		/* SCK */
96c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 17)),
97c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 18),
98c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2c3"),		/* SDA */
99c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 18)),
100c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 19),
101c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "pwm1"),
102c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 19)),
103c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 20),
104c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
105c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 20)),
106c8a83090SIcenowy Zheng 	/* Hole */
107c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
108c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
109c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
110c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* WE */
111c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "spi0")),		/* CLK */
112c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
113c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
114c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
115c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* ALE */
116c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* DS */
117c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
118c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
119c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
120c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* CLE */
121c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "spi0")),		/* MOSI */
122c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
123c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
124c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
125c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* CE0 */
126c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "spi0")),		/* MISO */
127c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),
128c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
129c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
130c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* RE */
131c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* CLK */
132c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),
133c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
134c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
135c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* RB0 */
136c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2"),		/* CMD */
137c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "spi0")),		/* CS */
138c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),
139c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
140c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
141c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ0 */
142c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D0 */
143c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "spi0")),		/* HOLD */
144c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),
145c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
146c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
147c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ1 */
148c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D1 */
149c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "spi0")),		/* WP */
150c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8),
151c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
152c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
153c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ2 */
154c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D2 */
155c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9),
156c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
157c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
158c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ3 */
159c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D3 */
160c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10),
161c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
162c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
163c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ4 */
164c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D4 */
165c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11),
166c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
167c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
168c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ5 */
169c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D5 */
170c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),
171c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
172c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
173c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ6 */
174c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D6 */
175c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),
176c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
177c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
178c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ7 */
179c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D7 */
180c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
181c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
182c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
183c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQS */
184c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "mmc2")),		/* RST */
185c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
186c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
187c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
188c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0")),	/* CE1 */
189c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),
190c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
191c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
192c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "nand0")),	/* RB1 */
193c8a83090SIcenowy Zheng 	/* Hole */
194c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),
195c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
196c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
197c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D2 */
198c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* CLK */
199c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* PCLK */
200c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ERXD3 */
201c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),
202c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
203c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
204c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D3 */
205c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* ERR */
206c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* MCLK */
207c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ERXD2 */
208c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
209c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
210c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
211c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D4 */
212c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* SYNC */
213c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* HSYNC */
214c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ERXD1 */
215c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
216c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
217c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
218c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D5 */
219c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* DVLD */
220c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* VSYNC */
221c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ERXD0 */
222c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
223c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
224c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
225c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D6 */
226c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* D0 */
227c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* D0 */
228c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ERXCK */
229c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
230c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
231c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
232c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D7 */
233c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* D1 */
234c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* D1 */
235c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ERXCTL */
236c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
237c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
238c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
239c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D10 */
240c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* D2 */
241c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* D2 */
242c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ENULL */
243c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
244c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
245c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
246c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D11 */
247c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* D3 */
248c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* D3 */
249c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ETXD3 */
250c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),
251c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
252c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
253c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D12 */
254c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* D4 */
255c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* D4 */
256c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ETXD2 */
257c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),
258c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
259c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
260c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D13 */
261c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* D5 */
262c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* D5 */
263c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ETXD1 */
264c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
265c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
266c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
267c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D14 */
268c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* D6 */
269c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* D6 */
270c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ETXD0 */
271c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
272c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
273c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
274c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D15 */
275c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts0"),		/* D7 */
276c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* D7 */
277c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ETXCK */
278c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
279c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
280c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
281c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D18 */
282c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts1"),		/* CLK */
283c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* SCK */
284c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ETXCTL */
285c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
286c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
287c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
288c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D19 */
289c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts1"),		/* ERR */
290c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "csi"),		/* SDA */
291c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* ECLKIN */
292c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
293c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
294c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
295c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D20 */
296c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts1"),		/* SYNC */
297c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "dmic"),		/* CLK */
298c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "csi")),		/* D8 */
299c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
300c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
301c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
302c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D21 */
303c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts1"),		/* DVLD */
304c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "dmic"),		/* DATA0 */
305c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "csi")),		/* D9 */
306c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
307c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
308c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
309c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D22 */
310c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts1"),		/* D0 */
311c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "dmic")),		/* DATA1 */
312c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
313c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
314c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
315c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D23 */
316c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts2"),		/* CLK */
317c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "dmic")),		/* DATA2 */
318c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),
319c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
320c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
321c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* CLK */
322c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts2"),		/* ERR */
323c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "dmic")),		/* DATA3 */
324c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),
325c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
326c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
327c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* DE */
328c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts2"),		/* SYNC */
329c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "uart2"),		/* TX */
330c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* EMDC */
331c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),
332c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
333c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
334c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* HSYNC */
335c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts2"),		/* DVLD */
336c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "uart2"),		/* RX */
337c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "emac")),		/* EMDIO */
338c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),
339c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
340c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
341c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "lcd0"),		/* VSYNC */
342c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts2"),		/* D0 */
343c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "uart2")),	/* RTS */
344c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22),
345c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
346c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
347c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "pwm"),		/* PWM0 */
348c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts3"),		/* CLK */
349c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "uart2")),	/* CTS */
350c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 23),
351c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
352c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
353c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2c2"),		/* SCK */
354c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts3"),		/* ERR */
355c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "uart3"),		/* TX */
356c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "jtag")),		/* MS */
357c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 24),
358c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
359c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
360c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2c2"),		/* SDA */
361c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts3"),		/* SYNC */
362c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "uart3"),		/* RX */
363c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "jtag")),		/* CK */
364c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 25),
365c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
366c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
367c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SCK */
368c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts3"),		/* DVLD */
369c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "uart3"),		/* RTS */
370c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "jtag")),		/* DO */
371c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 26),
372c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
373c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
374c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SDA */
375c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "ts3"),		/* D0 */
376c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "uart3"),		/* CTS */
377c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "jtag")),		/* DI */
378c8a83090SIcenowy Zheng 	/* Hole */
379c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),
380c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
381c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
382c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D1 */
383c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "jtag"),		/* MS */
384c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)),	/* PF_EINT0 */
385c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),
386c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
387c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
388c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D0 */
389c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "jtag"),		/* DI */
390c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)),	/* PF_EINT1 */
391c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),
392c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
393c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
394c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CLK */
395c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "uart0"),		/* TX */
396c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)),	/* PF_EINT2 */
397c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),
398c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
399c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
400c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CMD */
401c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "jtag"),		/* DO */
402c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)),	/* PF_EINT3 */
403c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),
404c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
405c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
406c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D3 */
407c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "uart0"),		/* RX */
408c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)),	/* PF_EINT4 */
409c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
410c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
411c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
412c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D2 */
413c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "jtag"),		/* CK */
414c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)),	/* PF_EINT5 */
415c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6),
416c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
417c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
418c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)),	/* PF_EINT6 */
419c8a83090SIcenowy Zheng 	/* Hole */
420c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),
421c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
422c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
423c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CLK */
424c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 0)),	/* PG_EINT0 */
425c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),
426c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
427c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
428c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CMD */
429c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 1)),	/* PG_EINT1 */
430c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),
431c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
432c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
433c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D0 */
434c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 2)),	/* PG_EINT2 */
435c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),
436c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
437c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
438c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D1 */
439c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 3)),	/* PG_EINT3 */
440c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),
441c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
442c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
443c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D2 */
444c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 4)),	/* PG_EINT4 */
445c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),
446c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
447c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
448c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D3 */
449c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 5)),	/* PG_EINT5 */
450c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),
451c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
452c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
453c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "uart1"),		/* TX */
454c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 6)),	/* PG_EINT6 */
455c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),
456c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
457c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
458c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "uart1"),		/* RX */
459c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 7)),	/* PG_EINT7 */
460c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),
461c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
462c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
463c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "uart1"),		/* RTS */
464c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "sim0"),		/* VPPEN */
465c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 8)),	/* PG_EINT8 */
466c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),
467c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
468c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
469c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "uart1"),		/* CTS */
470c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "sim0"),		/* VPPPP */
471c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 9)),	/* PG_EINT9 */
472c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),
473c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
474c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
475c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2s2"),		/* SYNC */
476c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "h_i2s2"),	/* SYNC */
477c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "sim0"),		/* PWREN */
478c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 10)),	/* PG_EINT10 */
479c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),
480c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
481c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
482c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2s2"),		/* CLK */
483c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "h_i2s2"),	/* CLK */
484c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "sim0"),		/* CLK */
485c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 11)),	/* PG_EINT11 */
486c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),
487c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
488c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
489c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2s2"),		/* DOUT */
490c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "h_i2s2"),	/* DOUT */
491c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "sim0"),		/* DATA */
492c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 12)),	/* PG_EINT12 */
493c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),
494c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
495c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
496c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2s2"),		/* DIN */
497c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "h_i2s2"),	/* DIN */
498c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "sim0"),		/* RST */
499c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 13)),	/* PG_EINT13 */
500c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 14),
501c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
502c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
503c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "i2s2"),		/* MCLK */
504c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "h_i2s2"),	/* MCLK */
505c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "sim0"),		/* DET */
506c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 14)),	/* PG_EINT14 */
507c8a83090SIcenowy Zheng 	/* Hole */
508c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 0),
509c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
510c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
511c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "uart0"),		/* TX */
512c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "i2s0"),		/* SYNC */
513c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "h_i2s0"),	/* SYNC */
514c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "sim1"),		/* VPPEN */
515c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 0)),	/* PH_EINT0 */
516c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1),
517c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
518c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
519c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "uart0"),		/* RX */
520c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "i2s0"),		/* CLK */
521c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "h_i2s0"),	/* CLK */
522c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "sim1"),		/* VPPPP */
523c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 1)),	/* PH_EINT1 */
524c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2),
525c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
526c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
527c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "ir_tx"),
528c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "i2s0"),		/* DOUT */
529c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "h_i2s0"),	/* DOUT */
530c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "sim1"),		/* PWREN */
531c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 2)),	/* PH_EINT2 */
532c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3),
533c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
534c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
535c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "spi1"),		/* CS */
536c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "i2s0"),		/* DIN */
537c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "h_i2s0"),	/* DIN */
538c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "sim1"),		/* CLK */
539c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 3)),	/* PH_EINT3 */
540c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4),
541c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
542c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
543c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "spi1"),		/* CLK */
544c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "i2s0"),		/* MCLK */
545c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "h_i2s0"),	/* MCLK */
546c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "sim1"),		/* DATA */
547c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 4)),	/* PH_EINT4 */
548c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5),
549c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
550c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
551c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "spi1"),		/* MOSI */
552c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "spdif"),		/* MCLK */
553c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "i2c1"),		/* SCK */
554c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "sim1"),		/* RST */
555c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 5)),	/* PH_EINT5 */
556c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6),
557c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
558c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
559c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "spi1"),		/* MISO */
560c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "spdif"),		/* IN */
561c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x4, "i2c1"),		/* SDA */
562c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x5, "sim1"),		/* DET */
563c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 6)),	/* PH_EINT6 */
564c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7),
565c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
566c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
567c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x3, "spdif"),		/* OUT */
568c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 7)),	/* PH_EINT7 */
569c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8),
570c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
571c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
572c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "hdmi"),		/* HSCL */
573c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 8)),	/* PH_EINT8 */
574c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 9),
575c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
576c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
577c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "hdmi"),		/* HSDA */
578c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 9)),	/* PH_EINT9 */
579c8a83090SIcenowy Zheng 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 10),
580c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x0, "gpio_in"),
581c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x1, "gpio_out"),
582c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION(0x2, "hdmi"),		/* HCEC */
583c8a83090SIcenowy Zheng 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 10)),	/* PH_EINT10 */
584c8a83090SIcenowy Zheng };
585c8a83090SIcenowy Zheng 
586c8a83090SIcenowy Zheng static const unsigned int h6_irq_bank_map[] = { 1, 5, 6, 7 };
587c8a83090SIcenowy Zheng 
588c8a83090SIcenowy Zheng static const struct sunxi_pinctrl_desc h6_pinctrl_data = {
589c8a83090SIcenowy Zheng 	.pins = h6_pins,
590c8a83090SIcenowy Zheng 	.npins = ARRAY_SIZE(h6_pins),
59110098709SChen-Yu Tsai 	.irq_banks = 4,
592c8a83090SIcenowy Zheng 	.irq_bank_map = h6_irq_bank_map,
593c8a83090SIcenowy Zheng 	.irq_read_needs_mux = true,
594c8a83090SIcenowy Zheng };
595c8a83090SIcenowy Zheng 
596c8a83090SIcenowy Zheng static int h6_pinctrl_probe(struct platform_device *pdev)
597c8a83090SIcenowy Zheng {
598c8a83090SIcenowy Zheng 	return sunxi_pinctrl_init(pdev,
599c8a83090SIcenowy Zheng 				  &h6_pinctrl_data);
600c8a83090SIcenowy Zheng }
601c8a83090SIcenowy Zheng 
602c8a83090SIcenowy Zheng static const struct of_device_id h6_pinctrl_match[] = {
603c8a83090SIcenowy Zheng 	{ .compatible = "allwinner,sun50i-h6-pinctrl", },
604c8a83090SIcenowy Zheng 	{}
605c8a83090SIcenowy Zheng };
606c8a83090SIcenowy Zheng 
607c8a83090SIcenowy Zheng static struct platform_driver h6_pinctrl_driver = {
608c8a83090SIcenowy Zheng 	.probe	= h6_pinctrl_probe,
609c8a83090SIcenowy Zheng 	.driver	= {
610c8a83090SIcenowy Zheng 		.name		= "sun50i-h6-pinctrl",
611c8a83090SIcenowy Zheng 		.of_match_table	= h6_pinctrl_match,
612c8a83090SIcenowy Zheng 	},
613c8a83090SIcenowy Zheng };
614c8a83090SIcenowy Zheng builtin_platform_driver(h6_pinctrl_driver);
615