1*657cbf9bSIvan T. Ivanov // SPDX-License-Identifier: GPL-2.0+ 2*657cbf9bSIvan T. Ivanov /* 3*657cbf9bSIvan T. Ivanov * Driver for Broadcom brcmstb GPIO units (pinctrl only) 4*657cbf9bSIvan T. Ivanov * 5*657cbf9bSIvan T. Ivanov * Copyright (C) 2024-2025 Ivan T. Ivanov, Andrea della Porta 6*657cbf9bSIvan T. Ivanov * Copyright (C) 2021-3 Raspberry Pi Ltd. 7*657cbf9bSIvan T. Ivanov * Copyright (C) 2012 Chris Boot, Simon Arlott, Stephen Warren 8*657cbf9bSIvan T. Ivanov * 9*657cbf9bSIvan T. Ivanov * Based heavily on the BCM2835 GPIO & pinctrl driver, which was inspired by: 10*657cbf9bSIvan T. Ivanov * pinctrl-nomadik.c, please see original file for copyright information 11*657cbf9bSIvan T. Ivanov * pinctrl-tegra.c, please see original file for copyright information 12*657cbf9bSIvan T. Ivanov */ 13*657cbf9bSIvan T. Ivanov 14*657cbf9bSIvan T. Ivanov #include <linux/pinctrl/pinctrl.h> 15*657cbf9bSIvan T. Ivanov #include <linux/of.h> 16*657cbf9bSIvan T. Ivanov #include "pinctrl-brcmstb.h" 17*657cbf9bSIvan T. Ivanov 18*657cbf9bSIvan T. Ivanov #define BRCMSTB_FSEL_COUNT 8 19*657cbf9bSIvan T. Ivanov #define BRCMSTB_FSEL_MASK 0xf 20*657cbf9bSIvan T. Ivanov 21*657cbf9bSIvan T. Ivanov #define BRCMSTB_PIN(i, f1, f2, f3, f4, f5, f6, f7, f8) \ 22*657cbf9bSIvan T. Ivanov [i] = { \ 23*657cbf9bSIvan T. Ivanov .funcs = (u8[]) { \ 24*657cbf9bSIvan T. Ivanov func_##f1, \ 25*657cbf9bSIvan T. Ivanov func_##f2, \ 26*657cbf9bSIvan T. Ivanov func_##f3, \ 27*657cbf9bSIvan T. Ivanov func_##f4, \ 28*657cbf9bSIvan T. Ivanov func_##f5, \ 29*657cbf9bSIvan T. Ivanov func_##f6, \ 30*657cbf9bSIvan T. Ivanov func_##f7, \ 31*657cbf9bSIvan T. Ivanov func_##f8, \ 32*657cbf9bSIvan T. Ivanov }, \ 33*657cbf9bSIvan T. Ivanov .n_funcs = BRCMSTB_FSEL_COUNT, \ 34*657cbf9bSIvan T. Ivanov .func_mask = BRCMSTB_FSEL_MASK, \ 35*657cbf9bSIvan T. Ivanov } 36*657cbf9bSIvan T. Ivanov 37*657cbf9bSIvan T. Ivanov enum bcm2712_funcs { 38*657cbf9bSIvan T. Ivanov func_gpio, 39*657cbf9bSIvan T. Ivanov func_alt1, 40*657cbf9bSIvan T. Ivanov func_alt2, 41*657cbf9bSIvan T. Ivanov func_alt3, 42*657cbf9bSIvan T. Ivanov func_alt4, 43*657cbf9bSIvan T. Ivanov func_alt5, 44*657cbf9bSIvan T. Ivanov func_alt6, 45*657cbf9bSIvan T. Ivanov func_alt7, 46*657cbf9bSIvan T. Ivanov func_alt8, 47*657cbf9bSIvan T. Ivanov func_aon_cpu_standbyb, 48*657cbf9bSIvan T. Ivanov func_aon_fp_4sec_resetb, 49*657cbf9bSIvan T. Ivanov func_aon_gpclk, 50*657cbf9bSIvan T. Ivanov func_aon_pwm, 51*657cbf9bSIvan T. Ivanov func_arm_jtag, 52*657cbf9bSIvan T. Ivanov func_aud_fs_clk0, 53*657cbf9bSIvan T. Ivanov func_avs_pmu_bsc, 54*657cbf9bSIvan T. Ivanov func_bsc_m0, 55*657cbf9bSIvan T. Ivanov func_bsc_m1, 56*657cbf9bSIvan T. Ivanov func_bsc_m2, 57*657cbf9bSIvan T. Ivanov func_bsc_m3, 58*657cbf9bSIvan T. Ivanov func_clk_observe, 59*657cbf9bSIvan T. Ivanov func_ctl_hdmi_5v, 60*657cbf9bSIvan T. Ivanov func_enet0, 61*657cbf9bSIvan T. Ivanov func_enet0_mii, 62*657cbf9bSIvan T. Ivanov func_enet0_rgmii, 63*657cbf9bSIvan T. Ivanov func_ext_sc_clk, 64*657cbf9bSIvan T. Ivanov func_fl0, 65*657cbf9bSIvan T. Ivanov func_fl1, 66*657cbf9bSIvan T. Ivanov func_gpclk0, 67*657cbf9bSIvan T. Ivanov func_gpclk1, 68*657cbf9bSIvan T. Ivanov func_gpclk2, 69*657cbf9bSIvan T. Ivanov func_hdmi_tx0_auto_i2c, 70*657cbf9bSIvan T. Ivanov func_hdmi_tx0_bsc, 71*657cbf9bSIvan T. Ivanov func_hdmi_tx1_auto_i2c, 72*657cbf9bSIvan T. Ivanov func_hdmi_tx1_bsc, 73*657cbf9bSIvan T. Ivanov func_i2s_in, 74*657cbf9bSIvan T. Ivanov func_i2s_out, 75*657cbf9bSIvan T. Ivanov func_ir_in, 76*657cbf9bSIvan T. Ivanov func_mtsif, 77*657cbf9bSIvan T. Ivanov func_mtsif_alt, 78*657cbf9bSIvan T. Ivanov func_mtsif_alt1, 79*657cbf9bSIvan T. Ivanov func_pdm, 80*657cbf9bSIvan T. Ivanov func_pkt, 81*657cbf9bSIvan T. Ivanov func_pm_led_out, 82*657cbf9bSIvan T. Ivanov func_sc0, 83*657cbf9bSIvan T. Ivanov func_sd0, 84*657cbf9bSIvan T. Ivanov func_sd2, 85*657cbf9bSIvan T. Ivanov func_sd_card_a, 86*657cbf9bSIvan T. Ivanov func_sd_card_b, 87*657cbf9bSIvan T. Ivanov func_sd_card_c, 88*657cbf9bSIvan T. Ivanov func_sd_card_d, 89*657cbf9bSIvan T. Ivanov func_sd_card_e, 90*657cbf9bSIvan T. Ivanov func_sd_card_f, 91*657cbf9bSIvan T. Ivanov func_sd_card_g, 92*657cbf9bSIvan T. Ivanov func_spdif_out, 93*657cbf9bSIvan T. Ivanov func_spi_m, 94*657cbf9bSIvan T. Ivanov func_spi_s, 95*657cbf9bSIvan T. Ivanov func_sr_edm_sense, 96*657cbf9bSIvan T. Ivanov func_te0, 97*657cbf9bSIvan T. Ivanov func_te1, 98*657cbf9bSIvan T. Ivanov func_tsio, 99*657cbf9bSIvan T. Ivanov func_uart0, 100*657cbf9bSIvan T. Ivanov func_uart1, 101*657cbf9bSIvan T. Ivanov func_uart2, 102*657cbf9bSIvan T. Ivanov func_usb_pwr, 103*657cbf9bSIvan T. Ivanov func_usb_vbus, 104*657cbf9bSIvan T. Ivanov func_uui, 105*657cbf9bSIvan T. Ivanov func_vc_i2c0, 106*657cbf9bSIvan T. Ivanov func_vc_i2c3, 107*657cbf9bSIvan T. Ivanov func_vc_i2c4, 108*657cbf9bSIvan T. Ivanov func_vc_i2c5, 109*657cbf9bSIvan T. Ivanov func_vc_i2csl, 110*657cbf9bSIvan T. Ivanov func_vc_pcm, 111*657cbf9bSIvan T. Ivanov func_vc_pwm0, 112*657cbf9bSIvan T. Ivanov func_vc_pwm1, 113*657cbf9bSIvan T. Ivanov func_vc_spi0, 114*657cbf9bSIvan T. Ivanov func_vc_spi3, 115*657cbf9bSIvan T. Ivanov func_vc_spi4, 116*657cbf9bSIvan T. Ivanov func_vc_spi5, 117*657cbf9bSIvan T. Ivanov func_vc_uart0, 118*657cbf9bSIvan T. Ivanov func_vc_uart2, 119*657cbf9bSIvan T. Ivanov func_vc_uart3, 120*657cbf9bSIvan T. Ivanov func_vc_uart4, 121*657cbf9bSIvan T. Ivanov func__, 122*657cbf9bSIvan T. Ivanov func_count = func__ 123*657cbf9bSIvan T. Ivanov }; 124*657cbf9bSIvan T. Ivanov 125*657cbf9bSIvan T. Ivanov static const struct pin_regs bcm2712_c0_gpio_pin_regs[] = { 126*657cbf9bSIvan T. Ivanov GPIO_REGS(0, 0, 0, 7, 7), 127*657cbf9bSIvan T. Ivanov GPIO_REGS(1, 0, 1, 7, 8), 128*657cbf9bSIvan T. Ivanov GPIO_REGS(2, 0, 2, 7, 9), 129*657cbf9bSIvan T. Ivanov GPIO_REGS(3, 0, 3, 7, 10), 130*657cbf9bSIvan T. Ivanov GPIO_REGS(4, 0, 4, 7, 11), 131*657cbf9bSIvan T. Ivanov GPIO_REGS(5, 0, 5, 7, 12), 132*657cbf9bSIvan T. Ivanov GPIO_REGS(6, 0, 6, 7, 13), 133*657cbf9bSIvan T. Ivanov GPIO_REGS(7, 0, 7, 7, 14), 134*657cbf9bSIvan T. Ivanov GPIO_REGS(8, 1, 0, 8, 0), 135*657cbf9bSIvan T. Ivanov GPIO_REGS(9, 1, 1, 8, 1), 136*657cbf9bSIvan T. Ivanov GPIO_REGS(10, 1, 2, 8, 2), 137*657cbf9bSIvan T. Ivanov GPIO_REGS(11, 1, 3, 8, 3), 138*657cbf9bSIvan T. Ivanov GPIO_REGS(12, 1, 4, 8, 4), 139*657cbf9bSIvan T. Ivanov GPIO_REGS(13, 1, 5, 8, 5), 140*657cbf9bSIvan T. Ivanov GPIO_REGS(14, 1, 6, 8, 6), 141*657cbf9bSIvan T. Ivanov GPIO_REGS(15, 1, 7, 8, 7), 142*657cbf9bSIvan T. Ivanov GPIO_REGS(16, 2, 0, 8, 8), 143*657cbf9bSIvan T. Ivanov GPIO_REGS(17, 2, 1, 8, 9), 144*657cbf9bSIvan T. Ivanov GPIO_REGS(18, 2, 2, 8, 10), 145*657cbf9bSIvan T. Ivanov GPIO_REGS(19, 2, 3, 8, 11), 146*657cbf9bSIvan T. Ivanov GPIO_REGS(20, 2, 4, 8, 12), 147*657cbf9bSIvan T. Ivanov GPIO_REGS(21, 2, 5, 8, 13), 148*657cbf9bSIvan T. Ivanov GPIO_REGS(22, 2, 6, 8, 14), 149*657cbf9bSIvan T. Ivanov GPIO_REGS(23, 2, 7, 9, 0), 150*657cbf9bSIvan T. Ivanov GPIO_REGS(24, 3, 0, 9, 1), 151*657cbf9bSIvan T. Ivanov GPIO_REGS(25, 3, 1, 9, 2), 152*657cbf9bSIvan T. Ivanov GPIO_REGS(26, 3, 2, 9, 3), 153*657cbf9bSIvan T. Ivanov GPIO_REGS(27, 3, 3, 9, 4), 154*657cbf9bSIvan T. Ivanov GPIO_REGS(28, 3, 4, 9, 5), 155*657cbf9bSIvan T. Ivanov GPIO_REGS(29, 3, 5, 9, 6), 156*657cbf9bSIvan T. Ivanov GPIO_REGS(30, 3, 6, 9, 7), 157*657cbf9bSIvan T. Ivanov GPIO_REGS(31, 3, 7, 9, 8), 158*657cbf9bSIvan T. Ivanov GPIO_REGS(32, 4, 0, 9, 9), 159*657cbf9bSIvan T. Ivanov GPIO_REGS(33, 4, 1, 9, 10), 160*657cbf9bSIvan T. Ivanov GPIO_REGS(34, 4, 2, 9, 11), 161*657cbf9bSIvan T. Ivanov GPIO_REGS(35, 4, 3, 9, 12), 162*657cbf9bSIvan T. Ivanov GPIO_REGS(36, 4, 4, 9, 13), 163*657cbf9bSIvan T. Ivanov GPIO_REGS(37, 4, 5, 9, 14), 164*657cbf9bSIvan T. Ivanov GPIO_REGS(38, 4, 6, 10, 0), 165*657cbf9bSIvan T. Ivanov GPIO_REGS(39, 4, 7, 10, 1), 166*657cbf9bSIvan T. Ivanov GPIO_REGS(40, 5, 0, 10, 2), 167*657cbf9bSIvan T. Ivanov GPIO_REGS(41, 5, 1, 10, 3), 168*657cbf9bSIvan T. Ivanov GPIO_REGS(42, 5, 2, 10, 4), 169*657cbf9bSIvan T. Ivanov GPIO_REGS(43, 5, 3, 10, 5), 170*657cbf9bSIvan T. Ivanov GPIO_REGS(44, 5, 4, 10, 6), 171*657cbf9bSIvan T. Ivanov GPIO_REGS(45, 5, 5, 10, 7), 172*657cbf9bSIvan T. Ivanov GPIO_REGS(46, 5, 6, 10, 8), 173*657cbf9bSIvan T. Ivanov GPIO_REGS(47, 5, 7, 10, 9), 174*657cbf9bSIvan T. Ivanov GPIO_REGS(48, 6, 0, 10, 10), 175*657cbf9bSIvan T. Ivanov GPIO_REGS(49, 6, 1, 10, 11), 176*657cbf9bSIvan T. Ivanov GPIO_REGS(50, 6, 2, 10, 12), 177*657cbf9bSIvan T. Ivanov GPIO_REGS(51, 6, 3, 10, 13), 178*657cbf9bSIvan T. Ivanov GPIO_REGS(52, 6, 4, 10, 14), 179*657cbf9bSIvan T. Ivanov GPIO_REGS(53, 6, 5, 11, 0), 180*657cbf9bSIvan T. Ivanov EMMC_REGS(54, 11, 1), /* EMMC_CMD */ 181*657cbf9bSIvan T. Ivanov EMMC_REGS(55, 11, 2), /* EMMC_DS */ 182*657cbf9bSIvan T. Ivanov EMMC_REGS(56, 11, 3), /* EMMC_CLK */ 183*657cbf9bSIvan T. Ivanov EMMC_REGS(57, 11, 4), /* EMMC_DAT0 */ 184*657cbf9bSIvan T. Ivanov EMMC_REGS(58, 11, 5), /* EMMC_DAT1 */ 185*657cbf9bSIvan T. Ivanov EMMC_REGS(59, 11, 6), /* EMMC_DAT2 */ 186*657cbf9bSIvan T. Ivanov EMMC_REGS(60, 11, 7), /* EMMC_DAT3 */ 187*657cbf9bSIvan T. Ivanov EMMC_REGS(61, 11, 8), /* EMMC_DAT4 */ 188*657cbf9bSIvan T. Ivanov EMMC_REGS(62, 11, 9), /* EMMC_DAT5 */ 189*657cbf9bSIvan T. Ivanov EMMC_REGS(63, 11, 10), /* EMMC_DAT6 */ 190*657cbf9bSIvan T. Ivanov EMMC_REGS(64, 11, 11), /* EMMC_DAT7 */ 191*657cbf9bSIvan T. Ivanov }; 192*657cbf9bSIvan T. Ivanov 193*657cbf9bSIvan T. Ivanov static struct pin_regs bcm2712_c0_aon_gpio_pin_regs[] = { 194*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(0, 3, 0, 6, 10), 195*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(1, 3, 1, 6, 11), 196*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(2, 3, 2, 6, 12), 197*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(3, 3, 3, 6, 13), 198*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(4, 3, 4, 6, 14), 199*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(5, 3, 5, 7, 0), 200*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(6, 3, 6, 7, 1), 201*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(7, 3, 7, 7, 2), 202*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(8, 4, 0, 7, 3), 203*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(9, 4, 1, 7, 4), 204*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(10, 4, 2, 7, 5), 205*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(11, 4, 3, 7, 6), 206*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(12, 4, 4, 7, 7), 207*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(13, 4, 5, 7, 8), 208*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(14, 4, 6, 7, 9), 209*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(15, 4, 7, 7, 10), 210*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(16, 5, 0, 7, 11), 211*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(0, 0, 0), 212*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(1, 0, 1), 213*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(2, 0, 2), 214*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(3, 0, 3), 215*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(4, 1, 0), 216*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(5, 2, 0), 217*657cbf9bSIvan T. Ivanov }; 218*657cbf9bSIvan T. Ivanov 219*657cbf9bSIvan T. Ivanov static const struct pinctrl_pin_desc bcm2712_c0_gpio_pins[] = { 220*657cbf9bSIvan T. Ivanov GPIO_PIN(0), 221*657cbf9bSIvan T. Ivanov GPIO_PIN(1), 222*657cbf9bSIvan T. Ivanov GPIO_PIN(2), 223*657cbf9bSIvan T. Ivanov GPIO_PIN(3), 224*657cbf9bSIvan T. Ivanov GPIO_PIN(4), 225*657cbf9bSIvan T. Ivanov GPIO_PIN(5), 226*657cbf9bSIvan T. Ivanov GPIO_PIN(6), 227*657cbf9bSIvan T. Ivanov GPIO_PIN(7), 228*657cbf9bSIvan T. Ivanov GPIO_PIN(8), 229*657cbf9bSIvan T. Ivanov GPIO_PIN(9), 230*657cbf9bSIvan T. Ivanov GPIO_PIN(10), 231*657cbf9bSIvan T. Ivanov GPIO_PIN(11), 232*657cbf9bSIvan T. Ivanov GPIO_PIN(12), 233*657cbf9bSIvan T. Ivanov GPIO_PIN(13), 234*657cbf9bSIvan T. Ivanov GPIO_PIN(14), 235*657cbf9bSIvan T. Ivanov GPIO_PIN(15), 236*657cbf9bSIvan T. Ivanov GPIO_PIN(16), 237*657cbf9bSIvan T. Ivanov GPIO_PIN(17), 238*657cbf9bSIvan T. Ivanov GPIO_PIN(18), 239*657cbf9bSIvan T. Ivanov GPIO_PIN(19), 240*657cbf9bSIvan T. Ivanov GPIO_PIN(20), 241*657cbf9bSIvan T. Ivanov GPIO_PIN(21), 242*657cbf9bSIvan T. Ivanov GPIO_PIN(22), 243*657cbf9bSIvan T. Ivanov GPIO_PIN(23), 244*657cbf9bSIvan T. Ivanov GPIO_PIN(24), 245*657cbf9bSIvan T. Ivanov GPIO_PIN(25), 246*657cbf9bSIvan T. Ivanov GPIO_PIN(26), 247*657cbf9bSIvan T. Ivanov GPIO_PIN(27), 248*657cbf9bSIvan T. Ivanov GPIO_PIN(28), 249*657cbf9bSIvan T. Ivanov GPIO_PIN(29), 250*657cbf9bSIvan T. Ivanov GPIO_PIN(30), 251*657cbf9bSIvan T. Ivanov GPIO_PIN(31), 252*657cbf9bSIvan T. Ivanov GPIO_PIN(32), 253*657cbf9bSIvan T. Ivanov GPIO_PIN(33), 254*657cbf9bSIvan T. Ivanov GPIO_PIN(34), 255*657cbf9bSIvan T. Ivanov GPIO_PIN(35), 256*657cbf9bSIvan T. Ivanov GPIO_PIN(36), 257*657cbf9bSIvan T. Ivanov GPIO_PIN(37), 258*657cbf9bSIvan T. Ivanov GPIO_PIN(38), 259*657cbf9bSIvan T. Ivanov GPIO_PIN(39), 260*657cbf9bSIvan T. Ivanov GPIO_PIN(40), 261*657cbf9bSIvan T. Ivanov GPIO_PIN(41), 262*657cbf9bSIvan T. Ivanov GPIO_PIN(42), 263*657cbf9bSIvan T. Ivanov GPIO_PIN(43), 264*657cbf9bSIvan T. Ivanov GPIO_PIN(44), 265*657cbf9bSIvan T. Ivanov GPIO_PIN(45), 266*657cbf9bSIvan T. Ivanov GPIO_PIN(46), 267*657cbf9bSIvan T. Ivanov GPIO_PIN(47), 268*657cbf9bSIvan T. Ivanov GPIO_PIN(48), 269*657cbf9bSIvan T. Ivanov GPIO_PIN(49), 270*657cbf9bSIvan T. Ivanov GPIO_PIN(50), 271*657cbf9bSIvan T. Ivanov GPIO_PIN(51), 272*657cbf9bSIvan T. Ivanov GPIO_PIN(52), 273*657cbf9bSIvan T. Ivanov GPIO_PIN(53), 274*657cbf9bSIvan T. Ivanov PINCTRL_PIN(54, "emmc_cmd"), 275*657cbf9bSIvan T. Ivanov PINCTRL_PIN(55, "emmc_ds"), 276*657cbf9bSIvan T. Ivanov PINCTRL_PIN(56, "emmc_clk"), 277*657cbf9bSIvan T. Ivanov PINCTRL_PIN(57, "emmc_dat0"), 278*657cbf9bSIvan T. Ivanov PINCTRL_PIN(58, "emmc_dat1"), 279*657cbf9bSIvan T. Ivanov PINCTRL_PIN(59, "emmc_dat2"), 280*657cbf9bSIvan T. Ivanov PINCTRL_PIN(60, "emmc_dat3"), 281*657cbf9bSIvan T. Ivanov PINCTRL_PIN(61, "emmc_dat4"), 282*657cbf9bSIvan T. Ivanov PINCTRL_PIN(62, "emmc_dat5"), 283*657cbf9bSIvan T. Ivanov PINCTRL_PIN(63, "emmc_dat6"), 284*657cbf9bSIvan T. Ivanov PINCTRL_PIN(64, "emmc_dat7"), 285*657cbf9bSIvan T. Ivanov }; 286*657cbf9bSIvan T. Ivanov 287*657cbf9bSIvan T. Ivanov static struct pinctrl_pin_desc bcm2712_c0_aon_gpio_pins[] = { 288*657cbf9bSIvan T. Ivanov AON_GPIO_PIN(0), AON_GPIO_PIN(1), AON_GPIO_PIN(2), AON_GPIO_PIN(3), 289*657cbf9bSIvan T. Ivanov AON_GPIO_PIN(4), AON_GPIO_PIN(5), AON_GPIO_PIN(6), AON_GPIO_PIN(7), 290*657cbf9bSIvan T. Ivanov AON_GPIO_PIN(8), AON_GPIO_PIN(9), AON_GPIO_PIN(10), AON_GPIO_PIN(11), 291*657cbf9bSIvan T. Ivanov AON_GPIO_PIN(12), AON_GPIO_PIN(13), AON_GPIO_PIN(14), AON_GPIO_PIN(15), 292*657cbf9bSIvan T. Ivanov AON_GPIO_PIN(16), AON_SGPIO_PIN(0), AON_SGPIO_PIN(1), AON_SGPIO_PIN(2), 293*657cbf9bSIvan T. Ivanov AON_SGPIO_PIN(3), AON_SGPIO_PIN(4), AON_SGPIO_PIN(5), 294*657cbf9bSIvan T. Ivanov }; 295*657cbf9bSIvan T. Ivanov 296*657cbf9bSIvan T. Ivanov static const struct pin_regs bcm2712_d0_gpio_pin_regs[] = { 297*657cbf9bSIvan T. Ivanov GPIO_REGS(1, 0, 0, 4, 5), 298*657cbf9bSIvan T. Ivanov GPIO_REGS(2, 0, 1, 4, 6), 299*657cbf9bSIvan T. Ivanov GPIO_REGS(3, 0, 2, 4, 7), 300*657cbf9bSIvan T. Ivanov GPIO_REGS(4, 0, 3, 4, 8), 301*657cbf9bSIvan T. Ivanov GPIO_REGS(10, 0, 4, 4, 9), 302*657cbf9bSIvan T. Ivanov GPIO_REGS(11, 0, 5, 4, 10), 303*657cbf9bSIvan T. Ivanov GPIO_REGS(12, 0, 6, 4, 11), 304*657cbf9bSIvan T. Ivanov GPIO_REGS(13, 0, 7, 4, 12), 305*657cbf9bSIvan T. Ivanov GPIO_REGS(14, 1, 0, 4, 13), 306*657cbf9bSIvan T. Ivanov GPIO_REGS(15, 1, 1, 4, 14), 307*657cbf9bSIvan T. Ivanov GPIO_REGS(18, 1, 2, 5, 0), 308*657cbf9bSIvan T. Ivanov GPIO_REGS(19, 1, 3, 5, 1), 309*657cbf9bSIvan T. Ivanov GPIO_REGS(20, 1, 4, 5, 2), 310*657cbf9bSIvan T. Ivanov GPIO_REGS(21, 1, 5, 5, 3), 311*657cbf9bSIvan T. Ivanov GPIO_REGS(22, 1, 6, 5, 4), 312*657cbf9bSIvan T. Ivanov GPIO_REGS(23, 1, 7, 5, 5), 313*657cbf9bSIvan T. Ivanov GPIO_REGS(24, 2, 0, 5, 6), 314*657cbf9bSIvan T. Ivanov GPIO_REGS(25, 2, 1, 5, 7), 315*657cbf9bSIvan T. Ivanov GPIO_REGS(26, 2, 2, 5, 8), 316*657cbf9bSIvan T. Ivanov GPIO_REGS(27, 2, 3, 5, 9), 317*657cbf9bSIvan T. Ivanov GPIO_REGS(28, 2, 4, 5, 10), 318*657cbf9bSIvan T. Ivanov GPIO_REGS(29, 2, 5, 5, 11), 319*657cbf9bSIvan T. Ivanov GPIO_REGS(30, 2, 6, 5, 12), 320*657cbf9bSIvan T. Ivanov GPIO_REGS(31, 2, 7, 5, 13), 321*657cbf9bSIvan T. Ivanov GPIO_REGS(32, 3, 0, 5, 14), 322*657cbf9bSIvan T. Ivanov GPIO_REGS(33, 3, 1, 6, 0), 323*657cbf9bSIvan T. Ivanov GPIO_REGS(34, 3, 2, 6, 1), 324*657cbf9bSIvan T. Ivanov GPIO_REGS(35, 3, 3, 6, 2), 325*657cbf9bSIvan T. Ivanov EMMC_REGS(36, 6, 3), /* EMMC_CMD */ 326*657cbf9bSIvan T. Ivanov EMMC_REGS(37, 6, 4), /* EMMC_DS */ 327*657cbf9bSIvan T. Ivanov EMMC_REGS(38, 6, 5), /* EMMC_CLK */ 328*657cbf9bSIvan T. Ivanov EMMC_REGS(39, 6, 6), /* EMMC_DAT0 */ 329*657cbf9bSIvan T. Ivanov EMMC_REGS(40, 6, 7), /* EMMC_DAT1 */ 330*657cbf9bSIvan T. Ivanov EMMC_REGS(41, 6, 8), /* EMMC_DAT2 */ 331*657cbf9bSIvan T. Ivanov EMMC_REGS(42, 6, 9), /* EMMC_DAT3 */ 332*657cbf9bSIvan T. Ivanov EMMC_REGS(43, 6, 10), /* EMMC_DAT4 */ 333*657cbf9bSIvan T. Ivanov EMMC_REGS(44, 6, 11), /* EMMC_DAT5 */ 334*657cbf9bSIvan T. Ivanov EMMC_REGS(45, 6, 12), /* EMMC_DAT6 */ 335*657cbf9bSIvan T. Ivanov EMMC_REGS(46, 6, 13), /* EMMC_DAT7 */ 336*657cbf9bSIvan T. Ivanov }; 337*657cbf9bSIvan T. Ivanov 338*657cbf9bSIvan T. Ivanov static struct pin_regs bcm2712_d0_aon_gpio_pin_regs[] = { 339*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(0, 3, 0, 5, 9), 340*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(1, 3, 1, 5, 10), 341*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(2, 3, 2, 5, 11), 342*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(3, 3, 3, 5, 12), 343*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(4, 3, 4, 5, 13), 344*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(5, 3, 5, 5, 14), 345*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(6, 3, 6, 6, 0), 346*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(8, 3, 7, 6, 1), 347*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(9, 4, 0, 6, 2), 348*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(12, 4, 1, 6, 3), 349*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(13, 4, 2, 6, 4), 350*657cbf9bSIvan T. Ivanov AON_GPIO_REGS(14, 4, 3, 6, 5), 351*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(0, 0, 0), 352*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(1, 0, 1), 353*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(2, 0, 2), 354*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(3, 0, 3), 355*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(4, 1, 0), 356*657cbf9bSIvan T. Ivanov AON_SGPIO_REGS(5, 2, 0), 357*657cbf9bSIvan T. Ivanov }; 358*657cbf9bSIvan T. Ivanov 359*657cbf9bSIvan T. Ivanov static const struct pinctrl_pin_desc bcm2712_d0_gpio_pins[] = { 360*657cbf9bSIvan T. Ivanov GPIO_PIN(1), 361*657cbf9bSIvan T. Ivanov GPIO_PIN(2), 362*657cbf9bSIvan T. Ivanov GPIO_PIN(3), 363*657cbf9bSIvan T. Ivanov GPIO_PIN(4), 364*657cbf9bSIvan T. Ivanov GPIO_PIN(10), 365*657cbf9bSIvan T. Ivanov GPIO_PIN(11), 366*657cbf9bSIvan T. Ivanov GPIO_PIN(12), 367*657cbf9bSIvan T. Ivanov GPIO_PIN(13), 368*657cbf9bSIvan T. Ivanov GPIO_PIN(14), 369*657cbf9bSIvan T. Ivanov GPIO_PIN(15), 370*657cbf9bSIvan T. Ivanov GPIO_PIN(18), 371*657cbf9bSIvan T. Ivanov GPIO_PIN(19), 372*657cbf9bSIvan T. Ivanov GPIO_PIN(20), 373*657cbf9bSIvan T. Ivanov GPIO_PIN(21), 374*657cbf9bSIvan T. Ivanov GPIO_PIN(22), 375*657cbf9bSIvan T. Ivanov GPIO_PIN(23), 376*657cbf9bSIvan T. Ivanov GPIO_PIN(24), 377*657cbf9bSIvan T. Ivanov GPIO_PIN(25), 378*657cbf9bSIvan T. Ivanov GPIO_PIN(26), 379*657cbf9bSIvan T. Ivanov GPIO_PIN(27), 380*657cbf9bSIvan T. Ivanov GPIO_PIN(28), 381*657cbf9bSIvan T. Ivanov GPIO_PIN(29), 382*657cbf9bSIvan T. Ivanov GPIO_PIN(30), 383*657cbf9bSIvan T. Ivanov GPIO_PIN(31), 384*657cbf9bSIvan T. Ivanov GPIO_PIN(32), 385*657cbf9bSIvan T. Ivanov GPIO_PIN(33), 386*657cbf9bSIvan T. Ivanov GPIO_PIN(34), 387*657cbf9bSIvan T. Ivanov GPIO_PIN(35), 388*657cbf9bSIvan T. Ivanov PINCTRL_PIN(36, "emmc_cmd"), 389*657cbf9bSIvan T. Ivanov PINCTRL_PIN(37, "emmc_ds"), 390*657cbf9bSIvan T. Ivanov PINCTRL_PIN(38, "emmc_clk"), 391*657cbf9bSIvan T. Ivanov PINCTRL_PIN(39, "emmc_dat0"), 392*657cbf9bSIvan T. Ivanov PINCTRL_PIN(40, "emmc_dat1"), 393*657cbf9bSIvan T. Ivanov PINCTRL_PIN(41, "emmc_dat2"), 394*657cbf9bSIvan T. Ivanov PINCTRL_PIN(42, "emmc_dat3"), 395*657cbf9bSIvan T. Ivanov PINCTRL_PIN(43, "emmc_dat4"), 396*657cbf9bSIvan T. Ivanov PINCTRL_PIN(44, "emmc_dat5"), 397*657cbf9bSIvan T. Ivanov PINCTRL_PIN(45, "emmc_dat6"), 398*657cbf9bSIvan T. Ivanov PINCTRL_PIN(46, "emmc_dat7"), 399*657cbf9bSIvan T. Ivanov }; 400*657cbf9bSIvan T. Ivanov 401*657cbf9bSIvan T. Ivanov static struct pinctrl_pin_desc bcm2712_d0_aon_gpio_pins[] = { 402*657cbf9bSIvan T. Ivanov AON_GPIO_PIN(0), AON_GPIO_PIN(1), AON_GPIO_PIN(2), AON_GPIO_PIN(3), 403*657cbf9bSIvan T. Ivanov AON_GPIO_PIN(4), AON_GPIO_PIN(5), AON_GPIO_PIN(6), AON_GPIO_PIN(8), 404*657cbf9bSIvan T. Ivanov AON_GPIO_PIN(9), AON_GPIO_PIN(12), AON_GPIO_PIN(13), AON_GPIO_PIN(14), 405*657cbf9bSIvan T. Ivanov AON_SGPIO_PIN(0), AON_SGPIO_PIN(1), AON_SGPIO_PIN(2), 406*657cbf9bSIvan T. Ivanov AON_SGPIO_PIN(3), AON_SGPIO_PIN(4), AON_SGPIO_PIN(5), 407*657cbf9bSIvan T. Ivanov }; 408*657cbf9bSIvan T. Ivanov 409*657cbf9bSIvan T. Ivanov static const char * const bcm2712_func_names[] = { 410*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(gpio), 411*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(alt1), 412*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(alt2), 413*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(alt3), 414*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(alt4), 415*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(alt5), 416*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(alt6), 417*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(alt7), 418*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(alt8), 419*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(aon_cpu_standbyb), 420*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(aon_fp_4sec_resetb), 421*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(aon_gpclk), 422*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(aon_pwm), 423*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(arm_jtag), 424*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(aud_fs_clk0), 425*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(avs_pmu_bsc), 426*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(bsc_m0), 427*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(bsc_m1), 428*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(bsc_m2), 429*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(bsc_m3), 430*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(clk_observe), 431*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(ctl_hdmi_5v), 432*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(enet0), 433*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(enet0_mii), 434*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(enet0_rgmii), 435*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(ext_sc_clk), 436*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(fl0), 437*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(fl1), 438*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(gpclk0), 439*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(gpclk1), 440*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(gpclk2), 441*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(hdmi_tx0_auto_i2c), 442*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(hdmi_tx0_bsc), 443*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(hdmi_tx1_auto_i2c), 444*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(hdmi_tx1_bsc), 445*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(i2s_in), 446*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(i2s_out), 447*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(ir_in), 448*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(mtsif), 449*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(mtsif_alt), 450*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(mtsif_alt1), 451*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(pdm), 452*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(pkt), 453*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(pm_led_out), 454*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(sc0), 455*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(sd0), 456*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(sd2), 457*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(sd_card_a), 458*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(sd_card_b), 459*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(sd_card_c), 460*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(sd_card_d), 461*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(sd_card_e), 462*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(sd_card_f), 463*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(sd_card_g), 464*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(spdif_out), 465*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(spi_m), 466*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(spi_s), 467*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(sr_edm_sense), 468*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(te0), 469*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(te1), 470*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(tsio), 471*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(uart0), 472*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(uart1), 473*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(uart2), 474*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(usb_pwr), 475*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(usb_vbus), 476*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(uui), 477*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_i2c0), 478*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_i2c3), 479*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_i2c4), 480*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_i2c5), 481*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_i2csl), 482*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_pcm), 483*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_pwm0), 484*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_pwm1), 485*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_spi0), 486*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_spi3), 487*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_spi4), 488*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_spi5), 489*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_uart0), 490*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_uart2), 491*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_uart3), 492*657cbf9bSIvan T. Ivanov BRCMSTB_FUNC(vc_uart4), 493*657cbf9bSIvan T. Ivanov }; 494*657cbf9bSIvan T. Ivanov 495*657cbf9bSIvan T. Ivanov static const struct brcmstb_pin_funcs bcm2712_c0_aon_gpio_pin_funcs[] = { 496*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(0, ir_in, vc_spi0, vc_uart3, vc_i2c3, te0, vc_i2c0, _, _), 497*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(1, vc_pwm0, vc_spi0, vc_uart3, vc_i2c3, te1, aon_pwm, vc_i2c0, vc_pwm1), 498*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(2, vc_pwm0, vc_spi0, vc_uart3, ctl_hdmi_5v, fl0, aon_pwm, ir_in, vc_pwm1), 499*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(3, ir_in, vc_spi0, vc_uart3, aon_fp_4sec_resetb, fl1, sd_card_g, aon_gpclk, _), 500*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(4, gpclk0, vc_spi0, vc_i2csl, aon_gpclk, pm_led_out, aon_pwm, sd_card_g, vc_pwm0), 501*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(5, gpclk1, ir_in, vc_i2csl, clk_observe, aon_pwm, sd_card_g, vc_pwm0, _), 502*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(6, uart1, vc_uart4, gpclk2, ctl_hdmi_5v, vc_uart0, vc_spi3, _, _), 503*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(7, uart1, vc_uart4, gpclk0, aon_pwm, vc_uart0, vc_spi3, _, _), 504*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(8, uart1, vc_uart4, vc_i2csl, ctl_hdmi_5v, vc_uart0, vc_spi3, _, _), 505*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(9, uart1, vc_uart4, vc_i2csl, aon_pwm, vc_uart0, vc_spi3, _, _), 506*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(10, tsio, ctl_hdmi_5v, sc0, spdif_out, vc_spi5, usb_pwr, aon_gpclk, sd_card_f), 507*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(11, tsio, uart0, sc0, aud_fs_clk0, vc_spi5, usb_vbus, vc_uart2, sd_card_f), 508*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(12, tsio, uart0, vc_uart0, tsio, vc_spi5, usb_pwr, vc_uart2, sd_card_f), 509*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(13, bsc_m1, uart0, vc_uart0, uui, vc_spi5, arm_jtag, vc_uart2, vc_i2c3), 510*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(14, bsc_m1, uart0, vc_uart0, uui, vc_spi5, arm_jtag, vc_uart2, vc_i2c3), 511*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(15, ir_in, aon_fp_4sec_resetb, vc_uart0, pm_led_out, ctl_hdmi_5v, aon_pwm, aon_gpclk, _), 512*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(16, aon_cpu_standbyb, gpclk0, pm_led_out, ctl_hdmi_5v, vc_pwm0, usb_pwr, aud_fs_clk0, _), 513*657cbf9bSIvan T. Ivanov }; 514*657cbf9bSIvan T. Ivanov 515*657cbf9bSIvan T. Ivanov static const struct brcmstb_pin_funcs bcm2712_c0_gpio_pin_funcs[] = { 516*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(0, bsc_m3, vc_i2c0, gpclk0, enet0, vc_pwm1, vc_spi0, ir_in, _), 517*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(1, bsc_m3, vc_i2c0, gpclk1, enet0, vc_pwm1, sr_edm_sense, vc_spi0, vc_uart3), 518*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(2, pdm, i2s_in, gpclk2, vc_spi4, pkt, vc_spi0, vc_uart3, _), 519*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(3, pdm, i2s_in, vc_spi4, pkt, vc_spi0, vc_uart3, _, _), 520*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(4, pdm, i2s_in, arm_jtag, vc_spi4, pkt, vc_spi0, vc_uart3, _), 521*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(5, pdm, vc_i2c3, arm_jtag, sd_card_e, vc_spi4, pkt, vc_pcm, vc_i2c5), 522*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(6, pdm, vc_i2c3, arm_jtag, sd_card_e, vc_spi4, pkt, vc_pcm, vc_i2c5), 523*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(7, i2s_out, spdif_out, arm_jtag, sd_card_e, vc_i2c3, enet0_rgmii, vc_pcm, vc_spi4), 524*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(8, i2s_out, aud_fs_clk0, arm_jtag, sd_card_e, vc_i2c3, enet0_mii, vc_pcm, vc_spi4), 525*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(9, i2s_out, aud_fs_clk0, arm_jtag, sd_card_e, enet0_mii, sd_card_c, vc_spi4, _), 526*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(10, bsc_m3, mtsif_alt1, i2s_in, i2s_out, vc_spi5, enet0_mii, sd_card_c, vc_spi4), 527*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(11, bsc_m3, mtsif_alt1, i2s_in, i2s_out, vc_spi5, enet0_mii, sd_card_c, vc_spi4), 528*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(12, spi_s, mtsif_alt1, i2s_in, i2s_out, vc_spi5, vc_i2csl, sd0, sd_card_d), 529*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(13, spi_s, mtsif_alt1, i2s_out, usb_vbus, vc_spi5, vc_i2csl, sd0, sd_card_d), 530*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(14, spi_s, vc_i2csl, enet0_rgmii, arm_jtag, vc_spi5, vc_pwm0, vc_i2c4, sd_card_d), 531*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(15, spi_s, vc_i2csl, vc_spi3, arm_jtag, vc_pwm0, vc_i2c4, gpclk0, _), 532*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(16, sd_card_b, i2s_out, vc_spi3, i2s_in, sd0, enet0_rgmii, gpclk1, _), 533*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(17, sd_card_b, i2s_out, vc_spi3, i2s_in, ext_sc_clk, sd0, enet0_rgmii, gpclk2), 534*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(18, sd_card_b, i2s_out, vc_spi3, i2s_in, sd0, enet0_rgmii, vc_pwm1, _), 535*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(19, sd_card_b, usb_pwr, vc_spi3, pkt, spdif_out, sd0, ir_in, vc_pwm1), 536*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(20, sd_card_b, uui, vc_uart0, arm_jtag, uart2, usb_pwr, vc_pcm, vc_uart4), 537*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(21, usb_pwr, uui, vc_uart0, arm_jtag, uart2, sd_card_b, vc_pcm, vc_uart4), 538*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(22, usb_pwr, enet0, vc_uart0, mtsif, uart2, usb_vbus, vc_pcm, vc_i2c5), 539*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(23, usb_vbus, enet0, vc_uart0, mtsif, uart2, i2s_out, vc_pcm, vc_i2c5), 540*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(24, mtsif, pkt, uart0, enet0_rgmii, enet0_rgmii, vc_i2c4, vc_uart3, _), 541*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(25, mtsif, pkt, sc0, uart0, enet0_rgmii, enet0_rgmii, vc_i2c4, vc_uart3), 542*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(26, mtsif, pkt, sc0, uart0, enet0_rgmii, vc_uart4, vc_spi5, _), 543*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(27, mtsif, pkt, sc0, uart0, enet0_rgmii, vc_uart4, vc_spi5, _), 544*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(28, mtsif, pkt, sc0, enet0_rgmii, vc_uart4, vc_spi5, _, _), 545*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(29, mtsif, pkt, sc0, enet0_rgmii, vc_uart4, vc_spi5, _, _), 546*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(30, mtsif, pkt, sc0, sd2, enet0_rgmii, gpclk0, vc_pwm0, _), 547*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(31, mtsif, pkt, sc0, sd2, enet0_rgmii, vc_spi3, vc_pwm0, _), 548*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(32, mtsif, pkt, sc0, sd2, enet0_rgmii, vc_spi3, vc_uart3, _), 549*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(33, mtsif, pkt, sd2, enet0_rgmii, vc_spi3, vc_uart3, _, _), 550*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(34, mtsif, pkt, ext_sc_clk, sd2, enet0_rgmii, vc_spi3, vc_i2c5, _), 551*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(35, mtsif, pkt, sd2, enet0_rgmii, vc_spi3, vc_i2c5, _, _), 552*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(36, sd0, mtsif, sc0, i2s_in, vc_uart3, vc_uart2, _, _), 553*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(37, sd0, mtsif, sc0, vc_spi0, i2s_in, vc_uart3, vc_uart2, _), 554*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(38, sd0, mtsif_alt, sc0, vc_spi0, i2s_in, vc_uart3, vc_uart2, _), 555*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(39, sd0, mtsif_alt, sc0, vc_spi0, vc_uart3, vc_uart2, _, _), 556*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(40, sd0, mtsif_alt, sc0, vc_spi0, bsc_m3, _, _, _), 557*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(41, sd0, mtsif_alt, sc0, vc_spi0, bsc_m3, _, _, _), 558*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(42, vc_spi0, mtsif_alt, vc_i2c0, sd_card_a, mtsif_alt1, arm_jtag, pdm, spi_m), 559*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(43, vc_spi0, mtsif_alt, vc_i2c0, sd_card_a, mtsif_alt1, arm_jtag, pdm, spi_m), 560*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(44, vc_spi0, mtsif_alt, enet0, sd_card_a, mtsif_alt1, arm_jtag, pdm, spi_m), 561*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(45, vc_spi0, mtsif_alt, enet0, sd_card_a, mtsif_alt1, arm_jtag, pdm, spi_m), 562*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(46, vc_spi0, mtsif_alt, sd_card_a, mtsif_alt1, arm_jtag, pdm, spi_m, _), 563*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(47, enet0, mtsif_alt, i2s_out, mtsif_alt1, arm_jtag, _, _, _), 564*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(48, sc0, usb_pwr, spdif_out, mtsif, _, _, _, _), 565*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(49, sc0, usb_pwr, aud_fs_clk0, mtsif, _, _, _, _), 566*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(50, sc0, usb_vbus, sc0, _, _, _, _, _), 567*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(51, sc0, enet0, sc0, sr_edm_sense, _, _, _, _), 568*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(52, sc0, enet0, vc_pwm1, _, _, _, _, _), 569*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(53, sc0, enet0_rgmii, ext_sc_clk, _, _, _, _, _), 570*657cbf9bSIvan T. Ivanov }; 571*657cbf9bSIvan T. Ivanov 572*657cbf9bSIvan T. Ivanov static const struct brcmstb_pin_funcs bcm2712_d0_aon_gpio_pin_funcs[] = { 573*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(0, ir_in, vc_spi0, vc_uart0, vc_i2c3, uart0, vc_i2c0, _, _), 574*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(1, vc_pwm0, vc_spi0, vc_uart0, vc_i2c3, uart0, aon_pwm, vc_i2c0, vc_pwm1), 575*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(2, vc_pwm0, vc_spi0, vc_uart0, ctl_hdmi_5v, uart0, aon_pwm, ir_in, vc_pwm1), 576*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(3, ir_in, vc_spi0, vc_uart0, uart0, sd_card_g, aon_gpclk, _, _), 577*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(4, gpclk0, vc_spi0, pm_led_out, aon_pwm, sd_card_g, vc_pwm0, _, _), 578*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(5, gpclk1, ir_in, aon_pwm, sd_card_g, vc_pwm0, _, _, _), 579*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(6, uart1, vc_uart2, ctl_hdmi_5v, gpclk2, vc_spi3, _, _, _), 580*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(7, _, _, _, _, _, _, _, _), /* non-existent on D0 silicon */ 581*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(8, uart1, vc_uart2, ctl_hdmi_5v, vc_spi0, vc_spi3, _, _, _), 582*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(9, uart1, vc_uart2, vc_uart0, aon_pwm, vc_spi0, vc_uart2, vc_spi3, _), 583*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(10, _, _, _, _, _, _, _, _), /* non-existent on D0 silicon */ 584*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(11, _, _, _, _, _, _, _, _), /* non-existent on D0 silicon */ 585*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(12, uart1, vc_uart2, vc_uart0, vc_spi0, usb_pwr, vc_uart2, vc_spi3, _), 586*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(13, bsc_m1, vc_uart0, uui, vc_spi0, arm_jtag, vc_uart2, vc_i2c3, _), 587*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(14, bsc_m1, aon_gpclk, vc_uart0, uui, vc_spi0, arm_jtag, vc_uart2, vc_i2c3), 588*657cbf9bSIvan T. Ivanov }; 589*657cbf9bSIvan T. Ivanov 590*657cbf9bSIvan T. Ivanov static const struct brcmstb_pin_funcs bcm2712_d0_gpio_pin_funcs[] = { 591*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(1, vc_i2c0, usb_pwr, gpclk0, sd_card_e, vc_spi3, sr_edm_sense, vc_spi0, vc_uart0), 592*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(2, vc_i2c0, usb_pwr, gpclk1, sd_card_e, vc_spi3, clk_observe, vc_spi0, vc_uart0), 593*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(3, vc_i2c3, usb_vbus, gpclk2, sd_card_e, vc_spi3, vc_spi0, vc_uart0, _), 594*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(4, vc_i2c3, vc_pwm1, vc_spi3, sd_card_e, vc_spi3, vc_spi0, vc_uart0, _), 595*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(10, bsc_m3, vc_pwm1, vc_spi3, sd_card_e, vc_spi3, gpclk0, _, _), 596*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(11, bsc_m3, vc_spi3, clk_observe, sd_card_c, gpclk1, _, _, _), 597*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(12, spi_s, vc_spi3, sd_card_c, sd_card_d, _, _, _, _), 598*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(13, spi_s, vc_spi3, sd_card_c, sd_card_d, _, _, _, _), 599*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(14, spi_s, uui, arm_jtag, vc_pwm0, vc_i2c0, sd_card_d, _, _), 600*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(15, spi_s, uui, arm_jtag, vc_pwm0, vc_i2c0, gpclk0, _, _), 601*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(18, sd_card_f, vc_pwm1, _, _, _, _, _, _), 602*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(19, sd_card_f, usb_pwr, vc_pwm1, _, _, _, _, _), 603*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(20, vc_i2c3, uui, vc_uart0, arm_jtag, vc_uart2, _, _, _), 604*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(21, vc_i2c3, uui, vc_uart0, arm_jtag, vc_uart2, _, _, _), 605*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(22, sd_card_f, vc_uart0, vc_i2c3, _, _, _, _, _), 606*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(23, vc_uart0, vc_i2c3, _, _, _, _, _, _), 607*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(24, sd_card_b, vc_spi0, arm_jtag, uart0, usb_pwr, vc_uart2, vc_uart0, _), 608*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(25, sd_card_b, vc_spi0, arm_jtag, uart0, usb_pwr, vc_uart2, vc_uart0, _), 609*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(26, sd_card_b, vc_spi0, arm_jtag, uart0, usb_vbus, vc_uart2, vc_spi0, _), 610*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(27, sd_card_b, vc_spi0, arm_jtag, uart0, vc_uart2, vc_spi0, _, _), 611*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(28, sd_card_b, vc_spi0, arm_jtag, vc_i2c0, vc_spi0, _, _, _), 612*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(29, arm_jtag, vc_i2c0, vc_spi0, _, _, _, _, _), 613*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(30, sd2, gpclk0, vc_pwm0, _, _, _, _, _), 614*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(31, sd2, vc_spi3, vc_pwm0, _, _, _, _, _), 615*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(32, sd2, vc_spi3, vc_uart3, _, _, _, _, _), 616*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(33, sd2, vc_spi3, vc_uart3, _, _, _, _, _), 617*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(34, sd2, vc_spi3, vc_i2c5, _, _, _, _, _), 618*657cbf9bSIvan T. Ivanov BRCMSTB_PIN(35, sd2, vc_spi3, vc_i2c5, _, _, _, _, _), 619*657cbf9bSIvan T. Ivanov }; 620*657cbf9bSIvan T. Ivanov 621*657cbf9bSIvan T. Ivanov static const struct pinctrl_desc bcm2712_c0_pinctrl_desc = { 622*657cbf9bSIvan T. Ivanov .name = "pinctrl-bcm2712", 623*657cbf9bSIvan T. Ivanov .pins = bcm2712_c0_gpio_pins, 624*657cbf9bSIvan T. Ivanov .npins = ARRAY_SIZE(bcm2712_c0_gpio_pins), 625*657cbf9bSIvan T. Ivanov }; 626*657cbf9bSIvan T. Ivanov 627*657cbf9bSIvan T. Ivanov static const struct pinctrl_desc bcm2712_c0_aon_pinctrl_desc = { 628*657cbf9bSIvan T. Ivanov .name = "aon-pinctrl-bcm2712", 629*657cbf9bSIvan T. Ivanov .pins = bcm2712_c0_aon_gpio_pins, 630*657cbf9bSIvan T. Ivanov .npins = ARRAY_SIZE(bcm2712_c0_aon_gpio_pins), 631*657cbf9bSIvan T. Ivanov }; 632*657cbf9bSIvan T. Ivanov 633*657cbf9bSIvan T. Ivanov static const struct pinctrl_desc bcm2712_d0_pinctrl_desc = { 634*657cbf9bSIvan T. Ivanov .name = "pinctrl-bcm2712", 635*657cbf9bSIvan T. Ivanov .pins = bcm2712_d0_gpio_pins, 636*657cbf9bSIvan T. Ivanov .npins = ARRAY_SIZE(bcm2712_d0_gpio_pins), 637*657cbf9bSIvan T. Ivanov }; 638*657cbf9bSIvan T. Ivanov 639*657cbf9bSIvan T. Ivanov static const struct pinctrl_desc bcm2712_d0_aon_pinctrl_desc = { 640*657cbf9bSIvan T. Ivanov .name = "aon-pinctrl-bcm2712", 641*657cbf9bSIvan T. Ivanov .pins = bcm2712_d0_aon_gpio_pins, 642*657cbf9bSIvan T. Ivanov .npins = ARRAY_SIZE(bcm2712_d0_aon_gpio_pins), 643*657cbf9bSIvan T. Ivanov }; 644*657cbf9bSIvan T. Ivanov 645*657cbf9bSIvan T. Ivanov static const struct pinctrl_gpio_range bcm2712_c0_pinctrl_gpio_range = { 646*657cbf9bSIvan T. Ivanov .name = "pinctrl-bcm2712", 647*657cbf9bSIvan T. Ivanov .npins = ARRAY_SIZE(bcm2712_c0_gpio_pins), 648*657cbf9bSIvan T. Ivanov }; 649*657cbf9bSIvan T. Ivanov 650*657cbf9bSIvan T. Ivanov static const struct pinctrl_gpio_range bcm2712_c0_aon_pinctrl_gpio_range = { 651*657cbf9bSIvan T. Ivanov .name = "aon-pinctrl-bcm2712", 652*657cbf9bSIvan T. Ivanov .npins = ARRAY_SIZE(bcm2712_c0_aon_gpio_pins), 653*657cbf9bSIvan T. Ivanov }; 654*657cbf9bSIvan T. Ivanov 655*657cbf9bSIvan T. Ivanov static const struct pinctrl_gpio_range bcm2712_d0_pinctrl_gpio_range = { 656*657cbf9bSIvan T. Ivanov .name = "pinctrl-bcm2712", 657*657cbf9bSIvan T. Ivanov .npins = ARRAY_SIZE(bcm2712_d0_gpio_pins), 658*657cbf9bSIvan T. Ivanov }; 659*657cbf9bSIvan T. Ivanov 660*657cbf9bSIvan T. Ivanov static const struct pinctrl_gpio_range bcm2712_d0_aon_pinctrl_gpio_range = { 661*657cbf9bSIvan T. Ivanov .name = "aon-pinctrl-bcm2712", 662*657cbf9bSIvan T. Ivanov .npins = ARRAY_SIZE(bcm2712_d0_aon_gpio_pins), 663*657cbf9bSIvan T. Ivanov }; 664*657cbf9bSIvan T. Ivanov 665*657cbf9bSIvan T. Ivanov static const struct brcmstb_pdata bcm2712_c0_pdata = { 666*657cbf9bSIvan T. Ivanov .pctl_desc = &bcm2712_c0_pinctrl_desc, 667*657cbf9bSIvan T. Ivanov .gpio_range = &bcm2712_c0_pinctrl_gpio_range, 668*657cbf9bSIvan T. Ivanov .pin_regs = bcm2712_c0_gpio_pin_regs, 669*657cbf9bSIvan T. Ivanov .pin_funcs = bcm2712_c0_gpio_pin_funcs, 670*657cbf9bSIvan T. Ivanov .func_count = func_count, 671*657cbf9bSIvan T. Ivanov .func_gpio = func_gpio, 672*657cbf9bSIvan T. Ivanov .func_names = bcm2712_func_names, 673*657cbf9bSIvan T. Ivanov }; 674*657cbf9bSIvan T. Ivanov 675*657cbf9bSIvan T. Ivanov static const struct brcmstb_pdata bcm2712_c0_aon_pdata = { 676*657cbf9bSIvan T. Ivanov .pctl_desc = &bcm2712_c0_aon_pinctrl_desc, 677*657cbf9bSIvan T. Ivanov .gpio_range = &bcm2712_c0_aon_pinctrl_gpio_range, 678*657cbf9bSIvan T. Ivanov .pin_regs = bcm2712_c0_aon_gpio_pin_regs, 679*657cbf9bSIvan T. Ivanov .pin_funcs = bcm2712_c0_aon_gpio_pin_funcs, 680*657cbf9bSIvan T. Ivanov .func_count = func_count, 681*657cbf9bSIvan T. Ivanov .func_gpio = func_gpio, 682*657cbf9bSIvan T. Ivanov .func_names = bcm2712_func_names, 683*657cbf9bSIvan T. Ivanov }; 684*657cbf9bSIvan T. Ivanov 685*657cbf9bSIvan T. Ivanov static const struct brcmstb_pdata bcm2712_d0_pdata = { 686*657cbf9bSIvan T. Ivanov .pctl_desc = &bcm2712_d0_pinctrl_desc, 687*657cbf9bSIvan T. Ivanov .gpio_range = &bcm2712_d0_pinctrl_gpio_range, 688*657cbf9bSIvan T. Ivanov .pin_regs = bcm2712_d0_gpio_pin_regs, 689*657cbf9bSIvan T. Ivanov .pin_funcs = bcm2712_d0_gpio_pin_funcs, 690*657cbf9bSIvan T. Ivanov .func_count = func_count, 691*657cbf9bSIvan T. Ivanov .func_gpio = func_gpio, 692*657cbf9bSIvan T. Ivanov .func_names = bcm2712_func_names, 693*657cbf9bSIvan T. Ivanov }; 694*657cbf9bSIvan T. Ivanov 695*657cbf9bSIvan T. Ivanov static const struct brcmstb_pdata bcm2712_d0_aon_pdata = { 696*657cbf9bSIvan T. Ivanov .pctl_desc = &bcm2712_d0_aon_pinctrl_desc, 697*657cbf9bSIvan T. Ivanov .gpio_range = &bcm2712_d0_aon_pinctrl_gpio_range, 698*657cbf9bSIvan T. Ivanov .pin_regs = bcm2712_d0_aon_gpio_pin_regs, 699*657cbf9bSIvan T. Ivanov .pin_funcs = bcm2712_d0_aon_gpio_pin_funcs, 700*657cbf9bSIvan T. Ivanov .func_count = func_count, 701*657cbf9bSIvan T. Ivanov .func_gpio = func_gpio, 702*657cbf9bSIvan T. Ivanov .func_names = bcm2712_func_names, 703*657cbf9bSIvan T. Ivanov }; 704*657cbf9bSIvan T. Ivanov 705*657cbf9bSIvan T. Ivanov static int bcm2712_pinctrl_probe(struct platform_device *pdev) 706*657cbf9bSIvan T. Ivanov { 707*657cbf9bSIvan T. Ivanov return brcmstb_pinctrl_probe(pdev); 708*657cbf9bSIvan T. Ivanov } 709*657cbf9bSIvan T. Ivanov 710*657cbf9bSIvan T. Ivanov static const struct of_device_id bcm2712_pinctrl_match[] = { 711*657cbf9bSIvan T. Ivanov { 712*657cbf9bSIvan T. Ivanov .compatible = "brcm,bcm2712c0-pinctrl", 713*657cbf9bSIvan T. Ivanov .data = &bcm2712_c0_pdata 714*657cbf9bSIvan T. Ivanov }, 715*657cbf9bSIvan T. Ivanov { 716*657cbf9bSIvan T. Ivanov .compatible = "brcm,bcm2712c0-aon-pinctrl", 717*657cbf9bSIvan T. Ivanov .data = &bcm2712_c0_aon_pdata 718*657cbf9bSIvan T. Ivanov }, 719*657cbf9bSIvan T. Ivanov 720*657cbf9bSIvan T. Ivanov { 721*657cbf9bSIvan T. Ivanov .compatible = "brcm,bcm2712d0-pinctrl", 722*657cbf9bSIvan T. Ivanov .data = &bcm2712_d0_pdata 723*657cbf9bSIvan T. Ivanov }, 724*657cbf9bSIvan T. Ivanov { 725*657cbf9bSIvan T. Ivanov .compatible = "brcm,bcm2712d0-aon-pinctrl", 726*657cbf9bSIvan T. Ivanov .data = &bcm2712_d0_aon_pdata 727*657cbf9bSIvan T. Ivanov }, 728*657cbf9bSIvan T. Ivanov { /* sentinel */ } 729*657cbf9bSIvan T. Ivanov }; 730*657cbf9bSIvan T. Ivanov MODULE_DEVICE_TABLE(of, bcm2712_pinctrl_match); 731*657cbf9bSIvan T. Ivanov 732*657cbf9bSIvan T. Ivanov static struct platform_driver bcm2712_pinctrl_driver = { 733*657cbf9bSIvan T. Ivanov .probe = bcm2712_pinctrl_probe, 734*657cbf9bSIvan T. Ivanov .driver = { 735*657cbf9bSIvan T. Ivanov .name = "pinctrl-bcm2712", 736*657cbf9bSIvan T. Ivanov .of_match_table = bcm2712_pinctrl_match, 737*657cbf9bSIvan T. Ivanov .suppress_bind_attrs = true, 738*657cbf9bSIvan T. Ivanov }, 739*657cbf9bSIvan T. Ivanov }; 740*657cbf9bSIvan T. Ivanov module_platform_driver(bcm2712_pinctrl_driver); 741*657cbf9bSIvan T. Ivanov 742*657cbf9bSIvan T. Ivanov MODULE_AUTHOR("Phil Elwell"); 743*657cbf9bSIvan T. Ivanov MODULE_AUTHOR("Jonathan Bell"); 744*657cbf9bSIvan T. Ivanov MODULE_AUTHOR("Ivan T. Ivanov"); 745*657cbf9bSIvan T. Ivanov MODULE_AUTHOR("Andrea della Porta"); 746*657cbf9bSIvan T. Ivanov MODULE_DESCRIPTION("Broadcom BCM2712 pinctrl driver"); 747*657cbf9bSIvan T. Ivanov MODULE_LICENSE("GPL"); 748