xref: /netbsd-src/sys/arch/arm/amlogic/mesongxl_pinctrl.c (revision 229af777ef955e6006ca17c34e90feb3e9779a59)
1*229af777Sjmcneill /* $NetBSD: mesongxl_pinctrl.c,v 1.1 2019/04/19 19:07:56 jmcneill Exp $ */
2*229af777Sjmcneill 
3*229af777Sjmcneill /*-
4*229af777Sjmcneill  * Copyright (c) 2019 Jared McNeill <jmcneill@invisible.ca>
5*229af777Sjmcneill  * All rights reserved.
6*229af777Sjmcneill  *
7*229af777Sjmcneill  * Redistribution and use in source and binary forms, with or without
8*229af777Sjmcneill  * modification, are permitted provided that the following conditions
9*229af777Sjmcneill  * are met:
10*229af777Sjmcneill  * 1. Redistributions of source code must retain the above copyright
11*229af777Sjmcneill  *    notice, this list of conditions and the following disclaimer.
12*229af777Sjmcneill  * 2. Redistributions in binary form must reproduce the above copyright
13*229af777Sjmcneill  *    notice, this list of conditions and the following disclaimer in the
14*229af777Sjmcneill  *    documentation and/or other materials provided with the distribution.
15*229af777Sjmcneill  *
16*229af777Sjmcneill  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17*229af777Sjmcneill  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18*229af777Sjmcneill  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19*229af777Sjmcneill  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20*229af777Sjmcneill  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21*229af777Sjmcneill  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22*229af777Sjmcneill  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23*229af777Sjmcneill  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24*229af777Sjmcneill  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25*229af777Sjmcneill  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26*229af777Sjmcneill  * SUCH DAMAGE.
27*229af777Sjmcneill  */
28*229af777Sjmcneill 
29*229af777Sjmcneill #include <sys/cdefs.h>
30*229af777Sjmcneill __KERNEL_RCSID(0, "$NetBSD: mesongxl_pinctrl.c,v 1.1 2019/04/19 19:07:56 jmcneill Exp $");
31*229af777Sjmcneill 
32*229af777Sjmcneill #include <sys/param.h>
33*229af777Sjmcneill 
34*229af777Sjmcneill #include <arm/amlogic/meson_pinctrl.h>
35*229af777Sjmcneill 
36*229af777Sjmcneill /* CBUS pinmux registers */
37*229af777Sjmcneill #define	CBUS_REG(n)	((n) << 2)
38*229af777Sjmcneill #define	REG0		CBUS_REG(0)
39*229af777Sjmcneill #define	REG1		CBUS_REG(1)
40*229af777Sjmcneill #define	REG2		CBUS_REG(2)
41*229af777Sjmcneill #define	REG3		CBUS_REG(3)
42*229af777Sjmcneill #define	REG4		CBUS_REG(4)
43*229af777Sjmcneill #define	REG5		CBUS_REG(5)
44*229af777Sjmcneill #define	REG6		CBUS_REG(6)
45*229af777Sjmcneill #define	REG7		CBUS_REG(7)
46*229af777Sjmcneill #define	REG8		CBUS_REG(8)
47*229af777Sjmcneill #define	REG9		CBUS_REG(9)
48*229af777Sjmcneill 
49*229af777Sjmcneill /* AO pinmux registers */
50*229af777Sjmcneill #define	AOREG0		0x00
51*229af777Sjmcneill #define	AOREG1		0x04
52*229af777Sjmcneill 
53*229af777Sjmcneill /*
54*229af777Sjmcneill  * GPIO banks. The values must match those in dt-bindings/gpio/meson-gxl-gpio.h
55*229af777Sjmcneill  */
56*229af777Sjmcneill enum {
57*229af777Sjmcneill 	GPIOZ_0 = 0,
58*229af777Sjmcneill 	GPIOZ_1,
59*229af777Sjmcneill 	GPIOZ_2,
60*229af777Sjmcneill 	GPIOZ_3,
61*229af777Sjmcneill 	GPIOZ_4,
62*229af777Sjmcneill 	GPIOZ_5,
63*229af777Sjmcneill 	GPIOZ_6,
64*229af777Sjmcneill 	GPIOZ_7,
65*229af777Sjmcneill 	GPIOZ_8,
66*229af777Sjmcneill 	GPIOZ_9,
67*229af777Sjmcneill 	GPIOZ_10,
68*229af777Sjmcneill 	GPIOZ_11,
69*229af777Sjmcneill 	GPIOZ_12,
70*229af777Sjmcneill 	GPIOZ_13,
71*229af777Sjmcneill 	GPIOZ_14,
72*229af777Sjmcneill 	GPIOZ_15,
73*229af777Sjmcneill 
74*229af777Sjmcneill 	GPIOH_0 = 16,
75*229af777Sjmcneill 	GPIOH_1,
76*229af777Sjmcneill 	GPIOH_2,
77*229af777Sjmcneill 	GPIOH_3,
78*229af777Sjmcneill 	GPIOH_4,
79*229af777Sjmcneill 	GPIOH_5,
80*229af777Sjmcneill 	GPIOH_6,
81*229af777Sjmcneill 	GPIOH_7,
82*229af777Sjmcneill 	GPIOH_8,
83*229af777Sjmcneill 	GPIOH_9,
84*229af777Sjmcneill 
85*229af777Sjmcneill 	BOOT_0 = 26,
86*229af777Sjmcneill 	BOOT_1,
87*229af777Sjmcneill 	BOOT_2,
88*229af777Sjmcneill 	BOOT_3,
89*229af777Sjmcneill 	BOOT_4,
90*229af777Sjmcneill 	BOOT_5,
91*229af777Sjmcneill 	BOOT_6,
92*229af777Sjmcneill 	BOOT_7,
93*229af777Sjmcneill 	BOOT_8,
94*229af777Sjmcneill 	BOOT_9,
95*229af777Sjmcneill 	BOOT_10,
96*229af777Sjmcneill 	BOOT_11,
97*229af777Sjmcneill 	BOOT_12,
98*229af777Sjmcneill 	BOOT_13,
99*229af777Sjmcneill 	BOOT_14,
100*229af777Sjmcneill 	BOOT_15,
101*229af777Sjmcneill 
102*229af777Sjmcneill 	CARD_0 = 42,
103*229af777Sjmcneill 	CARD_1,
104*229af777Sjmcneill 	CARD_2,
105*229af777Sjmcneill 	CARD_3,
106*229af777Sjmcneill 	CARD_4,
107*229af777Sjmcneill 	CARD_5,
108*229af777Sjmcneill 	CARD_6,
109*229af777Sjmcneill 
110*229af777Sjmcneill 	GPIODV_0 = 49,
111*229af777Sjmcneill 	GPIODV_1,
112*229af777Sjmcneill 	GPIODV_2,
113*229af777Sjmcneill 	GPIODV_3,
114*229af777Sjmcneill 	GPIODV_4,
115*229af777Sjmcneill 	GPIODV_5,
116*229af777Sjmcneill 	GPIODV_6,
117*229af777Sjmcneill 	GPIODV_7,
118*229af777Sjmcneill 	GPIODV_8,
119*229af777Sjmcneill 	GPIODV_9,
120*229af777Sjmcneill 	GPIODV_10,
121*229af777Sjmcneill 	GPIODV_11,
122*229af777Sjmcneill 	GPIODV_12,
123*229af777Sjmcneill 	GPIODV_13,
124*229af777Sjmcneill 	GPIODV_14,
125*229af777Sjmcneill 	GPIODV_15,
126*229af777Sjmcneill 	GPIODV_16,
127*229af777Sjmcneill 	GPIODV_17,
128*229af777Sjmcneill 	GPIODV_18,
129*229af777Sjmcneill 	GPIODV_19,
130*229af777Sjmcneill 	GPIODV_20,
131*229af777Sjmcneill 	GPIODV_21,
132*229af777Sjmcneill 	GPIODV_22,
133*229af777Sjmcneill 	GPIODV_23,
134*229af777Sjmcneill 	GPIODV_24,
135*229af777Sjmcneill 	GPIODV_25,
136*229af777Sjmcneill 	GPIODV_26,
137*229af777Sjmcneill 	GPIODV_27,
138*229af777Sjmcneill 	GPIODV_28,
139*229af777Sjmcneill 	GPIODV_29,
140*229af777Sjmcneill 
141*229af777Sjmcneill 	GPIOX_0 = 79,
142*229af777Sjmcneill 	GPIOX_1,
143*229af777Sjmcneill 	GPIOX_2,
144*229af777Sjmcneill 	GPIOX_3,
145*229af777Sjmcneill 	GPIOX_4,
146*229af777Sjmcneill 	GPIOX_5,
147*229af777Sjmcneill 	GPIOX_6,
148*229af777Sjmcneill 	GPIOX_7,
149*229af777Sjmcneill 	GPIOX_8,
150*229af777Sjmcneill 	GPIOX_9,
151*229af777Sjmcneill 	GPIOX_10,
152*229af777Sjmcneill 	GPIOX_11,
153*229af777Sjmcneill 	GPIOX_12,
154*229af777Sjmcneill 	GPIOX_13,
155*229af777Sjmcneill 	GPIOX_14,
156*229af777Sjmcneill 	GPIOX_15,
157*229af777Sjmcneill 	GPIOX_16,
158*229af777Sjmcneill 	GPIOX_17,
159*229af777Sjmcneill 	GPIOX_18,
160*229af777Sjmcneill 
161*229af777Sjmcneill 	GPIOCLK_0 = 98,
162*229af777Sjmcneill 	GPIOCLK_1,
163*229af777Sjmcneill 
164*229af777Sjmcneill 	GPIOAO_0 = 0,
165*229af777Sjmcneill 	GPIOAO_1,
166*229af777Sjmcneill 	GPIOAO_2,
167*229af777Sjmcneill 	GPIOAO_3,
168*229af777Sjmcneill 	GPIOAO_4,
169*229af777Sjmcneill 	GPIOAO_5,
170*229af777Sjmcneill 	GPIOAO_6,
171*229af777Sjmcneill 	GPIOAO_7,
172*229af777Sjmcneill 	GPIOAO_8,
173*229af777Sjmcneill 	GPIOAO_9,
174*229af777Sjmcneill 	GPIO_TEST_N,
175*229af777Sjmcneill };
176*229af777Sjmcneill 
177*229af777Sjmcneill #define	CBUS_GPIO(_id, _off, _bit)	\
178*229af777Sjmcneill 	[_id] = {							\
179*229af777Sjmcneill 		.id = (_id),						\
180*229af777Sjmcneill 		.name = __STRING(_id),					\
181*229af777Sjmcneill 		.oen = {						\
182*229af777Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
183*229af777Sjmcneill 			.reg = CBUS_REG((_off) * 3 + 0),		\
184*229af777Sjmcneill 			.mask = __BIT(_bit)				\
185*229af777Sjmcneill 		},							\
186*229af777Sjmcneill 		.out = {						\
187*229af777Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
188*229af777Sjmcneill 			.reg = CBUS_REG((_off) * 3 + 1),		\
189*229af777Sjmcneill 			.mask = __BIT(_bit)				\
190*229af777Sjmcneill 		},							\
191*229af777Sjmcneill 		.in = {							\
192*229af777Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
193*229af777Sjmcneill 			.reg = CBUS_REG((_off) * 3 + 2),		\
194*229af777Sjmcneill 			.mask = __BIT(_bit)				\
195*229af777Sjmcneill 		},							\
196*229af777Sjmcneill 		.pupden = {						\
197*229af777Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL_ENABLE,	\
198*229af777Sjmcneill 			.reg = CBUS_REG(_off),				\
199*229af777Sjmcneill 			.mask = __BIT(_bit)				\
200*229af777Sjmcneill 		},							\
201*229af777Sjmcneill 		.pupd = {						\
202*229af777Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL,		\
203*229af777Sjmcneill 			.reg = CBUS_REG(_off),				\
204*229af777Sjmcneill 			.mask = __BIT(_bit)				\
205*229af777Sjmcneill 		},							\
206*229af777Sjmcneill 	}
207*229af777Sjmcneill 
208*229af777Sjmcneill static const struct meson_pinctrl_gpio mesongxl_periphs_gpios[] = {
209*229af777Sjmcneill 	/* GPIODV */
210*229af777Sjmcneill 	CBUS_GPIO(GPIODV_24, 0, 24),
211*229af777Sjmcneill 	CBUS_GPIO(GPIODV_25, 0, 25),
212*229af777Sjmcneill 	CBUS_GPIO(GPIODV_26, 0, 26),
213*229af777Sjmcneill 	CBUS_GPIO(GPIODV_27, 0, 27),
214*229af777Sjmcneill 	CBUS_GPIO(GPIODV_28, 0, 28),
215*229af777Sjmcneill 	CBUS_GPIO(GPIODV_29, 0, 29),
216*229af777Sjmcneill 
217*229af777Sjmcneill 	/* GPIOH */
218*229af777Sjmcneill 	CBUS_GPIO(GPIOH_0, 1, 20),
219*229af777Sjmcneill 	CBUS_GPIO(GPIOH_1, 1, 21),
220*229af777Sjmcneill 	CBUS_GPIO(GPIOH_2, 1, 22),
221*229af777Sjmcneill 	CBUS_GPIO(GPIOH_3, 1, 23),
222*229af777Sjmcneill 	CBUS_GPIO(GPIOH_4, 1, 24),
223*229af777Sjmcneill 	CBUS_GPIO(GPIOH_5, 1, 25),
224*229af777Sjmcneill 	CBUS_GPIO(GPIOH_6, 1, 26),
225*229af777Sjmcneill 	CBUS_GPIO(GPIOH_7, 1, 27),
226*229af777Sjmcneill 	CBUS_GPIO(GPIOH_8, 1, 28),
227*229af777Sjmcneill 	CBUS_GPIO(GPIOH_9, 1, 29),
228*229af777Sjmcneill 
229*229af777Sjmcneill 	/* BOOT */
230*229af777Sjmcneill 	CBUS_GPIO(BOOT_0, 2, 0),
231*229af777Sjmcneill 	CBUS_GPIO(BOOT_1, 2, 1),
232*229af777Sjmcneill 	CBUS_GPIO(BOOT_2, 2, 2),
233*229af777Sjmcneill 	CBUS_GPIO(BOOT_3, 2, 3),
234*229af777Sjmcneill 	CBUS_GPIO(BOOT_4, 2, 4),
235*229af777Sjmcneill 	CBUS_GPIO(BOOT_5, 2, 5),
236*229af777Sjmcneill 	CBUS_GPIO(BOOT_6, 2, 6),
237*229af777Sjmcneill 	CBUS_GPIO(BOOT_7, 2, 7),
238*229af777Sjmcneill 	CBUS_GPIO(BOOT_8, 2, 8),
239*229af777Sjmcneill 	CBUS_GPIO(BOOT_9, 2, 9),
240*229af777Sjmcneill 	CBUS_GPIO(BOOT_10, 2, 10),
241*229af777Sjmcneill 	CBUS_GPIO(BOOT_11, 2, 11),
242*229af777Sjmcneill 	CBUS_GPIO(BOOT_12, 2, 12),
243*229af777Sjmcneill 	CBUS_GPIO(BOOT_13, 2, 13),
244*229af777Sjmcneill 	CBUS_GPIO(BOOT_14, 2, 14),
245*229af777Sjmcneill 	CBUS_GPIO(BOOT_15, 2, 15),
246*229af777Sjmcneill 
247*229af777Sjmcneill 	/* CARD */
248*229af777Sjmcneill 	CBUS_GPIO(CARD_0, 2, 20),
249*229af777Sjmcneill 	CBUS_GPIO(CARD_1, 2, 21),
250*229af777Sjmcneill 	CBUS_GPIO(CARD_2, 2, 22),
251*229af777Sjmcneill 	CBUS_GPIO(CARD_3, 2, 23),
252*229af777Sjmcneill 	CBUS_GPIO(CARD_4, 2, 24),
253*229af777Sjmcneill 	CBUS_GPIO(CARD_5, 2, 25),
254*229af777Sjmcneill 	CBUS_GPIO(CARD_6, 2, 26),
255*229af777Sjmcneill 
256*229af777Sjmcneill 	/* GPIOCLK */
257*229af777Sjmcneill 	CBUS_GPIO(GPIOCLK_0, 3, 28),
258*229af777Sjmcneill 	CBUS_GPIO(GPIOCLK_1, 3, 29),
259*229af777Sjmcneill 
260*229af777Sjmcneill 	/* GPIOX */
261*229af777Sjmcneill 	CBUS_GPIO(GPIOX_0, 4, 0),
262*229af777Sjmcneill 	CBUS_GPIO(GPIOX_1, 4, 1),
263*229af777Sjmcneill 	CBUS_GPIO(GPIOX_2, 4, 2),
264*229af777Sjmcneill 	CBUS_GPIO(GPIOX_3, 4, 3),
265*229af777Sjmcneill 	CBUS_GPIO(GPIOX_4, 4, 4),
266*229af777Sjmcneill 	CBUS_GPIO(GPIOX_5, 4, 5),
267*229af777Sjmcneill 	CBUS_GPIO(GPIOX_6, 4, 6),
268*229af777Sjmcneill 	CBUS_GPIO(GPIOX_7, 4, 7),
269*229af777Sjmcneill 	CBUS_GPIO(GPIOX_8, 4, 8),
270*229af777Sjmcneill 	CBUS_GPIO(GPIOX_9, 4, 9),
271*229af777Sjmcneill 	CBUS_GPIO(GPIOX_10, 4, 10),
272*229af777Sjmcneill 	CBUS_GPIO(GPIOX_11, 4, 11),
273*229af777Sjmcneill 	CBUS_GPIO(GPIOX_12, 4, 12),
274*229af777Sjmcneill 	CBUS_GPIO(GPIOX_13, 4, 13),
275*229af777Sjmcneill 	CBUS_GPIO(GPIOX_14, 4, 14),
276*229af777Sjmcneill 	CBUS_GPIO(GPIOX_15, 4, 15),
277*229af777Sjmcneill 	CBUS_GPIO(GPIOX_16, 4, 16),
278*229af777Sjmcneill 	CBUS_GPIO(GPIOX_17, 4, 17),
279*229af777Sjmcneill 	CBUS_GPIO(GPIOX_18, 4, 18),
280*229af777Sjmcneill };
281*229af777Sjmcneill 
282*229af777Sjmcneill #define	AO_GPIO(_id, _bit)						\
283*229af777Sjmcneill 	[_id] = {							\
284*229af777Sjmcneill 		.id = (_id),						\
285*229af777Sjmcneill 		.name = __STRING(_id),					\
286*229af777Sjmcneill 		.oen = {						\
287*229af777Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
288*229af777Sjmcneill 			.reg = 0,					\
289*229af777Sjmcneill 			.mask = __BIT(_bit)				\
290*229af777Sjmcneill 		},							\
291*229af777Sjmcneill 		.out = {						\
292*229af777Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
293*229af777Sjmcneill 			.reg = 0,					\
294*229af777Sjmcneill 			.mask = __BIT(_bit + 16)			\
295*229af777Sjmcneill 		},							\
296*229af777Sjmcneill 		.in = {							\
297*229af777Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
298*229af777Sjmcneill 			.reg = 4,					\
299*229af777Sjmcneill 			.mask = __BIT(_bit)				\
300*229af777Sjmcneill 		},							\
301*229af777Sjmcneill 		.pupden = {						\
302*229af777Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL,		\
303*229af777Sjmcneill 			.reg = 0,					\
304*229af777Sjmcneill 			.mask = __BIT(_bit)				\
305*229af777Sjmcneill 		},							\
306*229af777Sjmcneill 		.pupd = {						\
307*229af777Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL,		\
308*229af777Sjmcneill 			.reg = 0,					\
309*229af777Sjmcneill 			.mask = __BIT(_bit + 16)			\
310*229af777Sjmcneill 		},							\
311*229af777Sjmcneill 	}
312*229af777Sjmcneill 
313*229af777Sjmcneill static const struct meson_pinctrl_gpio mesongxl_aobus_gpios[] = {
314*229af777Sjmcneill 	/* GPIOAO */
315*229af777Sjmcneill 	AO_GPIO(GPIOAO_0, 0),
316*229af777Sjmcneill 	AO_GPIO(GPIOAO_1, 1),
317*229af777Sjmcneill 	AO_GPIO(GPIOAO_2, 2),
318*229af777Sjmcneill 	AO_GPIO(GPIOAO_3, 3),
319*229af777Sjmcneill 	AO_GPIO(GPIOAO_4, 4),
320*229af777Sjmcneill 	AO_GPIO(GPIOAO_5, 5),
321*229af777Sjmcneill 	AO_GPIO(GPIOAO_6, 6),
322*229af777Sjmcneill 	AO_GPIO(GPIOAO_7, 7),
323*229af777Sjmcneill 	AO_GPIO(GPIOAO_8, 8),
324*229af777Sjmcneill 	AO_GPIO(GPIOAO_9, 9),
325*229af777Sjmcneill };
326*229af777Sjmcneill 
327*229af777Sjmcneill static const struct meson_pinctrl_group mesongxl_periphs_groups[] = {
328*229af777Sjmcneill 	/* GPIOX */
329*229af777Sjmcneill 	{ "sdio_d0",		REG5,	31,	{ GPIOX_0 }, 1 },
330*229af777Sjmcneill 	{ "sdio_d1",		REG5,	30,	{ GPIOX_1 }, 1 },
331*229af777Sjmcneill 	{ "sdio_d2",		REG5,	29,	{ GPIOX_2 }, 1 },
332*229af777Sjmcneill 	{ "sdio_d3",		REG5,	28,	{ GPIOX_3 }, 1 },
333*229af777Sjmcneill 	{ "sdio_clk",		REG5,	27,	{ GPIOX_4 }, 1 },
334*229af777Sjmcneill 	{ "sdio_cmd",		REG5,	26,	{ GPIOX_5 }, 1 },
335*229af777Sjmcneill 	{ "sdio_irq",		REG5,	24,	{ GPIOX_7 }, 1 },
336*229af777Sjmcneill 	{ "uart_tx_a",		REG5,	19,	{ GPIOX_12 }, 1 },
337*229af777Sjmcneill 	{ "uart_rx_a",		REG5,	18,	{ GPIOX_13 }, 1 },
338*229af777Sjmcneill 	{ "uart_cts_a",		REG5,	17,	{ GPIOX_14 }, 1 },
339*229af777Sjmcneill 	{ "uart_dts_a",		REG5,	16,	{ GPIOX_15 }, 1 },
340*229af777Sjmcneill 	{ "uart_tx_c",		REG5,	13,	{ GPIOX_8 }, 1 },
341*229af777Sjmcneill 	{ "uart_rx_c",		REG5,	12,	{ GPIOX_9 }, 1 },
342*229af777Sjmcneill 	{ "uart_cts_c",		REG5,	11,	{ GPIOX_10 }, 1 },
343*229af777Sjmcneill 	{ "uart_dts_c",		REG5,	10,	{ GPIOX_11 }, 1 },
344*229af777Sjmcneill 	{ "pwm_a",		REG5,	25,	{ GPIOX_6 }, 1 },
345*229af777Sjmcneill 	{ "pwm_e",		REG5,	15,	{ GPIOX_16 }, 1 },
346*229af777Sjmcneill 	{ "pwm_f_x",		REG5,	14,	{ GPIOX_7 }, 1 },
347*229af777Sjmcneill 	{ "spi_mosi",		REG5,	3,	{ GPIOX_8 }, 1 },
348*229af777Sjmcneill 	{ "spi_miso",		REG5,	2,	{ GPIOX_9 }, 1 },
349*229af777Sjmcneill 	{ "spi_ss0",		REG5,	1,	{ GPIOX_10 }, 1 },
350*229af777Sjmcneill 	{ "spi_sclk",		REG5,	0,	{ GPIOX_11 }, 1 },
351*229af777Sjmcneill 
352*229af777Sjmcneill 	/* GPIOZ */
353*229af777Sjmcneill 	{ "eth_mdio",		REG4,	23,	{ GPIOZ_0 }, 1 },
354*229af777Sjmcneill 	{ "eth_mdc",		REG4,	22,	{ GPIOZ_1 }, 1 },
355*229af777Sjmcneill 	{ "eth_clk_rx_clk",	REG4,	21,	{ GPIOZ_2 }, 1 },
356*229af777Sjmcneill 	{ "eth_rx_dv",		REG4,	20,	{ GPIOZ_3 }, 1 },
357*229af777Sjmcneill 	{ "eth_rxd0",		REG4,	19,	{ GPIOZ_4 }, 1 },
358*229af777Sjmcneill 	{ "eth_rxd1",		REG4,	18,	{ GPIOZ_5 }, 1 },
359*229af777Sjmcneill 	{ "eth_rxd2",		REG4,	17,	{ GPIOZ_6 }, 1 },
360*229af777Sjmcneill 	{ "eth_rxd3",		REG4,	16,	{ GPIOZ_7 }, 1 },
361*229af777Sjmcneill 	{ "eth_rgmii_tx_clk",	REG4,	15,	{ GPIOZ_8 }, 1 },
362*229af777Sjmcneill 	{ "eth_tx_en",		REG4,	14,	{ GPIOZ_9 }, 1 },
363*229af777Sjmcneill 	{ "eth_txd0",		REG4,	13,	{ GPIOZ_10 }, 1 },
364*229af777Sjmcneill 	{ "eth_txd1",		REG4,	12,	{ GPIOZ_11 }, 1 },
365*229af777Sjmcneill 	{ "eth_txd2",		REG4,	11,	{ GPIOZ_12 }, 1 },
366*229af777Sjmcneill 	{ "eth_txd3",		REG4,	10,	{ GPIOZ_13 }, 1 },
367*229af777Sjmcneill 	{ "pwm_c",		REG3,	20,	{ GPIOZ_15 }, 1 },
368*229af777Sjmcneill 	{ "i2s_out_ch23_z",	REG3,	26,	{ GPIOZ_5 }, 1 },
369*229af777Sjmcneill 	{ "i2s_out_ch45_z",	REG3,	25,	{ GPIOZ_6 }, 1 },
370*229af777Sjmcneill 	{ "i2s_out_ch67_z",	REG3,	24,	{ GPIOZ_7 }, 1 },
371*229af777Sjmcneill 	{ "eth_link_led",	REG4,	25,	{ GPIOZ_14 }, 1 },
372*229af777Sjmcneill 	{ "eth_act_led",	REG4,	24,	{ GPIOZ_15 }, 1 },
373*229af777Sjmcneill 
374*229af777Sjmcneill 	/* GPIOH */
375*229af777Sjmcneill 	{ "hdmi_hpd",		REG6,	31,	{ GPIOH_0 }, 1 },
376*229af777Sjmcneill 	{ "hdmi_sda",		REG6,	30,	{ GPIOH_1 }, 1 },
377*229af777Sjmcneill 	{ "hdmi_scl",		REG6,	29,	{ GPIOH_2 }, 1 },
378*229af777Sjmcneill 	{ "i2s_am_clk",		REG6,	26,	{ GPIOH_6 }, 1 },
379*229af777Sjmcneill 	{ "i2s_out_ao_clk",	REG6,	25,	{ GPIOH_7 }, 1 },
380*229af777Sjmcneill 	{ "i2s_out_lr_clk",	REG6,	24,	{ GPIOH_8 }, 1 },
381*229af777Sjmcneill 	{ "i2s_out_ch01",	REG6,	23,	{ GPIOH_9 }, 1 },
382*229af777Sjmcneill 	{ "spdif_out_h",	REG6,	28,	{ GPIOH_4 }, 1 },
383*229af777Sjmcneill 
384*229af777Sjmcneill 	/* GPIODV */
385*229af777Sjmcneill 	{ "uart_tx_b",		REG2,	16,	{ GPIODV_24 }, 1 },
386*229af777Sjmcneill 	{ "uart_rx_b",		REG2,	15,	{ GPIODV_25 }, 1 },
387*229af777Sjmcneill 	{ "uart_cts_b",		REG2,	14,	{ GPIODV_26 }, 1 },
388*229af777Sjmcneill 	{ "uart_rts_b",		REG2,	13,	{ GPIODV_27 }, 1 },
389*229af777Sjmcneill 	{ "i2c_sda_c_dv18",	REG1,	17,	{ GPIODV_18 }, 1 },
390*229af777Sjmcneill 	{ "i2c_sck_c_dv19",	REG1,	16,	{ GPIODV_19 }, 1 },
391*229af777Sjmcneill 	{ "i2c_sda_a",		REG1,	15,	{ GPIODV_24 }, 1 },
392*229af777Sjmcneill 	{ "i2c_sck_a",		REG1,	14,	{ GPIODV_25 }, 1 },
393*229af777Sjmcneill 	{ "i2c_sda_b",		REG1,	13,	{ GPIODV_26 }, 1 },
394*229af777Sjmcneill 	{ "i2c_sck_b",		REG1,	12,	{ GPIODV_27 }, 1 },
395*229af777Sjmcneill 	{ "i2c_sda_c",		REG1,	11,	{ GPIODV_28 }, 1 },
396*229af777Sjmcneill 	{ "i2c_sck_c",		REG1,	10,	{ GPIODV_29 }, 1 },
397*229af777Sjmcneill 	{ "pwm_b",		REG2,	11,	{ GPIODV_29 }, 1 },
398*229af777Sjmcneill 	{ "pwm_d",		REG2,	12,	{ GPIODV_28 }, 1 },
399*229af777Sjmcneill 	{ "tsin_a_d0",		REG2,	4,	{ GPIODV_0 }, 1 },
400*229af777Sjmcneill 	{ "tsin_a_dp",		REG2,	3,	{ GPIODV_1, GPIODV_2, GPIODV_3, GPIODV_4, GPIODV_5, GPIODV_6, GPIODV_7 }, 7 },
401*229af777Sjmcneill 	{ "tsin_a_clk",		REG2,	2,	{ GPIODV_8 }, 1 },
402*229af777Sjmcneill 	{ "tsin_a_sop",		REG2,	1,	{ GPIODV_9 }, 1 },
403*229af777Sjmcneill 	{ "tsin_a_d_valid",	REG2,	0,	{ GPIODV_10 }, 1 },
404*229af777Sjmcneill 	{ "tsin_a_fail",	REG1,	31,	{ GPIODV_11 }, 1 },
405*229af777Sjmcneill 
406*229af777Sjmcneill 	/* BOOT */
407*229af777Sjmcneill 	{ "emmc_nand_d07",	REG7,	31,	{ BOOT_0, BOOT_1, BOOT_2, BOOT_3, BOOT_4, BOOT_5, BOOT_6, BOOT_7 }, 8 },
408*229af777Sjmcneill 	{ "emmc_clk",		REG7,	30,	{ BOOT_8 }, 1 },
409*229af777Sjmcneill 	{ "emmc_cmd",		REG7,	29,	{ BOOT_10 }, 1 },
410*229af777Sjmcneill 	{ "emmc_ds",		REG7,	28,	{ BOOT_15 }, 1 },
411*229af777Sjmcneill 	{ "nor_d",		REG7,	13,	{ BOOT_11 }, 1 },
412*229af777Sjmcneill 	{ "nor_q",		REG7,	12,	{ BOOT_12 }, 1 },
413*229af777Sjmcneill 	{ "nor_c",		REG7,	11,	{ BOOT_13 }, 1 },
414*229af777Sjmcneill 	{ "nor_cs",		REG7,	10,	{ BOOT_15 }, 1 },
415*229af777Sjmcneill 	{ "nand_ce0",		REG7,	7,	{ BOOT_8 }, 1 },
416*229af777Sjmcneill 	{ "nand_ce1",		REG7,	6,	{ BOOT_9 }, 1 },
417*229af777Sjmcneill 	{ "nand_rb0",		REG7,	5,	{ BOOT_10 }, 1 },
418*229af777Sjmcneill 	{ "nand_ale",		REG7,	4,	{ BOOT_11 }, 1 },
419*229af777Sjmcneill 	{ "nand_cle",		REG7,	3,	{ BOOT_12 }, 1 },
420*229af777Sjmcneill 	{ "nand_wen_clk",	REG7,	2,	{ BOOT_13 }, 1 },
421*229af777Sjmcneill 	{ "nand_ren_wr",	REG7,	1,	{ BOOT_14 }, 1 },
422*229af777Sjmcneill 	{ "nand_dqs",		REG7,	0,	{ BOOT_15 }, 1 },
423*229af777Sjmcneill 
424*229af777Sjmcneill 	/* CARD */
425*229af777Sjmcneill 	{ "sdcard_d1",		REG6,	5,	{ CARD_0 }, 1 },
426*229af777Sjmcneill 	{ "sdcard_d0",		REG6,	4,	{ CARD_1 }, 1 },
427*229af777Sjmcneill 	{ "sdcard_d3",		REG6,	1,	{ CARD_4 }, 1 },
428*229af777Sjmcneill 	{ "sdcard_d2",		REG6,	0,	{ CARD_5 }, 1 },
429*229af777Sjmcneill 	{ "sdcard_cmd",		REG6,	2,	{ CARD_3 }, 1 },
430*229af777Sjmcneill 	{ "sdcard_clk",		REG6,	3,	{ CARD_2 }, 1 },
431*229af777Sjmcneill 
432*229af777Sjmcneill 	/* GPIOCLK */
433*229af777Sjmcneill 	{ "pwm_f_clk",		REG8,	30,	{ GPIOCLK_1 }, 1 },
434*229af777Sjmcneill };
435*229af777Sjmcneill 
436*229af777Sjmcneill static const struct meson_pinctrl_group mesongxl_aobus_groups[] = {
437*229af777Sjmcneill 	/* GPIOAO */
438*229af777Sjmcneill 	{ "uart_tx_ao_b_0",	AOREG0,	26,	{ GPIOAO_0 }, 1 },
439*229af777Sjmcneill 	{ "uart_rx_ao_b_1",	AOREG0,	25,	{ GPIOAO_1 }, 1 },
440*229af777Sjmcneill 	{ "uart_tx_ao_b",	AOREG0,	24,	{ GPIOAO_4 }, 1 },
441*229af777Sjmcneill 	{ "uart_rx_ao_b",	AOREG0,	23,	{ GPIOAO_5 }, 1 },
442*229af777Sjmcneill 	{ "uart_tx_ao_a",	AOREG0,	12,	{ GPIOAO_0 }, 1 },
443*229af777Sjmcneill 	{ "uart_rx_ao_a",	AOREG0,	11,	{ GPIOAO_1 }, 1 },
444*229af777Sjmcneill 	{ "uart_cts_ao_a",	AOREG0,	10,	{ GPIOAO_2 }, 1 },
445*229af777Sjmcneill 	{ "uart_rts_ao_a",	AOREG0,	9,	{ GPIOAO_3 }, 1 },
446*229af777Sjmcneill 	{ "uart_cts_ao_b",	AOREG0,	8,	{ GPIOAO_2 }, 1 },
447*229af777Sjmcneill 	{ "uart_rts_ao_b",	AOREG0,	7,	{ GPIOAO_3 }, 1 },
448*229af777Sjmcneill 	{ "i2c_sck_ao",		AOREG0,	6,	{ GPIOAO_4 }, 1 },
449*229af777Sjmcneill 	{ "i2c_sda_ao",		AOREG0,	5,	{ GPIOAO_5 }, 1 },
450*229af777Sjmcneill 	{ "i2c_slave_sck_ao",	AOREG0,	2,	{ GPIOAO_4 }, 1 },
451*229af777Sjmcneill 	{ "i2c_slave_sda_ao",	AOREG0,	1,	{ GPIOAO_5 }, 1 },
452*229af777Sjmcneill 	{ "remote_input_ao",	AOREG0,	0,	{ GPIOAO_7 }, 1 },
453*229af777Sjmcneill 	{ "pwm_ao_a_3",		AOREG0,	22,	{ GPIOAO_3 }, 1 },
454*229af777Sjmcneill 	{ "pwm_ao_b_6",		AOREG0,	18,	{ GPIOAO_6 }, 1 },
455*229af777Sjmcneill 	{ "pwm_ao_a_8",		AOREG0,	17,	{ GPIOAO_8 }, 1 },
456*229af777Sjmcneill 	{ "pwm_ao_b",		AOREG0,	3,	{ GPIOAO_9 }, 1 },
457*229af777Sjmcneill 	{ "i2s_out_ch23_ao",	AOREG1,	0,	{ GPIOAO_8 }, 1 },
458*229af777Sjmcneill 	{ "i2s_out_ch45_ao",	AOREG1,	1,	{ GPIOAO_9 }, 1 },
459*229af777Sjmcneill 	{ "spdif_out_ao_6",	AOREG0,	16,	{ GPIOAO_6 }, 1 },
460*229af777Sjmcneill 	{ "spdif_out_ao_9",	AOREG0,	4,	{ GPIOAO_9 }, 1 },
461*229af777Sjmcneill 	{ "ao_cec",		AOREG0,	15,	{ GPIOAO_8 }, 1 },
462*229af777Sjmcneill 	{ "ee_cec",		AOREG0,	14,	{ GPIOAO_8 }, 1 },
463*229af777Sjmcneill 
464*229af777Sjmcneill 	/* TEST_N */
465*229af777Sjmcneill 	{ "i2s_out_ch67_ao",	AOREG1,	2,	{ GPIO_TEST_N }, 1 },
466*229af777Sjmcneill 
467*229af777Sjmcneill };
468*229af777Sjmcneill 
469*229af777Sjmcneill const struct meson_pinctrl_config mesongxl_periphs_pinctrl_config = {
470*229af777Sjmcneill 	.name = "Meson GXL periphs GPIO",
471*229af777Sjmcneill 	.groups = mesongxl_periphs_groups,
472*229af777Sjmcneill 	.ngroups = __arraycount(mesongxl_periphs_groups),
473*229af777Sjmcneill 	.gpios = mesongxl_periphs_gpios,
474*229af777Sjmcneill 	.ngpios = __arraycount(mesongxl_periphs_gpios),
475*229af777Sjmcneill };
476*229af777Sjmcneill 
477*229af777Sjmcneill const struct meson_pinctrl_config mesongxl_aobus_pinctrl_config = {
478*229af777Sjmcneill 	.name = "Meson GXL AO GPIO",
479*229af777Sjmcneill 	.groups = mesongxl_aobus_groups,
480*229af777Sjmcneill 	.ngroups = __arraycount(mesongxl_aobus_groups),
481*229af777Sjmcneill 	.gpios = mesongxl_aobus_gpios,
482*229af777Sjmcneill 	.ngpios = __arraycount(mesongxl_aobus_gpios),
483*229af777Sjmcneill };
484