Home | History | Annotate | Line # | Download | only in amlogic
      1  1.3     brook /* $NetBSD: meson8b_pinctrl.c,v 1.3 2022/06/23 03:36:00 brook Exp $ */
      2  1.1  jmcneill 
      3  1.1  jmcneill /*-
      4  1.1  jmcneill  * Copyright (c) 2019 Jared McNeill <jmcneill (at) invisible.ca>
      5  1.1  jmcneill  * All rights reserved.
      6  1.1  jmcneill  *
      7  1.1  jmcneill  * Redistribution and use in source and binary forms, with or without
      8  1.1  jmcneill  * modification, are permitted provided that the following conditions
      9  1.1  jmcneill  * are met:
     10  1.1  jmcneill  * 1. Redistributions of source code must retain the above copyright
     11  1.1  jmcneill  *    notice, this list of conditions and the following disclaimer.
     12  1.1  jmcneill  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  jmcneill  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  jmcneill  *    documentation and/or other materials provided with the distribution.
     15  1.1  jmcneill  *
     16  1.1  jmcneill  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     17  1.1  jmcneill  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     18  1.1  jmcneill  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     19  1.1  jmcneill  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     20  1.1  jmcneill  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     21  1.1  jmcneill  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     22  1.1  jmcneill  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     23  1.1  jmcneill  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     24  1.1  jmcneill  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     25  1.1  jmcneill  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     26  1.1  jmcneill  * SUCH DAMAGE.
     27  1.1  jmcneill  */
     28  1.1  jmcneill 
     29  1.1  jmcneill #include <sys/cdefs.h>
     30  1.3     brook __KERNEL_RCSID(0, "$NetBSD: meson8b_pinctrl.c,v 1.3 2022/06/23 03:36:00 brook Exp $");
     31  1.1  jmcneill 
     32  1.1  jmcneill #include <sys/param.h>
     33  1.1  jmcneill 
     34  1.1  jmcneill #include <arm/amlogic/meson_pinctrl.h>
     35  1.1  jmcneill 
     36  1.1  jmcneill /* CBUS pinmux registers */
     37  1.1  jmcneill #define	CBUS_REG(n)	((n) << 2)
     38  1.1  jmcneill #define	REG0		CBUS_REG(0)
     39  1.1  jmcneill #define	REG1		CBUS_REG(1)
     40  1.1  jmcneill #define	REG2		CBUS_REG(2)
     41  1.1  jmcneill #define	REG3		CBUS_REG(3)
     42  1.1  jmcneill #define	REG4		CBUS_REG(4)
     43  1.1  jmcneill #define	REG5		CBUS_REG(5)
     44  1.1  jmcneill #define	REG6		CBUS_REG(6)
     45  1.1  jmcneill #define	REG7		CBUS_REG(7)
     46  1.1  jmcneill #define	REG8		CBUS_REG(8)
     47  1.1  jmcneill #define	REG9		CBUS_REG(9)
     48  1.1  jmcneill 
     49  1.1  jmcneill /* AO pinmux registers */
     50  1.1  jmcneill #define	REG		0x00
     51  1.1  jmcneill 
     52  1.1  jmcneill /*
     53  1.1  jmcneill  * GPIO banks. The values must match those in dt-bindings/gpio/meson8b-gpio.h
     54  1.1  jmcneill  */
     55  1.1  jmcneill enum {
     56  1.1  jmcneill 	GPIOX_0 = 0,
     57  1.1  jmcneill 	GPIOX_1,
     58  1.1  jmcneill 	GPIOX_2,
     59  1.1  jmcneill 	GPIOX_3,
     60  1.1  jmcneill 	GPIOX_4,
     61  1.1  jmcneill 	GPIOX_5,
     62  1.1  jmcneill 	GPIOX_6,
     63  1.1  jmcneill 	GPIOX_7,
     64  1.1  jmcneill 	GPIOX_8,
     65  1.1  jmcneill 	GPIOX_9,
     66  1.1  jmcneill 	GPIOX_10,
     67  1.1  jmcneill 	GPIOX_11,
     68  1.1  jmcneill 	GPIOX_16,
     69  1.1  jmcneill 	GPIOX_17,
     70  1.1  jmcneill 	GPIOX_18,
     71  1.1  jmcneill 	GPIOX_19,
     72  1.1  jmcneill 	GPIOX_20,
     73  1.1  jmcneill 	GPIOX_21,
     74  1.1  jmcneill 
     75  1.1  jmcneill 	GPIOY_0 = 18,
     76  1.1  jmcneill 	GPIOY_1,
     77  1.1  jmcneill 	GPIOY_3,
     78  1.1  jmcneill 	GPIOY_6,
     79  1.1  jmcneill 	GPIOY_7,
     80  1.1  jmcneill 	GPIOY_8,
     81  1.1  jmcneill 	GPIOY_9,
     82  1.1  jmcneill 	GPIOY_10,
     83  1.1  jmcneill 	GPIOY_11,
     84  1.1  jmcneill 	GPIOY_12,
     85  1.1  jmcneill 	GPIOY_13,
     86  1.1  jmcneill 	GPIOY_14,
     87  1.1  jmcneill 
     88  1.1  jmcneill 	GPIODV_9 = 30,
     89  1.1  jmcneill 	GPIODV_24,
     90  1.1  jmcneill 	GPIODV_25,
     91  1.1  jmcneill 	GPIODV_26,
     92  1.1  jmcneill 	GPIODV_27,
     93  1.1  jmcneill 	GPIODV_28,
     94  1.1  jmcneill 	GPIODV_29,
     95  1.1  jmcneill 
     96  1.1  jmcneill 	GPIOH_0 = 37,
     97  1.1  jmcneill 	GPIOH_1,
     98  1.1  jmcneill 	GPIOH_2,
     99  1.1  jmcneill 	GPIOH_3,
    100  1.1  jmcneill 	GPIOH_4,
    101  1.1  jmcneill 	GPIOH_5,
    102  1.1  jmcneill 	GPIOH_6,
    103  1.1  jmcneill 	GPIOH_7,
    104  1.1  jmcneill 	GPIOH_8,
    105  1.1  jmcneill 	GPIOH_9,
    106  1.1  jmcneill 
    107  1.1  jmcneill 	CARD_0 = 47,
    108  1.1  jmcneill 	CARD_1,
    109  1.1  jmcneill 	CARD_2,
    110  1.1  jmcneill 	CARD_3,
    111  1.1  jmcneill 	CARD_4,
    112  1.1  jmcneill 	CARD_5,
    113  1.1  jmcneill 	CARD_6,
    114  1.1  jmcneill 
    115  1.1  jmcneill 	BOOT_0 = 54,
    116  1.1  jmcneill 	BOOT_1,
    117  1.1  jmcneill 	BOOT_2,
    118  1.1  jmcneill 	BOOT_3,
    119  1.1  jmcneill 	BOOT_4,
    120  1.1  jmcneill 	BOOT_5,
    121  1.1  jmcneill 	BOOT_6,
    122  1.1  jmcneill 	BOOT_7,
    123  1.1  jmcneill 	BOOT_8,
    124  1.1  jmcneill 	BOOT_9,
    125  1.1  jmcneill 	BOOT_10,
    126  1.1  jmcneill 	BOOT_11,
    127  1.1  jmcneill 	BOOT_12,
    128  1.1  jmcneill 	BOOT_13,
    129  1.1  jmcneill 	BOOT_14,
    130  1.1  jmcneill 	BOOT_15,
    131  1.1  jmcneill 	BOOT_18,
    132  1.1  jmcneill 
    133  1.1  jmcneill 	DIF_0_P = 73,
    134  1.1  jmcneill 	DIF_0_N,
    135  1.1  jmcneill 	DIF_1_P,
    136  1.1  jmcneill 	DIF_1_N,
    137  1.1  jmcneill 	DIF_2_P,
    138  1.1  jmcneill 	DIF_2_N,
    139  1.1  jmcneill 	DIF_3_P,
    140  1.1  jmcneill 	DIF_3_N,
    141  1.1  jmcneill 	DIF_4_P,
    142  1.1  jmcneill 	DIF_4_N,
    143  1.1  jmcneill 
    144  1.1  jmcneill 	GPIOAO_0 = 0,
    145  1.1  jmcneill 	GPIOAO_1,
    146  1.1  jmcneill 	GPIOAO_2,
    147  1.1  jmcneill 	GPIOAO_3,
    148  1.1  jmcneill 	GPIOAO_4,
    149  1.1  jmcneill 	GPIOAO_5,
    150  1.1  jmcneill 	GPIOAO_6,
    151  1.1  jmcneill 	GPIOAO_7,
    152  1.1  jmcneill 	GPIOAO_8,
    153  1.1  jmcneill 	GPIOAO_9,
    154  1.1  jmcneill 	GPIOAO_10,
    155  1.1  jmcneill 	GPIOAO_11,
    156  1.1  jmcneill 	GPIOAO_12,
    157  1.1  jmcneill 	GPIOAO_13,
    158  1.1  jmcneill 	GPIO_BSD_EN,
    159  1.1  jmcneill 	GPIO_TEST_N,
    160  1.1  jmcneill };
    161  1.1  jmcneill 
    162  1.1  jmcneill #define	CBUS_GPIO(_id, _gpiobase, _gpiobit, _pullbase, _pullbit)	\
    163  1.1  jmcneill 	[_id] = {							\
    164  1.1  jmcneill 		.id = (_id),						\
    165  1.1  jmcneill 		.name = __STRING(_id),					\
    166  1.1  jmcneill 		.oen = {						\
    167  1.1  jmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
    168  1.1  jmcneill 			.reg = CBUS_REG((_gpiobase) + 0),		\
    169  1.1  jmcneill 			.mask = __BIT(_gpiobit)				\
    170  1.1  jmcneill 		},							\
    171  1.1  jmcneill 		.out = {						\
    172  1.1  jmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
    173  1.1  jmcneill 			.reg = CBUS_REG((_gpiobase) + 1),		\
    174  1.1  jmcneill 			.mask = __BIT(_gpiobit)				\
    175  1.1  jmcneill 		},							\
    176  1.1  jmcneill 		.in = {							\
    177  1.1  jmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
    178  1.1  jmcneill 			.reg = CBUS_REG((_gpiobase) + 2),		\
    179  1.1  jmcneill 			.mask = __BIT(_gpiobit)				\
    180  1.1  jmcneill 		},							\
    181  1.1  jmcneill 		.pupden = {						\
    182  1.1  jmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL_ENABLE,	\
    183  1.1  jmcneill 			.reg = CBUS_REG(_pullbase),			\
    184  1.1  jmcneill 			.mask = __BIT(_pullbit)				\
    185  1.1  jmcneill 		},							\
    186  1.1  jmcneill 		.pupd = {						\
    187  1.1  jmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL,		\
    188  1.1  jmcneill 			.reg = CBUS_REG(_pullbase),			\
    189  1.1  jmcneill 			.mask = __BIT(_pullbit)				\
    190  1.1  jmcneill 		},							\
    191  1.1  jmcneill 	}
    192  1.1  jmcneill 
    193  1.1  jmcneill static const struct meson_pinctrl_gpio meson8b_cbus_gpios[] = {
    194  1.1  jmcneill 	/* GPIOX */
    195  1.1  jmcneill 	CBUS_GPIO(GPIOX_0, 0, 0, 4, 0),
    196  1.1  jmcneill 	CBUS_GPIO(GPIOX_1, 0, 1, 4, 1),
    197  1.1  jmcneill 	CBUS_GPIO(GPIOX_2, 0, 2, 4, 2),
    198  1.1  jmcneill 	CBUS_GPIO(GPIOX_3, 0, 3, 4, 3),
    199  1.1  jmcneill 	CBUS_GPIO(GPIOX_4, 0, 4, 4, 4),
    200  1.1  jmcneill 	CBUS_GPIO(GPIOX_5, 0, 5, 4, 5),
    201  1.1  jmcneill 	CBUS_GPIO(GPIOX_6, 0, 6, 4, 6),
    202  1.1  jmcneill 	CBUS_GPIO(GPIOX_7, 0, 7, 4, 7),
    203  1.1  jmcneill 	CBUS_GPIO(GPIOX_8, 0, 8, 4, 8),
    204  1.1  jmcneill 	CBUS_GPIO(GPIOX_9, 0, 9, 4, 9),
    205  1.1  jmcneill 	CBUS_GPIO(GPIOX_10, 0, 10, 4, 10),
    206  1.1  jmcneill 	CBUS_GPIO(GPIOX_11, 0, 11, 4, 11),
    207  1.1  jmcneill 	CBUS_GPIO(GPIOX_16, 0, 16, 4, 16),
    208  1.1  jmcneill 	CBUS_GPIO(GPIOX_17, 0, 17, 4, 17),
    209  1.1  jmcneill 	CBUS_GPIO(GPIOX_18, 0, 18, 4, 18),
    210  1.1  jmcneill 	CBUS_GPIO(GPIOX_19, 0, 19, 4, 19),
    211  1.1  jmcneill 	CBUS_GPIO(GPIOX_20, 0, 20, 4, 20),
    212  1.1  jmcneill 	CBUS_GPIO(GPIOX_21, 0, 21, 4, 21),
    213  1.1  jmcneill 
    214  1.1  jmcneill 	/* GPIOY */
    215  1.1  jmcneill 	CBUS_GPIO(GPIOY_0, 3, 0, 3, 0),
    216  1.1  jmcneill 	CBUS_GPIO(GPIOY_1, 3, 1, 3, 1),
    217  1.1  jmcneill 	CBUS_GPIO(GPIOY_3, 3, 3, 3, 3),
    218  1.1  jmcneill 	CBUS_GPIO(GPIOY_6, 3, 6, 3, 6),
    219  1.1  jmcneill 	CBUS_GPIO(GPIOY_7, 3, 7, 3, 7),
    220  1.1  jmcneill 	CBUS_GPIO(GPIOY_8, 3, 8, 3, 8),
    221  1.1  jmcneill 	CBUS_GPIO(GPIOY_9, 3, 9, 3, 9),
    222  1.1  jmcneill 	CBUS_GPIO(GPIOY_10, 3, 10, 3, 10),
    223  1.1  jmcneill 	CBUS_GPIO(GPIOY_11, 3, 11, 3, 11),
    224  1.1  jmcneill 	CBUS_GPIO(GPIOY_12, 3, 12, 3, 12),
    225  1.1  jmcneill 	CBUS_GPIO(GPIOY_13, 3, 13, 3, 13),
    226  1.1  jmcneill 	CBUS_GPIO(GPIOY_14, 3, 14, 3, 14),
    227  1.1  jmcneill 
    228  1.1  jmcneill 	/* GPIODV */
    229  1.3     brook 	CBUS_GPIO(GPIODV_9, 6, 9, 0, 9),
    230  1.1  jmcneill 	CBUS_GPIO(GPIODV_24, 6, 24, 0, 24),
    231  1.1  jmcneill 	CBUS_GPIO(GPIODV_25, 6, 25, 0, 25),
    232  1.1  jmcneill 	CBUS_GPIO(GPIODV_26, 6, 26, 0, 26),
    233  1.1  jmcneill 	CBUS_GPIO(GPIODV_27, 6, 27, 0, 27),
    234  1.1  jmcneill 	CBUS_GPIO(GPIODV_28, 6, 28, 0, 28),
    235  1.1  jmcneill 	CBUS_GPIO(GPIODV_29, 6, 29, 0, 29),
    236  1.1  jmcneill 
    237  1.1  jmcneill 	/* GPIOH */
    238  1.1  jmcneill 	CBUS_GPIO(GPIOH_0, 9, 19, 1, 16),
    239  1.1  jmcneill 	CBUS_GPIO(GPIOH_1, 9, 20, 1, 17),
    240  1.1  jmcneill 	CBUS_GPIO(GPIOH_2, 9, 21, 1, 18),
    241  1.1  jmcneill 	CBUS_GPIO(GPIOH_3, 9, 22, 1, 19),
    242  1.1  jmcneill 	CBUS_GPIO(GPIOH_4, 9, 23, 1, 20),
    243  1.1  jmcneill 	CBUS_GPIO(GPIOH_5, 9, 24, 1, 21),
    244  1.1  jmcneill 	CBUS_GPIO(GPIOH_6, 9, 25, 1, 22),
    245  1.1  jmcneill 	CBUS_GPIO(GPIOH_7, 9, 26, 1, 23),
    246  1.1  jmcneill 	CBUS_GPIO(GPIOH_8, 9, 27, 1, 24),
    247  1.1  jmcneill 	CBUS_GPIO(GPIOH_9, 9, 28, 1, 25),
    248  1.1  jmcneill 
    249  1.1  jmcneill 	/* BOOT */
    250  1.1  jmcneill 	CBUS_GPIO(BOOT_0, 9, 0, 2, 0),
    251  1.1  jmcneill 	CBUS_GPIO(BOOT_1, 9, 1, 2, 1),
    252  1.1  jmcneill 	CBUS_GPIO(BOOT_2, 9, 2, 2, 2),
    253  1.1  jmcneill 	CBUS_GPIO(BOOT_3, 9, 3, 2, 3),
    254  1.1  jmcneill 	CBUS_GPIO(BOOT_4, 9, 4, 2, 4),
    255  1.1  jmcneill 	CBUS_GPIO(BOOT_5, 9, 5, 2, 5),
    256  1.1  jmcneill 	CBUS_GPIO(BOOT_6, 9, 6, 2, 6),
    257  1.1  jmcneill 	CBUS_GPIO(BOOT_7, 9, 7, 2, 7),
    258  1.1  jmcneill 	CBUS_GPIO(BOOT_8, 9, 8, 2, 8),
    259  1.1  jmcneill 	CBUS_GPIO(BOOT_9, 9, 9, 2, 9),
    260  1.1  jmcneill 	CBUS_GPIO(BOOT_10, 9, 10, 2, 10),
    261  1.1  jmcneill 	CBUS_GPIO(BOOT_11, 9, 11, 2, 11),
    262  1.1  jmcneill 	CBUS_GPIO(BOOT_12, 9, 12, 2, 12),
    263  1.1  jmcneill 	CBUS_GPIO(BOOT_13, 9, 13, 2, 13),
    264  1.1  jmcneill 	CBUS_GPIO(BOOT_14, 9, 14, 2, 14),
    265  1.1  jmcneill 	CBUS_GPIO(BOOT_15, 9, 15, 2, 15),
    266  1.1  jmcneill 	CBUS_GPIO(BOOT_18, 9, 18, 2, 18),
    267  1.1  jmcneill 
    268  1.1  jmcneill 	/* CARD */
    269  1.1  jmcneill 	CBUS_GPIO(CARD_0, 0, 22, 2, 20),
    270  1.1  jmcneill 	CBUS_GPIO(CARD_1, 0, 23, 2, 21),
    271  1.1  jmcneill 	CBUS_GPIO(CARD_2, 0, 24, 2, 22),
    272  1.1  jmcneill 	CBUS_GPIO(CARD_3, 0, 25, 2, 23),
    273  1.1  jmcneill 	CBUS_GPIO(CARD_4, 0, 26, 2, 24),
    274  1.1  jmcneill 	CBUS_GPIO(CARD_5, 0, 27, 2, 25),
    275  1.1  jmcneill 	CBUS_GPIO(CARD_6, 0, 28, 2, 26),
    276  1.1  jmcneill };
    277  1.1  jmcneill 
    278  1.1  jmcneill #define	AO_GPIO(_id, _bit)						\
    279  1.1  jmcneill 	[_id] = {							\
    280  1.1  jmcneill 		.id = (_id),						\
    281  1.1  jmcneill 		.name = __STRING(_id),					\
    282  1.1  jmcneill 		.oen = {						\
    283  1.1  jmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
    284  1.1  jmcneill 			.reg = 0,					\
    285  1.1  jmcneill 			.mask = __BIT(_bit)				\
    286  1.1  jmcneill 		},							\
    287  1.1  jmcneill 		.out = {						\
    288  1.1  jmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
    289  1.1  jmcneill 			.reg = 0,					\
    290  1.1  jmcneill 			.mask = __BIT(_bit + 16)			\
    291  1.1  jmcneill 		},							\
    292  1.1  jmcneill 		.in = {							\
    293  1.1  jmcneill 			.type = MESON_PINCTRL_REGTYPE_GPIO,		\
    294  1.1  jmcneill 			.reg = 4,					\
    295  1.1  jmcneill 			.mask = __BIT(_bit)				\
    296  1.1  jmcneill 		},							\
    297  1.1  jmcneill 		.pupden = {						\
    298  1.1  jmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL,		\
    299  1.1  jmcneill 			.reg = 0,					\
    300  1.1  jmcneill 			.mask = __BIT(_bit)				\
    301  1.1  jmcneill 		},							\
    302  1.1  jmcneill 		.pupd = {						\
    303  1.1  jmcneill 			.type = MESON_PINCTRL_REGTYPE_PULL,		\
    304  1.1  jmcneill 			.reg = 0,					\
    305  1.1  jmcneill 			.mask = __BIT(_bit + 16)			\
    306  1.1  jmcneill 		},							\
    307  1.1  jmcneill 	}
    308  1.1  jmcneill 
    309  1.1  jmcneill static const struct meson_pinctrl_gpio meson8b_aobus_gpios[] = {
    310  1.1  jmcneill 	/* GPIOAO */
    311  1.1  jmcneill 	AO_GPIO(GPIOAO_0, 0),
    312  1.1  jmcneill 	AO_GPIO(GPIOAO_1, 1),
    313  1.1  jmcneill 	AO_GPIO(GPIOAO_2, 2),
    314  1.1  jmcneill 	AO_GPIO(GPIOAO_3, 3),
    315  1.1  jmcneill 	AO_GPIO(GPIOAO_4, 4),
    316  1.1  jmcneill 	AO_GPIO(GPIOAO_5, 5),
    317  1.1  jmcneill 	AO_GPIO(GPIOAO_6, 6),
    318  1.1  jmcneill 	AO_GPIO(GPIOAO_7, 7),
    319  1.1  jmcneill 	AO_GPIO(GPIOAO_8, 8),
    320  1.1  jmcneill 	AO_GPIO(GPIOAO_9, 9),
    321  1.1  jmcneill 	AO_GPIO(GPIOAO_10, 10),
    322  1.1  jmcneill 	AO_GPIO(GPIOAO_11, 11),
    323  1.1  jmcneill 	AO_GPIO(GPIOAO_12, 12),
    324  1.1  jmcneill 	AO_GPIO(GPIOAO_13, 13),
    325  1.1  jmcneill };
    326  1.1  jmcneill 
    327  1.1  jmcneill static const struct meson_pinctrl_group meson8b_cbus_groups[] = {
    328  1.1  jmcneill 	/* GPIOX */
    329  1.1  jmcneill 	{ "sd_d0_a",		REG8,	5,	{ GPIOX_0 }, 1 },
    330  1.1  jmcneill 	{ "sd_d1_a",		REG8,	4,	{ GPIOX_1 }, 1 },
    331  1.1  jmcneill 	{ "sd_d2_a",		REG8,	3,	{ GPIOX_2 }, 1 },
    332  1.1  jmcneill 	{ "sd_d3_a",		REG8,	2,	{ GPIOX_3 }, 1 },
    333  1.1  jmcneill 	{ "sdxc_d0_0_a",	REG5,	29,	{ GPIOX_4 }, 1 },
    334  1.1  jmcneill 	{ "sdxc_d47_a",		REG5,	12,	{ GPIOX_4, GPIOX_5, GPIOX_6, GPIOX_7 }, 4 },
    335  1.1  jmcneill 	{ "sdxc_d13_0_a",	REG5,	28,	{ GPIOX_5, GPIOX_6, GPIOX_7 }, 3 },
    336  1.1  jmcneill 	{ "sd_clk_a",		REG8,	1,	{ GPIOX_8 }, 1 },
    337  1.1  jmcneill 	{ "sd_cmd_a",		REG8,	0,	{ GPIOX_9 }, 1 },
    338  1.1  jmcneill 	{ "xtal_32k_out",	REG3,	22,	{ GPIOX_10 }, 1 },
    339  1.1  jmcneill 	{ "xtal_24m_out",	REG3,	20,	{ GPIOX_11 }, 1 },
    340  1.1  jmcneill 	{ "uart_tx_b0",		REG4,	9,	{ GPIOX_16 }, 1 },
    341  1.1  jmcneill 	{ "uart_rx_b0",		REG4,	8,	{ GPIOX_17 }, 1 },
    342  1.1  jmcneill 	{ "uart_cts_b0",	REG4,	7,	{ GPIOX_18 }, 1 },
    343  1.1  jmcneill 	{ "uart_rts_b0",	REG4,	6,	{ GPIOX_19 }, 1 },
    344  1.1  jmcneill 	{ "sdxc_d0_1_a",	REG5,	14,	{ GPIOX_0 }, 1 },
    345  1.1  jmcneill 	{ "sdxc_d13_1_a",	REG5,	13,	{ GPIOX_1, GPIOX_2, GPIOX_3 }, 3 },
    346  1.1  jmcneill 	{ "pcm_out_a",		REG3,	30,	{ GPIOX_4 }, 1 },
    347  1.1  jmcneill 	{ "pcm_in_a",		REG3,	29,	{ GPIOX_5 }, 1 },
    348  1.1  jmcneill 	{ "pcm_fs_a",		REG3,	28,	{ GPIOX_6 }, 1 },
    349  1.1  jmcneill 	{ "pcm_clk_a",		REG3,	27,	{ GPIOX_7 }, 1 },
    350  1.1  jmcneill 	{ "sdxc_clk_a",		REG5,	11,	{ GPIOX_8 }, 1 },
    351  1.1  jmcneill 	{ "sdxc_cmd_a",		REG5,	10,	{ GPIOX_9 }, 1 },
    352  1.1  jmcneill 	{ "pwm_vs_0",		REG7,	31,	{ GPIOX_10 }, 1 },
    353  1.1  jmcneill 	{ "pwm_e",		REG9,	19,	{ GPIOX_10 }, 1 },
    354  1.1  jmcneill 	{ "pwm_vs_1",		REG7,	30,	{ GPIOX_11 }, 1 },
    355  1.1  jmcneill 	{ "uart_tx_a",		REG4,	17,	{ GPIOX_4 }, 1 },
    356  1.1  jmcneill 	{ "uart_rx_a",		REG4,	16,	{ GPIOX_5 }, 1 },
    357  1.1  jmcneill 	{ "uart_cts_a",		REG4,	15,	{ GPIOX_6 }, 1 },
    358  1.1  jmcneill 	{ "uart_rts_a",		REG4,	14,	{ GPIOX_7 }, 1 },
    359  1.1  jmcneill 	{ "uart_tx_b1",		REG6,	19,	{ GPIOX_8 }, 1 },
    360  1.1  jmcneill 	{ "uart_rx_b1",		REG6,	18,	{ GPIOX_9 }, 1 },
    361  1.1  jmcneill 	{ "uart_cts_b1",	REG6,	17,	{ GPIOX_10 }, 1 },
    362  1.1  jmcneill 	{ "uart_rts_b1",	REG6,	16,	{ GPIOX_20 }, 1 },
    363  1.1  jmcneill 	{ "iso7816_0_clk",	REG5,	9,	{ GPIOX_6 }, 1 },
    364  1.1  jmcneill 	{ "iso7816_0_data",	REG5,	8,	{ GPIOX_7 }, 1 },
    365  1.1  jmcneill 	{ "spi_sclk_0",		REG4,	22,	{ GPIOX_8 }, 1 },
    366  1.1  jmcneill 	{ "spi_miso_0",		REG4,	24,	{ GPIOX_9 }, 1 },
    367  1.1  jmcneill 	{ "spi_mosi_0",		REG4,	23,	{ GPIOX_10 }, 1 },
    368  1.1  jmcneill 	{ "iso7816_det",	REG4,	21,	{ GPIOX_16 }, 1 },
    369  1.1  jmcneill 	{ "iso7816_reset",	REG4,	20,	{ GPIOX_17 }, 1 },
    370  1.1  jmcneill 	{ "iso7816_1_clk",	REG4,	19,	{ GPIOX_18 }, 1 },
    371  1.1  jmcneill 	{ "iso7816_1_data",	REG4,	18,	{ GPIOX_19 }, 1 },
    372  1.1  jmcneill 	{ "spi_ss0_0",		REG4,	25,	{ GPIOX_20 }, 1 },
    373  1.1  jmcneill 	{ "tsin_clk_b",		REG3,	6,	{ GPIOX_8 }, 1 },
    374  1.1  jmcneill 	{ "tsin_sop_b",		REG3,	7,	{ GPIOX_9 }, 1 },
    375  1.1  jmcneill 	{ "tsin_d0_b",		REG3,	8,	{ GPIOX_10 }, 1 },
    376  1.1  jmcneill 	{ "pwm_b",		REG2,	3,	{ GPIOX_11 }, 1 },
    377  1.1  jmcneill 	{ "i2c_sda_d0",		REG4,	5,	{ GPIOX_16 }, 1 },
    378  1.1  jmcneill 	{ "i2c_sck_d0",		REG4,	4,	{ GPIOX_17 }, 1 },
    379  1.1  jmcneill 	{ "tsin_d_valid_b",	REG3,	9,	{ GPIOX_20 }, 1 },
    380  1.1  jmcneill 
    381  1.1  jmcneill 	/* GPIOY */
    382  1.1  jmcneill 	{ "tsin_d_valid_a",	REG3,	2,	{ GPIOY_0 }, 1},
    383  1.1  jmcneill 	{ "tsin_sop_a",		REG3,	1,	{ GPIOY_1 }, 1 },
    384  1.1  jmcneill 	{ "tsin_d17_a",		REG3,	5,	{ GPIOY_6, GPIOY_7, GPIOY_10, GPIOY_11, GPIOY_12, GPIOY_13, GPIOY_14 }, 8 },
    385  1.1  jmcneill 	{ "tsin_clk_a",		REG3,	0,	{ GPIOY_8 }, 1 },
    386  1.1  jmcneill 	{ "tsin_d0_a",		REG3,	4,	{ GPIOY_9 }, 1 },
    387  1.1  jmcneill 	{ "spdif_out_0",	REG1,	7,	{ GPIOY_3 }, 1 },
    388  1.1  jmcneill 	{ "xtal_24m",		REG3,	18,	{ GPIOY_3 }, 1 },
    389  1.1  jmcneill 	{ "iso7816_2_clk",	REG5,	7,	{ GPIOY_13 }, 1 },
    390  1.1  jmcneill 	{ "iso7816_2_data",	REG5,	6,	{ GPIOY_14 }, 1 },
    391  1.1  jmcneill 
    392  1.1  jmcneill 	/* GPIODV */
    393  1.1  jmcneill 	{ "pwm_d",		REG3,	26,	{ GPIODV_28 }, 1 },
    394  1.1  jmcneill 	{ "pwm_c0",		REG3,	25,	{ GPIODV_29 }, 1 },
    395  1.1  jmcneill 	{ "pwm_vs_2",		REG7,	28,	{ GPIODV_9 }, 1 },
    396  1.1  jmcneill 	{ "pwm_vs_3",		REG7,	27,	{ GPIODV_28 }, 1 },
    397  1.1  jmcneill 	{ "pwm_vs_4",		REG7,	26,	{ GPIODV_29 }, 1 },
    398  1.1  jmcneill 	{ "xtal24_out",		REG7,	25,	{ GPIODV_29 }, 1 },
    399  1.1  jmcneill 	{ "uart_tx_c",		REG6,	23,	{ GPIODV_24 }, 1 },
    400  1.1  jmcneill 	{ "uart_rx_c",		REG6,	22,	{ GPIODV_25 }, 1 },
    401  1.1  jmcneill 	{ "uart_cts_c",		REG6,	21,	{ GPIODV_26 }, 1 },
    402  1.1  jmcneill 	{ "uart_rts_c",		REG6,	20,	{ GPIODV_27 }, 1 },
    403  1.1  jmcneill 	{ "pwm_c1",		REG3,	24,	{ GPIODV_9 }, 1 },
    404  1.1  jmcneill 	{ "i2c_sda_a",		REG9,	31,	{ GPIODV_24 }, 1 },
    405  1.1  jmcneill 	{ "i2c_sck_a",		REG9,	30,	{ GPIODV_25 }, 1 },
    406  1.1  jmcneill 	{ "i2c_sda_b0",		REG9,	29,	{ GPIODV_26 }, 1 },
    407  1.1  jmcneill 	{ "i2c_sck_b0",		REG9,	28,	{ GPIODV_27 }, 1 },
    408  1.1  jmcneill 	{ "i2c_sda_c0",		REG9,	27,	{ GPIODV_28 }, 1 },
    409  1.1  jmcneill 	{ "i2c_sck_c0",		REG9,	26,	{ GPIODV_29 }, 1 },
    410  1.1  jmcneill 
    411  1.1  jmcneill 	/* GPIOH */
    412  1.1  jmcneill 	{ "hdmi_hpd",		REG1,	26,	{ GPIOH_0 }, 1 },
    413  1.1  jmcneill 	{ "hdmi_sda",		REG1,	25,	{ GPIOH_1 }, 1 },
    414  1.1  jmcneill 	{ "hdmi_scl",		REG1,	24,	{ GPIOH_2 }, 1 },
    415  1.1  jmcneill 	{ "hdmi_cec_0",		REG1,	23,	{ GPIOH_3 }, 1 },
    416  1.1  jmcneill 	{ "eth_txd1_0",		REG7,	21,	{ GPIOH_5 }, 1 },
    417  1.1  jmcneill 	{ "eth_txd0_0",		REG7,	20,	{ GPIOH_6 }, 1 },
    418  1.1  jmcneill 	{ "clk_24m_out",	REG4,	1,	{ GPIOH_9 }, 1 },
    419  1.1  jmcneill 	{ "spi_ss1",		REG8,	11,	{ GPIOH_0 }, 1 },
    420  1.1  jmcneill 	{ "spi_ss2",		REG8,	12,	{ GPIOH_1 }, 1 },
    421  1.1  jmcneill 	{ "spi_ss0_1",		REG9,	13,	{ GPIOH_3 }, 1 },
    422  1.1  jmcneill 	{ "spi_miso_1",		REG9,	12,	{ GPIOH_4 }, 1 },
    423  1.1  jmcneill 	{ "spi_mosi_1",		REG9,	11,	{ GPIOH_5 }, 1 },
    424  1.1  jmcneill 	{ "spi_sclk_1",		REG9,	10,	{ GPIOH_6 }, 1 },
    425  1.1  jmcneill 	{ "eth_txd3",		REG6,	13,	{ GPIOH_7 }, 1 },
    426  1.1  jmcneill 	{ "eth_txd2",		REG6,	12,	{ GPIOH_8 }, 1 },
    427  1.1  jmcneill 	{ "eth_tx_clk",		REG6,	11,	{ GPIOH_9 }, 1 },
    428  1.1  jmcneill 	{ "i2c_sda_b1",		REG5,	27,	{ GPIOH_3 }, 1 },
    429  1.1  jmcneill 	{ "i2c_sck_b1",		REG5,	26,	{ GPIOH_4 }, 1 },
    430  1.1  jmcneill 	{ "i2c_sda_c1",		REG5,	25,	{ GPIOH_5 }, 1 },
    431  1.1  jmcneill 	{ "i2c_sck_c1",		REG5,	24,	{ GPIOH_6 }, 1 },
    432  1.1  jmcneill 	{ "i2c_sda_d1",		REG4,	3,	{ GPIOH_7 }, 1 },
    433  1.1  jmcneill 	{ "i2c_sck_d1",		REG4,	2,	{ GPIOH_8 }, 1 },
    434  1.1  jmcneill 
    435  1.1  jmcneill 	/* BOOT */
    436  1.1  jmcneill 	{ "nand_io",		REG2,	26,	{ BOOT_0, BOOT_1, BOOT_2, BOOT_3, BOOT_4, BOOT_5, BOOT_6, BOOT_7 }, 8 },
    437  1.1  jmcneill 	{ "nand_io_ce0",	REG2,	25,	{ BOOT_8 }, 1 },
    438  1.1  jmcneill 	{ "nand_io_ce1",	REG2,	24,	{ BOOT_9 }, 1 },
    439  1.1  jmcneill 	{ "nand_io_rb0",	REG2,	17,	{ BOOT_10 }, 1 },
    440  1.1  jmcneill 	{ "nand_ale",		REG2,	21,	{ BOOT_11 }, 1 },
    441  1.1  jmcneill 	{ "nand_cle",		REG2,	20,	{ BOOT_12 }, 1 },
    442  1.1  jmcneill 	{ "nand_wen_clk",	REG2,	19,	{ BOOT_13 }, 1 },
    443  1.1  jmcneill 	{ "nand_ren_clk",	REG2,	18,	{ BOOT_14 }, 1 },
    444  1.1  jmcneill 	{ "nand_dqs_15",	REG2,	27,	{ BOOT_15 }, 1 },
    445  1.1  jmcneill 	{ "nand_dqs_18",	REG2,	28,	{ BOOT_18 }, 1 },
    446  1.1  jmcneill 	{ "sdxc_d0_c",		REG4,	30,	{ BOOT_0 }, 1 },
    447  1.1  jmcneill 	{ "sdxc_d13_c",		REG4,	29,	{ BOOT_1, BOOT_2, BOOT_3 }, 3 },
    448  1.1  jmcneill 	{ "sdxc_d47_c",		REG4,	28,	{ BOOT_4, BOOT_5, BOOT_6, BOOT_7 }, 4 },
    449  1.1  jmcneill 	{ "sdxc_clk_c",		REG7,	19,	{ BOOT_8 }, 1 },
    450  1.1  jmcneill 	{ "sdxc_cmd_c",		REG7,	18,	{ BOOT_10 }, 1 },
    451  1.1  jmcneill 	{ "nor_d",		REG5,	1,	{ BOOT_11 }, 1 },
    452  1.1  jmcneill 	{ "nor_q",		REG5,	3,	{ BOOT_12 }, 1 },
    453  1.1  jmcneill 	{ "nor_c",		REG5,	2,	{ BOOT_13 }, 1 },
    454  1.1  jmcneill 	{ "nor_cs",		REG5,	0,	{ BOOT_18 }, 1 },
    455  1.1  jmcneill 	{ "sd_d0_c",		REG6,	29,	{ BOOT_0 }, 1 },
    456  1.1  jmcneill 	{ "sd_d1_c",		REG6,	28,	{ BOOT_1 }, 1 },
    457  1.1  jmcneill 	{ "sd_d2_c",		REG6,	27,	{ BOOT_2 }, 1 },
    458  1.1  jmcneill 	{ "sd_d3_c",		REG6,	26,	{ BOOT_3 }, 1 },
    459  1.1  jmcneill 	{ "sd_cmd_c",		REG6,	30,	{ BOOT_8 }, 1 },
    460  1.1  jmcneill 	{ "sd_clk_c",		REG6,	31,	{ BOOT_10 }, 1 },
    461  1.1  jmcneill 
    462  1.1  jmcneill 	/* CARD */
    463  1.1  jmcneill 	{ "sd_d1_b",		REG2,	14,	{ CARD_0 }, 1 },
    464  1.1  jmcneill 	{ "sd_d0_b",		REG2,	15,	{ CARD_1 }, 1 },
    465  1.1  jmcneill 	{ "sd_clk_b",		REG2,	11,	{ CARD_2 }, 1 },
    466  1.1  jmcneill 	{ "sd_cmd_b",		REG2,	10,	{ CARD_3 }, 1 },
    467  1.1  jmcneill 	{ "sd_d3_b",		REG2,	12,	{ CARD_4 }, 1 },
    468  1.1  jmcneill 	{ "sd_d2_b",		REG2,	13,	{ CARD_5 }, 1 },
    469  1.1  jmcneill 	{ "sdxc_d13_b",		REG2,	6,	{ CARD_0, CARD_4, CARD_5 }, 3 },
    470  1.1  jmcneill 	{ "sdxc_d0_b",		REG2,	7,	{ CARD_1 }, 1 },
    471  1.1  jmcneill 	{ "sdxc_clk_b",		REG2,	5,	{ CARD_2 }, 1 },
    472  1.1  jmcneill 	{ "sdxc_cmd_b",		REG2,	4,	{ CARD_3 }, 1 },
    473  1.1  jmcneill 
    474  1.1  jmcneill 	/* DIF */
    475  1.1  jmcneill 	{ "eth_rxd1",		REG6,	0,	{ DIF_0_P }, 1 },
    476  1.1  jmcneill 	{ "eth_rxd0",		REG6,	1,	{ DIF_0_N }, 1 },
    477  1.1  jmcneill 	{ "eth_rx_dv",		REG6,	2,	{ DIF_1_P }, 1 },
    478  1.1  jmcneill 	{ "eth_rx_clk",		REG6,	3,	{ DIF_1_N }, 1 },
    479  1.1  jmcneill 	{ "eth_txd0_1",		REG6,	4,	{ DIF_2_P }, 1 },
    480  1.1  jmcneill 	{ "eth_txd1_1",		REG6,	5,	{ DIF_2_N }, 1 },
    481  1.1  jmcneill 	{ "eth_tx_en",		REG6,	6,	{ DIF_3_P }, 1 },
    482  1.1  jmcneill 	{ "eth_ref_clk",	REG6,	8,	{ DIF_3_N }, 1 },
    483  1.1  jmcneill 	{ "eth_mdc",		REG6,	9,	{ DIF_4_P }, 1 },
    484  1.1  jmcneill 	{ "eth_mdio_en",	REG6,	10,	{ DIF_4_N }, 1 },
    485  1.2  jmcneill 	{ "eth_rxd3",		REG7,	22,	{ DIF_2_P }, 1 },
    486  1.2  jmcneill 	{ "eth_rxd2",		REG7,	23,	{ DIF_2_N }, 1 },
    487  1.1  jmcneill };
    488  1.1  jmcneill 
    489  1.1  jmcneill static const struct meson_pinctrl_group meson8b_aobus_groups[] = {
    490  1.1  jmcneill 	/* GPIOAO */
    491  1.1  jmcneill 	{ "uart_tx_ao_a",	REG,	12,	{ GPIOAO_0 }, 1 },
    492  1.1  jmcneill 	{ "uart_rx_ao_a",	REG,	11,	{ GPIOAO_1 }, 1 },
    493  1.1  jmcneill 	{ "uart_cts_ao_a",	REG,	10,	{ GPIOAO_2 }, 1 },
    494  1.1  jmcneill 	{ "uart_rts_ao_a",	REG,	9,	{ GPIOAO_3 }, 1 },
    495  1.1  jmcneill 	{ "i2c_mst_sck_ao",	REG,	6,	{ GPIOAO_4 }, 1 },
    496  1.1  jmcneill 	{ "i2c_mst_sda_ao",	REG,	5,	{ GPIOAO_5 }, 1 },
    497  1.1  jmcneill 	{ "clk_32k_in_out",	REG,	18,	{ GPIOAO_6 }, 1 },
    498  1.1  jmcneill 	{ "remote_input",	REG,	0,	{ GPIOAO_7 }, 1 },
    499  1.1  jmcneill 	{ "hdmi_cec_1",		REG,	17,	{ GPIOAO_12 }, 1 },
    500  1.1  jmcneill 	{ "ir_blaster",		REG,	31,	{ GPIOAO_13 }, 1 },
    501  1.1  jmcneill 	{ "pwm_c2",		REG,	22,	{ GPIOAO_3 }, 1 },
    502  1.1  jmcneill 	{ "i2c_sck_ao",		REG,	2,	{ GPIOAO_4 }, 1 },
    503  1.1  jmcneill 	{ "i2c_sda_ao",		REG,	1,	{ GPIOAO_5 }, 1 },
    504  1.1  jmcneill 	{ "ir_remote_out",	REG,	21,	{ GPIOAO_7 }, 1 },
    505  1.1  jmcneill 	{ "i2s_am_clk_out",	REG,	30,	{ GPIOAO_8 }, 1 },
    506  1.1  jmcneill 	{ "i2s_ao_clk_out",	REG,	29,	{ GPIOAO_9 }, 1 },
    507  1.1  jmcneill 	{ "i2s_lr_clk_out",	REG,	28,	{ GPIOAO_10 }, 1 },
    508  1.1  jmcneill 	{ "i2s_out_01",		REG,	27,	{ GPIOAO_11 }, 1 },
    509  1.1  jmcneill 	{ "uart_tx_ao_b0",	REG,	26,	{ GPIOAO_0 }, 1 },
    510  1.1  jmcneill 	{ "uart_rx_ao_b0",	REG,	25,	{ GPIOAO_1 }, 1 },
    511  1.1  jmcneill 	{ "uart_cts_ao_b",	REG,	8,	{ GPIOAO_2 }, 1 },
    512  1.1  jmcneill 	{ "uart_rts_ao_b",	REG,	7,	{ GPIOAO_3 }, 1 },
    513  1.1  jmcneill 	{ "uart_tx_ao_b1",	REG,	24,	{ GPIOAO_4 }, 1 },
    514  1.1  jmcneill 	{ "uart_rx_ao_b1",	REG,	23,	{ GPIOAO_5 }, 1 },
    515  1.1  jmcneill 	{ "spdif_out_1",	REG,	16,	{ GPIOAO_6 }, 1 },
    516  1.1  jmcneill 	{ "i2s_in_ch01",	REG,	13,	{ GPIOAO_6 }, 1 },
    517  1.1  jmcneill 	{ "i2s_ao_clk_in",	REG,	15,	{ GPIOAO_9 }, 1 },
    518  1.1  jmcneill 	{ "i2s_lr_clk_in",	REG,	14,	{ GPIOAO_10 }, 1 },
    519  1.1  jmcneill };
    520  1.1  jmcneill 
    521  1.1  jmcneill const struct meson_pinctrl_config meson8b_cbus_pinctrl_config = {
    522  1.1  jmcneill 	.name = "Meson8b CBUS GPIO",
    523  1.1  jmcneill 	.groups = meson8b_cbus_groups,
    524  1.1  jmcneill 	.ngroups = __arraycount(meson8b_cbus_groups),
    525  1.1  jmcneill 	.gpios = meson8b_cbus_gpios,
    526  1.1  jmcneill 	.ngpios = __arraycount(meson8b_cbus_gpios),
    527  1.1  jmcneill };
    528  1.1  jmcneill 
    529  1.1  jmcneill const struct meson_pinctrl_config meson8b_aobus_pinctrl_config = {
    530  1.1  jmcneill 	.name = "Meson8b AO GPIO",
    531  1.1  jmcneill 	.groups = meson8b_aobus_groups,
    532  1.1  jmcneill 	.ngroups = __arraycount(meson8b_aobus_groups),
    533  1.1  jmcneill 	.gpios = meson8b_aobus_gpios,
    534  1.1  jmcneill 	.ngpios = __arraycount(meson8b_aobus_gpios),
    535  1.1  jmcneill };
    536