1*df01e1afSbrook /* $NetBSD: meson8b_pinctrl.c,v 1.3 2022/06/23 03:36:00 brook Exp $ */ 2912cfa14Sjmcneill 3912cfa14Sjmcneill /*- 4912cfa14Sjmcneill * Copyright (c) 2019 Jared McNeill <jmcneill@invisible.ca> 5912cfa14Sjmcneill * All rights reserved. 6912cfa14Sjmcneill * 7912cfa14Sjmcneill * Redistribution and use in source and binary forms, with or without 8912cfa14Sjmcneill * modification, are permitted provided that the following conditions 9912cfa14Sjmcneill * are met: 10912cfa14Sjmcneill * 1. Redistributions of source code must retain the above copyright 11912cfa14Sjmcneill * notice, this list of conditions and the following disclaimer. 12912cfa14Sjmcneill * 2. Redistributions in binary form must reproduce the above copyright 13912cfa14Sjmcneill * notice, this list of conditions and the following disclaimer in the 14912cfa14Sjmcneill * documentation and/or other materials provided with the distribution. 15912cfa14Sjmcneill * 16912cfa14Sjmcneill * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17912cfa14Sjmcneill * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18912cfa14Sjmcneill * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19912cfa14Sjmcneill * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20912cfa14Sjmcneill * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21912cfa14Sjmcneill * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22912cfa14Sjmcneill * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23912cfa14Sjmcneill * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24912cfa14Sjmcneill * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25912cfa14Sjmcneill * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26912cfa14Sjmcneill * SUCH DAMAGE. 27912cfa14Sjmcneill */ 28912cfa14Sjmcneill 29912cfa14Sjmcneill #include <sys/cdefs.h> 30*df01e1afSbrook __KERNEL_RCSID(0, "$NetBSD: meson8b_pinctrl.c,v 1.3 2022/06/23 03:36:00 brook Exp $"); 31912cfa14Sjmcneill 32912cfa14Sjmcneill #include <sys/param.h> 33912cfa14Sjmcneill 34912cfa14Sjmcneill #include <arm/amlogic/meson_pinctrl.h> 35912cfa14Sjmcneill 36912cfa14Sjmcneill /* CBUS pinmux registers */ 37912cfa14Sjmcneill #define CBUS_REG(n) ((n) << 2) 38912cfa14Sjmcneill #define REG0 CBUS_REG(0) 39912cfa14Sjmcneill #define REG1 CBUS_REG(1) 40912cfa14Sjmcneill #define REG2 CBUS_REG(2) 41912cfa14Sjmcneill #define REG3 CBUS_REG(3) 42912cfa14Sjmcneill #define REG4 CBUS_REG(4) 43912cfa14Sjmcneill #define REG5 CBUS_REG(5) 44912cfa14Sjmcneill #define REG6 CBUS_REG(6) 45912cfa14Sjmcneill #define REG7 CBUS_REG(7) 46912cfa14Sjmcneill #define REG8 CBUS_REG(8) 47912cfa14Sjmcneill #define REG9 CBUS_REG(9) 48912cfa14Sjmcneill 49912cfa14Sjmcneill /* AO pinmux registers */ 50912cfa14Sjmcneill #define REG 0x00 51912cfa14Sjmcneill 52912cfa14Sjmcneill /* 53912cfa14Sjmcneill * GPIO banks. The values must match those in dt-bindings/gpio/meson8b-gpio.h 54912cfa14Sjmcneill */ 55912cfa14Sjmcneill enum { 56912cfa14Sjmcneill GPIOX_0 = 0, 57912cfa14Sjmcneill GPIOX_1, 58912cfa14Sjmcneill GPIOX_2, 59912cfa14Sjmcneill GPIOX_3, 60912cfa14Sjmcneill GPIOX_4, 61912cfa14Sjmcneill GPIOX_5, 62912cfa14Sjmcneill GPIOX_6, 63912cfa14Sjmcneill GPIOX_7, 64912cfa14Sjmcneill GPIOX_8, 65912cfa14Sjmcneill GPIOX_9, 66912cfa14Sjmcneill GPIOX_10, 67912cfa14Sjmcneill GPIOX_11, 68912cfa14Sjmcneill GPIOX_16, 69912cfa14Sjmcneill GPIOX_17, 70912cfa14Sjmcneill GPIOX_18, 71912cfa14Sjmcneill GPIOX_19, 72912cfa14Sjmcneill GPIOX_20, 73912cfa14Sjmcneill GPIOX_21, 74912cfa14Sjmcneill 75912cfa14Sjmcneill GPIOY_0 = 18, 76912cfa14Sjmcneill GPIOY_1, 77912cfa14Sjmcneill GPIOY_3, 78912cfa14Sjmcneill GPIOY_6, 79912cfa14Sjmcneill GPIOY_7, 80912cfa14Sjmcneill GPIOY_8, 81912cfa14Sjmcneill GPIOY_9, 82912cfa14Sjmcneill GPIOY_10, 83912cfa14Sjmcneill GPIOY_11, 84912cfa14Sjmcneill GPIOY_12, 85912cfa14Sjmcneill GPIOY_13, 86912cfa14Sjmcneill GPIOY_14, 87912cfa14Sjmcneill 88912cfa14Sjmcneill GPIODV_9 = 30, 89912cfa14Sjmcneill GPIODV_24, 90912cfa14Sjmcneill GPIODV_25, 91912cfa14Sjmcneill GPIODV_26, 92912cfa14Sjmcneill GPIODV_27, 93912cfa14Sjmcneill GPIODV_28, 94912cfa14Sjmcneill GPIODV_29, 95912cfa14Sjmcneill 96912cfa14Sjmcneill GPIOH_0 = 37, 97912cfa14Sjmcneill GPIOH_1, 98912cfa14Sjmcneill GPIOH_2, 99912cfa14Sjmcneill GPIOH_3, 100912cfa14Sjmcneill GPIOH_4, 101912cfa14Sjmcneill GPIOH_5, 102912cfa14Sjmcneill GPIOH_6, 103912cfa14Sjmcneill GPIOH_7, 104912cfa14Sjmcneill GPIOH_8, 105912cfa14Sjmcneill GPIOH_9, 106912cfa14Sjmcneill 107912cfa14Sjmcneill CARD_0 = 47, 108912cfa14Sjmcneill CARD_1, 109912cfa14Sjmcneill CARD_2, 110912cfa14Sjmcneill CARD_3, 111912cfa14Sjmcneill CARD_4, 112912cfa14Sjmcneill CARD_5, 113912cfa14Sjmcneill CARD_6, 114912cfa14Sjmcneill 115912cfa14Sjmcneill BOOT_0 = 54, 116912cfa14Sjmcneill BOOT_1, 117912cfa14Sjmcneill BOOT_2, 118912cfa14Sjmcneill BOOT_3, 119912cfa14Sjmcneill BOOT_4, 120912cfa14Sjmcneill BOOT_5, 121912cfa14Sjmcneill BOOT_6, 122912cfa14Sjmcneill BOOT_7, 123912cfa14Sjmcneill BOOT_8, 124912cfa14Sjmcneill BOOT_9, 125912cfa14Sjmcneill BOOT_10, 126912cfa14Sjmcneill BOOT_11, 127912cfa14Sjmcneill BOOT_12, 128912cfa14Sjmcneill BOOT_13, 129912cfa14Sjmcneill BOOT_14, 130912cfa14Sjmcneill BOOT_15, 131912cfa14Sjmcneill BOOT_18, 132912cfa14Sjmcneill 133912cfa14Sjmcneill DIF_0_P = 73, 134912cfa14Sjmcneill DIF_0_N, 135912cfa14Sjmcneill DIF_1_P, 136912cfa14Sjmcneill DIF_1_N, 137912cfa14Sjmcneill DIF_2_P, 138912cfa14Sjmcneill DIF_2_N, 139912cfa14Sjmcneill DIF_3_P, 140912cfa14Sjmcneill DIF_3_N, 141912cfa14Sjmcneill DIF_4_P, 142912cfa14Sjmcneill DIF_4_N, 143912cfa14Sjmcneill 144912cfa14Sjmcneill GPIOAO_0 = 0, 145912cfa14Sjmcneill GPIOAO_1, 146912cfa14Sjmcneill GPIOAO_2, 147912cfa14Sjmcneill GPIOAO_3, 148912cfa14Sjmcneill GPIOAO_4, 149912cfa14Sjmcneill GPIOAO_5, 150912cfa14Sjmcneill GPIOAO_6, 151912cfa14Sjmcneill GPIOAO_7, 152912cfa14Sjmcneill GPIOAO_8, 153912cfa14Sjmcneill GPIOAO_9, 154912cfa14Sjmcneill GPIOAO_10, 155912cfa14Sjmcneill GPIOAO_11, 156912cfa14Sjmcneill GPIOAO_12, 157912cfa14Sjmcneill GPIOAO_13, 158912cfa14Sjmcneill GPIO_BSD_EN, 159912cfa14Sjmcneill GPIO_TEST_N, 160912cfa14Sjmcneill }; 161912cfa14Sjmcneill 162912cfa14Sjmcneill #define CBUS_GPIO(_id, _gpiobase, _gpiobit, _pullbase, _pullbit) \ 163912cfa14Sjmcneill [_id] = { \ 164912cfa14Sjmcneill .id = (_id), \ 165912cfa14Sjmcneill .name = __STRING(_id), \ 166912cfa14Sjmcneill .oen = { \ 167912cfa14Sjmcneill .type = MESON_PINCTRL_REGTYPE_GPIO, \ 168912cfa14Sjmcneill .reg = CBUS_REG((_gpiobase) + 0), \ 169912cfa14Sjmcneill .mask = __BIT(_gpiobit) \ 170912cfa14Sjmcneill }, \ 171912cfa14Sjmcneill .out = { \ 172912cfa14Sjmcneill .type = MESON_PINCTRL_REGTYPE_GPIO, \ 173912cfa14Sjmcneill .reg = CBUS_REG((_gpiobase) + 1), \ 174912cfa14Sjmcneill .mask = __BIT(_gpiobit) \ 175912cfa14Sjmcneill }, \ 176912cfa14Sjmcneill .in = { \ 177912cfa14Sjmcneill .type = MESON_PINCTRL_REGTYPE_GPIO, \ 178912cfa14Sjmcneill .reg = CBUS_REG((_gpiobase) + 2), \ 179912cfa14Sjmcneill .mask = __BIT(_gpiobit) \ 180912cfa14Sjmcneill }, \ 181912cfa14Sjmcneill .pupden = { \ 182912cfa14Sjmcneill .type = MESON_PINCTRL_REGTYPE_PULL_ENABLE, \ 183912cfa14Sjmcneill .reg = CBUS_REG(_pullbase), \ 184912cfa14Sjmcneill .mask = __BIT(_pullbit) \ 185912cfa14Sjmcneill }, \ 186912cfa14Sjmcneill .pupd = { \ 187912cfa14Sjmcneill .type = MESON_PINCTRL_REGTYPE_PULL, \ 188912cfa14Sjmcneill .reg = CBUS_REG(_pullbase), \ 189912cfa14Sjmcneill .mask = __BIT(_pullbit) \ 190912cfa14Sjmcneill }, \ 191912cfa14Sjmcneill } 192912cfa14Sjmcneill 193912cfa14Sjmcneill static const struct meson_pinctrl_gpio meson8b_cbus_gpios[] = { 194912cfa14Sjmcneill /* GPIOX */ 195912cfa14Sjmcneill CBUS_GPIO(GPIOX_0, 0, 0, 4, 0), 196912cfa14Sjmcneill CBUS_GPIO(GPIOX_1, 0, 1, 4, 1), 197912cfa14Sjmcneill CBUS_GPIO(GPIOX_2, 0, 2, 4, 2), 198912cfa14Sjmcneill CBUS_GPIO(GPIOX_3, 0, 3, 4, 3), 199912cfa14Sjmcneill CBUS_GPIO(GPIOX_4, 0, 4, 4, 4), 200912cfa14Sjmcneill CBUS_GPIO(GPIOX_5, 0, 5, 4, 5), 201912cfa14Sjmcneill CBUS_GPIO(GPIOX_6, 0, 6, 4, 6), 202912cfa14Sjmcneill CBUS_GPIO(GPIOX_7, 0, 7, 4, 7), 203912cfa14Sjmcneill CBUS_GPIO(GPIOX_8, 0, 8, 4, 8), 204912cfa14Sjmcneill CBUS_GPIO(GPIOX_9, 0, 9, 4, 9), 205912cfa14Sjmcneill CBUS_GPIO(GPIOX_10, 0, 10, 4, 10), 206912cfa14Sjmcneill CBUS_GPIO(GPIOX_11, 0, 11, 4, 11), 207912cfa14Sjmcneill CBUS_GPIO(GPIOX_16, 0, 16, 4, 16), 208912cfa14Sjmcneill CBUS_GPIO(GPIOX_17, 0, 17, 4, 17), 209912cfa14Sjmcneill CBUS_GPIO(GPIOX_18, 0, 18, 4, 18), 210912cfa14Sjmcneill CBUS_GPIO(GPIOX_19, 0, 19, 4, 19), 211912cfa14Sjmcneill CBUS_GPIO(GPIOX_20, 0, 20, 4, 20), 212912cfa14Sjmcneill CBUS_GPIO(GPIOX_21, 0, 21, 4, 21), 213912cfa14Sjmcneill 214912cfa14Sjmcneill /* GPIOY */ 215912cfa14Sjmcneill CBUS_GPIO(GPIOY_0, 3, 0, 3, 0), 216912cfa14Sjmcneill CBUS_GPIO(GPIOY_1, 3, 1, 3, 1), 217912cfa14Sjmcneill CBUS_GPIO(GPIOY_3, 3, 3, 3, 3), 218912cfa14Sjmcneill CBUS_GPIO(GPIOY_6, 3, 6, 3, 6), 219912cfa14Sjmcneill CBUS_GPIO(GPIOY_7, 3, 7, 3, 7), 220912cfa14Sjmcneill CBUS_GPIO(GPIOY_8, 3, 8, 3, 8), 221912cfa14Sjmcneill CBUS_GPIO(GPIOY_9, 3, 9, 3, 9), 222912cfa14Sjmcneill CBUS_GPIO(GPIOY_10, 3, 10, 3, 10), 223912cfa14Sjmcneill CBUS_GPIO(GPIOY_11, 3, 11, 3, 11), 224912cfa14Sjmcneill CBUS_GPIO(GPIOY_12, 3, 12, 3, 12), 225912cfa14Sjmcneill CBUS_GPIO(GPIOY_13, 3, 13, 3, 13), 226912cfa14Sjmcneill CBUS_GPIO(GPIOY_14, 3, 14, 3, 14), 227912cfa14Sjmcneill 228912cfa14Sjmcneill /* GPIODV */ 229*df01e1afSbrook CBUS_GPIO(GPIODV_9, 6, 9, 0, 9), 230912cfa14Sjmcneill CBUS_GPIO(GPIODV_24, 6, 24, 0, 24), 231912cfa14Sjmcneill CBUS_GPIO(GPIODV_25, 6, 25, 0, 25), 232912cfa14Sjmcneill CBUS_GPIO(GPIODV_26, 6, 26, 0, 26), 233912cfa14Sjmcneill CBUS_GPIO(GPIODV_27, 6, 27, 0, 27), 234912cfa14Sjmcneill CBUS_GPIO(GPIODV_28, 6, 28, 0, 28), 235912cfa14Sjmcneill CBUS_GPIO(GPIODV_29, 6, 29, 0, 29), 236912cfa14Sjmcneill 237912cfa14Sjmcneill /* GPIOH */ 238912cfa14Sjmcneill CBUS_GPIO(GPIOH_0, 9, 19, 1, 16), 239912cfa14Sjmcneill CBUS_GPIO(GPIOH_1, 9, 20, 1, 17), 240912cfa14Sjmcneill CBUS_GPIO(GPIOH_2, 9, 21, 1, 18), 241912cfa14Sjmcneill CBUS_GPIO(GPIOH_3, 9, 22, 1, 19), 242912cfa14Sjmcneill CBUS_GPIO(GPIOH_4, 9, 23, 1, 20), 243912cfa14Sjmcneill CBUS_GPIO(GPIOH_5, 9, 24, 1, 21), 244912cfa14Sjmcneill CBUS_GPIO(GPIOH_6, 9, 25, 1, 22), 245912cfa14Sjmcneill CBUS_GPIO(GPIOH_7, 9, 26, 1, 23), 246912cfa14Sjmcneill CBUS_GPIO(GPIOH_8, 9, 27, 1, 24), 247912cfa14Sjmcneill CBUS_GPIO(GPIOH_9, 9, 28, 1, 25), 248912cfa14Sjmcneill 249912cfa14Sjmcneill /* BOOT */ 250912cfa14Sjmcneill CBUS_GPIO(BOOT_0, 9, 0, 2, 0), 251912cfa14Sjmcneill CBUS_GPIO(BOOT_1, 9, 1, 2, 1), 252912cfa14Sjmcneill CBUS_GPIO(BOOT_2, 9, 2, 2, 2), 253912cfa14Sjmcneill CBUS_GPIO(BOOT_3, 9, 3, 2, 3), 254912cfa14Sjmcneill CBUS_GPIO(BOOT_4, 9, 4, 2, 4), 255912cfa14Sjmcneill CBUS_GPIO(BOOT_5, 9, 5, 2, 5), 256912cfa14Sjmcneill CBUS_GPIO(BOOT_6, 9, 6, 2, 6), 257912cfa14Sjmcneill CBUS_GPIO(BOOT_7, 9, 7, 2, 7), 258912cfa14Sjmcneill CBUS_GPIO(BOOT_8, 9, 8, 2, 8), 259912cfa14Sjmcneill CBUS_GPIO(BOOT_9, 9, 9, 2, 9), 260912cfa14Sjmcneill CBUS_GPIO(BOOT_10, 9, 10, 2, 10), 261912cfa14Sjmcneill CBUS_GPIO(BOOT_11, 9, 11, 2, 11), 262912cfa14Sjmcneill CBUS_GPIO(BOOT_12, 9, 12, 2, 12), 263912cfa14Sjmcneill CBUS_GPIO(BOOT_13, 9, 13, 2, 13), 264912cfa14Sjmcneill CBUS_GPIO(BOOT_14, 9, 14, 2, 14), 265912cfa14Sjmcneill CBUS_GPIO(BOOT_15, 9, 15, 2, 15), 266912cfa14Sjmcneill CBUS_GPIO(BOOT_18, 9, 18, 2, 18), 267912cfa14Sjmcneill 268912cfa14Sjmcneill /* CARD */ 269912cfa14Sjmcneill CBUS_GPIO(CARD_0, 0, 22, 2, 20), 270912cfa14Sjmcneill CBUS_GPIO(CARD_1, 0, 23, 2, 21), 271912cfa14Sjmcneill CBUS_GPIO(CARD_2, 0, 24, 2, 22), 272912cfa14Sjmcneill CBUS_GPIO(CARD_3, 0, 25, 2, 23), 273912cfa14Sjmcneill CBUS_GPIO(CARD_4, 0, 26, 2, 24), 274912cfa14Sjmcneill CBUS_GPIO(CARD_5, 0, 27, 2, 25), 275912cfa14Sjmcneill CBUS_GPIO(CARD_6, 0, 28, 2, 26), 276912cfa14Sjmcneill }; 277912cfa14Sjmcneill 278912cfa14Sjmcneill #define AO_GPIO(_id, _bit) \ 279912cfa14Sjmcneill [_id] = { \ 280912cfa14Sjmcneill .id = (_id), \ 281912cfa14Sjmcneill .name = __STRING(_id), \ 282912cfa14Sjmcneill .oen = { \ 283912cfa14Sjmcneill .type = MESON_PINCTRL_REGTYPE_GPIO, \ 284912cfa14Sjmcneill .reg = 0, \ 285912cfa14Sjmcneill .mask = __BIT(_bit) \ 286912cfa14Sjmcneill }, \ 287912cfa14Sjmcneill .out = { \ 288912cfa14Sjmcneill .type = MESON_PINCTRL_REGTYPE_GPIO, \ 289912cfa14Sjmcneill .reg = 0, \ 290912cfa14Sjmcneill .mask = __BIT(_bit + 16) \ 291912cfa14Sjmcneill }, \ 292912cfa14Sjmcneill .in = { \ 293912cfa14Sjmcneill .type = MESON_PINCTRL_REGTYPE_GPIO, \ 294912cfa14Sjmcneill .reg = 4, \ 295912cfa14Sjmcneill .mask = __BIT(_bit) \ 296912cfa14Sjmcneill }, \ 297912cfa14Sjmcneill .pupden = { \ 298912cfa14Sjmcneill .type = MESON_PINCTRL_REGTYPE_PULL, \ 299912cfa14Sjmcneill .reg = 0, \ 300912cfa14Sjmcneill .mask = __BIT(_bit) \ 301912cfa14Sjmcneill }, \ 302912cfa14Sjmcneill .pupd = { \ 303912cfa14Sjmcneill .type = MESON_PINCTRL_REGTYPE_PULL, \ 304912cfa14Sjmcneill .reg = 0, \ 305912cfa14Sjmcneill .mask = __BIT(_bit + 16) \ 306912cfa14Sjmcneill }, \ 307912cfa14Sjmcneill } 308912cfa14Sjmcneill 309912cfa14Sjmcneill static const struct meson_pinctrl_gpio meson8b_aobus_gpios[] = { 310912cfa14Sjmcneill /* GPIOAO */ 311912cfa14Sjmcneill AO_GPIO(GPIOAO_0, 0), 312912cfa14Sjmcneill AO_GPIO(GPIOAO_1, 1), 313912cfa14Sjmcneill AO_GPIO(GPIOAO_2, 2), 314912cfa14Sjmcneill AO_GPIO(GPIOAO_3, 3), 315912cfa14Sjmcneill AO_GPIO(GPIOAO_4, 4), 316912cfa14Sjmcneill AO_GPIO(GPIOAO_5, 5), 317912cfa14Sjmcneill AO_GPIO(GPIOAO_6, 6), 318912cfa14Sjmcneill AO_GPIO(GPIOAO_7, 7), 319912cfa14Sjmcneill AO_GPIO(GPIOAO_8, 8), 320912cfa14Sjmcneill AO_GPIO(GPIOAO_9, 9), 321912cfa14Sjmcneill AO_GPIO(GPIOAO_10, 10), 322912cfa14Sjmcneill AO_GPIO(GPIOAO_11, 11), 323912cfa14Sjmcneill AO_GPIO(GPIOAO_12, 12), 324912cfa14Sjmcneill AO_GPIO(GPIOAO_13, 13), 325912cfa14Sjmcneill }; 326912cfa14Sjmcneill 327912cfa14Sjmcneill static const struct meson_pinctrl_group meson8b_cbus_groups[] = { 328912cfa14Sjmcneill /* GPIOX */ 329912cfa14Sjmcneill { "sd_d0_a", REG8, 5, { GPIOX_0 }, 1 }, 330912cfa14Sjmcneill { "sd_d1_a", REG8, 4, { GPIOX_1 }, 1 }, 331912cfa14Sjmcneill { "sd_d2_a", REG8, 3, { GPIOX_2 }, 1 }, 332912cfa14Sjmcneill { "sd_d3_a", REG8, 2, { GPIOX_3 }, 1 }, 333912cfa14Sjmcneill { "sdxc_d0_0_a", REG5, 29, { GPIOX_4 }, 1 }, 334912cfa14Sjmcneill { "sdxc_d47_a", REG5, 12, { GPIOX_4, GPIOX_5, GPIOX_6, GPIOX_7 }, 4 }, 335912cfa14Sjmcneill { "sdxc_d13_0_a", REG5, 28, { GPIOX_5, GPIOX_6, GPIOX_7 }, 3 }, 336912cfa14Sjmcneill { "sd_clk_a", REG8, 1, { GPIOX_8 }, 1 }, 337912cfa14Sjmcneill { "sd_cmd_a", REG8, 0, { GPIOX_9 }, 1 }, 338912cfa14Sjmcneill { "xtal_32k_out", REG3, 22, { GPIOX_10 }, 1 }, 339912cfa14Sjmcneill { "xtal_24m_out", REG3, 20, { GPIOX_11 }, 1 }, 340912cfa14Sjmcneill { "uart_tx_b0", REG4, 9, { GPIOX_16 }, 1 }, 341912cfa14Sjmcneill { "uart_rx_b0", REG4, 8, { GPIOX_17 }, 1 }, 342912cfa14Sjmcneill { "uart_cts_b0", REG4, 7, { GPIOX_18 }, 1 }, 343912cfa14Sjmcneill { "uart_rts_b0", REG4, 6, { GPIOX_19 }, 1 }, 344912cfa14Sjmcneill { "sdxc_d0_1_a", REG5, 14, { GPIOX_0 }, 1 }, 345912cfa14Sjmcneill { "sdxc_d13_1_a", REG5, 13, { GPIOX_1, GPIOX_2, GPIOX_3 }, 3 }, 346912cfa14Sjmcneill { "pcm_out_a", REG3, 30, { GPIOX_4 }, 1 }, 347912cfa14Sjmcneill { "pcm_in_a", REG3, 29, { GPIOX_5 }, 1 }, 348912cfa14Sjmcneill { "pcm_fs_a", REG3, 28, { GPIOX_6 }, 1 }, 349912cfa14Sjmcneill { "pcm_clk_a", REG3, 27, { GPIOX_7 }, 1 }, 350912cfa14Sjmcneill { "sdxc_clk_a", REG5, 11, { GPIOX_8 }, 1 }, 351912cfa14Sjmcneill { "sdxc_cmd_a", REG5, 10, { GPIOX_9 }, 1 }, 352912cfa14Sjmcneill { "pwm_vs_0", REG7, 31, { GPIOX_10 }, 1 }, 353912cfa14Sjmcneill { "pwm_e", REG9, 19, { GPIOX_10 }, 1 }, 354912cfa14Sjmcneill { "pwm_vs_1", REG7, 30, { GPIOX_11 }, 1 }, 355912cfa14Sjmcneill { "uart_tx_a", REG4, 17, { GPIOX_4 }, 1 }, 356912cfa14Sjmcneill { "uart_rx_a", REG4, 16, { GPIOX_5 }, 1 }, 357912cfa14Sjmcneill { "uart_cts_a", REG4, 15, { GPIOX_6 }, 1 }, 358912cfa14Sjmcneill { "uart_rts_a", REG4, 14, { GPIOX_7 }, 1 }, 359912cfa14Sjmcneill { "uart_tx_b1", REG6, 19, { GPIOX_8 }, 1 }, 360912cfa14Sjmcneill { "uart_rx_b1", REG6, 18, { GPIOX_9 }, 1 }, 361912cfa14Sjmcneill { "uart_cts_b1", REG6, 17, { GPIOX_10 }, 1 }, 362912cfa14Sjmcneill { "uart_rts_b1", REG6, 16, { GPIOX_20 }, 1 }, 363912cfa14Sjmcneill { "iso7816_0_clk", REG5, 9, { GPIOX_6 }, 1 }, 364912cfa14Sjmcneill { "iso7816_0_data", REG5, 8, { GPIOX_7 }, 1 }, 365912cfa14Sjmcneill { "spi_sclk_0", REG4, 22, { GPIOX_8 }, 1 }, 366912cfa14Sjmcneill { "spi_miso_0", REG4, 24, { GPIOX_9 }, 1 }, 367912cfa14Sjmcneill { "spi_mosi_0", REG4, 23, { GPIOX_10 }, 1 }, 368912cfa14Sjmcneill { "iso7816_det", REG4, 21, { GPIOX_16 }, 1 }, 369912cfa14Sjmcneill { "iso7816_reset", REG4, 20, { GPIOX_17 }, 1 }, 370912cfa14Sjmcneill { "iso7816_1_clk", REG4, 19, { GPIOX_18 }, 1 }, 371912cfa14Sjmcneill { "iso7816_1_data", REG4, 18, { GPIOX_19 }, 1 }, 372912cfa14Sjmcneill { "spi_ss0_0", REG4, 25, { GPIOX_20 }, 1 }, 373912cfa14Sjmcneill { "tsin_clk_b", REG3, 6, { GPIOX_8 }, 1 }, 374912cfa14Sjmcneill { "tsin_sop_b", REG3, 7, { GPIOX_9 }, 1 }, 375912cfa14Sjmcneill { "tsin_d0_b", REG3, 8, { GPIOX_10 }, 1 }, 376912cfa14Sjmcneill { "pwm_b", REG2, 3, { GPIOX_11 }, 1 }, 377912cfa14Sjmcneill { "i2c_sda_d0", REG4, 5, { GPIOX_16 }, 1 }, 378912cfa14Sjmcneill { "i2c_sck_d0", REG4, 4, { GPIOX_17 }, 1 }, 379912cfa14Sjmcneill { "tsin_d_valid_b", REG3, 9, { GPIOX_20 }, 1 }, 380912cfa14Sjmcneill 381912cfa14Sjmcneill /* GPIOY */ 382912cfa14Sjmcneill { "tsin_d_valid_a", REG3, 2, { GPIOY_0 }, 1}, 383912cfa14Sjmcneill { "tsin_sop_a", REG3, 1, { GPIOY_1 }, 1 }, 384912cfa14Sjmcneill { "tsin_d17_a", REG3, 5, { GPIOY_6, GPIOY_7, GPIOY_10, GPIOY_11, GPIOY_12, GPIOY_13, GPIOY_14 }, 8 }, 385912cfa14Sjmcneill { "tsin_clk_a", REG3, 0, { GPIOY_8 }, 1 }, 386912cfa14Sjmcneill { "tsin_d0_a", REG3, 4, { GPIOY_9 }, 1 }, 387912cfa14Sjmcneill { "spdif_out_0", REG1, 7, { GPIOY_3 }, 1 }, 388912cfa14Sjmcneill { "xtal_24m", REG3, 18, { GPIOY_3 }, 1 }, 389912cfa14Sjmcneill { "iso7816_2_clk", REG5, 7, { GPIOY_13 }, 1 }, 390912cfa14Sjmcneill { "iso7816_2_data", REG5, 6, { GPIOY_14 }, 1 }, 391912cfa14Sjmcneill 392912cfa14Sjmcneill /* GPIODV */ 393912cfa14Sjmcneill { "pwm_d", REG3, 26, { GPIODV_28 }, 1 }, 394912cfa14Sjmcneill { "pwm_c0", REG3, 25, { GPIODV_29 }, 1 }, 395912cfa14Sjmcneill { "pwm_vs_2", REG7, 28, { GPIODV_9 }, 1 }, 396912cfa14Sjmcneill { "pwm_vs_3", REG7, 27, { GPIODV_28 }, 1 }, 397912cfa14Sjmcneill { "pwm_vs_4", REG7, 26, { GPIODV_29 }, 1 }, 398912cfa14Sjmcneill { "xtal24_out", REG7, 25, { GPIODV_29 }, 1 }, 399912cfa14Sjmcneill { "uart_tx_c", REG6, 23, { GPIODV_24 }, 1 }, 400912cfa14Sjmcneill { "uart_rx_c", REG6, 22, { GPIODV_25 }, 1 }, 401912cfa14Sjmcneill { "uart_cts_c", REG6, 21, { GPIODV_26 }, 1 }, 402912cfa14Sjmcneill { "uart_rts_c", REG6, 20, { GPIODV_27 }, 1 }, 403912cfa14Sjmcneill { "pwm_c1", REG3, 24, { GPIODV_9 }, 1 }, 404912cfa14Sjmcneill { "i2c_sda_a", REG9, 31, { GPIODV_24 }, 1 }, 405912cfa14Sjmcneill { "i2c_sck_a", REG9, 30, { GPIODV_25 }, 1 }, 406912cfa14Sjmcneill { "i2c_sda_b0", REG9, 29, { GPIODV_26 }, 1 }, 407912cfa14Sjmcneill { "i2c_sck_b0", REG9, 28, { GPIODV_27 }, 1 }, 408912cfa14Sjmcneill { "i2c_sda_c0", REG9, 27, { GPIODV_28 }, 1 }, 409912cfa14Sjmcneill { "i2c_sck_c0", REG9, 26, { GPIODV_29 }, 1 }, 410912cfa14Sjmcneill 411912cfa14Sjmcneill /* GPIOH */ 412912cfa14Sjmcneill { "hdmi_hpd", REG1, 26, { GPIOH_0 }, 1 }, 413912cfa14Sjmcneill { "hdmi_sda", REG1, 25, { GPIOH_1 }, 1 }, 414912cfa14Sjmcneill { "hdmi_scl", REG1, 24, { GPIOH_2 }, 1 }, 415912cfa14Sjmcneill { "hdmi_cec_0", REG1, 23, { GPIOH_3 }, 1 }, 416912cfa14Sjmcneill { "eth_txd1_0", REG7, 21, { GPIOH_5 }, 1 }, 417912cfa14Sjmcneill { "eth_txd0_0", REG7, 20, { GPIOH_6 }, 1 }, 418912cfa14Sjmcneill { "clk_24m_out", REG4, 1, { GPIOH_9 }, 1 }, 419912cfa14Sjmcneill { "spi_ss1", REG8, 11, { GPIOH_0 }, 1 }, 420912cfa14Sjmcneill { "spi_ss2", REG8, 12, { GPIOH_1 }, 1 }, 421912cfa14Sjmcneill { "spi_ss0_1", REG9, 13, { GPIOH_3 }, 1 }, 422912cfa14Sjmcneill { "spi_miso_1", REG9, 12, { GPIOH_4 }, 1 }, 423912cfa14Sjmcneill { "spi_mosi_1", REG9, 11, { GPIOH_5 }, 1 }, 424912cfa14Sjmcneill { "spi_sclk_1", REG9, 10, { GPIOH_6 }, 1 }, 425912cfa14Sjmcneill { "eth_txd3", REG6, 13, { GPIOH_7 }, 1 }, 426912cfa14Sjmcneill { "eth_txd2", REG6, 12, { GPIOH_8 }, 1 }, 427912cfa14Sjmcneill { "eth_tx_clk", REG6, 11, { GPIOH_9 }, 1 }, 428912cfa14Sjmcneill { "i2c_sda_b1", REG5, 27, { GPIOH_3 }, 1 }, 429912cfa14Sjmcneill { "i2c_sck_b1", REG5, 26, { GPIOH_4 }, 1 }, 430912cfa14Sjmcneill { "i2c_sda_c1", REG5, 25, { GPIOH_5 }, 1 }, 431912cfa14Sjmcneill { "i2c_sck_c1", REG5, 24, { GPIOH_6 }, 1 }, 432912cfa14Sjmcneill { "i2c_sda_d1", REG4, 3, { GPIOH_7 }, 1 }, 433912cfa14Sjmcneill { "i2c_sck_d1", REG4, 2, { GPIOH_8 }, 1 }, 434912cfa14Sjmcneill 435912cfa14Sjmcneill /* BOOT */ 436912cfa14Sjmcneill { "nand_io", REG2, 26, { BOOT_0, BOOT_1, BOOT_2, BOOT_3, BOOT_4, BOOT_5, BOOT_6, BOOT_7 }, 8 }, 437912cfa14Sjmcneill { "nand_io_ce0", REG2, 25, { BOOT_8 }, 1 }, 438912cfa14Sjmcneill { "nand_io_ce1", REG2, 24, { BOOT_9 }, 1 }, 439912cfa14Sjmcneill { "nand_io_rb0", REG2, 17, { BOOT_10 }, 1 }, 440912cfa14Sjmcneill { "nand_ale", REG2, 21, { BOOT_11 }, 1 }, 441912cfa14Sjmcneill { "nand_cle", REG2, 20, { BOOT_12 }, 1 }, 442912cfa14Sjmcneill { "nand_wen_clk", REG2, 19, { BOOT_13 }, 1 }, 443912cfa14Sjmcneill { "nand_ren_clk", REG2, 18, { BOOT_14 }, 1 }, 444912cfa14Sjmcneill { "nand_dqs_15", REG2, 27, { BOOT_15 }, 1 }, 445912cfa14Sjmcneill { "nand_dqs_18", REG2, 28, { BOOT_18 }, 1 }, 446912cfa14Sjmcneill { "sdxc_d0_c", REG4, 30, { BOOT_0 }, 1 }, 447912cfa14Sjmcneill { "sdxc_d13_c", REG4, 29, { BOOT_1, BOOT_2, BOOT_3 }, 3 }, 448912cfa14Sjmcneill { "sdxc_d47_c", REG4, 28, { BOOT_4, BOOT_5, BOOT_6, BOOT_7 }, 4 }, 449912cfa14Sjmcneill { "sdxc_clk_c", REG7, 19, { BOOT_8 }, 1 }, 450912cfa14Sjmcneill { "sdxc_cmd_c", REG7, 18, { BOOT_10 }, 1 }, 451912cfa14Sjmcneill { "nor_d", REG5, 1, { BOOT_11 }, 1 }, 452912cfa14Sjmcneill { "nor_q", REG5, 3, { BOOT_12 }, 1 }, 453912cfa14Sjmcneill { "nor_c", REG5, 2, { BOOT_13 }, 1 }, 454912cfa14Sjmcneill { "nor_cs", REG5, 0, { BOOT_18 }, 1 }, 455912cfa14Sjmcneill { "sd_d0_c", REG6, 29, { BOOT_0 }, 1 }, 456912cfa14Sjmcneill { "sd_d1_c", REG6, 28, { BOOT_1 }, 1 }, 457912cfa14Sjmcneill { "sd_d2_c", REG6, 27, { BOOT_2 }, 1 }, 458912cfa14Sjmcneill { "sd_d3_c", REG6, 26, { BOOT_3 }, 1 }, 459912cfa14Sjmcneill { "sd_cmd_c", REG6, 30, { BOOT_8 }, 1 }, 460912cfa14Sjmcneill { "sd_clk_c", REG6, 31, { BOOT_10 }, 1 }, 461912cfa14Sjmcneill 462912cfa14Sjmcneill /* CARD */ 463912cfa14Sjmcneill { "sd_d1_b", REG2, 14, { CARD_0 }, 1 }, 464912cfa14Sjmcneill { "sd_d0_b", REG2, 15, { CARD_1 }, 1 }, 465912cfa14Sjmcneill { "sd_clk_b", REG2, 11, { CARD_2 }, 1 }, 466912cfa14Sjmcneill { "sd_cmd_b", REG2, 10, { CARD_3 }, 1 }, 467912cfa14Sjmcneill { "sd_d3_b", REG2, 12, { CARD_4 }, 1 }, 468912cfa14Sjmcneill { "sd_d2_b", REG2, 13, { CARD_5 }, 1 }, 469912cfa14Sjmcneill { "sdxc_d13_b", REG2, 6, { CARD_0, CARD_4, CARD_5 }, 3 }, 470912cfa14Sjmcneill { "sdxc_d0_b", REG2, 7, { CARD_1 }, 1 }, 471912cfa14Sjmcneill { "sdxc_clk_b", REG2, 5, { CARD_2 }, 1 }, 472912cfa14Sjmcneill { "sdxc_cmd_b", REG2, 4, { CARD_3 }, 1 }, 473912cfa14Sjmcneill 474912cfa14Sjmcneill /* DIF */ 475912cfa14Sjmcneill { "eth_rxd1", REG6, 0, { DIF_0_P }, 1 }, 476912cfa14Sjmcneill { "eth_rxd0", REG6, 1, { DIF_0_N }, 1 }, 477912cfa14Sjmcneill { "eth_rx_dv", REG6, 2, { DIF_1_P }, 1 }, 478912cfa14Sjmcneill { "eth_rx_clk", REG6, 3, { DIF_1_N }, 1 }, 479912cfa14Sjmcneill { "eth_txd0_1", REG6, 4, { DIF_2_P }, 1 }, 480912cfa14Sjmcneill { "eth_txd1_1", REG6, 5, { DIF_2_N }, 1 }, 481912cfa14Sjmcneill { "eth_tx_en", REG6, 6, { DIF_3_P }, 1 }, 482912cfa14Sjmcneill { "eth_ref_clk", REG6, 8, { DIF_3_N }, 1 }, 483912cfa14Sjmcneill { "eth_mdc", REG6, 9, { DIF_4_P }, 1 }, 484912cfa14Sjmcneill { "eth_mdio_en", REG6, 10, { DIF_4_N }, 1 }, 485e60aa95bSjmcneill { "eth_rxd3", REG7, 22, { DIF_2_P }, 1 }, 486e60aa95bSjmcneill { "eth_rxd2", REG7, 23, { DIF_2_N }, 1 }, 487912cfa14Sjmcneill }; 488912cfa14Sjmcneill 489912cfa14Sjmcneill static const struct meson_pinctrl_group meson8b_aobus_groups[] = { 490912cfa14Sjmcneill /* GPIOAO */ 491912cfa14Sjmcneill { "uart_tx_ao_a", REG, 12, { GPIOAO_0 }, 1 }, 492912cfa14Sjmcneill { "uart_rx_ao_a", REG, 11, { GPIOAO_1 }, 1 }, 493912cfa14Sjmcneill { "uart_cts_ao_a", REG, 10, { GPIOAO_2 }, 1 }, 494912cfa14Sjmcneill { "uart_rts_ao_a", REG, 9, { GPIOAO_3 }, 1 }, 495912cfa14Sjmcneill { "i2c_mst_sck_ao", REG, 6, { GPIOAO_4 }, 1 }, 496912cfa14Sjmcneill { "i2c_mst_sda_ao", REG, 5, { GPIOAO_5 }, 1 }, 497912cfa14Sjmcneill { "clk_32k_in_out", REG, 18, { GPIOAO_6 }, 1 }, 498912cfa14Sjmcneill { "remote_input", REG, 0, { GPIOAO_7 }, 1 }, 499912cfa14Sjmcneill { "hdmi_cec_1", REG, 17, { GPIOAO_12 }, 1 }, 500912cfa14Sjmcneill { "ir_blaster", REG, 31, { GPIOAO_13 }, 1 }, 501912cfa14Sjmcneill { "pwm_c2", REG, 22, { GPIOAO_3 }, 1 }, 502912cfa14Sjmcneill { "i2c_sck_ao", REG, 2, { GPIOAO_4 }, 1 }, 503912cfa14Sjmcneill { "i2c_sda_ao", REG, 1, { GPIOAO_5 }, 1 }, 504912cfa14Sjmcneill { "ir_remote_out", REG, 21, { GPIOAO_7 }, 1 }, 505912cfa14Sjmcneill { "i2s_am_clk_out", REG, 30, { GPIOAO_8 }, 1 }, 506912cfa14Sjmcneill { "i2s_ao_clk_out", REG, 29, { GPIOAO_9 }, 1 }, 507912cfa14Sjmcneill { "i2s_lr_clk_out", REG, 28, { GPIOAO_10 }, 1 }, 508912cfa14Sjmcneill { "i2s_out_01", REG, 27, { GPIOAO_11 }, 1 }, 509912cfa14Sjmcneill { "uart_tx_ao_b0", REG, 26, { GPIOAO_0 }, 1 }, 510912cfa14Sjmcneill { "uart_rx_ao_b0", REG, 25, { GPIOAO_1 }, 1 }, 511912cfa14Sjmcneill { "uart_cts_ao_b", REG, 8, { GPIOAO_2 }, 1 }, 512912cfa14Sjmcneill { "uart_rts_ao_b", REG, 7, { GPIOAO_3 }, 1 }, 513912cfa14Sjmcneill { "uart_tx_ao_b1", REG, 24, { GPIOAO_4 }, 1 }, 514912cfa14Sjmcneill { "uart_rx_ao_b1", REG, 23, { GPIOAO_5 }, 1 }, 515912cfa14Sjmcneill { "spdif_out_1", REG, 16, { GPIOAO_6 }, 1 }, 516912cfa14Sjmcneill { "i2s_in_ch01", REG, 13, { GPIOAO_6 }, 1 }, 517912cfa14Sjmcneill { "i2s_ao_clk_in", REG, 15, { GPIOAO_9 }, 1 }, 518912cfa14Sjmcneill { "i2s_lr_clk_in", REG, 14, { GPIOAO_10 }, 1 }, 519912cfa14Sjmcneill }; 520912cfa14Sjmcneill 521912cfa14Sjmcneill const struct meson_pinctrl_config meson8b_cbus_pinctrl_config = { 522912cfa14Sjmcneill .name = "Meson8b CBUS GPIO", 523912cfa14Sjmcneill .groups = meson8b_cbus_groups, 524912cfa14Sjmcneill .ngroups = __arraycount(meson8b_cbus_groups), 525912cfa14Sjmcneill .gpios = meson8b_cbus_gpios, 526912cfa14Sjmcneill .ngpios = __arraycount(meson8b_cbus_gpios), 527912cfa14Sjmcneill }; 528912cfa14Sjmcneill 529912cfa14Sjmcneill const struct meson_pinctrl_config meson8b_aobus_pinctrl_config = { 530912cfa14Sjmcneill .name = "Meson8b AO GPIO", 531912cfa14Sjmcneill .groups = meson8b_aobus_groups, 532912cfa14Sjmcneill .ngroups = __arraycount(meson8b_aobus_groups), 533912cfa14Sjmcneill .gpios = meson8b_aobus_gpios, 534912cfa14Sjmcneill .ngpios = __arraycount(meson8b_aobus_gpios), 535912cfa14Sjmcneill }; 536