xref: /netbsd-src/sys/arch/arm/amlogic/mesongxbb_pinctrl.c (revision f0a26aab8960332982cdc1b4980dbbc24b5e9b25)
1*f0a26aabSjmcneill /* $NetBSD: mesongxbb_pinctrl.c,v 1.3 2021/11/17 11:31:12 jmcneill Exp $ */
27e38c880Sjmcneill 
37e38c880Sjmcneill /*-
47e38c880Sjmcneill  * Copyright (c) 2019 Jared McNeill <jmcneill@invisible.ca>
57e38c880Sjmcneill  * All rights reserved.
67e38c880Sjmcneill  *
77e38c880Sjmcneill  * Redistribution and use in source and binary forms, with or without
87e38c880Sjmcneill  * modification, are permitted provided that the following conditions
97e38c880Sjmcneill  * are met:
107e38c880Sjmcneill  * 1. Redistributions of source code must retain the above copyright
117e38c880Sjmcneill  *    notice, this list of conditions and the following disclaimer.
127e38c880Sjmcneill  * 2. Redistributions in binary form must reproduce the above copyright
137e38c880Sjmcneill  *    notice, this list of conditions and the following disclaimer in the
147e38c880Sjmcneill  *    documentation and/or other materials provided with the distribution.
157e38c880Sjmcneill  *
167e38c880Sjmcneill  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
177e38c880Sjmcneill  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
187e38c880Sjmcneill  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
197e38c880Sjmcneill  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
207e38c880Sjmcneill  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
217e38c880Sjmcneill  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
227e38c880Sjmcneill  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
237e38c880Sjmcneill  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
247e38c880Sjmcneill  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
257e38c880Sjmcneill  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
267e38c880Sjmcneill  * SUCH DAMAGE.
277e38c880Sjmcneill  */
287e38c880Sjmcneill 
297e38c880Sjmcneill #include <sys/cdefs.h>
30*f0a26aabSjmcneill __KERNEL_RCSID(0, "$NetBSD: mesongxbb_pinctrl.c,v 1.3 2021/11/17 11:31:12 jmcneill Exp $");
317e38c880Sjmcneill 
327e38c880Sjmcneill #include <sys/param.h>
337e38c880Sjmcneill 
347e38c880Sjmcneill #include <arm/amlogic/meson_pinctrl.h>
357e38c880Sjmcneill 
367e38c880Sjmcneill /* CBUS pinmux registers */
377e38c880Sjmcneill #define	CBUS_REG(n)	((n) << 2)
387e38c880Sjmcneill #define	REG0		CBUS_REG(0)
397e38c880Sjmcneill #define	REG1		CBUS_REG(1)
407e38c880Sjmcneill #define	REG2		CBUS_REG(2)
417e38c880Sjmcneill #define	REG3		CBUS_REG(3)
427e38c880Sjmcneill #define	REG4		CBUS_REG(4)
437e38c880Sjmcneill #define	REG5		CBUS_REG(5)
447e38c880Sjmcneill #define	REG6		CBUS_REG(6)
457e38c880Sjmcneill #define	REG7		CBUS_REG(7)
467e38c880Sjmcneill #define	REG8		CBUS_REG(8)
477e38c880Sjmcneill #define	REG9		CBUS_REG(9)
487e38c880Sjmcneill 
497e38c880Sjmcneill /* AO pinmux registers */
507e38c880Sjmcneill #define	AOREG0		0x00
517e38c880Sjmcneill #define	AOREG1		0x04
527e38c880Sjmcneill 
537e38c880Sjmcneill /*
547e38c880Sjmcneill  * GPIO banks. The values must match those in dt-bindings/gpio/meson-gxbb-gpio.h
557e38c880Sjmcneill  */
567e38c880Sjmcneill enum {
577e38c880Sjmcneill 	GPIOZ_0 = 0,
587e38c880Sjmcneill 	GPIOZ_1,
597e38c880Sjmcneill 	GPIOZ_2,
607e38c880Sjmcneill 	GPIOZ_3,
617e38c880Sjmcneill 	GPIOZ_4,
627e38c880Sjmcneill 	GPIOZ_5,
637e38c880Sjmcneill 	GPIOZ_6,
647e38c880Sjmcneill 	GPIOZ_7,
657e38c880Sjmcneill 	GPIOZ_8,
667e38c880Sjmcneill 	GPIOZ_9,
677e38c880Sjmcneill 	GPIOZ_10,
687e38c880Sjmcneill 	GPIOZ_11,
697e38c880Sjmcneill 	GPIOZ_12,
707e38c880Sjmcneill 	GPIOZ_13,
717e38c880Sjmcneill 	GPIOZ_14,
727e38c880Sjmcneill 	GPIOZ_15,
737e38c880Sjmcneill 
747e38c880Sjmcneill 	GPIOH_0 = 16,
757e38c880Sjmcneill 	GPIOH_1,
767e38c880Sjmcneill 	GPIOH_2,
777e38c880Sjmcneill 	GPIOH_3,
787e38c880Sjmcneill 
797e38c880Sjmcneill 	BOOT_0 = 20,
807e38c880Sjmcneill 	BOOT_1,
817e38c880Sjmcneill 	BOOT_2,
827e38c880Sjmcneill 	BOOT_3,
837e38c880Sjmcneill 	BOOT_4,
847e38c880Sjmcneill 	BOOT_5,
857e38c880Sjmcneill 	BOOT_6,
867e38c880Sjmcneill 	BOOT_7,
877e38c880Sjmcneill 	BOOT_8,
887e38c880Sjmcneill 	BOOT_9,
897e38c880Sjmcneill 	BOOT_10,
907e38c880Sjmcneill 	BOOT_11,
917e38c880Sjmcneill 	BOOT_12,
927e38c880Sjmcneill 	BOOT_13,
937e38c880Sjmcneill 	BOOT_14,
947e38c880Sjmcneill 	BOOT_15,
957e38c880Sjmcneill 	BOOT_16,
967e38c880Sjmcneill 	BOOT_17,
977e38c880Sjmcneill 
987e38c880Sjmcneill 	CARD_0 = 38,
997e38c880Sjmcneill 	CARD_1,
1007e38c880Sjmcneill 	CARD_2,
1017e38c880Sjmcneill 	CARD_3,
1027e38c880Sjmcneill 	CARD_4,
1037e38c880Sjmcneill 	CARD_5,
1047e38c880Sjmcneill 	CARD_6,
1057e38c880Sjmcneill 
1067e38c880Sjmcneill 	GPIODV_0 = 45,
1077e38c880Sjmcneill 	GPIODV_1,
1087e38c880Sjmcneill 	GPIODV_2,
1097e38c880Sjmcneill 	GPIODV_3,
1107e38c880Sjmcneill 	GPIODV_4,
1117e38c880Sjmcneill 	GPIODV_5,
1127e38c880Sjmcneill 	GPIODV_6,
1137e38c880Sjmcneill 	GPIODV_7,
1147e38c880Sjmcneill 	GPIODV_8,
1157e38c880Sjmcneill 	GPIODV_9,
1167e38c880Sjmcneill 	GPIODV_10,
1177e38c880Sjmcneill 	GPIODV_11,
1187e38c880Sjmcneill 	GPIODV_12,
1197e38c880Sjmcneill 	GPIODV_13,
1207e38c880Sjmcneill 	GPIODV_14,
1217e38c880Sjmcneill 	GPIODV_15,
1227e38c880Sjmcneill 	GPIODV_16,
1237e38c880Sjmcneill 	GPIODV_17,
1247e38c880Sjmcneill 	GPIODV_18,
1257e38c880Sjmcneill 	GPIODV_19,
1267e38c880Sjmcneill 	GPIODV_20,
1277e38c880Sjmcneill 	GPIODV_21,
1287e38c880Sjmcneill 	GPIODV_22,
1297e38c880Sjmcneill 	GPIODV_23,
1307e38c880Sjmcneill 	GPIODV_24,
1317e38c880Sjmcneill 	GPIODV_25,
1327e38c880Sjmcneill 	GPIODV_26,
1337e38c880Sjmcneill 	GPIODV_27,
1347e38c880Sjmcneill 	GPIODV_28,
1357e38c880Sjmcneill 	GPIODV_29,
1367e38c880Sjmcneill 
1377e38c880Sjmcneill 	GPIOY_0 = 75,
1387e38c880Sjmcneill 	GPIOY_1,
1397e38c880Sjmcneill 	GPIOY_2,
1407e38c880Sjmcneill 	GPIOY_3,
1417e38c880Sjmcneill 	GPIOY_4,
1427e38c880Sjmcneill 	GPIOY_5,
1437e38c880Sjmcneill 	GPIOY_6,
1447e38c880Sjmcneill 	GPIOY_7,
1457e38c880Sjmcneill 	GPIOY_8,
1467e38c880Sjmcneill 	GPIOY_9,
1477e38c880Sjmcneill 	GPIOY_10,
1487e38c880Sjmcneill 	GPIOY_11,
1497e38c880Sjmcneill 	GPIOY_12,
1507e38c880Sjmcneill 	GPIOY_13,
1517e38c880Sjmcneill 	GPIOY_14,
1527e38c880Sjmcneill 	GPIOY_15,
1537e38c880Sjmcneill 	GPIOY_16,
1547e38c880Sjmcneill 
1557e38c880Sjmcneill 	GPIOX_0 = 92,
1567e38c880Sjmcneill 	GPIOX_1,
1577e38c880Sjmcneill 	GPIOX_2,
1587e38c880Sjmcneill 	GPIOX_3,
1597e38c880Sjmcneill 	GPIOX_4,
1607e38c880Sjmcneill 	GPIOX_5,
1617e38c880Sjmcneill 	GPIOX_6,
1627e38c880Sjmcneill 	GPIOX_7,
1637e38c880Sjmcneill 	GPIOX_8,
1647e38c880Sjmcneill 	GPIOX_9,
1657e38c880Sjmcneill 	GPIOX_10,
1667e38c880Sjmcneill 	GPIOX_11,
1677e38c880Sjmcneill 	GPIOX_12,
1687e38c880Sjmcneill 	GPIOX_13,
1697e38c880Sjmcneill 	GPIOX_14,
1707e38c880Sjmcneill 	GPIOX_15,
1717e38c880Sjmcneill 	GPIOX_16,
1727e38c880Sjmcneill 	GPIOX_17,
1737e38c880Sjmcneill 	GPIOX_18,
1747e38c880Sjmcneill 	GPIOX_19,
1757e38c880Sjmcneill 	GPIOX_20,
1767e38c880Sjmcneill 	GPIOX_21,
1777e38c880Sjmcneill 	GPIOX_22,
1787e38c880Sjmcneill 
1797e38c880Sjmcneill 	GPIOCLK_0 = 115,
1807e38c880Sjmcneill 	GPIOCLK_1,
1817e38c880Sjmcneill 	GPIOCLK_2,
1827e38c880Sjmcneill 	GPIOCLK_3,
1837e38c880Sjmcneill 
1847e38c880Sjmcneill 	GPIOAO_0 = 0,
1857e38c880Sjmcneill 	GPIOAO_1,
1867e38c880Sjmcneill 	GPIOAO_2,
1877e38c880Sjmcneill 	GPIOAO_3,
1887e38c880Sjmcneill 	GPIOAO_4,
1897e38c880Sjmcneill 	GPIOAO_5,
1907e38c880Sjmcneill 	GPIOAO_6,
1917e38c880Sjmcneill 	GPIOAO_7,
1927e38c880Sjmcneill 	GPIOAO_8,
1937e38c880Sjmcneill 	GPIOAO_9,
1947e38c880Sjmcneill 	GPIOAO_10,
1957e38c880Sjmcneill 	GPIOAO_11,
1967e38c880Sjmcneill 	GPIOAO_12,
1977e38c880Sjmcneill 	GPIOAO_13,
1987e38c880Sjmcneill 	GPIO_TEST_N,
1997e38c880Sjmcneill };
2007e38c880Sjmcneill 
2017e38c880Sjmcneill #define	CBUS_GPIO(_id, _off, _bit)	\
2027e38c880Sjmcneill 	[_id] = {							\
2037e38c880Sjmcneill 		.id = (_id),						\
2047e38c880Sjmcneill 		.name = __STRING(_id),					\
2057e38c880Sjmcneill 		.oen = {						\
2067e38c880Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
2077e38c880Sjmcneill 			.reg = CBUS_REG((_off) * 3 + 0),		\
2087e38c880Sjmcneill 			.mask = __BIT(_bit)				\
2097e38c880Sjmcneill 		},							\
2107e38c880Sjmcneill 		.out = {						\
2117e38c880Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
2127e38c880Sjmcneill 			.reg = CBUS_REG((_off) * 3 + 1),		\
2137e38c880Sjmcneill 			.mask = __BIT(_bit)				\
2147e38c880Sjmcneill 		},							\
2157e38c880Sjmcneill 		.in = {							\
2167e38c880Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
2177e38c880Sjmcneill 			.reg = CBUS_REG((_off) * 3 + 2),		\
2187e38c880Sjmcneill 			.mask = __BIT(_bit)				\
2197e38c880Sjmcneill 		},							\
2207e38c880Sjmcneill 		.pupden = {						\
2217e38c880Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL_ENABLE,	\
2227e38c880Sjmcneill 			.reg = CBUS_REG(_off),				\
2237e38c880Sjmcneill 			.mask = __BIT(_bit)				\
2247e38c880Sjmcneill 		},							\
2257e38c880Sjmcneill 		.pupd = {						\
2267e38c880Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL,		\
2277e38c880Sjmcneill 			.reg = CBUS_REG(_off),				\
2287e38c880Sjmcneill 			.mask = __BIT(_bit)				\
2297e38c880Sjmcneill 		},							\
2307e38c880Sjmcneill 	}
2317e38c880Sjmcneill 
2327e38c880Sjmcneill static const struct meson_pinctrl_gpio mesongxbb_periphs_gpios[] = {
2337e38c880Sjmcneill 	/* GPIODV */
2347e38c880Sjmcneill 	CBUS_GPIO(GPIODV_0, 0, 0),
2357e38c880Sjmcneill 	CBUS_GPIO(GPIODV_1, 0, 1),
2367e38c880Sjmcneill 	CBUS_GPIO(GPIODV_2, 0, 2),
2377e38c880Sjmcneill 	CBUS_GPIO(GPIODV_3, 0, 3),
2387e38c880Sjmcneill 	CBUS_GPIO(GPIODV_4, 0, 4),
2397e38c880Sjmcneill 	CBUS_GPIO(GPIODV_5, 0, 5),
2407e38c880Sjmcneill 	CBUS_GPIO(GPIODV_6, 0, 6),
2417e38c880Sjmcneill 	CBUS_GPIO(GPIODV_7, 0, 7),
2427e38c880Sjmcneill 	CBUS_GPIO(GPIODV_8, 0, 8),
2437e38c880Sjmcneill 	CBUS_GPIO(GPIODV_9, 0, 9),
2447e38c880Sjmcneill 	CBUS_GPIO(GPIODV_10, 0, 10),
2457e38c880Sjmcneill 	CBUS_GPIO(GPIODV_11, 0, 11),
2467e38c880Sjmcneill 	CBUS_GPIO(GPIODV_12, 0, 12),
2477e38c880Sjmcneill 	CBUS_GPIO(GPIODV_13, 0, 13),
2487e38c880Sjmcneill 	CBUS_GPIO(GPIODV_14, 0, 14),
2497e38c880Sjmcneill 	CBUS_GPIO(GPIODV_15, 0, 15),
2507e38c880Sjmcneill 	CBUS_GPIO(GPIODV_16, 0, 16),
2517e38c880Sjmcneill 	CBUS_GPIO(GPIODV_17, 0, 17),
2527e38c880Sjmcneill 	CBUS_GPIO(GPIODV_18, 0, 18),
2537e38c880Sjmcneill 	CBUS_GPIO(GPIODV_19, 0, 19),
2547e38c880Sjmcneill 	CBUS_GPIO(GPIODV_20, 0, 20),
2557e38c880Sjmcneill 	CBUS_GPIO(GPIODV_21, 0, 21),
2567e38c880Sjmcneill 	CBUS_GPIO(GPIODV_22, 0, 22),
2577e38c880Sjmcneill 
258dce61c1fSjmcneill 	/* GPIOY */
259dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_0, 1, 0),
260dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_1, 1, 1),
261dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_2, 1, 2),
262dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_3, 1, 3),
263dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_4, 1, 4),
264dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_5, 1, 5),
265dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_6, 1, 6),
266dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_7, 1, 7),
267dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_8, 1, 8),
268dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_9, 1, 9),
269dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_10, 1, 10),
270dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_11, 1, 11),
271dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_12, 1, 12),
272dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_13, 1, 13),
273dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_14, 1, 14),
274dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_15, 1, 15),
275dce61c1fSjmcneill 	CBUS_GPIO(GPIOY_16, 1, 16),
276dce61c1fSjmcneill 
2777e38c880Sjmcneill 	/* GPIOH */
278dce61c1fSjmcneill 	CBUS_GPIO(GPIOH_0, 1, 20),
279dce61c1fSjmcneill 	CBUS_GPIO(GPIOH_1, 1, 21),
280dce61c1fSjmcneill 	CBUS_GPIO(GPIOH_2, 1, 22),
281dce61c1fSjmcneill 	CBUS_GPIO(GPIOH_3, 1, 23),
2827e38c880Sjmcneill 
2837e38c880Sjmcneill 	/* BOOT */
2847e38c880Sjmcneill 	CBUS_GPIO(BOOT_0, 2, 0),
2857e38c880Sjmcneill 	CBUS_GPIO(BOOT_1, 2, 1),
2867e38c880Sjmcneill 	CBUS_GPIO(BOOT_2, 2, 2),
2877e38c880Sjmcneill 	CBUS_GPIO(BOOT_3, 2, 3),
2887e38c880Sjmcneill 	CBUS_GPIO(BOOT_4, 2, 4),
2897e38c880Sjmcneill 	CBUS_GPIO(BOOT_5, 2, 5),
2907e38c880Sjmcneill 	CBUS_GPIO(BOOT_6, 2, 6),
2917e38c880Sjmcneill 	CBUS_GPIO(BOOT_7, 2, 7),
2927e38c880Sjmcneill 	CBUS_GPIO(BOOT_8, 2, 8),
2937e38c880Sjmcneill 	CBUS_GPIO(BOOT_9, 2, 9),
2947e38c880Sjmcneill 	CBUS_GPIO(BOOT_10, 2, 10),
2957e38c880Sjmcneill 	CBUS_GPIO(BOOT_11, 2, 11),
2967e38c880Sjmcneill 	CBUS_GPIO(BOOT_12, 2, 12),
2977e38c880Sjmcneill 	CBUS_GPIO(BOOT_13, 2, 13),
2987e38c880Sjmcneill 	CBUS_GPIO(BOOT_14, 2, 14),
2997e38c880Sjmcneill 	CBUS_GPIO(BOOT_15, 2, 15),
3007e38c880Sjmcneill 	CBUS_GPIO(BOOT_16, 2, 16),
3017e38c880Sjmcneill 	CBUS_GPIO(BOOT_17, 2, 17),
3027e38c880Sjmcneill 
3037e38c880Sjmcneill 	/* CARD */
3047e38c880Sjmcneill 	CBUS_GPIO(CARD_0, 2, 20),
3057e38c880Sjmcneill 	CBUS_GPIO(CARD_1, 2, 21),
3067e38c880Sjmcneill 	CBUS_GPIO(CARD_2, 2, 22),
3077e38c880Sjmcneill 	CBUS_GPIO(CARD_3, 2, 23),
3087e38c880Sjmcneill 	CBUS_GPIO(CARD_4, 2, 24),
3097e38c880Sjmcneill 	CBUS_GPIO(CARD_5, 2, 25),
3107e38c880Sjmcneill 	CBUS_GPIO(CARD_6, 2, 26),
3117e38c880Sjmcneill 
312*f0a26aabSjmcneill 	/* GPIOZ */
313*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_0, 3, 0),
314*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_1, 3, 1),
315*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_2, 3, 2),
316*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_3, 3, 3),
317*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_4, 3, 4),
318*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_5, 3, 5),
319*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_6, 3, 6),
320*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_7, 3, 7),
321*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_8, 3, 8),
322*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_9, 3, 9),
323*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_10, 3, 10),
324*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_11, 3, 11),
325*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_12, 3, 12),
326*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_13, 3, 13),
327*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_14, 3, 14),
328*f0a26aabSjmcneill 	CBUS_GPIO(GPIOZ_15, 3, 15),
329*f0a26aabSjmcneill 
330*f0a26aabSjmcneill 	/* CLK */
3317e38c880Sjmcneill 	CBUS_GPIO(GPIOCLK_0, 3, 28),
3327e38c880Sjmcneill 	CBUS_GPIO(GPIOCLK_1, 3, 29),
3337e38c880Sjmcneill 	CBUS_GPIO(GPIOCLK_2, 3, 30),
3347e38c880Sjmcneill 	CBUS_GPIO(GPIOCLK_3, 3, 31),
3357e38c880Sjmcneill 
3367e38c880Sjmcneill 	/* GPIOX */
3377e38c880Sjmcneill 	CBUS_GPIO(GPIOX_0, 4, 0),
3387e38c880Sjmcneill 	CBUS_GPIO(GPIOX_1, 4, 1),
3397e38c880Sjmcneill 	CBUS_GPIO(GPIOX_2, 4, 2),
3407e38c880Sjmcneill 	CBUS_GPIO(GPIOX_3, 4, 3),
3417e38c880Sjmcneill 	CBUS_GPIO(GPIOX_4, 4, 4),
3427e38c880Sjmcneill 	CBUS_GPIO(GPIOX_5, 4, 5),
3437e38c880Sjmcneill 	CBUS_GPIO(GPIOX_6, 4, 6),
3447e38c880Sjmcneill 	CBUS_GPIO(GPIOX_7, 4, 7),
3457e38c880Sjmcneill 	CBUS_GPIO(GPIOX_8, 4, 8),
3467e38c880Sjmcneill 	CBUS_GPIO(GPIOX_9, 4, 9),
3477e38c880Sjmcneill 	CBUS_GPIO(GPIOX_10, 4, 10),
3487e38c880Sjmcneill 	CBUS_GPIO(GPIOX_11, 4, 11),
3497e38c880Sjmcneill 	CBUS_GPIO(GPIOX_12, 4, 12),
3507e38c880Sjmcneill 	CBUS_GPIO(GPIOX_13, 4, 13),
3517e38c880Sjmcneill 	CBUS_GPIO(GPIOX_14, 4, 14),
3527e38c880Sjmcneill 	CBUS_GPIO(GPIOX_15, 4, 15),
3537e38c880Sjmcneill 	CBUS_GPIO(GPIOX_16, 4, 16),
3547e38c880Sjmcneill 	CBUS_GPIO(GPIOX_17, 4, 17),
3557e38c880Sjmcneill 	CBUS_GPIO(GPIOX_18, 4, 18),
3567e38c880Sjmcneill 	CBUS_GPIO(GPIOX_19, 4, 19),
3577e38c880Sjmcneill 	CBUS_GPIO(GPIOX_20, 4, 20),
3587e38c880Sjmcneill 	CBUS_GPIO(GPIOX_21, 4, 21),
3597e38c880Sjmcneill 	CBUS_GPIO(GPIOX_22, 4, 22),
3607e38c880Sjmcneill };
3617e38c880Sjmcneill 
3627e38c880Sjmcneill #define	AO_GPIO(_id, _bit)						\
3637e38c880Sjmcneill 	[_id] = {							\
3647e38c880Sjmcneill 		.id = (_id),						\
3657e38c880Sjmcneill 		.name = __STRING(_id),					\
3667e38c880Sjmcneill 		.oen = {						\
3677e38c880Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
3687e38c880Sjmcneill 			.reg = 0,					\
3697e38c880Sjmcneill 			.mask = __BIT(_bit)				\
3707e38c880Sjmcneill 		},							\
3717e38c880Sjmcneill 		.out = {						\
3727e38c880Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
3737e38c880Sjmcneill 			.reg = 0,					\
3747e38c880Sjmcneill 			.mask = __BIT(_bit + 16)			\
3757e38c880Sjmcneill 		},							\
3767e38c880Sjmcneill 		.in = {							\
3777e38c880Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
3787e38c880Sjmcneill 			.reg = 4,					\
3797e38c880Sjmcneill 			.mask = __BIT(_bit)				\
3807e38c880Sjmcneill 		},							\
3817e38c880Sjmcneill 		.pupden = {						\
3827e38c880Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL,		\
3837e38c880Sjmcneill 			.reg = 0,					\
3847e38c880Sjmcneill 			.mask = __BIT(_bit)				\
3857e38c880Sjmcneill 		},							\
3867e38c880Sjmcneill 		.pupd = {						\
3877e38c880Sjmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL,		\
3887e38c880Sjmcneill 			.reg = 0,					\
3897e38c880Sjmcneill 			.mask = __BIT(_bit + 16)			\
3907e38c880Sjmcneill 		},							\
3917e38c880Sjmcneill 	}
3927e38c880Sjmcneill 
3937e38c880Sjmcneill static const struct meson_pinctrl_gpio mesongxbb_aobus_gpios[] = {
3947e38c880Sjmcneill 	/* GPIOAO */
3957e38c880Sjmcneill 	AO_GPIO(GPIOAO_0, 0),
3967e38c880Sjmcneill 	AO_GPIO(GPIOAO_1, 1),
3977e38c880Sjmcneill 	AO_GPIO(GPIOAO_2, 2),
3987e38c880Sjmcneill 	AO_GPIO(GPIOAO_3, 3),
3997e38c880Sjmcneill 	AO_GPIO(GPIOAO_4, 4),
4007e38c880Sjmcneill 	AO_GPIO(GPIOAO_5, 5),
4017e38c880Sjmcneill 	AO_GPIO(GPIOAO_6, 6),
4027e38c880Sjmcneill 	AO_GPIO(GPIOAO_7, 7),
4037e38c880Sjmcneill 	AO_GPIO(GPIOAO_8, 8),
4047e38c880Sjmcneill 	AO_GPIO(GPIOAO_9, 9),
4057e38c880Sjmcneill 	AO_GPIO(GPIOAO_10, 10),
4067e38c880Sjmcneill 	AO_GPIO(GPIOAO_11, 11),
4077e38c880Sjmcneill 	AO_GPIO(GPIOAO_12, 12),
4087e38c880Sjmcneill 	AO_GPIO(GPIOAO_13, 13),
4097e38c880Sjmcneill };
4107e38c880Sjmcneill 
4117e38c880Sjmcneill static const struct meson_pinctrl_group mesongxbb_periphs_groups[] = {
4127e38c880Sjmcneill 	/* GPIOX */
4137e38c880Sjmcneill 	{ "sdio_d0",		REG8,	5,	{ GPIOX_0 }, 1 },
4147e38c880Sjmcneill 	{ "sdio_d1",		REG8,	4,	{ GPIOX_1 }, 1 },
4157e38c880Sjmcneill 	{ "sdio_d2",		REG8,	3,	{ GPIOX_2 }, 1 },
4167e38c880Sjmcneill 	{ "sdio_d3",		REG8,	2,	{ GPIOX_3 }, 1 },
4177e38c880Sjmcneill 	{ "sdio_cmd",		REG8,	1,	{ GPIOX_4 }, 1 },
4187e38c880Sjmcneill 	{ "sdio_clk",		REG8,	0,	{ GPIOX_5 }, 1 },
4197e38c880Sjmcneill 	{ "sdio_irq",		REG8,	11,	{ GPIOX_7 }, 1 },
4207e38c880Sjmcneill 	{ "uart_tx_a",		REG4,	13,	{ GPIOX_12 }, 1 },
4217e38c880Sjmcneill 	{ "uart_rx_a",		REG4,	12,	{ GPIOX_13 }, 1 },
4227e38c880Sjmcneill 	{ "uart_cts_a",		REG4,	11,	{ GPIOX_14 }, 1 },
4237e38c880Sjmcneill 	{ "uart_rts_a",		REG4,	10,	{ GPIOX_15 }, 1 },
4247e38c880Sjmcneill 	{ "pwm_a_x",		REG3,	17,	{ GPIOX_6 }, 1 },
4257e38c880Sjmcneill 	{ "pwm_e",		REG2,	30,	{ GPIOX_19 }, 1 },
4267e38c880Sjmcneill 	{ "pwm_f_x",		REG3,	18,	{ GPIOX_7 }, 1 },
4277e38c880Sjmcneill 
4287e38c880Sjmcneill 	/* GPIOY */
4297e38c880Sjmcneill 	{ "uart_cts_c",		REG1,	19,	{ GPIOY_11 }, 1 },
4307e38c880Sjmcneill 	{ "uart_rts_c",		REG1,	18,	{ GPIOY_12 }, 1 },
4317e38c880Sjmcneill 	{ "uart_tx_c",		REG1,	17,	{ GPIOY_13 }, 1 },
4327e38c880Sjmcneill 	{ "uart_rx_c",		REG1,	16,	{ GPIOY_14 }, 1 },
4337e38c880Sjmcneill 	{ "pwm_a_y",		REG1,	21,	{ GPIOY_16 }, 1 },
4347e38c880Sjmcneill 	{ "pwm_f_y",		REG1,	20,	{ GPIOY_15 }, 1 },
4357e38c880Sjmcneill 	{ "i2s_out_ch23_y",	REG1,	5,	{ GPIOY_8 }, 1 },
4367e38c880Sjmcneill 	{ "i2s_out_ch45_y",	REG1,	6,	{ GPIOY_9 }, 1 },
4377e38c880Sjmcneill 	{ "i2s_out_ch67_y",	REG1,	7,	{ GPIOY_10 }, 1 },
4387e38c880Sjmcneill 	{ "spdif_out_y",	REG1,	9,	{ GPIOY_12 }, 1 },
4397e38c880Sjmcneill 	{ "gen_clk_out",	REG6,	15,	{ GPIOY_15 }, 1 },
4407e38c880Sjmcneill 
4417e38c880Sjmcneill 	/* GPIOZ */
4427e38c880Sjmcneill 	{ "eth_mdio",		REG6,	1,	{ GPIOZ_0 }, 1 },
4437e38c880Sjmcneill 	{ "eth_mdc",		REG6,	0,	{ GPIOZ_1 }, 1 },
4447e38c880Sjmcneill 	{ "eth_clk_rx_clk",	REG6,	13,	{ GPIOZ_2 }, 1 },
4457e38c880Sjmcneill 	{ "eth_rx_dv",		REG6,	12,	{ GPIOZ_3 }, 1 },
4467e38c880Sjmcneill 	{ "eth_rxd0",		REG6,	11,	{ GPIOZ_4 }, 1 },
4477e38c880Sjmcneill 	{ "eth_rxd1",		REG6,	10,	{ GPIOZ_5 }, 1 },
4487e38c880Sjmcneill 	{ "eth_rxd2",		REG6,	9,	{ GPIOZ_6 }, 1 },
4497e38c880Sjmcneill 	{ "eth_rxd3",		REG6,	8,	{ GPIOZ_7 }, 1 },
4507e38c880Sjmcneill 	{ "eth_rgmii_tx_clk",	REG6,	7,	{ GPIOZ_8 }, 1 },
4517e38c880Sjmcneill 	{ "eth_tx_en",		REG6,	6,	{ GPIOZ_9 }, 1 },
4527e38c880Sjmcneill 	{ "eth_txd0",		REG6,	5,	{ GPIOZ_10 }, 1 },
4537e38c880Sjmcneill 	{ "eth_txd1",		REG6,	4,	{ GPIOZ_11 }, 1 },
4547e38c880Sjmcneill 	{ "eth_txd2",		REG6,	3,	{ GPIOZ_12 }, 1 },
4557e38c880Sjmcneill 	{ "eth_txd3",		REG6,	2,	{ GPIOZ_13 }, 1 },
4567e38c880Sjmcneill 	{ "spi_ss0",		REG5,	26,	{ GPIOZ_7 }, 1 },
4577e38c880Sjmcneill 	{ "spi_sclk",		REG5,	27,	{ GPIOZ_6 }, 1 },
4587e38c880Sjmcneill 	{ "spi_miso",		REG5,	28,	{ GPIOZ_12 }, 1 },
4597e38c880Sjmcneill 	{ "spi_mosi",		REG5,	29,	{ GPIOZ_13 }, 1 },
4607e38c880Sjmcneill 
4617e38c880Sjmcneill 	/* GPIOH */
4627e38c880Sjmcneill 	{ "hdmi_hpd",		REG1,	26,	{ GPIOH_0 }, 1 },
4637e38c880Sjmcneill 	{ "hdmi_sda",		REG1,	25,	{ GPIOH_1 }, 1 },
4647e38c880Sjmcneill 	{ "hdmi_scl",		REG1,	24,	{ GPIOH_2 }, 1 },
4657e38c880Sjmcneill 
4667e38c880Sjmcneill 	/* GPIODV */
4677e38c880Sjmcneill 	{ "uart_tx_b",		REG2,	29,	{ GPIODV_24 }, 1 },
4687e38c880Sjmcneill 	{ "uart_rx_b",		REG2,	28,	{ GPIODV_25 }, 1 },
4697e38c880Sjmcneill 	{ "uart_cts_b",		REG2,	27,	{ GPIODV_26 }, 1 },
4707e38c880Sjmcneill 	{ "uart_rts_b",		REG2,	26,	{ GPIODV_27 }, 1 },
4717e38c880Sjmcneill 	{ "pwm_b",		REG3,	21,	{ GPIODV_29 }, 1 },
4727e38c880Sjmcneill 	{ "pwm_d",		REG3,	20,	{ GPIODV_28 }, 1 },
4737e38c880Sjmcneill 	{ "i2c_sck_a",		REG7,	27,	{ GPIODV_25 }, 1 },
4747e38c880Sjmcneill 	{ "i2c_sda_a",		REG7,	26,	{ GPIODV_24 }, 1 },
4757e38c880Sjmcneill 	{ "i2c_sck_b",		REG7,	25,	{ GPIODV_27 }, 1 },
4767e38c880Sjmcneill 	{ "i2c_sda_b",		REG7,	24,	{ GPIODV_26 }, 1 },
4777e38c880Sjmcneill 	{ "i2c_sck_c",		REG7,	23,	{ GPIODV_29 }, 1 },
4787e38c880Sjmcneill 	{ "i2c_sda_c",		REG7,	22,	{ GPIODV_28 }, 1 },
4797e38c880Sjmcneill 
4807e38c880Sjmcneill 	/* BOOT */
4817e38c880Sjmcneill 	{ "emmc_nand_d07",	REG4,	30,	{ BOOT_0, BOOT_1, BOOT_2, BOOT_3, BOOT_4, BOOT_5, BOOT_6, BOOT_7 }, 8 },
4827e38c880Sjmcneill 	{ "emmc_clk",		REG4,	18,	{ BOOT_8 }, 1 },
4837e38c880Sjmcneill 	{ "emmc_cmd",		REG4,	19,	{ BOOT_10 }, 1 },
4847e38c880Sjmcneill 	{ "emmc_ds",		REG4,	31,	{ BOOT_15 }, 1 },
4857e38c880Sjmcneill 	{ "nor_d",		REG5,	1,	{ BOOT_11 }, 1 },
4867e38c880Sjmcneill 	{ "nor_q",		REG5,	3,	{ BOOT_12 }, 1 },
4877e38c880Sjmcneill 	{ "nor_c",		REG5,	2,	{ BOOT_13 }, 1 },
4887e38c880Sjmcneill 	{ "nor_cs",		REG5,	0,	{ BOOT_15 }, 1 },
4897e38c880Sjmcneill 	{ "nand_ce0",		REG4,	26,	{ BOOT_8 }, 1 },
4907e38c880Sjmcneill 	{ "nand_ce1",		REG4,	27,	{ BOOT_9 }, 1 },
4917e38c880Sjmcneill 	{ "nand_rb0",		REG4,	25,	{ BOOT_10 }, 1 },
4927e38c880Sjmcneill 	{ "nand_ale",		REG4,	24,	{ BOOT_11 }, 1 },
4937e38c880Sjmcneill 	{ "nand_cle",		REG4,	23,	{ BOOT_12 }, 1 },
4947e38c880Sjmcneill 	{ "nand_wen_clk",	REG4,	22,	{ BOOT_13 }, 1 },
4957e38c880Sjmcneill 	{ "nand_ren_wr",	REG4,	21,	{ BOOT_14 }, 1 },
4967e38c880Sjmcneill 	{ "nand_dqs",		REG4,	20,	{ BOOT_15 }, 1 },
4977e38c880Sjmcneill 
4987e38c880Sjmcneill 	/* CARD */
4997e38c880Sjmcneill 	{ "sdcard_d1",		REG2,	14,	{ CARD_0 }, 1 },
5007e38c880Sjmcneill 	{ "sdcard_d0",		REG2,	15,	{ CARD_1 }, 1 },
5017e38c880Sjmcneill 	{ "sdcard_d3",		REG2,	12,	{ CARD_4 }, 1 },
5027e38c880Sjmcneill 	{ "sdcard_d2",		REG2,	13,	{ CARD_5 }, 1 },
5037e38c880Sjmcneill 	{ "sdcard_cmd",		REG2,	10,	{ CARD_3 }, 1 },
5047e38c880Sjmcneill 	{ "sdcard_clk",		REG2,	11,	{ CARD_2 }, 1 },
5057e38c880Sjmcneill };
5067e38c880Sjmcneill 
5077e38c880Sjmcneill static const struct meson_pinctrl_group mesongxbb_aobus_groups[] = {
5087e38c880Sjmcneill 	/* GPIOAO */
5097e38c880Sjmcneill 	{ "uart_tx_ao_b",	AOREG0,	24,	{ GPIOAO_4 }, 1 },
5107e38c880Sjmcneill 	{ "uart_rx_ao_b",	AOREG0,	25,	{ GPIOAO_5 }, 1 },
5117e38c880Sjmcneill 	{ "uart_tx_ao_a",	AOREG0,	12,	{ GPIOAO_0 }, 1 },
5127e38c880Sjmcneill 	{ "uart_rx_ao_a",	AOREG0,	11,	{ GPIOAO_1 }, 1 },
5137e38c880Sjmcneill 	{ "uart_cts_ao_a",	AOREG0,	10,	{ GPIOAO_2 }, 1 },
5147e38c880Sjmcneill 	{ "uart_rts_ao_a",	AOREG0,	9,	{ GPIOAO_3 }, 1 },
5157e38c880Sjmcneill 	{ "uart_cts_ao_b",	AOREG0,	8,	{ GPIOAO_2 }, 1 },
5167e38c880Sjmcneill 	{ "uart_rts_ao_b",	AOREG0,	7,	{ GPIOAO_3 }, 1 },
5177e38c880Sjmcneill 	{ "i2c_sck_ao",		AOREG0,	6,	{ GPIOAO_4 }, 1 },
5187e38c880Sjmcneill 	{ "i2c_sda_ao",		AOREG0,	5,	{ GPIOAO_5 }, 1 },
5197e38c880Sjmcneill 	{ "i2c_slave_sck_ao",	AOREG0,	2,	{ GPIOAO_4 }, 1 },
5207e38c880Sjmcneill 	{ "i2c_slave_sda_ao",	AOREG0,	1,	{ GPIOAO_5 }, 1 },
5217e38c880Sjmcneill 	{ "remote_input_ao",	AOREG0,	0,	{ GPIOAO_7 }, 1 },
5227e38c880Sjmcneill 	{ "pwm_ao_a_3",		AOREG0,	22,	{ GPIOAO_3 }, 1 },
5237e38c880Sjmcneill 	{ "pwm_ao_a_6",		AOREG0,	18,	{ GPIOAO_6 }, 1 },
5247e38c880Sjmcneill 	{ "pwm_ao_a_12",	AOREG0,	17,	{ GPIOAO_12 }, 1 },
5257e38c880Sjmcneill 	{ "pwm_ao_b",		AOREG0,	3,	{ GPIOAO_13 }, 1 },
5267e38c880Sjmcneill 	{ "i2s_am_clk",		AOREG0,	30,	{ GPIOAO_8 }, 1 },
5277e38c880Sjmcneill 	{ "i2s_out_ao_clk",	AOREG0,	29,	{ GPIOAO_9 }, 1 },
5287e38c880Sjmcneill 	{ "i2s_out_lr_clk",	AOREG0,	28,	{ GPIOAO_10 }, 1 },
5297e38c880Sjmcneill 	{ "i2s_out_ch01_ao",	AOREG0,	27,	{ GPIOAO_11 }, 1 },
5307e38c880Sjmcneill 	{ "i2s_out_ch23_ao",	AOREG1,	0,	{ GPIOAO_12 }, 1 },
5317e38c880Sjmcneill 	{ "i2s_out_ch45_ao",	AOREG1,	1,	{ GPIOAO_13 }, 1 },
5327e38c880Sjmcneill 	{ "spdif_out_ao_6",	AOREG0,	16,	{ GPIOAO_6 }, 1 },
5337e38c880Sjmcneill 	{ "spdif_out_ao_13",	AOREG0,	4,	{ GPIOAO_13 }, 1 },
5347e38c880Sjmcneill 	{ "ao_cec",		AOREG0,	15,	{ GPIOAO_12 }, 1 },
5357e38c880Sjmcneill 	{ "ee_cec",		AOREG0,	14,	{ GPIOAO_12 }, 1 },
5367e38c880Sjmcneill 
5377e38c880Sjmcneill 	/* TEST_N */
5387e38c880Sjmcneill 	{ "i2s_out_ch67_ao",	AOREG1,	2,	{ GPIO_TEST_N }, 1 },
5397e38c880Sjmcneill 
5407e38c880Sjmcneill };
5417e38c880Sjmcneill 
5427e38c880Sjmcneill const struct meson_pinctrl_config mesongxbb_periphs_pinctrl_config = {
5437e38c880Sjmcneill 	.name = "Meson GXBB periphs GPIO",
5447e38c880Sjmcneill 	.groups = mesongxbb_periphs_groups,
5457e38c880Sjmcneill 	.ngroups = __arraycount(mesongxbb_periphs_groups),
5467e38c880Sjmcneill 	.gpios = mesongxbb_periphs_gpios,
5477e38c880Sjmcneill 	.ngpios = __arraycount(mesongxbb_periphs_gpios),
5487e38c880Sjmcneill };
5497e38c880Sjmcneill 
5507e38c880Sjmcneill const struct meson_pinctrl_config mesongxbb_aobus_pinctrl_config = {
5517e38c880Sjmcneill 	.name = "Meson GXBB AO GPIO",
5527e38c880Sjmcneill 	.groups = mesongxbb_aobus_groups,
5537e38c880Sjmcneill 	.ngroups = __arraycount(mesongxbb_aobus_groups),
5547e38c880Sjmcneill 	.gpios = mesongxbb_aobus_gpios,
5557e38c880Sjmcneill 	.ngpios = __arraycount(mesongxbb_aobus_gpios),
5567e38c880Sjmcneill };
557