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