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