root/drivers/pinctrl/meson/pinctrl-meson-gxbb.c

/* [<][>][^][v][top][bottom][index][help] */
   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Pin controller and GPIO driver for Amlogic Meson GXBB.
   4  *
   5  * Copyright (C) 2016 Endless Mobile, Inc.
   6  * Author: Carlo Caione <carlo@endlessm.com>
   7  */
   8 
   9 #include <dt-bindings/gpio/meson-gxbb-gpio.h>
  10 #include "pinctrl-meson.h"
  11 #include "pinctrl-meson8-pmx.h"
  12 
  13 static const struct pinctrl_pin_desc meson_gxbb_periphs_pins[] = {
  14         MESON_PIN(GPIOZ_0),
  15         MESON_PIN(GPIOZ_1),
  16         MESON_PIN(GPIOZ_2),
  17         MESON_PIN(GPIOZ_3),
  18         MESON_PIN(GPIOZ_4),
  19         MESON_PIN(GPIOZ_5),
  20         MESON_PIN(GPIOZ_6),
  21         MESON_PIN(GPIOZ_7),
  22         MESON_PIN(GPIOZ_8),
  23         MESON_PIN(GPIOZ_9),
  24         MESON_PIN(GPIOZ_10),
  25         MESON_PIN(GPIOZ_11),
  26         MESON_PIN(GPIOZ_12),
  27         MESON_PIN(GPIOZ_13),
  28         MESON_PIN(GPIOZ_14),
  29         MESON_PIN(GPIOZ_15),
  30 
  31         MESON_PIN(GPIOH_0),
  32         MESON_PIN(GPIOH_1),
  33         MESON_PIN(GPIOH_2),
  34         MESON_PIN(GPIOH_3),
  35 
  36         MESON_PIN(BOOT_0),
  37         MESON_PIN(BOOT_1),
  38         MESON_PIN(BOOT_2),
  39         MESON_PIN(BOOT_3),
  40         MESON_PIN(BOOT_4),
  41         MESON_PIN(BOOT_5),
  42         MESON_PIN(BOOT_6),
  43         MESON_PIN(BOOT_7),
  44         MESON_PIN(BOOT_8),
  45         MESON_PIN(BOOT_9),
  46         MESON_PIN(BOOT_10),
  47         MESON_PIN(BOOT_11),
  48         MESON_PIN(BOOT_12),
  49         MESON_PIN(BOOT_13),
  50         MESON_PIN(BOOT_14),
  51         MESON_PIN(BOOT_15),
  52         MESON_PIN(BOOT_16),
  53         MESON_PIN(BOOT_17),
  54 
  55         MESON_PIN(CARD_0),
  56         MESON_PIN(CARD_1),
  57         MESON_PIN(CARD_2),
  58         MESON_PIN(CARD_3),
  59         MESON_PIN(CARD_4),
  60         MESON_PIN(CARD_5),
  61         MESON_PIN(CARD_6),
  62 
  63         MESON_PIN(GPIODV_0),
  64         MESON_PIN(GPIODV_1),
  65         MESON_PIN(GPIODV_2),
  66         MESON_PIN(GPIODV_3),
  67         MESON_PIN(GPIODV_4),
  68         MESON_PIN(GPIODV_5),
  69         MESON_PIN(GPIODV_6),
  70         MESON_PIN(GPIODV_7),
  71         MESON_PIN(GPIODV_8),
  72         MESON_PIN(GPIODV_9),
  73         MESON_PIN(GPIODV_10),
  74         MESON_PIN(GPIODV_11),
  75         MESON_PIN(GPIODV_12),
  76         MESON_PIN(GPIODV_13),
  77         MESON_PIN(GPIODV_14),
  78         MESON_PIN(GPIODV_15),
  79         MESON_PIN(GPIODV_16),
  80         MESON_PIN(GPIODV_17),
  81         MESON_PIN(GPIODV_18),
  82         MESON_PIN(GPIODV_19),
  83         MESON_PIN(GPIODV_20),
  84         MESON_PIN(GPIODV_21),
  85         MESON_PIN(GPIODV_22),
  86         MESON_PIN(GPIODV_23),
  87         MESON_PIN(GPIODV_24),
  88         MESON_PIN(GPIODV_25),
  89         MESON_PIN(GPIODV_26),
  90         MESON_PIN(GPIODV_27),
  91         MESON_PIN(GPIODV_28),
  92         MESON_PIN(GPIODV_29),
  93 
  94         MESON_PIN(GPIOY_0),
  95         MESON_PIN(GPIOY_1),
  96         MESON_PIN(GPIOY_2),
  97         MESON_PIN(GPIOY_3),
  98         MESON_PIN(GPIOY_4),
  99         MESON_PIN(GPIOY_5),
 100         MESON_PIN(GPIOY_6),
 101         MESON_PIN(GPIOY_7),
 102         MESON_PIN(GPIOY_8),
 103         MESON_PIN(GPIOY_9),
 104         MESON_PIN(GPIOY_10),
 105         MESON_PIN(GPIOY_11),
 106         MESON_PIN(GPIOY_12),
 107         MESON_PIN(GPIOY_13),
 108         MESON_PIN(GPIOY_14),
 109         MESON_PIN(GPIOY_15),
 110         MESON_PIN(GPIOY_16),
 111 
 112         MESON_PIN(GPIOX_0),
 113         MESON_PIN(GPIOX_1),
 114         MESON_PIN(GPIOX_2),
 115         MESON_PIN(GPIOX_3),
 116         MESON_PIN(GPIOX_4),
 117         MESON_PIN(GPIOX_5),
 118         MESON_PIN(GPIOX_6),
 119         MESON_PIN(GPIOX_7),
 120         MESON_PIN(GPIOX_8),
 121         MESON_PIN(GPIOX_9),
 122         MESON_PIN(GPIOX_10),
 123         MESON_PIN(GPIOX_11),
 124         MESON_PIN(GPIOX_12),
 125         MESON_PIN(GPIOX_13),
 126         MESON_PIN(GPIOX_14),
 127         MESON_PIN(GPIOX_15),
 128         MESON_PIN(GPIOX_16),
 129         MESON_PIN(GPIOX_17),
 130         MESON_PIN(GPIOX_18),
 131         MESON_PIN(GPIOX_19),
 132         MESON_PIN(GPIOX_20),
 133         MESON_PIN(GPIOX_21),
 134         MESON_PIN(GPIOX_22),
 135 
 136         MESON_PIN(GPIOCLK_0),
 137         MESON_PIN(GPIOCLK_1),
 138         MESON_PIN(GPIOCLK_2),
 139         MESON_PIN(GPIOCLK_3),
 140 };
 141 
 142 static const unsigned int emmc_nand_d07_pins[] = {
 143         BOOT_0, BOOT_1, BOOT_2, BOOT_3, BOOT_4, BOOT_5, BOOT_6, BOOT_7,
 144 };
 145 static const unsigned int emmc_clk_pins[]       = { BOOT_8 };
 146 static const unsigned int emmc_cmd_pins[]       = { BOOT_10 };
 147 static const unsigned int emmc_ds_pins[]        = { BOOT_15 };
 148 
 149 static const unsigned int nor_d_pins[]          = { BOOT_11 };
 150 static const unsigned int nor_q_pins[]          = { BOOT_12 };
 151 static const unsigned int nor_c_pins[]          = { BOOT_13 };
 152 static const unsigned int nor_cs_pins[]         = { BOOT_15 };
 153 
 154 static const unsigned int spi_sclk_pins[]       = { GPIOZ_6 };
 155 static const unsigned int spi_ss0_pins[]        = { GPIOZ_7 };
 156 static const unsigned int spi_miso_pins[]       = { GPIOZ_12 };
 157 static const unsigned int spi_mosi_pins[]       = { GPIOZ_13 };
 158 
 159 static const unsigned int sdcard_d0_pins[]      = { CARD_1 };
 160 static const unsigned int sdcard_d1_pins[]      = { CARD_0 };
 161 static const unsigned int sdcard_d2_pins[]      = { CARD_5 };
 162 static const unsigned int sdcard_d3_pins[]      = { CARD_4 };
 163 static const unsigned int sdcard_cmd_pins[]     = { CARD_3 };
 164 static const unsigned int sdcard_clk_pins[]     = { CARD_2 };
 165 
 166 static const unsigned int sdio_d0_pins[]        = { GPIOX_0 };
 167 static const unsigned int sdio_d1_pins[]        = { GPIOX_1 };
 168 static const unsigned int sdio_d2_pins[]        = { GPIOX_2 };
 169 static const unsigned int sdio_d3_pins[]        = { GPIOX_3 };
 170 static const unsigned int sdio_cmd_pins[]       = { GPIOX_4 };
 171 static const unsigned int sdio_clk_pins[]       = { GPIOX_5 };
 172 static const unsigned int sdio_irq_pins[]       = { GPIOX_7 };
 173 
 174 static const unsigned int nand_ce0_pins[]       = { BOOT_8 };
 175 static const unsigned int nand_ce1_pins[]       = { BOOT_9 };
 176 static const unsigned int nand_rb0_pins[]       = { BOOT_10 };
 177 static const unsigned int nand_ale_pins[]       = { BOOT_11 };
 178 static const unsigned int nand_cle_pins[]       = { BOOT_12 };
 179 static const unsigned int nand_wen_clk_pins[]   = { BOOT_13 };
 180 static const unsigned int nand_ren_wr_pins[]    = { BOOT_14 };
 181 static const unsigned int nand_dqs_pins[]       = { BOOT_15 };
 182 
 183 static const unsigned int uart_tx_a_pins[]      = { GPIOX_12 };
 184 static const unsigned int uart_rx_a_pins[]      = { GPIOX_13 };
 185 static const unsigned int uart_cts_a_pins[]     = { GPIOX_14 };
 186 static const unsigned int uart_rts_a_pins[]     = { GPIOX_15 };
 187 
 188 static const unsigned int uart_tx_b_pins[]      = { GPIODV_24 };
 189 static const unsigned int uart_rx_b_pins[]      = { GPIODV_25 };
 190 static const unsigned int uart_cts_b_pins[]     = { GPIODV_26 };
 191 static const unsigned int uart_rts_b_pins[]     = { GPIODV_27 };
 192 
 193 static const unsigned int uart_tx_c_pins[]      = { GPIOY_13 };
 194 static const unsigned int uart_rx_c_pins[]      = { GPIOY_14 };
 195 static const unsigned int uart_cts_c_pins[]     = { GPIOY_11 };
 196 static const unsigned int uart_rts_c_pins[]     = { GPIOY_12 };
 197 
 198 static const unsigned int i2c_sck_a_pins[]      = { GPIODV_25 };
 199 static const unsigned int i2c_sda_a_pins[]      = { GPIODV_24 };
 200 
 201 static const unsigned int i2c_sck_b_pins[]      = { GPIODV_27 };
 202 static const unsigned int i2c_sda_b_pins[]      = { GPIODV_26 };
 203 
 204 static const unsigned int i2c_sck_c_pins[]      = { GPIODV_29 };
 205 static const unsigned int i2c_sda_c_pins[]      = { GPIODV_28 };
 206 
 207 static const unsigned int eth_mdio_pins[]       = { GPIOZ_0 };
 208 static const unsigned int eth_mdc_pins[]        = { GPIOZ_1 };
 209 static const unsigned int eth_clk_rx_clk_pins[] = { GPIOZ_2 };
 210 static const unsigned int eth_rx_dv_pins[]      = { GPIOZ_3 };
 211 static const unsigned int eth_rxd0_pins[]       = { GPIOZ_4 };
 212 static const unsigned int eth_rxd1_pins[]       = { GPIOZ_5 };
 213 static const unsigned int eth_rxd2_pins[]       = { GPIOZ_6 };
 214 static const unsigned int eth_rxd3_pins[]       = { GPIOZ_7 };
 215 static const unsigned int eth_rgmii_tx_clk_pins[] = { GPIOZ_8 };
 216 static const unsigned int eth_tx_en_pins[]      = { GPIOZ_9 };
 217 static const unsigned int eth_txd0_pins[]       = { GPIOZ_10 };
 218 static const unsigned int eth_txd1_pins[]       = { GPIOZ_11 };
 219 static const unsigned int eth_txd2_pins[]       = { GPIOZ_12 };
 220 static const unsigned int eth_txd3_pins[]       = { GPIOZ_13 };
 221 
 222 static const unsigned int pwm_a_x_pins[]        = { GPIOX_6 };
 223 static const unsigned int pwm_a_y_pins[]        = { GPIOY_16 };
 224 static const unsigned int pwm_b_pins[]          = { GPIODV_29 };
 225 static const unsigned int pwm_d_pins[]          = { GPIODV_28 };
 226 static const unsigned int pwm_e_pins[]          = { GPIOX_19 };
 227 static const unsigned int pwm_f_x_pins[]        = { GPIOX_7 };
 228 static const unsigned int pwm_f_y_pins[]        = { GPIOY_15 };
 229 
 230 static const unsigned int hdmi_hpd_pins[]       = { GPIOH_0 };
 231 static const unsigned int hdmi_sda_pins[]       = { GPIOH_1 };
 232 static const unsigned int hdmi_scl_pins[]       = { GPIOH_2 };
 233 
 234 static const unsigned int i2s_out_ch23_y_pins[] = { GPIOY_8 };
 235 static const unsigned int i2s_out_ch45_y_pins[] = { GPIOY_9 };
 236 static const unsigned int i2s_out_ch67_y_pins[] = { GPIOY_10 };
 237 
 238 static const unsigned int spdif_out_y_pins[]    = { GPIOY_12 };
 239 
 240 static const unsigned int gen_clk_out_pins[]    = { GPIOY_15 };
 241 
 242 static const struct pinctrl_pin_desc meson_gxbb_aobus_pins[] = {
 243         MESON_PIN(GPIOAO_0),
 244         MESON_PIN(GPIOAO_1),
 245         MESON_PIN(GPIOAO_2),
 246         MESON_PIN(GPIOAO_3),
 247         MESON_PIN(GPIOAO_4),
 248         MESON_PIN(GPIOAO_5),
 249         MESON_PIN(GPIOAO_6),
 250         MESON_PIN(GPIOAO_7),
 251         MESON_PIN(GPIOAO_8),
 252         MESON_PIN(GPIOAO_9),
 253         MESON_PIN(GPIOAO_10),
 254         MESON_PIN(GPIOAO_11),
 255         MESON_PIN(GPIOAO_12),
 256         MESON_PIN(GPIOAO_13),
 257 
 258         MESON_PIN(GPIO_TEST_N),
 259 };
 260 
 261 static const unsigned int uart_tx_ao_a_pins[]   = { GPIOAO_0 };
 262 static const unsigned int uart_rx_ao_a_pins[]   = { GPIOAO_1 };
 263 static const unsigned int uart_cts_ao_a_pins[]  = { GPIOAO_2 };
 264 static const unsigned int uart_rts_ao_a_pins[]  = { GPIOAO_3 };
 265 static const unsigned int uart_tx_ao_b_pins[]   = { GPIOAO_4 };
 266 static const unsigned int uart_rx_ao_b_pins[]   = { GPIOAO_5 };
 267 static const unsigned int uart_cts_ao_b_pins[]  = { GPIOAO_2 };
 268 static const unsigned int uart_rts_ao_b_pins[]  = { GPIOAO_3 };
 269 
 270 static const unsigned int i2c_sck_ao_pins[]     = { GPIOAO_4 };
 271 static const unsigned int i2c_sda_ao_pins[]     = { GPIOAO_5 };
 272 static const unsigned int i2c_slave_sck_ao_pins[] = {GPIOAO_4 };
 273 static const unsigned int i2c_slave_sda_ao_pins[] = {GPIOAO_5 };
 274 
 275 static const unsigned int remote_input_ao_pins[] = { GPIOAO_7 };
 276 
 277 static const unsigned int pwm_ao_a_3_pins[]     = { GPIOAO_3 };
 278 static const unsigned int pwm_ao_a_6_pins[]     = { GPIOAO_6 };
 279 static const unsigned int pwm_ao_a_12_pins[]    = { GPIOAO_12 };
 280 static const unsigned int pwm_ao_b_pins[]       = { GPIOAO_13 };
 281 
 282 static const unsigned int i2s_am_clk_pins[]     = { GPIOAO_8 };
 283 static const unsigned int i2s_out_ao_clk_pins[] = { GPIOAO_9 };
 284 static const unsigned int i2s_out_lr_clk_pins[] = { GPIOAO_10 };
 285 static const unsigned int i2s_out_ch01_ao_pins[] = { GPIOAO_11 };
 286 static const unsigned int i2s_out_ch23_ao_pins[] = { GPIOAO_12 };
 287 static const unsigned int i2s_out_ch45_ao_pins[] = { GPIOAO_13 };
 288 static const unsigned int i2s_out_ch67_ao_pins[] = { GPIO_TEST_N };
 289 
 290 static const unsigned int spdif_out_ao_6_pins[] = { GPIOAO_6 };
 291 static const unsigned int spdif_out_ao_13_pins[] = { GPIOAO_13 };
 292 
 293 static const unsigned int ao_cec_pins[]         = { GPIOAO_12 };
 294 static const unsigned int ee_cec_pins[]         = { GPIOAO_12 };
 295 
 296 static struct meson_pmx_group meson_gxbb_periphs_groups[] = {
 297         GPIO_GROUP(GPIOZ_0),
 298         GPIO_GROUP(GPIOZ_1),
 299         GPIO_GROUP(GPIOZ_2),
 300         GPIO_GROUP(GPIOZ_3),
 301         GPIO_GROUP(GPIOZ_4),
 302         GPIO_GROUP(GPIOZ_5),
 303         GPIO_GROUP(GPIOZ_6),
 304         GPIO_GROUP(GPIOZ_7),
 305         GPIO_GROUP(GPIOZ_8),
 306         GPIO_GROUP(GPIOZ_9),
 307         GPIO_GROUP(GPIOZ_10),
 308         GPIO_GROUP(GPIOZ_11),
 309         GPIO_GROUP(GPIOZ_12),
 310         GPIO_GROUP(GPIOZ_13),
 311         GPIO_GROUP(GPIOZ_14),
 312         GPIO_GROUP(GPIOZ_15),
 313 
 314         GPIO_GROUP(GPIOH_0),
 315         GPIO_GROUP(GPIOH_1),
 316         GPIO_GROUP(GPIOH_2),
 317         GPIO_GROUP(GPIOH_3),
 318 
 319         GPIO_GROUP(BOOT_0),
 320         GPIO_GROUP(BOOT_1),
 321         GPIO_GROUP(BOOT_2),
 322         GPIO_GROUP(BOOT_3),
 323         GPIO_GROUP(BOOT_4),
 324         GPIO_GROUP(BOOT_5),
 325         GPIO_GROUP(BOOT_6),
 326         GPIO_GROUP(BOOT_7),
 327         GPIO_GROUP(BOOT_8),
 328         GPIO_GROUP(BOOT_9),
 329         GPIO_GROUP(BOOT_10),
 330         GPIO_GROUP(BOOT_11),
 331         GPIO_GROUP(BOOT_12),
 332         GPIO_GROUP(BOOT_13),
 333         GPIO_GROUP(BOOT_14),
 334         GPIO_GROUP(BOOT_15),
 335         GPIO_GROUP(BOOT_16),
 336         GPIO_GROUP(BOOT_17),
 337 
 338         GPIO_GROUP(CARD_0),
 339         GPIO_GROUP(CARD_1),
 340         GPIO_GROUP(CARD_2),
 341         GPIO_GROUP(CARD_3),
 342         GPIO_GROUP(CARD_4),
 343         GPIO_GROUP(CARD_5),
 344         GPIO_GROUP(CARD_6),
 345 
 346         GPIO_GROUP(GPIODV_0),
 347         GPIO_GROUP(GPIODV_1),
 348         GPIO_GROUP(GPIODV_2),
 349         GPIO_GROUP(GPIODV_3),
 350         GPIO_GROUP(GPIODV_4),
 351         GPIO_GROUP(GPIODV_5),
 352         GPIO_GROUP(GPIODV_6),
 353         GPIO_GROUP(GPIODV_7),
 354         GPIO_GROUP(GPIODV_8),
 355         GPIO_GROUP(GPIODV_9),
 356         GPIO_GROUP(GPIODV_10),
 357         GPIO_GROUP(GPIODV_11),
 358         GPIO_GROUP(GPIODV_12),
 359         GPIO_GROUP(GPIODV_13),
 360         GPIO_GROUP(GPIODV_14),
 361         GPIO_GROUP(GPIODV_15),
 362         GPIO_GROUP(GPIODV_16),
 363         GPIO_GROUP(GPIODV_17),
 364         GPIO_GROUP(GPIODV_19),
 365         GPIO_GROUP(GPIODV_20),
 366         GPIO_GROUP(GPIODV_21),
 367         GPIO_GROUP(GPIODV_22),
 368         GPIO_GROUP(GPIODV_23),
 369         GPIO_GROUP(GPIODV_24),
 370         GPIO_GROUP(GPIODV_25),
 371         GPIO_GROUP(GPIODV_26),
 372         GPIO_GROUP(GPIODV_27),
 373         GPIO_GROUP(GPIODV_28),
 374         GPIO_GROUP(GPIODV_29),
 375 
 376         GPIO_GROUP(GPIOY_0),
 377         GPIO_GROUP(GPIOY_1),
 378         GPIO_GROUP(GPIOY_2),
 379         GPIO_GROUP(GPIOY_3),
 380         GPIO_GROUP(GPIOY_4),
 381         GPIO_GROUP(GPIOY_5),
 382         GPIO_GROUP(GPIOY_6),
 383         GPIO_GROUP(GPIOY_7),
 384         GPIO_GROUP(GPIOY_8),
 385         GPIO_GROUP(GPIOY_9),
 386         GPIO_GROUP(GPIOY_10),
 387         GPIO_GROUP(GPIOY_11),
 388         GPIO_GROUP(GPIOY_12),
 389         GPIO_GROUP(GPIOY_13),
 390         GPIO_GROUP(GPIOY_14),
 391         GPIO_GROUP(GPIOY_15),
 392         GPIO_GROUP(GPIOY_16),
 393 
 394         GPIO_GROUP(GPIOX_0),
 395         GPIO_GROUP(GPIOX_1),
 396         GPIO_GROUP(GPIOX_2),
 397         GPIO_GROUP(GPIOX_3),
 398         GPIO_GROUP(GPIOX_4),
 399         GPIO_GROUP(GPIOX_5),
 400         GPIO_GROUP(GPIOX_6),
 401         GPIO_GROUP(GPIOX_7),
 402         GPIO_GROUP(GPIOX_8),
 403         GPIO_GROUP(GPIOX_9),
 404         GPIO_GROUP(GPIOX_10),
 405         GPIO_GROUP(GPIOX_11),
 406         GPIO_GROUP(GPIOX_12),
 407         GPIO_GROUP(GPIOX_13),
 408         GPIO_GROUP(GPIOX_14),
 409         GPIO_GROUP(GPIOX_15),
 410         GPIO_GROUP(GPIOX_16),
 411         GPIO_GROUP(GPIOX_17),
 412         GPIO_GROUP(GPIOX_18),
 413         GPIO_GROUP(GPIOX_19),
 414         GPIO_GROUP(GPIOX_20),
 415         GPIO_GROUP(GPIOX_21),
 416         GPIO_GROUP(GPIOX_22),
 417 
 418         GPIO_GROUP(GPIOCLK_0),
 419         GPIO_GROUP(GPIOCLK_1),
 420         GPIO_GROUP(GPIOCLK_2),
 421         GPIO_GROUP(GPIOCLK_3),
 422 
 423         GPIO_GROUP(GPIO_TEST_N),
 424 
 425         /* Bank X */
 426         GROUP(sdio_d0,          8,      5),
 427         GROUP(sdio_d1,          8,      4),
 428         GROUP(sdio_d2,          8,      3),
 429         GROUP(sdio_d3,          8,      2),
 430         GROUP(sdio_cmd,         8,      1),
 431         GROUP(sdio_clk,         8,      0),
 432         GROUP(sdio_irq,         8,      11),
 433         GROUP(uart_tx_a,        4,      13),
 434         GROUP(uart_rx_a,        4,      12),
 435         GROUP(uart_cts_a,       4,      11),
 436         GROUP(uart_rts_a,       4,      10),
 437         GROUP(pwm_a_x,          3,      17),
 438         GROUP(pwm_e,            2,      30),
 439         GROUP(pwm_f_x,          3,      18),
 440 
 441         /* Bank Y */
 442         GROUP(uart_cts_c,       1,      17),
 443         GROUP(uart_rts_c,       1,      16),
 444         GROUP(uart_tx_c,        1,      19),
 445         GROUP(uart_rx_c,        1,      18),
 446         GROUP(pwm_a_y,          1,      21),
 447         GROUP(pwm_f_y,          1,      20),
 448         GROUP(i2s_out_ch23_y,   1,      5),
 449         GROUP(i2s_out_ch45_y,   1,      6),
 450         GROUP(i2s_out_ch67_y,   1,      7),
 451         GROUP(spdif_out_y,      1,      9),
 452         GROUP(gen_clk_out,      6,      15),
 453 
 454         /* Bank Z */
 455         GROUP(eth_mdio,         6,      1),
 456         GROUP(eth_mdc,          6,      0),
 457         GROUP(eth_clk_rx_clk,   6,      13),
 458         GROUP(eth_rx_dv,        6,      12),
 459         GROUP(eth_rxd0,         6,      11),
 460         GROUP(eth_rxd1,         6,      10),
 461         GROUP(eth_rxd2,         6,      9),
 462         GROUP(eth_rxd3,         6,      8),
 463         GROUP(eth_rgmii_tx_clk, 6,      7),
 464         GROUP(eth_tx_en,        6,      6),
 465         GROUP(eth_txd0,         6,      5),
 466         GROUP(eth_txd1,         6,      4),
 467         GROUP(eth_txd2,         6,      3),
 468         GROUP(eth_txd3,         6,      2),
 469         GROUP(spi_ss0,          5,      26),
 470         GROUP(spi_sclk,         5,      27),
 471         GROUP(spi_miso,         5,      28),
 472         GROUP(spi_mosi,         5,      29),
 473 
 474         /* Bank H */
 475         GROUP(hdmi_hpd,         1,      26),
 476         GROUP(hdmi_sda,         1,      25),
 477         GROUP(hdmi_scl,         1,      24),
 478 
 479         /* Bank DV */
 480         GROUP(uart_tx_b,        2,      29),
 481         GROUP(uart_rx_b,        2,      28),
 482         GROUP(uart_cts_b,       2,      27),
 483         GROUP(uart_rts_b,       2,      26),
 484         GROUP(pwm_b,            3,      21),
 485         GROUP(pwm_d,            3,      20),
 486         GROUP(i2c_sck_a,        7,      27),
 487         GROUP(i2c_sda_a,        7,      26),
 488         GROUP(i2c_sck_b,        7,      25),
 489         GROUP(i2c_sda_b,        7,      24),
 490         GROUP(i2c_sck_c,        7,      23),
 491         GROUP(i2c_sda_c,        7,      22),
 492 
 493         /* Bank BOOT */
 494         GROUP(emmc_nand_d07,    4,      30),
 495         GROUP(emmc_clk,         4,      18),
 496         GROUP(emmc_cmd,         4,      19),
 497         GROUP(emmc_ds,          4,      31),
 498         GROUP(nor_d,            5,      1),
 499         GROUP(nor_q,            5,      3),
 500         GROUP(nor_c,            5,      2),
 501         GROUP(nor_cs,           5,      0),
 502         GROUP(nand_ce0,         4,      26),
 503         GROUP(nand_ce1,         4,      27),
 504         GROUP(nand_rb0,         4,      25),
 505         GROUP(nand_ale,         4,      24),
 506         GROUP(nand_cle,         4,      23),
 507         GROUP(nand_wen_clk,     4,      22),
 508         GROUP(nand_ren_wr,      4,      21),
 509         GROUP(nand_dqs,         4,      20),
 510 
 511         /* Bank CARD */
 512         GROUP(sdcard_d1,        2,      14),
 513         GROUP(sdcard_d0,        2,      15),
 514         GROUP(sdcard_d3,        2,      12),
 515         GROUP(sdcard_d2,        2,      13),
 516         GROUP(sdcard_cmd,       2,      10),
 517         GROUP(sdcard_clk,       2,      11),
 518 };
 519 
 520 static struct meson_pmx_group meson_gxbb_aobus_groups[] = {
 521         GPIO_GROUP(GPIOAO_0),
 522         GPIO_GROUP(GPIOAO_1),
 523         GPIO_GROUP(GPIOAO_2),
 524         GPIO_GROUP(GPIOAO_3),
 525         GPIO_GROUP(GPIOAO_4),
 526         GPIO_GROUP(GPIOAO_5),
 527         GPIO_GROUP(GPIOAO_6),
 528         GPIO_GROUP(GPIOAO_7),
 529         GPIO_GROUP(GPIOAO_8),
 530         GPIO_GROUP(GPIOAO_9),
 531         GPIO_GROUP(GPIOAO_10),
 532         GPIO_GROUP(GPIOAO_11),
 533         GPIO_GROUP(GPIOAO_12),
 534         GPIO_GROUP(GPIOAO_13),
 535 
 536         /* bank AO */
 537         GROUP(uart_tx_ao_b,     0,      24),
 538         GROUP(uart_rx_ao_b,     0,      25),
 539         GROUP(uart_tx_ao_a,     0,      12),
 540         GROUP(uart_rx_ao_a,     0,      11),
 541         GROUP(uart_cts_ao_a,    0,      10),
 542         GROUP(uart_rts_ao_a,    0,      9),
 543         GROUP(uart_cts_ao_b,    0,      8),
 544         GROUP(uart_rts_ao_b,    0,      7),
 545         GROUP(i2c_sck_ao,       0,      6),
 546         GROUP(i2c_sda_ao,       0,      5),
 547         GROUP(i2c_slave_sck_ao, 0,      2),
 548         GROUP(i2c_slave_sda_ao, 0,      1),
 549         GROUP(remote_input_ao,  0,      0),
 550         GROUP(pwm_ao_a_3,       0,      22),
 551         GROUP(pwm_ao_a_6,       0,      18),
 552         GROUP(pwm_ao_a_12,      0,      17),
 553         GROUP(pwm_ao_b,         0,      3),
 554         GROUP(i2s_am_clk,       0,      30),
 555         GROUP(i2s_out_ao_clk,   0,      29),
 556         GROUP(i2s_out_lr_clk,   0,      28),
 557         GROUP(i2s_out_ch01_ao,  0,      27),
 558         GROUP(i2s_out_ch23_ao,  1,      0),
 559         GROUP(i2s_out_ch45_ao,  1,      1),
 560         GROUP(spdif_out_ao_6,   0,      16),
 561         GROUP(spdif_out_ao_13,  0,      4),
 562         GROUP(ao_cec,           0,      15),
 563         GROUP(ee_cec,           0,      14),
 564 
 565         /* test n pin */
 566         GROUP(i2s_out_ch67_ao,  1,      2),
 567 };
 568 
 569 static const char * const gpio_periphs_groups[] = {
 570         "GPIOZ_0", "GPIOZ_1", "GPIOZ_2", "GPIOZ_3", "GPIOZ_4",
 571         "GPIOZ_5", "GPIOZ_6", "GPIOZ_7", "GPIOZ_8", "GPIOZ_9",
 572         "GPIOZ_10", "GPIOZ_11", "GPIOZ_12", "GPIOZ_13", "GPIOZ_14",
 573         "GPIOZ_15",
 574 
 575         "GPIOH_0", "GPIOH_1", "GPIOH_2", "GPIOH_3",
 576 
 577         "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4",
 578         "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_9",
 579         "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14",
 580         "BOOT_15", "BOOT_16", "BOOT_17",
 581 
 582         "CARD_0", "CARD_1", "CARD_2", "CARD_3", "CARD_4",
 583         "CARD_5", "CARD_6",
 584 
 585         "GPIODV_0", "GPIODV_1", "GPIODV_2", "GPIODV_3", "GPIODV_4",
 586         "GPIODV_5", "GPIODV_6", "GPIODV_7", "GPIODV_8", "GPIODV_9",
 587         "GPIODV_10", "GPIODV_11", "GPIODV_12", "GPIODV_13", "GPIODV_14",
 588         "GPIODV_15", "GPIODV_16", "GPIODV_17", "GPIODV_18", "GPIODV_19",
 589         "GPIODV_20", "GPIODV_21", "GPIODV_22", "GPIODV_23", "GPIODV_24",
 590         "GPIODV_25", "GPIODV_26", "GPIODV_27", "GPIODV_28", "GPIODV_29",
 591 
 592         "GPIOY_0", "GPIOY_1", "GPIOY_2", "GPIOY_3", "GPIOY_4",
 593         "GPIOY_5", "GPIOY_6", "GPIOY_7", "GPIOY_8", "GPIOY_9",
 594         "GPIOY_10", "GPIOY_11", "GPIOY_12", "GPIOY_13", "GPIOY_14",
 595         "GPIOY_15", "GPIOY_16",
 596 
 597         "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", "GPIOX_4",
 598         "GPIOX_5", "GPIOX_6", "GPIOX_7", "GPIOX_8", "GPIOX_9",
 599         "GPIOX_10", "GPIOX_11", "GPIOX_12", "GPIOX_13", "GPIOX_14",
 600         "GPIOX_15", "GPIOX_16", "GPIOX_17", "GPIOX_18", "GPIOX_19",
 601         "GPIOX_20", "GPIOX_21", "GPIOX_22",
 602 };
 603 
 604 static const char * const emmc_groups[] = {
 605         "emmc_nand_d07", "emmc_clk", "emmc_cmd", "emmc_ds",
 606 };
 607 
 608 static const char * const nor_groups[] = {
 609         "nor_d", "nor_q", "nor_c", "nor_cs",
 610 };
 611 
 612 static const char * const spi_groups[] = {
 613         "spi_mosi", "spi_miso", "spi_ss0", "spi_sclk",
 614 };
 615 
 616 static const char * const sdcard_groups[] = {
 617         "sdcard_d0", "sdcard_d1", "sdcard_d2", "sdcard_d3",
 618         "sdcard_cmd", "sdcard_clk",
 619 };
 620 
 621 static const char * const sdio_groups[] = {
 622         "sdio_d0", "sdio_d1", "sdio_d2", "sdio_d3",
 623         "sdio_cmd", "sdio_clk", "sdio_irq",
 624 };
 625 
 626 static const char * const nand_groups[] = {
 627         "emmc_nand_d07", "nand_ce0", "nand_ce1", "nand_rb0", "nand_ale",
 628         "nand_cle", "nand_wen_clk", "nand_ren_wr", "nand_dqs",
 629 };
 630 
 631 static const char * const uart_a_groups[] = {
 632         "uart_tx_a", "uart_rx_a", "uart_cts_a", "uart_rts_a",
 633 };
 634 
 635 static const char * const uart_b_groups[] = {
 636         "uart_tx_b", "uart_rx_b", "uart_cts_b", "uart_rts_b",
 637 };
 638 
 639 static const char * const uart_c_groups[] = {
 640         "uart_tx_c", "uart_rx_c", "uart_cts_c", "uart_rts_c",
 641 };
 642 
 643 static const char * const i2c_a_groups[] = {
 644         "i2c_sck_a", "i2c_sda_a",
 645 };
 646 
 647 static const char * const i2c_b_groups[] = {
 648         "i2c_sck_b", "i2c_sda_b",
 649 };
 650 
 651 static const char * const i2c_c_groups[] = {
 652         "i2c_sck_c", "i2c_sda_c",
 653 };
 654 
 655 static const char * const eth_groups[] = {
 656         "eth_mdio", "eth_mdc", "eth_clk_rx_clk", "eth_rx_dv",
 657         "eth_rxd0", "eth_rxd1", "eth_rxd2", "eth_rxd3",
 658         "eth_rgmii_tx_clk", "eth_tx_en",
 659         "eth_txd0", "eth_txd1", "eth_txd2", "eth_txd3",
 660 };
 661 
 662 static const char * const pwm_a_x_groups[] = {
 663         "pwm_a_x",
 664 };
 665 
 666 static const char * const pwm_a_y_groups[] = {
 667         "pwm_a_y",
 668 };
 669 
 670 static const char * const pwm_b_groups[] = {
 671         "pwm_b",
 672 };
 673 
 674 static const char * const pwm_d_groups[] = {
 675         "pwm_d",
 676 };
 677 
 678 static const char * const pwm_e_groups[] = {
 679         "pwm_e",
 680 };
 681 
 682 static const char * const pwm_f_x_groups[] = {
 683         "pwm_f_x",
 684 };
 685 
 686 static const char * const pwm_f_y_groups[] = {
 687         "pwm_f_y",
 688 };
 689 
 690 static const char * const hdmi_hpd_groups[] = {
 691         "hdmi_hpd",
 692 };
 693 
 694 static const char * const hdmi_i2c_groups[] = {
 695         "hdmi_sda", "hdmi_scl",
 696 };
 697 
 698 static const char * const i2s_out_groups[] = {
 699         "i2s_out_ch23_y", "i2s_out_ch45_y", "i2s_out_ch67_y",
 700 };
 701 
 702 static const char * const spdif_out_groups[] = {
 703         "spdif_out_y",
 704 };
 705 
 706 static const char * const gen_clk_out_groups[] = {
 707         "gen_clk_out",
 708 };
 709 
 710 static const char * const gpio_aobus_groups[] = {
 711         "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3", "GPIOAO_4",
 712         "GPIOAO_5", "GPIOAO_6", "GPIOAO_7", "GPIOAO_8", "GPIOAO_9",
 713         "GPIOAO_10", "GPIOAO_11", "GPIOAO_12", "GPIOAO_13",
 714 
 715         "GPIO_TEST_N",
 716 };
 717 
 718 static const char * const uart_ao_groups[] = {
 719         "uart_tx_ao_a", "uart_rx_ao_a", "uart_cts_ao_a", "uart_rts_ao_a",
 720 };
 721 
 722 static const char * const uart_ao_b_groups[] = {
 723         "uart_tx_ao_b", "uart_rx_ao_b", "uart_cts_ao_b", "uart_rts_ao_b",
 724 };
 725 
 726 static const char * const i2c_ao_groups[] = {
 727         "i2c_sck_ao", "i2c_sda_ao",
 728 };
 729 
 730 static const char * const i2c_slave_ao_groups[] = {
 731         "i2c_slave_sck_ao", "i2c_slave_sda_ao",
 732 };
 733 
 734 static const char * const remote_input_ao_groups[] = {
 735         "remote_input_ao",
 736 };
 737 
 738 static const char * const pwm_ao_a_3_groups[] = {
 739         "pwm_ao_a_3",
 740 };
 741 
 742 static const char * const pwm_ao_a_6_groups[] = {
 743         "pwm_ao_a_6",
 744 };
 745 
 746 static const char * const pwm_ao_a_12_groups[] = {
 747         "pwm_ao_a_12",
 748 };
 749 
 750 static const char * const pwm_ao_b_groups[] = {
 751         "pwm_ao_b",
 752 };
 753 
 754 static const char * const i2s_out_ao_groups[] = {
 755         "i2s_am_clk", "i2s_out_ao_clk", "i2s_out_lr_clk",
 756         "i2s_out_ch01_ao", "i2s_out_ch23_ao", "i2s_out_ch45_ao",
 757         "i2s_out_ch67_ao",
 758 };
 759 
 760 static const char * const spdif_out_ao_groups[] = {
 761         "spdif_out_ao_6", "spdif_out_ao_13",
 762 };
 763 
 764 static const char * const cec_ao_groups[] = {
 765         "ao_cec", "ee_cec",
 766 };
 767 
 768 static struct meson_pmx_func meson_gxbb_periphs_functions[] = {
 769         FUNCTION(gpio_periphs),
 770         FUNCTION(emmc),
 771         FUNCTION(nor),
 772         FUNCTION(spi),
 773         FUNCTION(sdcard),
 774         FUNCTION(sdio),
 775         FUNCTION(nand),
 776         FUNCTION(uart_a),
 777         FUNCTION(uart_b),
 778         FUNCTION(uart_c),
 779         FUNCTION(i2c_a),
 780         FUNCTION(i2c_b),
 781         FUNCTION(i2c_c),
 782         FUNCTION(eth),
 783         FUNCTION(pwm_a_x),
 784         FUNCTION(pwm_a_y),
 785         FUNCTION(pwm_b),
 786         FUNCTION(pwm_d),
 787         FUNCTION(pwm_e),
 788         FUNCTION(pwm_f_x),
 789         FUNCTION(pwm_f_y),
 790         FUNCTION(hdmi_hpd),
 791         FUNCTION(hdmi_i2c),
 792         FUNCTION(i2s_out),
 793         FUNCTION(spdif_out),
 794         FUNCTION(gen_clk_out),
 795 };
 796 
 797 static struct meson_pmx_func meson_gxbb_aobus_functions[] = {
 798         FUNCTION(gpio_aobus),
 799         FUNCTION(uart_ao),
 800         FUNCTION(uart_ao_b),
 801         FUNCTION(i2c_ao),
 802         FUNCTION(i2c_slave_ao),
 803         FUNCTION(remote_input_ao),
 804         FUNCTION(pwm_ao_a_3),
 805         FUNCTION(pwm_ao_a_6),
 806         FUNCTION(pwm_ao_a_12),
 807         FUNCTION(pwm_ao_b),
 808         FUNCTION(i2s_out_ao),
 809         FUNCTION(spdif_out_ao),
 810         FUNCTION(cec_ao),
 811 };
 812 
 813 static struct meson_bank meson_gxbb_periphs_banks[] = {
 814         /*   name    first      last       irq       pullen  pull    dir     out     in  */
 815         BANK("X",    GPIOX_0,   GPIOX_22,  106, 128, 4,  0,  4,  0,  12, 0,  13, 0,  14, 0),
 816         BANK("Y",    GPIOY_0,   GPIOY_16,   89, 105, 1,  0,  1,  0,  3,  0,  4,  0,  5,  0),
 817         BANK("DV",   GPIODV_0,  GPIODV_29,  59,  88, 0,  0,  0,  0,  0,  0,  1,  0,  2,  0),
 818         BANK("H",    GPIOH_0,   GPIOH_3,    30,  33, 1, 20,  1, 20,  3, 20,  4, 20,  5, 20),
 819         BANK("Z",    GPIOZ_0,   GPIOZ_15,   14,  29, 3,  0,  3,  0,  9,  0,  10, 0, 11,  0),
 820         BANK("CARD", CARD_0,    CARD_6,     52,  58, 2, 20,  2, 20,  6, 20,  7, 20,  8, 20),
 821         BANK("BOOT", BOOT_0,    BOOT_17,    34,  51, 2,  0,  2,  0,  6,  0,  7,  0,  8,  0),
 822         BANK("CLK",  GPIOCLK_0, GPIOCLK_3, 129, 132, 3, 28,  3, 28,  9, 28, 10, 28, 11, 28),
 823 };
 824 
 825 static struct meson_bank meson_gxbb_aobus_banks[] = {
 826         /*   name    first      last       irq    pullen  pull    dir     out     in  */
 827         BANK("AO",   GPIOAO_0,  GPIOAO_13, 0, 13, 0,  16, 0, 0,   0,  0,  0, 16,  1,  0),
 828 };
 829 
 830 static struct meson_pinctrl_data meson_gxbb_periphs_pinctrl_data = {
 831         .name           = "periphs-banks",
 832         .pins           = meson_gxbb_periphs_pins,
 833         .groups         = meson_gxbb_periphs_groups,
 834         .funcs          = meson_gxbb_periphs_functions,
 835         .banks          = meson_gxbb_periphs_banks,
 836         .num_pins       = ARRAY_SIZE(meson_gxbb_periphs_pins),
 837         .num_groups     = ARRAY_SIZE(meson_gxbb_periphs_groups),
 838         .num_funcs      = ARRAY_SIZE(meson_gxbb_periphs_functions),
 839         .num_banks      = ARRAY_SIZE(meson_gxbb_periphs_banks),
 840         .pmx_ops        = &meson8_pmx_ops,
 841 };
 842 
 843 static struct meson_pinctrl_data meson_gxbb_aobus_pinctrl_data = {
 844         .name           = "aobus-banks",
 845         .pins           = meson_gxbb_aobus_pins,
 846         .groups         = meson_gxbb_aobus_groups,
 847         .funcs          = meson_gxbb_aobus_functions,
 848         .banks          = meson_gxbb_aobus_banks,
 849         .num_pins       = ARRAY_SIZE(meson_gxbb_aobus_pins),
 850         .num_groups     = ARRAY_SIZE(meson_gxbb_aobus_groups),
 851         .num_funcs      = ARRAY_SIZE(meson_gxbb_aobus_functions),
 852         .num_banks      = ARRAY_SIZE(meson_gxbb_aobus_banks),
 853         .pmx_ops        = &meson8_pmx_ops,
 854 };
 855 
 856 static const struct of_device_id meson_gxbb_pinctrl_dt_match[] = {
 857         {
 858                 .compatible = "amlogic,meson-gxbb-periphs-pinctrl",
 859                 .data = &meson_gxbb_periphs_pinctrl_data,
 860         },
 861         {
 862                 .compatible = "amlogic,meson-gxbb-aobus-pinctrl",
 863                 .data = &meson_gxbb_aobus_pinctrl_data,
 864         },
 865         { },
 866 };
 867 
 868 static struct platform_driver meson_gxbb_pinctrl_driver = {
 869         .probe          = meson_pinctrl_probe,
 870         .driver = {
 871                 .name   = "meson-gxbb-pinctrl",
 872                 .of_match_table = meson_gxbb_pinctrl_dt_match,
 873         },
 874 };
 875 builtin_platform_driver(meson_gxbb_pinctrl_driver);

/* [<][>][^][v][top][bottom][index][help] */