1473436e7SYangtao Li // SPDX-License-Identifier: GPL-2.0
2473436e7SYangtao Li /*
3473436e7SYangtao Li * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
4473436e7SYangtao Li *
5473436e7SYangtao Li * Based on:
6473436e7SYangtao Li * huangshuosheng <huangshuosheng@allwinnertech.com>
7473436e7SYangtao Li */
8473436e7SYangtao Li
9473436e7SYangtao Li #include <linux/module.h>
10473436e7SYangtao Li #include <linux/of.h>
11473436e7SYangtao Li #include <linux/pinctrl/pinctrl.h>
12473436e7SYangtao Li #include <linux/platform_device.h>
13473436e7SYangtao Li
14473436e7SYangtao Li #include "pinctrl-sunxi.h"
15473436e7SYangtao Li
16473436e7SYangtao Li static const struct sunxi_desc_pin a100_pins[] = {
17473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),
18473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
19473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
20473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart2"), /* TX */
21473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi2"), /* CS */
22473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag"), /* MS */
23473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),
24473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),
25473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
26473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
27473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart2"), /* RX */
28473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi2"), /* CLK */
29473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag"), /* CK */
30473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),
31473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),
32473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
33473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
34473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart2"), /* RTS */
35473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi2"), /* MOSI */
36473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag"), /* DO */
37473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),
38473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),
39473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
40473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
41473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart2"), /* CTS */
42473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi2"), /* MISO */
43473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag"), /* DI */
44473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),
45473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4),
46473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
47473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
48473436e7SYangtao Li SUNXI_FUNCTION(0x2, "i2c1"), /* SCK */
49473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s0"), /* MCLK */
50473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag_gpu"), /* MS_GPU */
51473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),
52473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5),
53473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
54473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
55473436e7SYangtao Li SUNXI_FUNCTION(0x2, "i2c1"), /* SDA */
56473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s0"), /* BCLK */
57473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag_gpu"), /* CK_GPU */
58473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)),
59473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6),
60473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
61473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
62473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s0"), /* LRCK */
63473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag_gpu"), /* DO_GPU */
64473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)),
65473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7),
66473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
67473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
68473436e7SYangtao Li SUNXI_FUNCTION(0x2, "spdif"), /* DIN */
69473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s0_dout0"), /* DOUT0 */
70473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s0_din1"), /* DIN1 */
71473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),
72473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 8),
73473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
74473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
75473436e7SYangtao Li SUNXI_FUNCTION(0x2, "spdif"), /* DOUT */
76473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s0_din0"), /* DIN0 */
77473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s0_dout1"), /* DOUT1 */
78473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),
79473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 9),
80473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
81473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
82473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart0"), /* TX */
83473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2c0"), /* SCK */
84473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag_gpu"), /* DI_GPU */
85473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),
86473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 10),
87473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
88473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
89473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart0"), /* RX */
90473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2c0"), /* SDA */
91473436e7SYangtao Li SUNXI_FUNCTION(0x4, "pwm1"),
92473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)),
93473436e7SYangtao Li /* HOLE */
94473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
95473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
96473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
97473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* WE */
98473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* DS */
99473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)),
100473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
101473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
102473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
103473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* ALE */
104473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* RST */
105473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)),
106473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
107473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
108473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
109473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* CLE */
110473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spi0"), /* MOSI */
111473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)),
112473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
113473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
114473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
115473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* CE1 */
116473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spi0"), /* CS0 */
117473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)),
118473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),
119473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
120473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
121473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* CE0 */
122473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spi0"), /* MISO */
123473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)),
124473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),
125473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
126473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
127473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* RE */
128473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* CLK */
129473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)),
130473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),
131473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
132473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
133473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* RB0 */
134473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* CMD */
135473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)),
136473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),
137473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
138473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
139473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* RB1 */
140473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spi0"), /* CS1 */
141473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 7)),
142473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8),
143473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
144473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
145473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* DQ7 */
146473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* D3 */
147473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 8)),
148473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9),
149473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
150473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
151473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* DQ6 */
152473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* D4 */
153473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 9)),
154473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10),
155473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
156473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
157473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* DQ5 */
158473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* D0 */
159473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 10)),
160473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11),
161473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
162473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
163473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* DQ4 */
164473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* D5 */
165473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 11)),
166473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),
167473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
168473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
169473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* DQS */
170473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spi0"), /* CLK */
171473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 12)),
172473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),
173473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
174473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
175473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* DQ3 */
176473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* D1 */
177473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 13)),
178473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
179473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
180473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
181473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* DQ2 */
182473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* D6 */
183473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 14)),
184473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
185473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
186473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
187473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* DQ1 */
188473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* D2 */
189473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spi0"), /* WP */
190473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 15)),
191473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),
192473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
193473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
194473436e7SYangtao Li SUNXI_FUNCTION(0x2, "nand0"), /* DQ0 */
195473436e7SYangtao Li SUNXI_FUNCTION(0x3, "mmc2"), /* D7 */
196473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spi0"), /* HOLD */
197473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 16)),
198473436e7SYangtao Li /* HOLE */
199473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),
200473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
201473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
202473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D2 */
203473436e7SYangtao Li SUNXI_FUNCTION(0x3, "lvds0"), /* D0P */
204473436e7SYangtao Li SUNXI_FUNCTION(0x4, "dsi0"), /* DP0 */
205473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 0)),
206473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),
207473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
208473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
209473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D3 */
210473436e7SYangtao Li SUNXI_FUNCTION(0x3, "lvds0"), /* D0N */
211473436e7SYangtao Li SUNXI_FUNCTION(0x4, "dsi0"), /* DM0 */
212473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 1)),
213473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
214473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
215473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
216473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D4 */
217473436e7SYangtao Li SUNXI_FUNCTION(0x3, "lvds0"), /* D1P */
218473436e7SYangtao Li SUNXI_FUNCTION(0x4, "dsi0"), /* DP1 */
219473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 2)),
220473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
221473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
222473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
223473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D5 */
224473436e7SYangtao Li SUNXI_FUNCTION(0x3, "lvds0"), /* D1N */
225473436e7SYangtao Li SUNXI_FUNCTION(0x4, "dsi0"), /* DM1 */
226473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 3)),
227473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
228473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
229473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
230473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D6 */
231473436e7SYangtao Li SUNXI_FUNCTION(0x3, "lvds0"), /* D2P */
232473436e7SYangtao Li SUNXI_FUNCTION(0x4, "dsi0"), /* CKP */
233473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 4)),
234473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
235473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
236473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
237473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D7 */
238473436e7SYangtao Li SUNXI_FUNCTION(0x3, "lvds0"), /* D2N */
239473436e7SYangtao Li SUNXI_FUNCTION(0x4, "dsi0"), /* CKM */
240473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 5)),
241473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
242473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
243473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
244473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D10 */
245473436e7SYangtao Li SUNXI_FUNCTION(0x3, "lvds0"), /* CKP */
246473436e7SYangtao Li SUNXI_FUNCTION(0x4, "dsi0"), /* DP2 */
247473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 6)),
248473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
249473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
250473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
251473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D11 */
252473436e7SYangtao Li SUNXI_FUNCTION(0x3, "lvds0"), /* CKN */
253473436e7SYangtao Li SUNXI_FUNCTION(0x4, "dsi0"), /* DM2 */
254473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 7)),
255473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),
256473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
257473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
258473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D12 */
259473436e7SYangtao Li SUNXI_FUNCTION(0x4, "dsi0"), /* DP3 */
260473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 8)),
261473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),
262473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
263473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
264473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D13 */
265473436e7SYangtao Li SUNXI_FUNCTION(0x4, "dsi0"), /* DM3 */
266473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 9)),
267473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
268473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
269473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
270473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D14 */
271473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spi1"), /* CS */
272473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 10)),
273473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
274473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
275473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
276473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D15 */
277473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spi1"), /* CLK */
278473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 11)),
279473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
280473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
281473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
282473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D18 */
283473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spi1"), /* MOSI */
284473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 12)),
285473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
286473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
287473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
288473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D19 */
289473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spi1"), /* MISO */
290473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 13)),
291473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
292473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
293473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
294473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D20 */
295473436e7SYangtao Li SUNXI_FUNCTION(0x4, "uart3"), /* TX */
296473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 14)),
297473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
298473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
299473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
300473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D21 */
301473436e7SYangtao Li SUNXI_FUNCTION(0x4, "uart3"), /* RX */
302473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 15)),
303473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
304473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
305473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
306473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D22 */
307473436e7SYangtao Li SUNXI_FUNCTION(0x4, "uart3"), /* RTS */
308473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 16)),
309473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
310473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
311473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
312473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* D23 */
313473436e7SYangtao Li SUNXI_FUNCTION(0x4, "uart3"), /* CTS */
314473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 17)),
315473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),
316473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
317473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
318473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* CLK */
319473436e7SYangtao Li SUNXI_FUNCTION(0x4, "uart4"), /* TX */
320473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 18)),
321473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),
322473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
323473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
324473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* DE */
325473436e7SYangtao Li SUNXI_FUNCTION(0x4, "uart4"), /* RX */
326473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 19)),
327473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),
328473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
329473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
330473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* HSYNC */
331473436e7SYangtao Li SUNXI_FUNCTION(0x3, "pwm2"),
332473436e7SYangtao Li SUNXI_FUNCTION(0x4, "uart4"), /* RTS */
333473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 20)),
334473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),
335473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
336473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
337473436e7SYangtao Li SUNXI_FUNCTION(0x2, "lcd0"), /* VSYNC */
338473436e7SYangtao Li SUNXI_FUNCTION(0x3, "pwm3"),
339473436e7SYangtao Li SUNXI_FUNCTION(0x4, "uart4"), /* CTS */
340473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 21)),
341473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22),
342473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
343473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
344473436e7SYangtao Li SUNXI_FUNCTION(0x2, "pwm1"),
345473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2c0"), /* SCK */
346473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 22)),
347473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 23),
348473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
349473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
350473436e7SYangtao Li SUNXI_FUNCTION(0x2, "pwm0"),
351473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2c0"), /* SDA */
352473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 23)),
353473436e7SYangtao Li /* HOLE */
354473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
355473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
356473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
357473436e7SYangtao Li SUNXI_FUNCTION(0x2, "csi"), /* MCLK */
358473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 0)),
359473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
360473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
361473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
362473436e7SYangtao Li SUNXI_FUNCTION(0x2, "i2c2"), /* SCK */
363473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 1)),
364473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
365473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
366473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
367473436e7SYangtao Li SUNXI_FUNCTION(0x2, "i2c2"), /* SDA */
368473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 2)),
369473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
370473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
371473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
372473436e7SYangtao Li SUNXI_FUNCTION(0x2, "i2c3"), /* SCK */
373473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 3)),
374473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
375473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
376473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
377473436e7SYangtao Li SUNXI_FUNCTION(0x2, "i2c3"), /* SDA */
378473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 4)),
379473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
380473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
381473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
382473436e7SYangtao Li SUNXI_FUNCTION(0x2, "csi"), /* MCLK */
383473436e7SYangtao Li SUNXI_FUNCTION(0x3, "pll"), /* LOCK_DBG */
384473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s2"), /* MCLK */
385473436e7SYangtao Li SUNXI_FUNCTION(0x5, "ledc"), /* LEDC */
386473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 5)),
387473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
388473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
389473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
390473436e7SYangtao Li SUNXI_FUNCTION(0x3, "bist0"), /* RESULT0 */
391473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s2"), /* BCLK */
392473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 6)),
393473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
394473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
395473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
396473436e7SYangtao Li SUNXI_FUNCTION(0x2, "csi"), /* SM_VS */
397473436e7SYangtao Li SUNXI_FUNCTION(0x3, "bist0"), /* RESULT1 */
398473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s2"), /* LRCK */
399473436e7SYangtao Li SUNXI_FUNCTION(0x5, "tcon0"), /* TRIG */
400473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 7)),
401473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
402473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
403473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
404473436e7SYangtao Li SUNXI_FUNCTION(0x3, "bist0"), /* RESULT2 */
405473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s2"), /* DOUT0 */
406473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 8)),
407473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
408473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
409473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
410473436e7SYangtao Li SUNXI_FUNCTION(0x3, "bist0"), /* RESULT3 */
411473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s2"), /* DIN0 */
412473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 9)),
413473436e7SYangtao Li /* HOLE */
414473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),
415473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
416473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
417473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc0"), /* D1 */
418473436e7SYangtao Li SUNXI_FUNCTION(0x3, "jtag"), /* MS1 */
419473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag_gpu"), /* MS_GPU */
420473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 0)),
421473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),
422473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
423473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
424473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc0"), /* D0 */
425473436e7SYangtao Li SUNXI_FUNCTION(0x3, "jtag"), /* DI1 */
426473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag_gpu"), /* DI_GPU */
427473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 1)),
428473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),
429473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
430473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
431473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc0"), /* CLK */
432473436e7SYangtao Li SUNXI_FUNCTION(0x3, "uart0"), /* TX */
433473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 2)),
434473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),
435473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
436473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
437473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc0"), /* CMD */
438473436e7SYangtao Li SUNXI_FUNCTION(0x3, "jtag"), /* DO */
439473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag_gpu"), /* DO_GPU */
440473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 3)),
441473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),
442473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
443473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
444473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc0"), /* D3 */
445473436e7SYangtao Li SUNXI_FUNCTION(0x3, "uart0"), /* RX */
446473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 4)),
447473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
448473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
449473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
450473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc0"), /* D2 */
451473436e7SYangtao Li SUNXI_FUNCTION(0x3, "jtag"), /* CK */
452473436e7SYangtao Li SUNXI_FUNCTION(0x4, "jtag_gpu"), /* CK_GPU */
453473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 5)),
454473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6),
455473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
456473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
457473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 6)),
458473436e7SYangtao Li /* HOLE */
459473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),
460473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
461473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
462473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc1"), /* CLK */
463473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 0)),
464473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),
465473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
466473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
467473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc1"), /* CMD */
468473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 1)),
469473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),
470473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
471473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
472473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc1"), /* D0 */
473473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 2)),
474473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),
475473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
476473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
477473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc1"), /* D1 */
478473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 3)),
479473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),
480473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
481473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
482473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc1"), /* D2 */
483473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 4)),
484473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),
485473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
486473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
487473436e7SYangtao Li SUNXI_FUNCTION(0x2, "mmc1"), /* D3 */
488473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 5)),
489473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),
490473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
491473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
492473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart1"), /* TX */
493473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 6)),
494473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),
495473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
496473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
497473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart1"), /* RX */
498473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 7)),
499473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),
500473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
501473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
502473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart1"), /* RTS */
503473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 8)),
504473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),
505473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
506473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
507473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart1"), /* CTS */
508473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s1"), /* MCLK */
509473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 9)),
510473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),
511473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
512473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
513473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s1"), /* BCLK */
514473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 10)),
515473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),
516473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
517473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
518473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s1"), /* LRCK */
519473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 11)),
520473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),
521473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
522473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
523473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s1_dout0"), /* DOUT0 */
524473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s1_din1"), /* DIN1 */
525473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 12)),
526473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),
527473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
528473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
529473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s1_din0"), /* DIN0 */
530473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s1_dout1"), /* DOUT1 */
531473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 13)),
532473436e7SYangtao Li /* HOLE */
533473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 0),
534473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
535473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
536473436e7SYangtao Li SUNXI_FUNCTION(0x2, "i2c0"), /* SCK */
537473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* RXD1 */
538473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 0)),
539473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1),
540473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
541473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
542473436e7SYangtao Li SUNXI_FUNCTION(0x2, "i2c0"), /* SDA */
543473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* RXD0 */
544473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 1)),
545473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2),
546473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
547473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
548473436e7SYangtao Li SUNXI_FUNCTION(0x2, "i2c1"), /* SCK */
549473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* RXCTL */
550473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 2)),
551473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3),
552473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
553473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
554473436e7SYangtao Li SUNXI_FUNCTION(0x2, "i2c1"), /* SDA */
555473436e7SYangtao Li SUNXI_FUNCTION(0x3, "cir0"), /* OUT */
556473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* CLKIN */
557473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 3)),
558473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4),
559473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
560473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
561473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart3"), /* TX */
562473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi1"), /* CS */
563473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* TXD1 */
564473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 4)),
565473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5),
566473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
567473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
568473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart3"), /* RX */
569473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi1"), /* CLK */
570473436e7SYangtao Li SUNXI_FUNCTION(0x4, "ledc"),
571473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* TXD0 */
572473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 5)),
573473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6),
574473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
575473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
576473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart3"), /* RTS */
577473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi1"), /* MOSI */
578473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* TXCK */
579473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 6)),
580473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7),
581473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
582473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
583473436e7SYangtao Li SUNXI_FUNCTION(0x2, "uart3"), /* CTS */
584473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi1"), /* MISO */
585473436e7SYangtao Li SUNXI_FUNCTION(0x4, "spdif"), /* OUT */
586473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* TXCTL */
587473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 7)),
588473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8),
589473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
590473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
591473436e7SYangtao Li SUNXI_FUNCTION(0x2, "dmic"), /* CLK */
592473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi2"), /* CS */
593473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s2"), /* MCLK */
594473436e7SYangtao Li SUNXI_FUNCTION(0x5, "i2s2_din2"), /* DIN2 */
595473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 8)),
596473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 9),
597473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
598473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
599473436e7SYangtao Li SUNXI_FUNCTION(0x2, "dmic"), /* DATA0 */
600473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi2"), /* CLK */
601473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s2"), /* BCLK */
602473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* MDC */
603473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 9)),
604473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 10),
605473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
606473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
607473436e7SYangtao Li SUNXI_FUNCTION(0x2, "dmic"), /* DATA1 */
608473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi2"), /* MOSI */
609473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s2"), /* LRCK */
610473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* MDIO */
611473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 10)),
612473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 11),
613473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
614473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
615473436e7SYangtao Li SUNXI_FUNCTION(0x2, "dmic"), /* DATA2 */
616473436e7SYangtao Li SUNXI_FUNCTION(0x3, "spi2"), /* MISO */
617473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s2_dout0"), /* DOUT0 */
618473436e7SYangtao Li SUNXI_FUNCTION(0x5, "i2s2_din1"), /* DIN1 */
619473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 11)),
620473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 12),
621473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
622473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
623473436e7SYangtao Li SUNXI_FUNCTION(0x2, "dmic"), /* DATA3 */
624473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2c3"), /* SCK */
625473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s2_din0"), /* DIN0 */
626473436e7SYangtao Li SUNXI_FUNCTION(0x5, "i2s2_dout1"), /* DOUT1 */
627473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 12)),
628473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 13),
629473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
630473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
631473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2c3"), /* SCK */
632473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s3"), /* MCLK */
633473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* EPHY */
634473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 13)),
635473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 14),
636473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
637473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
638473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s3"), /* BCLK */
639473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* RXD3 */
640473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 14)),
641473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 15),
642473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
643473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
644473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s3"), /* LRCK */
645473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* RXD2 */
646473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 15)),
647473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 16),
648473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
649473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
650473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s3_dout0"), /* DOUT0 */
651473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s3_din1"), /* DIN1 */
652473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* RXCK */
653473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 16)),
654473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 17),
655473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
656473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
657473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s3_dout1"), /* DOUT1 */
658473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s3_din0"), /* DIN0 */
659473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* TXD3 */
660473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 17)),
661473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 18),
662473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
663473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
664473436e7SYangtao Li SUNXI_FUNCTION(0x2, "cir0"), /* OUT */
665473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s3_dout2"), /* DOUT2 */
666473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s3_din2"), /* DIN2 */
667473436e7SYangtao Li SUNXI_FUNCTION(0x5, "emac0"), /* TXD2 */
668473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 18)),
669473436e7SYangtao Li SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 19),
670473436e7SYangtao Li SUNXI_FUNCTION(0x0, "gpio_in"),
671473436e7SYangtao Li SUNXI_FUNCTION(0x1, "gpio_out"),
672473436e7SYangtao Li SUNXI_FUNCTION(0x2, "cir0"), /* IN */
673473436e7SYangtao Li SUNXI_FUNCTION(0x3, "i2s3_dout3"), /* DOUT3 */
674473436e7SYangtao Li SUNXI_FUNCTION(0x4, "i2s3_din3"), /* DIN3 */
675473436e7SYangtao Li SUNXI_FUNCTION(0x5, "ledc"),
676473436e7SYangtao Li SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 19)),
677473436e7SYangtao Li };
678473436e7SYangtao Li
6796de7ed69SYangtao Li static const unsigned int a100_irq_bank_map[] = { 1, 2, 3, 4, 5, 6, 7};
680473436e7SYangtao Li
681473436e7SYangtao Li static const struct sunxi_pinctrl_desc a100_pinctrl_data = {
682473436e7SYangtao Li .pins = a100_pins,
683473436e7SYangtao Li .npins = ARRAY_SIZE(a100_pins),
684473436e7SYangtao Li .irq_banks = 7,
685473436e7SYangtao Li .irq_bank_map = a100_irq_bank_map,
686*88df36f2SSamuel Holland .io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_CTL,
687473436e7SYangtao Li };
688473436e7SYangtao Li
a100_pinctrl_probe(struct platform_device * pdev)689473436e7SYangtao Li static int a100_pinctrl_probe(struct platform_device *pdev)
690473436e7SYangtao Li {
691473436e7SYangtao Li return sunxi_pinctrl_init(pdev, &a100_pinctrl_data);
692473436e7SYangtao Li }
693473436e7SYangtao Li
694473436e7SYangtao Li static const struct of_device_id a100_pinctrl_match[] = {
695473436e7SYangtao Li { .compatible = "allwinner,sun50i-a100-pinctrl", },
696473436e7SYangtao Li {}
697473436e7SYangtao Li };
698473436e7SYangtao Li MODULE_DEVICE_TABLE(of, a100_pinctrl_match);
699473436e7SYangtao Li
700473436e7SYangtao Li static struct platform_driver a100_pinctrl_driver = {
701473436e7SYangtao Li .probe = a100_pinctrl_probe,
702473436e7SYangtao Li .driver = {
703473436e7SYangtao Li .name = "sun50i-a100-pinctrl",
704473436e7SYangtao Li .of_match_table = a100_pinctrl_match,
705473436e7SYangtao Li },
706473436e7SYangtao Li };
707473436e7SYangtao Li module_platform_driver(a100_pinctrl_driver);
708