xref: /rk3399_rockchip-uboot/drivers/pinctrl/meson/pinctrl-meson-gxbb.c (revision 2009a8d03fe5aa660c4da04a731a4d75785d4b6b)
1677b5358SBeniamino Galvani /*
2677b5358SBeniamino Galvani  * (C) Copyright 2016 - Beniamino Galvani <b.galvani@gmail.com>
3677b5358SBeniamino Galvani  *
4677b5358SBeniamino Galvani  * Based on code from Linux kernel:
5677b5358SBeniamino Galvani  *   Copyright (C) 2016 Endless Mobile, Inc.
6677b5358SBeniamino Galvani  *
7677b5358SBeniamino Galvani  * SPDX-License-Identifier:	GPL-2.0+
8677b5358SBeniamino Galvani  */
9677b5358SBeniamino Galvani 
104af0d7e8SSimon Glass #include <common.h>
119d922450SSimon Glass #include <dm.h>
12677b5358SBeniamino Galvani #include <dm/pinctrl.h>
13677b5358SBeniamino Galvani #include <dt-bindings/gpio/meson-gxbb-gpio.h>
14677b5358SBeniamino Galvani 
15677b5358SBeniamino Galvani #include "pinctrl-meson.h"
16677b5358SBeniamino Galvani 
17677b5358SBeniamino Galvani #define EE_OFF	14
18677b5358SBeniamino Galvani 
19677b5358SBeniamino Galvani static const unsigned int emmc_nand_d07_pins[] = {
20677b5358SBeniamino Galvani 	PIN(BOOT_0, EE_OFF), PIN(BOOT_1, EE_OFF), PIN(BOOT_2, EE_OFF),
21677b5358SBeniamino Galvani 	PIN(BOOT_3, EE_OFF), PIN(BOOT_4, EE_OFF), PIN(BOOT_5, EE_OFF),
22677b5358SBeniamino Galvani 	PIN(BOOT_6, EE_OFF), PIN(BOOT_7, EE_OFF),
23677b5358SBeniamino Galvani };
24677b5358SBeniamino Galvani static const unsigned int emmc_clk_pins[] = { PIN(BOOT_8, EE_OFF) };
25677b5358SBeniamino Galvani static const unsigned int emmc_cmd_pins[] = { PIN(BOOT_10, EE_OFF) };
26677b5358SBeniamino Galvani static const unsigned int emmc_ds_pins[] = { PIN(BOOT_15, EE_OFF) };
27677b5358SBeniamino Galvani 
28677b5358SBeniamino Galvani static const unsigned int sdcard_d0_pins[] = { PIN(CARD_1, EE_OFF) };
29677b5358SBeniamino Galvani static const unsigned int sdcard_d1_pins[] = { PIN(CARD_0, EE_OFF) };
30677b5358SBeniamino Galvani static const unsigned int sdcard_d2_pins[] = { PIN(CARD_5, EE_OFF) };
31677b5358SBeniamino Galvani static const unsigned int sdcard_d3_pins[] = { PIN(CARD_4, EE_OFF) };
32677b5358SBeniamino Galvani static const unsigned int sdcard_cmd_pins[] = { PIN(CARD_3, EE_OFF) };
33677b5358SBeniamino Galvani static const unsigned int sdcard_clk_pins[] = { PIN(CARD_2, EE_OFF) };
34677b5358SBeniamino Galvani 
35677b5358SBeniamino Galvani static const unsigned int uart_tx_a_pins[]	= { PIN(GPIOX_12, EE_OFF) };
36677b5358SBeniamino Galvani static const unsigned int uart_rx_a_pins[]	= { PIN(GPIOX_13, EE_OFF) };
37677b5358SBeniamino Galvani static const unsigned int uart_cts_a_pins[]	= { PIN(GPIOX_14, EE_OFF) };
38677b5358SBeniamino Galvani static const unsigned int uart_rts_a_pins[]	= { PIN(GPIOX_15, EE_OFF) };
39677b5358SBeniamino Galvani 
40677b5358SBeniamino Galvani static const unsigned int uart_tx_b_pins[]	= { PIN(GPIODV_24, EE_OFF) };
41677b5358SBeniamino Galvani static const unsigned int uart_rx_b_pins[]	= { PIN(GPIODV_25, EE_OFF) };
42677b5358SBeniamino Galvani static const unsigned int uart_cts_b_pins[]	= { PIN(GPIODV_26, EE_OFF) };
43677b5358SBeniamino Galvani static const unsigned int uart_rts_b_pins[]	= { PIN(GPIODV_27, EE_OFF) };
44677b5358SBeniamino Galvani 
45677b5358SBeniamino Galvani static const unsigned int uart_tx_c_pins[]	= { PIN(GPIOY_13, EE_OFF) };
46677b5358SBeniamino Galvani static const unsigned int uart_rx_c_pins[]	= { PIN(GPIOY_14, EE_OFF) };
47677b5358SBeniamino Galvani static const unsigned int uart_cts_c_pins[]	= { PIN(GPIOX_11, EE_OFF) };
48677b5358SBeniamino Galvani static const unsigned int uart_rts_c_pins[]	= { PIN(GPIOX_12, EE_OFF) };
49677b5358SBeniamino Galvani 
50677b5358SBeniamino Galvani static const unsigned int eth_mdio_pins[]	= { PIN(GPIOZ_0, EE_OFF) };
51677b5358SBeniamino Galvani static const unsigned int eth_mdc_pins[]	= { PIN(GPIOZ_1, EE_OFF) };
52677b5358SBeniamino Galvani static const unsigned int eth_clk_rx_clk_pins[]	= { PIN(GPIOZ_2, EE_OFF) };
53677b5358SBeniamino Galvani static const unsigned int eth_rx_dv_pins[]	= { PIN(GPIOZ_3, EE_OFF) };
54677b5358SBeniamino Galvani static const unsigned int eth_rxd0_pins[]	= { PIN(GPIOZ_4, EE_OFF) };
55677b5358SBeniamino Galvani static const unsigned int eth_rxd1_pins[]	= { PIN(GPIOZ_5, EE_OFF) };
56677b5358SBeniamino Galvani static const unsigned int eth_rxd2_pins[]	= { PIN(GPIOZ_6, EE_OFF) };
57677b5358SBeniamino Galvani static const unsigned int eth_rxd3_pins[]	= { PIN(GPIOZ_7, EE_OFF) };
58677b5358SBeniamino Galvani static const unsigned int eth_rgmii_tx_clk_pins[] = { PIN(GPIOZ_8, EE_OFF) };
59677b5358SBeniamino Galvani static const unsigned int eth_tx_en_pins[]	= { PIN(GPIOZ_9, EE_OFF) };
60677b5358SBeniamino Galvani static const unsigned int eth_txd0_pins[]	= { PIN(GPIOZ_10, EE_OFF) };
61677b5358SBeniamino Galvani static const unsigned int eth_txd1_pins[]	= { PIN(GPIOZ_11, EE_OFF) };
62677b5358SBeniamino Galvani static const unsigned int eth_txd2_pins[]	= { PIN(GPIOZ_12, EE_OFF) };
63677b5358SBeniamino Galvani static const unsigned int eth_txd3_pins[]	= { PIN(GPIOZ_13, EE_OFF) };
64677b5358SBeniamino Galvani 
65677b5358SBeniamino Galvani static const unsigned int uart_tx_ao_a_pins[]	= { PIN(GPIOAO_0, 0) };
66677b5358SBeniamino Galvani static const unsigned int uart_rx_ao_a_pins[]	= { PIN(GPIOAO_1, 0) };
67677b5358SBeniamino Galvani static const unsigned int uart_cts_ao_a_pins[]	= { PIN(GPIOAO_2, 0) };
68677b5358SBeniamino Galvani static const unsigned int uart_rts_ao_a_pins[]	= { PIN(GPIOAO_3, 0) };
69677b5358SBeniamino Galvani static const unsigned int uart_tx_ao_b_pins[]	= { PIN(GPIOAO_0, 0) };
70677b5358SBeniamino Galvani static const unsigned int uart_rx_ao_b_pins[]	= { PIN(GPIOAO_1, 0),
71677b5358SBeniamino Galvani 						    PIN(GPIOAO_5, 0) };
72677b5358SBeniamino Galvani static const unsigned int uart_cts_ao_b_pins[]	= { PIN(GPIOAO_2, 0) };
73677b5358SBeniamino Galvani static const unsigned int uart_rts_ao_b_pins[]	= { PIN(GPIOAO_3, 0) };
74677b5358SBeniamino Galvani 
75677b5358SBeniamino Galvani static const unsigned int i2c_sck_ao_pins[] = {PIN(GPIOAO_4, 0) };
76677b5358SBeniamino Galvani static const unsigned int i2c_sda_ao_pins[] = {PIN(GPIOAO_5, 0) };
77677b5358SBeniamino Galvani static const unsigned int i2c_slave_sck_ao_pins[] = {PIN(GPIOAO_4, 0) };
78677b5358SBeniamino Galvani static const unsigned int i2c_slave_sda_ao_pins[] = {PIN(GPIOAO_5, 0) };
79677b5358SBeniamino Galvani 
80677b5358SBeniamino Galvani static struct meson_pmx_group meson_gxbb_periphs_groups[] = {
81677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_0, EE_OFF),
82677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_1, EE_OFF),
83677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_2, EE_OFF),
84677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_3, EE_OFF),
85677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_4, EE_OFF),
86677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_5, EE_OFF),
87677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_6, EE_OFF),
88677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_7, EE_OFF),
89677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_8, EE_OFF),
90677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_9, EE_OFF),
91677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_10, EE_OFF),
92677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_11, EE_OFF),
93677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_12, EE_OFF),
94677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_13, EE_OFF),
95677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_14, EE_OFF),
96677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOZ_15, EE_OFF),
97677b5358SBeniamino Galvani 
98677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOH_0, EE_OFF),
99677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOH_1, EE_OFF),
100677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOH_2, EE_OFF),
101677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOH_3, EE_OFF),
102677b5358SBeniamino Galvani 
103677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_0, EE_OFF),
104677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_1, EE_OFF),
105677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_2, EE_OFF),
106677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_3, EE_OFF),
107677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_4, EE_OFF),
108677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_5, EE_OFF),
109677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_6, EE_OFF),
110677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_7, EE_OFF),
111677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_8, EE_OFF),
112677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_9, EE_OFF),
113677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_10, EE_OFF),
114677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_11, EE_OFF),
115677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_12, EE_OFF),
116677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_13, EE_OFF),
117677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_14, EE_OFF),
118677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_15, EE_OFF),
119677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_16, EE_OFF),
120677b5358SBeniamino Galvani 	GPIO_GROUP(BOOT_17, EE_OFF),
121677b5358SBeniamino Galvani 
122677b5358SBeniamino Galvani 	GPIO_GROUP(CARD_0, EE_OFF),
123677b5358SBeniamino Galvani 	GPIO_GROUP(CARD_1, EE_OFF),
124677b5358SBeniamino Galvani 	GPIO_GROUP(CARD_2, EE_OFF),
125677b5358SBeniamino Galvani 	GPIO_GROUP(CARD_3, EE_OFF),
126677b5358SBeniamino Galvani 	GPIO_GROUP(CARD_4, EE_OFF),
127677b5358SBeniamino Galvani 	GPIO_GROUP(CARD_5, EE_OFF),
128677b5358SBeniamino Galvani 	GPIO_GROUP(CARD_6, EE_OFF),
129677b5358SBeniamino Galvani 
130677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_0, EE_OFF),
131677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_1, EE_OFF),
132677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_2, EE_OFF),
133677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_3, EE_OFF),
134677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_4, EE_OFF),
135677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_5, EE_OFF),
136677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_6, EE_OFF),
137677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_7, EE_OFF),
138677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_8, EE_OFF),
139677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_9, EE_OFF),
140677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_10, EE_OFF),
141677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_11, EE_OFF),
142677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_12, EE_OFF),
143677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_13, EE_OFF),
144677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_14, EE_OFF),
145677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_15, EE_OFF),
146677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_16, EE_OFF),
147677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_17, EE_OFF),
148677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_19, EE_OFF),
149677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_20, EE_OFF),
150677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_21, EE_OFF),
151677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_22, EE_OFF),
152677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_23, EE_OFF),
153677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_24, EE_OFF),
154677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_25, EE_OFF),
155677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_26, EE_OFF),
156677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_27, EE_OFF),
157677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_28, EE_OFF),
158677b5358SBeniamino Galvani 	GPIO_GROUP(GPIODV_29, EE_OFF),
159677b5358SBeniamino Galvani 
160677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_0, EE_OFF),
161677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_1, EE_OFF),
162677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_2, EE_OFF),
163677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_3, EE_OFF),
164677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_4, EE_OFF),
165677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_5, EE_OFF),
166677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_6, EE_OFF),
167677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_7, EE_OFF),
168677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_8, EE_OFF),
169677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_9, EE_OFF),
170677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_10, EE_OFF),
171677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_11, EE_OFF),
172677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_12, EE_OFF),
173677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_13, EE_OFF),
174677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_14, EE_OFF),
175677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_15, EE_OFF),
176677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOY_16, EE_OFF),
177677b5358SBeniamino Galvani 
178677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_0, EE_OFF),
179677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_1, EE_OFF),
180677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_2, EE_OFF),
181677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_3, EE_OFF),
182677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_4, EE_OFF),
183677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_5, EE_OFF),
184677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_6, EE_OFF),
185677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_7, EE_OFF),
186677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_8, EE_OFF),
187677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_9, EE_OFF),
188677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_10, EE_OFF),
189677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_11, EE_OFF),
190677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_12, EE_OFF),
191677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_13, EE_OFF),
192677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_14, EE_OFF),
193677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_15, EE_OFF),
194677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_16, EE_OFF),
195677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_17, EE_OFF),
196677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_18, EE_OFF),
197677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_19, EE_OFF),
198677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_20, EE_OFF),
199677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_21, EE_OFF),
200677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOX_22, EE_OFF),
201677b5358SBeniamino Galvani 
202677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOCLK_0, EE_OFF),
203677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOCLK_1, EE_OFF),
204677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOCLK_2, EE_OFF),
205677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOCLK_3, EE_OFF),
206677b5358SBeniamino Galvani 
207677b5358SBeniamino Galvani 	GPIO_GROUP(GPIO_TEST_N, EE_OFF),
208677b5358SBeniamino Galvani 
209677b5358SBeniamino Galvani 	/* Bank X */
210677b5358SBeniamino Galvani 	GROUP(uart_tx_a,	4,	13),
211677b5358SBeniamino Galvani 	GROUP(uart_rx_a,	4,	12),
212677b5358SBeniamino Galvani 	GROUP(uart_cts_a,	4,	11),
213677b5358SBeniamino Galvani 	GROUP(uart_rts_a,	4,	10),
214677b5358SBeniamino Galvani 
215677b5358SBeniamino Galvani 	/* Bank Y */
216677b5358SBeniamino Galvani 	GROUP(uart_cts_c,	1,	19),
217677b5358SBeniamino Galvani 	GROUP(uart_rts_c,	1,	18),
218677b5358SBeniamino Galvani 	GROUP(uart_tx_c,	1,	17),
219677b5358SBeniamino Galvani 	GROUP(uart_rx_c,	1,	16),
220677b5358SBeniamino Galvani 
221677b5358SBeniamino Galvani 	/* Bank Z */
222677b5358SBeniamino Galvani 	GROUP(eth_mdio,		6,	1),
223677b5358SBeniamino Galvani 	GROUP(eth_mdc,		6,	0),
224677b5358SBeniamino Galvani 	GROUP(eth_clk_rx_clk,	6,	13),
225677b5358SBeniamino Galvani 	GROUP(eth_rx_dv,	6,	12),
226677b5358SBeniamino Galvani 	GROUP(eth_rxd0,		6,	11),
227677b5358SBeniamino Galvani 	GROUP(eth_rxd1,		6,	10),
228677b5358SBeniamino Galvani 	GROUP(eth_rxd2,		6,	9),
229677b5358SBeniamino Galvani 	GROUP(eth_rxd3,		6,	8),
230677b5358SBeniamino Galvani 	GROUP(eth_rgmii_tx_clk,	6,	7),
231677b5358SBeniamino Galvani 	GROUP(eth_tx_en,	6,	6),
232677b5358SBeniamino Galvani 	GROUP(eth_txd0,		6,	5),
233677b5358SBeniamino Galvani 	GROUP(eth_txd1,		6,	4),
234677b5358SBeniamino Galvani 	GROUP(eth_txd2,		6,	3),
235677b5358SBeniamino Galvani 	GROUP(eth_txd3,		6,	2),
236677b5358SBeniamino Galvani 
237677b5358SBeniamino Galvani 	/* Bank DV */
238677b5358SBeniamino Galvani 	GROUP(uart_tx_b,	2,	29),
239677b5358SBeniamino Galvani 	GROUP(uart_rx_b,	2,	28),
240677b5358SBeniamino Galvani 	GROUP(uart_cts_b,	2,	27),
241677b5358SBeniamino Galvani 	GROUP(uart_rts_b,	2,	26),
242677b5358SBeniamino Galvani 
243677b5358SBeniamino Galvani 	/* Bank BOOT */
244677b5358SBeniamino Galvani 	GROUP(emmc_nand_d07,	4,	30),
245677b5358SBeniamino Galvani 	GROUP(emmc_clk,		4,	18),
246677b5358SBeniamino Galvani 	GROUP(emmc_cmd,		4,	19),
247677b5358SBeniamino Galvani 	GROUP(emmc_ds,		4,	31),
248677b5358SBeniamino Galvani 
249677b5358SBeniamino Galvani 	/* Bank CARD */
250677b5358SBeniamino Galvani 	GROUP(sdcard_d1,	2,	14),
251677b5358SBeniamino Galvani 	GROUP(sdcard_d0,	2,	15),
252677b5358SBeniamino Galvani 	GROUP(sdcard_d3,	2,	12),
253677b5358SBeniamino Galvani 	GROUP(sdcard_d2,	2,	13),
254677b5358SBeniamino Galvani 	GROUP(sdcard_cmd,	2,	10),
255677b5358SBeniamino Galvani 	GROUP(sdcard_clk,	2,	11),
256677b5358SBeniamino Galvani };
257677b5358SBeniamino Galvani 
258677b5358SBeniamino Galvani static struct meson_pmx_group meson_gxbb_aobus_groups[] = {
259677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_0, 0),
260677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_1, 0),
261677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_2, 0),
262677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_3, 0),
263677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_4, 0),
264677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_5, 0),
265677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_6, 0),
266677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_7, 0),
267677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_8, 0),
268677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_9, 0),
269677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_10, 0),
270677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_11, 0),
271677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_12, 0),
272677b5358SBeniamino Galvani 	GPIO_GROUP(GPIOAO_13, 0),
273677b5358SBeniamino Galvani 
274677b5358SBeniamino Galvani 	/* bank AO */
275677b5358SBeniamino Galvani 	GROUP(uart_tx_ao_b,	0,	26),
276677b5358SBeniamino Galvani 	GROUP(uart_rx_ao_b,	0,	25),
277677b5358SBeniamino Galvani 	GROUP(uart_tx_ao_a,	0,	12),
278677b5358SBeniamino Galvani 	GROUP(uart_rx_ao_a,	0,	11),
279677b5358SBeniamino Galvani 	GROUP(uart_cts_ao_a,	0,	10),
280677b5358SBeniamino Galvani 	GROUP(uart_rts_ao_a,	0,	9),
281677b5358SBeniamino Galvani 	GROUP(uart_cts_ao_b,	0,	8),
282677b5358SBeniamino Galvani 	GROUP(uart_rts_ao_b,	0,	7),
283677b5358SBeniamino Galvani 	GROUP(i2c_sck_ao,	0,	6),
284677b5358SBeniamino Galvani 	GROUP(i2c_sda_ao,	0,	5),
285677b5358SBeniamino Galvani 	GROUP(i2c_slave_sck_ao, 0,	2),
286677b5358SBeniamino Galvani 	GROUP(i2c_slave_sda_ao, 0,	1),
287677b5358SBeniamino Galvani };
288677b5358SBeniamino Galvani 
289677b5358SBeniamino Galvani static const char * const gpio_periphs_groups[] = {
290677b5358SBeniamino Galvani 	"GPIOZ_0", "GPIOZ_1", "GPIOZ_2", "GPIOZ_3", "GPIOZ_4",
291677b5358SBeniamino Galvani 	"GPIOZ_5", "GPIOZ_6", "GPIOZ_7", "GPIOZ_8", "GPIOZ_9",
292677b5358SBeniamino Galvani 	"GPIOZ_10", "GPIOZ_11", "GPIOZ_12", "GPIOZ_13", "GPIOZ_14",
293677b5358SBeniamino Galvani 	"GPIOZ_15",
294677b5358SBeniamino Galvani 
295677b5358SBeniamino Galvani 	"GPIOH_0", "GPIOH_1", "GPIOH_2", "GPIOH_3",
296677b5358SBeniamino Galvani 
297677b5358SBeniamino Galvani 	"BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4",
298677b5358SBeniamino Galvani 	"BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_9",
299677b5358SBeniamino Galvani 	"BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14",
300677b5358SBeniamino Galvani 	"BOOT_15", "BOOT_16", "BOOT_17",
301677b5358SBeniamino Galvani 
302677b5358SBeniamino Galvani 	"CARD_0", "CARD_1", "CARD_2", "CARD_3", "CARD_4",
303677b5358SBeniamino Galvani 	"CARD_5", "CARD_6",
304677b5358SBeniamino Galvani 
305677b5358SBeniamino Galvani 	"GPIODV_0", "GPIODV_1", "GPIODV_2", "GPIODV_3", "GPIODV_4",
306677b5358SBeniamino Galvani 	"GPIODV_5", "GPIODV_6", "GPIODV_7", "GPIODV_8", "GPIODV_9",
307677b5358SBeniamino Galvani 	"GPIODV_10", "GPIODV_11", "GPIODV_12", "GPIODV_13", "GPIODV_14",
308677b5358SBeniamino Galvani 	"GPIODV_15", "GPIODV_16", "GPIODV_17", "GPIODV_18", "GPIODV_19",
309677b5358SBeniamino Galvani 	"GPIODV_20", "GPIODV_21", "GPIODV_22", "GPIODV_23", "GPIODV_24",
310677b5358SBeniamino Galvani 	"GPIODV_25", "GPIODV_26", "GPIODV_27", "GPIODV_28", "GPIODV_29",
311677b5358SBeniamino Galvani 
312677b5358SBeniamino Galvani 	"GPIOY_0", "GPIOY_1", "GPIOY_2", "GPIOY_3", "GPIOY_4",
313677b5358SBeniamino Galvani 	"GPIOY_5", "GPIOY_6", "GPIOY_7", "GPIOY_8", "GPIOY_9",
314677b5358SBeniamino Galvani 	"GPIOY_10", "GPIOY_11", "GPIOY_12", "GPIOY_13", "GPIOY_14",
315677b5358SBeniamino Galvani 	"GPIOY_15", "GPIOY_16",
316677b5358SBeniamino Galvani 
317677b5358SBeniamino Galvani 	"GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", "GPIOX_4",
318677b5358SBeniamino Galvani 	"GPIOX_5", "GPIOX_6", "GPIOX_7", "GPIOX_8", "GPIOX_9",
319677b5358SBeniamino Galvani 	"GPIOX_10", "GPIOX_11", "GPIOX_12", "GPIOX_13", "GPIOX_14",
320677b5358SBeniamino Galvani 	"GPIOX_15", "GPIOX_16", "GPIOX_17", "GPIOX_18", "GPIOX_19",
321677b5358SBeniamino Galvani 	"GPIOX_20", "GPIOX_21", "GPIOX_22",
322677b5358SBeniamino Galvani 
323677b5358SBeniamino Galvani 	"GPIO_TEST_N",
324677b5358SBeniamino Galvani };
325677b5358SBeniamino Galvani 
326677b5358SBeniamino Galvani static const char * const emmc_groups[] = {
327677b5358SBeniamino Galvani 	"emmc_nand_d07", "emmc_clk", "emmc_cmd", "emmc_ds",
328677b5358SBeniamino Galvani };
329677b5358SBeniamino Galvani 
330677b5358SBeniamino Galvani static const char * const sdcard_groups[] = {
331677b5358SBeniamino Galvani 	"sdcard_d0", "sdcard_d1", "sdcard_d2", "sdcard_d3",
332677b5358SBeniamino Galvani 	"sdcard_cmd", "sdcard_clk",
333677b5358SBeniamino Galvani };
334677b5358SBeniamino Galvani 
335677b5358SBeniamino Galvani static const char * const uart_a_groups[] = {
336677b5358SBeniamino Galvani 	"uart_tx_a", "uart_rx_a", "uart_cts_a", "uart_rts_a",
337677b5358SBeniamino Galvani };
338677b5358SBeniamino Galvani 
339677b5358SBeniamino Galvani static const char * const uart_b_groups[] = {
340677b5358SBeniamino Galvani 	"uart_tx_b", "uart_rx_b", "uart_cts_b", "uart_rts_b",
341677b5358SBeniamino Galvani };
342677b5358SBeniamino Galvani 
343677b5358SBeniamino Galvani static const char * const uart_c_groups[] = {
344677b5358SBeniamino Galvani 	"uart_tx_c", "uart_rx_c", "uart_cts_c", "uart_rts_c",
345677b5358SBeniamino Galvani };
346677b5358SBeniamino Galvani 
347677b5358SBeniamino Galvani static const char * const eth_groups[] = {
348677b5358SBeniamino Galvani 	"eth_mdio", "eth_mdc", "eth_clk_rx_clk", "eth_rx_dv",
349677b5358SBeniamino Galvani 	"eth_rxd0", "eth_rxd1", "eth_rxd2", "eth_rxd3",
350677b5358SBeniamino Galvani 	"eth_rgmii_tx_clk", "eth_tx_en",
351677b5358SBeniamino Galvani 	"eth_txd0", "eth_txd1", "eth_txd2", "eth_txd3",
352677b5358SBeniamino Galvani };
353677b5358SBeniamino Galvani 
354677b5358SBeniamino Galvani static const char * const gpio_aobus_groups[] = {
355677b5358SBeniamino Galvani 	"GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3", "GPIOAO_4",
356677b5358SBeniamino Galvani 	"GPIOAO_5", "GPIOAO_6", "GPIOAO_7", "GPIOAO_8", "GPIOAO_9",
357677b5358SBeniamino Galvani 	"GPIOAO_10", "GPIOAO_11", "GPIOAO_12", "GPIOAO_13",
358677b5358SBeniamino Galvani };
359677b5358SBeniamino Galvani 
360677b5358SBeniamino Galvani static const char * const uart_ao_groups[] = {
361677b5358SBeniamino Galvani 	"uart_tx_ao_a", "uart_rx_ao_a", "uart_cts_ao_a", "uart_rts_ao_a",
362677b5358SBeniamino Galvani };
363677b5358SBeniamino Galvani 
364677b5358SBeniamino Galvani static const char * const uart_ao_b_groups[] = {
365677b5358SBeniamino Galvani 	"uart_tx_ao_b", "uart_rx_ao_b", "uart_cts_ao_b", "uart_rts_ao_b",
366677b5358SBeniamino Galvani };
367677b5358SBeniamino Galvani 
368677b5358SBeniamino Galvani static const char * const i2c_ao_groups[] = {
369677b5358SBeniamino Galvani 	"i2c_sdk_ao", "i2c_sda_ao",
370677b5358SBeniamino Galvani };
371677b5358SBeniamino Galvani 
372677b5358SBeniamino Galvani static const char * const i2c_slave_ao_groups[] = {
373677b5358SBeniamino Galvani 	"i2c_slave_sdk_ao", "i2c_slave_sda_ao",
374677b5358SBeniamino Galvani };
375677b5358SBeniamino Galvani 
376677b5358SBeniamino Galvani static struct meson_pmx_func meson_gxbb_periphs_functions[] = {
377677b5358SBeniamino Galvani 	FUNCTION(gpio_periphs),
378677b5358SBeniamino Galvani 	FUNCTION(emmc),
379677b5358SBeniamino Galvani 	FUNCTION(sdcard),
380677b5358SBeniamino Galvani 	FUNCTION(uart_a),
381677b5358SBeniamino Galvani 	FUNCTION(uart_b),
382677b5358SBeniamino Galvani 	FUNCTION(uart_c),
383677b5358SBeniamino Galvani 	FUNCTION(eth),
384677b5358SBeniamino Galvani };
385677b5358SBeniamino Galvani 
386677b5358SBeniamino Galvani static struct meson_pmx_func meson_gxbb_aobus_functions[] = {
387677b5358SBeniamino Galvani 	FUNCTION(gpio_aobus),
388677b5358SBeniamino Galvani 	FUNCTION(uart_ao),
389677b5358SBeniamino Galvani 	FUNCTION(uart_ao_b),
390677b5358SBeniamino Galvani 	FUNCTION(i2c_ao),
391677b5358SBeniamino Galvani 	FUNCTION(i2c_slave_ao),
392677b5358SBeniamino Galvani };
393677b5358SBeniamino Galvani 
394*2009a8d0SBeniamino Galvani static struct meson_bank meson_gxbb_periphs_banks[] = {
395*2009a8d0SBeniamino Galvani 	/*   name    first                      last                    pullen  pull    dir     out     in  */
396*2009a8d0SBeniamino Galvani 	BANK("X",    PIN(GPIOX_0, EE_OFF),	PIN(GPIOX_22, EE_OFF),  4,  0,  4,  0,  12, 0,  13, 0,  14, 0),
397*2009a8d0SBeniamino Galvani 	BANK("Y",    PIN(GPIOY_0, EE_OFF),	PIN(GPIOY_16, EE_OFF),  1,  0,  1,  0,  3,  0,  4,  0,  5,  0),
398*2009a8d0SBeniamino Galvani 	BANK("DV",   PIN(GPIODV_0, EE_OFF),	PIN(GPIODV_29, EE_OFF), 0,  0,  0,  0,  0,  0,  1,  0,  2,  0),
399*2009a8d0SBeniamino Galvani 	BANK("H",    PIN(GPIOH_0, EE_OFF),	PIN(GPIOH_3, EE_OFF),   1, 20,  1, 20,  3, 20,  4, 20,  5, 20),
400*2009a8d0SBeniamino Galvani 	BANK("Z",    PIN(GPIOZ_0, EE_OFF),	PIN(GPIOZ_15, EE_OFF),  3,  0,  3,  0,  9,  0,  10, 0, 11,  0),
401*2009a8d0SBeniamino Galvani 	BANK("CARD", PIN(CARD_0, EE_OFF),	PIN(CARD_6, EE_OFF),    2, 20,  2, 20,  6, 20,  7, 20,  8, 20),
402*2009a8d0SBeniamino Galvani 	BANK("BOOT", PIN(BOOT_0, EE_OFF),	PIN(BOOT_17, EE_OFF),   2,  0,  2,  0,  6,  0,  7,  0,  8,  0),
403*2009a8d0SBeniamino Galvani 	BANK("CLK",  PIN(GPIOCLK_0, EE_OFF),	PIN(GPIOCLK_3, EE_OFF), 3, 28,  3, 28,  9, 28, 10, 28, 11, 28),
404*2009a8d0SBeniamino Galvani };
405*2009a8d0SBeniamino Galvani 
406*2009a8d0SBeniamino Galvani static struct meson_bank meson_gxbb_aobus_banks[] = {
407*2009a8d0SBeniamino Galvani 	/*   name    first              last               pullen  pull    dir     out     in  */
408*2009a8d0SBeniamino Galvani 	BANK("AO",   PIN(GPIOAO_0, 0),  PIN(GPIOAO_13, 0), 0,  0,  0, 16,  0,  0,  0, 16,  1,  0),
409*2009a8d0SBeniamino Galvani };
410*2009a8d0SBeniamino Galvani 
411677b5358SBeniamino Galvani struct meson_pinctrl_data meson_gxbb_periphs_pinctrl_data = {
412677b5358SBeniamino Galvani 	.name		= "periphs-banks",
413677b5358SBeniamino Galvani 	.pin_base	= 14,
414677b5358SBeniamino Galvani 	.groups		= meson_gxbb_periphs_groups,
415677b5358SBeniamino Galvani 	.funcs		= meson_gxbb_periphs_functions,
416*2009a8d0SBeniamino Galvani 	.banks		= meson_gxbb_periphs_banks,
417677b5358SBeniamino Galvani 	.num_pins	= 120,
418677b5358SBeniamino Galvani 	.num_groups	= ARRAY_SIZE(meson_gxbb_periphs_groups),
419677b5358SBeniamino Galvani 	.num_funcs	= ARRAY_SIZE(meson_gxbb_periphs_functions),
420*2009a8d0SBeniamino Galvani 	.num_banks	= ARRAY_SIZE(meson_gxbb_periphs_banks),
421677b5358SBeniamino Galvani };
422677b5358SBeniamino Galvani 
423677b5358SBeniamino Galvani struct meson_pinctrl_data meson_gxbb_aobus_pinctrl_data = {
424677b5358SBeniamino Galvani 	.name		= "aobus-banks",
425677b5358SBeniamino Galvani 	.pin_base	= 0,
426677b5358SBeniamino Galvani 	.groups		= meson_gxbb_aobus_groups,
427677b5358SBeniamino Galvani 	.funcs		= meson_gxbb_aobus_functions,
428*2009a8d0SBeniamino Galvani 	.banks		= meson_gxbb_aobus_banks,
429677b5358SBeniamino Galvani 	.num_pins	= 14,
430677b5358SBeniamino Galvani 	.num_groups	= ARRAY_SIZE(meson_gxbb_aobus_groups),
431677b5358SBeniamino Galvani 	.num_funcs	= ARRAY_SIZE(meson_gxbb_aobus_functions),
432*2009a8d0SBeniamino Galvani 	.num_banks	= ARRAY_SIZE(meson_gxbb_aobus_banks),
433677b5358SBeniamino Galvani };
434677b5358SBeniamino Galvani 
435677b5358SBeniamino Galvani static const struct udevice_id meson_gxbb_pinctrl_match[] = {
436677b5358SBeniamino Galvani 	{
437677b5358SBeniamino Galvani 		.compatible = "amlogic,meson-gxbb-periphs-pinctrl",
438677b5358SBeniamino Galvani 		.data = (ulong)&meson_gxbb_periphs_pinctrl_data,
439677b5358SBeniamino Galvani 	},
440677b5358SBeniamino Galvani 	{
441677b5358SBeniamino Galvani 		.compatible = "amlogic,meson-gxbb-aobus-pinctrl",
442677b5358SBeniamino Galvani 		.data = (ulong)&meson_gxbb_aobus_pinctrl_data,
443677b5358SBeniamino Galvani 	},
444677b5358SBeniamino Galvani 	{ /* sentinel */ }
445677b5358SBeniamino Galvani };
446677b5358SBeniamino Galvani 
447677b5358SBeniamino Galvani U_BOOT_DRIVER(meson_gxbb_pinctrl) = {
448677b5358SBeniamino Galvani 	.name = "meson-gxbb-pinctrl",
449677b5358SBeniamino Galvani 	.id = UCLASS_PINCTRL,
450677b5358SBeniamino Galvani 	.of_match = of_match_ptr(meson_gxbb_pinctrl_match),
451677b5358SBeniamino Galvani 	.probe = meson_pinctrl_probe,
452677b5358SBeniamino Galvani 	.priv_auto_alloc_size = sizeof(struct meson_pinctrl),
453677b5358SBeniamino Galvani 	.ops = &meson_pinctrl_ops,
454677b5358SBeniamino Galvani };
455