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