1*87b42c8bSMikhail Kshevetskiy // SPDX-License-Identifier: GPL-2.0-only 2*87b42c8bSMikhail Kshevetskiy /* 3*87b42c8bSMikhail Kshevetskiy * AN7563 SoC pinctrl data for the Airoha pinctrl driver (pinctrl-airoha.c). 4*87b42c8bSMikhail Kshevetskiy * 5*87b42c8bSMikhail Kshevetskiy * Sources: AN7563 Programming Guide chapter 2 (CHIP SCU, base 0x1fa20000), 6*87b42c8bSMikhail Kshevetskiy * chapter 17 (GPIO controller, base 0x1fbf0200) and AN7563PT datasheet 7*87b42c8bSMikhail Kshevetskiy * chapter 4.3 (pin sharing scheme). 8*87b42c8bSMikhail Kshevetskiy * 9*87b42c8bSMikhail Kshevetskiy * Pin numbering follows the GPIO line numbering of the SoC: 10*87b42c8bSMikhail Kshevetskiy * pins 0-27 -> GPIO0-GPIO27 (dedicated GPIO pads) 11*87b42c8bSMikhail Kshevetskiy * pins 28/29 -> PCIE_RESET0/PCIE_RESET1 pads (GPIO28/GPIO29) 12*87b42c8bSMikhail Kshevetskiy * pins 30/31 -> I2C_SCL/I2C_SDA pads (GPIO30/GPIO31) 13*87b42c8bSMikhail Kshevetskiy * pins 32-35 -> SPI_CLK/SPI_CS/SPI_MOSI/SPI_MISO pads (GPIO32-GPIO35) 14*87b42c8bSMikhail Kshevetskiy * pins 36/37 -> UART_TXD/UART_RXD pads (GPIO36/GPIO37) 15*87b42c8bSMikhail Kshevetskiy * 16*87b42c8bSMikhail Kshevetskiy * Definitions marked "shared" are identical to the ones already present in 17*87b42c8bSMikhail Kshevetskiy * pinctrl-airoha.c (EN7581/AN7583) and must be dropped when this data is 18*87b42c8bSMikhail Kshevetskiy * merged there. 19*87b42c8bSMikhail Kshevetskiy */ 20*87b42c8bSMikhail Kshevetskiy 21*87b42c8bSMikhail Kshevetskiy #include "airoha-common.h" 22*87b42c8bSMikhail Kshevetskiy 23*87b42c8bSMikhail Kshevetskiy /* 24*87b42c8bSMikhail Kshevetskiy * shared - named RG_SW_TOD_1PPS_MODE on AN7563. Only the LAN LED mode 25*87b42c8bSMikhail Kshevetskiy * bits and GSW_TOD_1PPS exist on AN7563 (no 2nd I2C, I2S or PON 1PPS). 26*87b42c8bSMikhail Kshevetskiy */ 27*87b42c8bSMikhail Kshevetskiy #define REG_GPIO_2ND_I2C_MODE 0x0214 28*87b42c8bSMikhail Kshevetskiy #define GPIO_LAN3_LED1_MODE_MASK BIT(10) 29*87b42c8bSMikhail Kshevetskiy #define GPIO_LAN3_LED0_MODE_MASK BIT(9) 30*87b42c8bSMikhail Kshevetskiy #define GPIO_LAN2_LED1_MODE_MASK BIT(8) 31*87b42c8bSMikhail Kshevetskiy #define GPIO_LAN2_LED0_MODE_MASK BIT(7) 32*87b42c8bSMikhail Kshevetskiy #define GPIO_LAN1_LED1_MODE_MASK BIT(6) 33*87b42c8bSMikhail Kshevetskiy #define GPIO_LAN1_LED0_MODE_MASK BIT(5) 34*87b42c8bSMikhail Kshevetskiy #define GPIO_LAN0_LED1_MODE_MASK BIT(4) 35*87b42c8bSMikhail Kshevetskiy #define GPIO_LAN0_LED0_MODE_MASK BIT(3) 36*87b42c8bSMikhail Kshevetskiy #define GSW_TOD_1PPS_MODE_MASK BIT(1) 37*87b42c8bSMikhail Kshevetskiy 38*87b42c8bSMikhail Kshevetskiy /* shared */ 39*87b42c8bSMikhail Kshevetskiy #define REG_GPIO_SPI_CS1_MODE 0x0218 40*87b42c8bSMikhail Kshevetskiy #define GPIO_PCM_SPI_CS4_MODE_MASK BIT(21) 41*87b42c8bSMikhail Kshevetskiy #define GPIO_PCM_SPI_CS3_MODE_MASK BIT(20) 42*87b42c8bSMikhail Kshevetskiy #define GPIO_PCM_SPI_CS2_MODE_MASK BIT(18) 43*87b42c8bSMikhail Kshevetskiy #define GPIO_PCM_SPI_CS1_MODE_MASK BIT(17) 44*87b42c8bSMikhail Kshevetskiy #define GPIO_PCM_SPI_MODE_MASK BIT(16) 45*87b42c8bSMikhail Kshevetskiy #define GPIO_PCM2_MODE_MASK BIT(13) 46*87b42c8bSMikhail Kshevetskiy #define GPIO_PCM1_MODE_MASK BIT(12) 47*87b42c8bSMikhail Kshevetskiy #define GPIO_PCM_INT_MODE_MASK BIT(9) 48*87b42c8bSMikhail Kshevetskiy #define GPIO_PCM_RESET_MODE_MASK BIT(8) 49*87b42c8bSMikhail Kshevetskiy #define GPIO_SPI_QUAD_MODE_MASK BIT(4) 50*87b42c8bSMikhail Kshevetskiy #define GPIO_SPI_CS4_MODE_MASK BIT(3) 51*87b42c8bSMikhail Kshevetskiy #define GPIO_SPI_CS3_MODE_MASK BIT(2) 52*87b42c8bSMikhail Kshevetskiy #define GPIO_SPI_CS2_MODE_MASK BIT(1) 53*87b42c8bSMikhail Kshevetskiy #define GPIO_SPI_CS1_MODE_MASK BIT(0) 54*87b42c8bSMikhail Kshevetskiy 55*87b42c8bSMikhail Kshevetskiy #define REG_GPIO_PON_MODE 0x021c 56*87b42c8bSMikhail Kshevetskiy /* 57*87b42c8bSMikhail Kshevetskiy * AN7563 specific: route the standalone pads to their GPIO function. 58*87b42c8bSMikhail Kshevetskiy * 0: pad keeps its base function, 1: pad is GPIO<n>. 59*87b42c8bSMikhail Kshevetskiy */ 60*87b42c8bSMikhail Kshevetskiy #define UART_RXD_GPIO_MODE_MASK BIT(22) /* GPIO37 */ 61*87b42c8bSMikhail Kshevetskiy #define UART_TXD_GPIO_MODE_MASK BIT(21) /* GPIO36 */ 62*87b42c8bSMikhail Kshevetskiy #define SPI_MISO_GPIO_MODE_MASK BIT(20) /* GPIO35 */ 63*87b42c8bSMikhail Kshevetskiy #define SPI_MOSI_GPIO_MODE_MASK BIT(19) /* GPIO34 */ 64*87b42c8bSMikhail Kshevetskiy #define SPI_CS_GPIO_MODE_MASK BIT(18) /* GPIO33 */ 65*87b42c8bSMikhail Kshevetskiy #define SPI_CLK_GPIO_MODE_MASK BIT(17) /* GPIO32 */ 66*87b42c8bSMikhail Kshevetskiy #define I2C_SDA_GPIO_MODE_MASK BIT(16) /* GPIO31 */ 67*87b42c8bSMikhail Kshevetskiy #define I2C_SCL_GPIO_MODE_MASK BIT(15) /* GPIO30 */ 68*87b42c8bSMikhail Kshevetskiy /* shared */ 69*87b42c8bSMikhail Kshevetskiy #define GPIO_PARALLEL_NAND_MODE_MASK BIT(14) 70*87b42c8bSMikhail Kshevetskiy #define GPIO_SGMII_MDIO_MODE_MASK BIT(13) 71*87b42c8bSMikhail Kshevetskiy #define SIPO_RCLK_MODE_MASK BIT(11) 72*87b42c8bSMikhail Kshevetskiy /* 73*87b42c8bSMikhail Kshevetskiy * Note: on AN7563 GPIO_PCIE_RESET{0,1} select the GPIO function of the 74*87b42c8bSMikhail Kshevetskiy * PCIE_RESET pads (0: PCIe reset, 1: GPIO28/GPIO29). 75*87b42c8bSMikhail Kshevetskiy */ 76*87b42c8bSMikhail Kshevetskiy #define GPIO_PCIE_RESET1_MASK BIT(10) /* GPIO29 */ 77*87b42c8bSMikhail Kshevetskiy #define GPIO_PCIE_RESET0_MASK BIT(9) /* GPIO28 */ 78*87b42c8bSMikhail Kshevetskiy #define GPIO_HSUART_CTS_RTS_MODE_MASK BIT(6) 79*87b42c8bSMikhail Kshevetskiy #define GPIO_HSUART_MODE_MASK BIT(5) 80*87b42c8bSMikhail Kshevetskiy #define GPIO_SIPO_MODE_MASK BIT(2) 81*87b42c8bSMikhail Kshevetskiy #define GPIO_PON_MODE_MASK BIT(0) 82*87b42c8bSMikhail Kshevetskiy 83*87b42c8bSMikhail Kshevetskiy /* shared */ 84*87b42c8bSMikhail Kshevetskiy #define REG_NPU_UART_EN 0x0224 85*87b42c8bSMikhail Kshevetskiy #define JTAG_UDI_EN_MASK BIT(4) 86*87b42c8bSMikhail Kshevetskiy #define JTAG_DFD_EN_MASK BIT(3) 87*87b42c8bSMikhail Kshevetskiy 88*87b42c8bSMikhail Kshevetskiy /* LED MAP - shared */ 89*87b42c8bSMikhail Kshevetskiy #define REG_LAN_LED0_MAPPING 0x027c 90*87b42c8bSMikhail Kshevetskiy #define REG_LAN_LED1_MAPPING 0x0280 91*87b42c8bSMikhail Kshevetskiy 92*87b42c8bSMikhail Kshevetskiy #define LAN3_LED_MAPPING_MASK GENMASK(14, 12) 93*87b42c8bSMikhail Kshevetskiy #define LAN3_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN3_LED_MAPPING_MASK, (_n)) 94*87b42c8bSMikhail Kshevetskiy 95*87b42c8bSMikhail Kshevetskiy #define LAN2_LED_MAPPING_MASK GENMASK(10, 8) 96*87b42c8bSMikhail Kshevetskiy #define LAN2_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN2_LED_MAPPING_MASK, (_n)) 97*87b42c8bSMikhail Kshevetskiy 98*87b42c8bSMikhail Kshevetskiy #define LAN1_LED_MAPPING_MASK GENMASK(6, 4) 99*87b42c8bSMikhail Kshevetskiy #define LAN1_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN1_LED_MAPPING_MASK, (_n)) 100*87b42c8bSMikhail Kshevetskiy 101*87b42c8bSMikhail Kshevetskiy #define LAN0_LED_MAPPING_MASK GENMASK(2, 0) 102*87b42c8bSMikhail Kshevetskiy #define LAN0_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN0_LED_MAPPING_MASK, (_n)) 103*87b42c8bSMikhail Kshevetskiy 104*87b42c8bSMikhail Kshevetskiy /* 105*87b42c8bSMikhail Kshevetskiy * CONF - shared. 106*87b42c8bSMikhail Kshevetskiy * The AN7563 standalone IO conf registers use the same bit layout as 107*87b42c8bSMikhail Kshevetskiy * EN7581 (UART1_TXD/RXD are named UART_TXD/RXD on AN7563). 108*87b42c8bSMikhail Kshevetskiy */ 109*87b42c8bSMikhail Kshevetskiy #define REG_I2C_SDA_E2 0x001c 110*87b42c8bSMikhail Kshevetskiy #define SPI_MISO_E2_MASK BIT(14) 111*87b42c8bSMikhail Kshevetskiy #define SPI_MOSI_E2_MASK BIT(13) 112*87b42c8bSMikhail Kshevetskiy #define SPI_CLK_E2_MASK BIT(12) 113*87b42c8bSMikhail Kshevetskiy #define SPI_CS0_E2_MASK BIT(11) 114*87b42c8bSMikhail Kshevetskiy #define PCIE1_RESET_E2_MASK BIT(9) 115*87b42c8bSMikhail Kshevetskiy #define PCIE0_RESET_E2_MASK BIT(8) 116*87b42c8bSMikhail Kshevetskiy #define UART1_RXD_E2_MASK BIT(3) 117*87b42c8bSMikhail Kshevetskiy #define UART1_TXD_E2_MASK BIT(2) 118*87b42c8bSMikhail Kshevetskiy #define I2C_SCL_E2_MASK BIT(1) 119*87b42c8bSMikhail Kshevetskiy #define I2C_SDA_E2_MASK BIT(0) 120*87b42c8bSMikhail Kshevetskiy 121*87b42c8bSMikhail Kshevetskiy #define REG_I2C_SDA_E4 0x0020 122*87b42c8bSMikhail Kshevetskiy #define SPI_MISO_E4_MASK BIT(14) 123*87b42c8bSMikhail Kshevetskiy #define SPI_MOSI_E4_MASK BIT(13) 124*87b42c8bSMikhail Kshevetskiy #define SPI_CLK_E4_MASK BIT(12) 125*87b42c8bSMikhail Kshevetskiy #define SPI_CS0_E4_MASK BIT(11) 126*87b42c8bSMikhail Kshevetskiy #define PCIE1_RESET_E4_MASK BIT(9) 127*87b42c8bSMikhail Kshevetskiy #define PCIE0_RESET_E4_MASK BIT(8) 128*87b42c8bSMikhail Kshevetskiy #define UART1_RXD_E4_MASK BIT(3) 129*87b42c8bSMikhail Kshevetskiy #define UART1_TXD_E4_MASK BIT(2) 130*87b42c8bSMikhail Kshevetskiy #define I2C_SCL_E4_MASK BIT(1) 131*87b42c8bSMikhail Kshevetskiy #define I2C_SDA_E4_MASK BIT(0) 132*87b42c8bSMikhail Kshevetskiy 133*87b42c8bSMikhail Kshevetskiy #define REG_GPIO_L_E2 0x0024 134*87b42c8bSMikhail Kshevetskiy #define REG_GPIO_L_E4 0x0028 135*87b42c8bSMikhail Kshevetskiy 136*87b42c8bSMikhail Kshevetskiy #define REG_I2C_SDA_PU 0x0044 137*87b42c8bSMikhail Kshevetskiy #define SPI_MISO_PU_MASK BIT(14) 138*87b42c8bSMikhail Kshevetskiy #define SPI_MOSI_PU_MASK BIT(13) 139*87b42c8bSMikhail Kshevetskiy #define SPI_CLK_PU_MASK BIT(12) 140*87b42c8bSMikhail Kshevetskiy #define SPI_CS0_PU_MASK BIT(11) 141*87b42c8bSMikhail Kshevetskiy #define PCIE1_RESET_PU_MASK BIT(9) 142*87b42c8bSMikhail Kshevetskiy #define PCIE0_RESET_PU_MASK BIT(8) 143*87b42c8bSMikhail Kshevetskiy #define UART1_RXD_PU_MASK BIT(3) 144*87b42c8bSMikhail Kshevetskiy #define UART1_TXD_PU_MASK BIT(2) 145*87b42c8bSMikhail Kshevetskiy #define I2C_SCL_PU_MASK BIT(1) 146*87b42c8bSMikhail Kshevetskiy #define I2C_SDA_PU_MASK BIT(0) 147*87b42c8bSMikhail Kshevetskiy 148*87b42c8bSMikhail Kshevetskiy #define REG_I2C_SDA_PD 0x0048 149*87b42c8bSMikhail Kshevetskiy #define SPI_MISO_PD_MASK BIT(14) 150*87b42c8bSMikhail Kshevetskiy #define SPI_MOSI_PD_MASK BIT(13) 151*87b42c8bSMikhail Kshevetskiy #define SPI_CLK_PD_MASK BIT(12) 152*87b42c8bSMikhail Kshevetskiy #define SPI_CS0_PD_MASK BIT(11) 153*87b42c8bSMikhail Kshevetskiy #define PCIE1_RESET_PD_MASK BIT(9) 154*87b42c8bSMikhail Kshevetskiy #define PCIE0_RESET_PD_MASK BIT(8) 155*87b42c8bSMikhail Kshevetskiy #define UART1_RXD_PD_MASK BIT(3) 156*87b42c8bSMikhail Kshevetskiy #define UART1_TXD_PD_MASK BIT(2) 157*87b42c8bSMikhail Kshevetskiy #define I2C_SCL_PD_MASK BIT(1) 158*87b42c8bSMikhail Kshevetskiy #define I2C_SDA_PD_MASK BIT(0) 159*87b42c8bSMikhail Kshevetskiy 160*87b42c8bSMikhail Kshevetskiy #define REG_GPIO_L_PU 0x004c 161*87b42c8bSMikhail Kshevetskiy #define REG_GPIO_L_PD 0x0050 162*87b42c8bSMikhail Kshevetskiy 163*87b42c8bSMikhail Kshevetskiy #define REG_PCIE_RESET_OD 0x018c 164*87b42c8bSMikhail Kshevetskiy #define PCIE1_RESET_OD_MASK BIT(1) 165*87b42c8bSMikhail Kshevetskiy #define PCIE0_RESET_OD_MASK BIT(0) 166*87b42c8bSMikhail Kshevetskiy 167*87b42c8bSMikhail Kshevetskiy /* 168*87b42c8bSMikhail Kshevetskiy * PWM MODE CONF - shared. 169*87b42c8bSMikhail Kshevetskiy * The AN7563 GPIO flash mode registers use the same layout as EN7581: 170*87b42c8bSMikhail Kshevetskiy * REG_GPIO_FLASH_MODE_CFG covers GPIO0-15, REG_GPIO_FLASH_MODE_CFG_EXT 171*87b42c8bSMikhail Kshevetskiy * covers GPIO16-31 (bits 0-15) and GPIO36+ (bits 16+). The SPI pads 172*87b42c8bSMikhail Kshevetskiy * (GPIO32-35) have no flash mode configuration bit. 173*87b42c8bSMikhail Kshevetskiy */ 174*87b42c8bSMikhail Kshevetskiy #define REG_GPIO_FLASH_MODE_CFG 0x0034 175*87b42c8bSMikhail Kshevetskiy #define GPIO15_FLASH_MODE_CFG BIT(15) 176*87b42c8bSMikhail Kshevetskiy #define GPIO14_FLASH_MODE_CFG BIT(14) 177*87b42c8bSMikhail Kshevetskiy #define GPIO13_FLASH_MODE_CFG BIT(13) 178*87b42c8bSMikhail Kshevetskiy #define GPIO12_FLASH_MODE_CFG BIT(12) 179*87b42c8bSMikhail Kshevetskiy #define GPIO11_FLASH_MODE_CFG BIT(11) 180*87b42c8bSMikhail Kshevetskiy #define GPIO10_FLASH_MODE_CFG BIT(10) 181*87b42c8bSMikhail Kshevetskiy #define GPIO9_FLASH_MODE_CFG BIT(9) 182*87b42c8bSMikhail Kshevetskiy #define GPIO8_FLASH_MODE_CFG BIT(8) 183*87b42c8bSMikhail Kshevetskiy #define GPIO7_FLASH_MODE_CFG BIT(7) 184*87b42c8bSMikhail Kshevetskiy #define GPIO6_FLASH_MODE_CFG BIT(6) 185*87b42c8bSMikhail Kshevetskiy #define GPIO5_FLASH_MODE_CFG BIT(5) 186*87b42c8bSMikhail Kshevetskiy #define GPIO4_FLASH_MODE_CFG BIT(4) 187*87b42c8bSMikhail Kshevetskiy #define GPIO3_FLASH_MODE_CFG BIT(3) 188*87b42c8bSMikhail Kshevetskiy #define GPIO2_FLASH_MODE_CFG BIT(2) 189*87b42c8bSMikhail Kshevetskiy #define GPIO1_FLASH_MODE_CFG BIT(1) 190*87b42c8bSMikhail Kshevetskiy #define GPIO0_FLASH_MODE_CFG BIT(0) 191*87b42c8bSMikhail Kshevetskiy 192*87b42c8bSMikhail Kshevetskiy #define REG_GPIO_FLASH_MODE_CFG_EXT 0x0068 193*87b42c8bSMikhail Kshevetskiy #define GPIO37_FLASH_MODE_CFG BIT(17) 194*87b42c8bSMikhail Kshevetskiy #define GPIO36_FLASH_MODE_CFG BIT(16) 195*87b42c8bSMikhail Kshevetskiy #define GPIO31_FLASH_MODE_CFG BIT(15) 196*87b42c8bSMikhail Kshevetskiy #define GPIO30_FLASH_MODE_CFG BIT(14) 197*87b42c8bSMikhail Kshevetskiy #define GPIO29_FLASH_MODE_CFG BIT(13) 198*87b42c8bSMikhail Kshevetskiy #define GPIO28_FLASH_MODE_CFG BIT(12) 199*87b42c8bSMikhail Kshevetskiy #define GPIO27_FLASH_MODE_CFG BIT(11) 200*87b42c8bSMikhail Kshevetskiy #define GPIO26_FLASH_MODE_CFG BIT(10) 201*87b42c8bSMikhail Kshevetskiy #define GPIO25_FLASH_MODE_CFG BIT(9) 202*87b42c8bSMikhail Kshevetskiy #define GPIO24_FLASH_MODE_CFG BIT(8) 203*87b42c8bSMikhail Kshevetskiy #define GPIO23_FLASH_MODE_CFG BIT(7) 204*87b42c8bSMikhail Kshevetskiy #define GPIO22_FLASH_MODE_CFG BIT(6) 205*87b42c8bSMikhail Kshevetskiy #define GPIO21_FLASH_MODE_CFG BIT(5) 206*87b42c8bSMikhail Kshevetskiy #define GPIO20_FLASH_MODE_CFG BIT(4) 207*87b42c8bSMikhail Kshevetskiy #define GPIO19_FLASH_MODE_CFG BIT(3) 208*87b42c8bSMikhail Kshevetskiy #define GPIO18_FLASH_MODE_CFG BIT(2) 209*87b42c8bSMikhail Kshevetskiy #define GPIO17_FLASH_MODE_CFG BIT(1) 210*87b42c8bSMikhail Kshevetskiy #define GPIO16_FLASH_MODE_CFG BIT(0) 211*87b42c8bSMikhail Kshevetskiy 212*87b42c8bSMikhail Kshevetskiy #define AIROHA_PINCTRL_GPIO(gpio, mux_val) \ 213*87b42c8bSMikhail Kshevetskiy { \ 214*87b42c8bSMikhail Kshevetskiy .name = (gpio), \ 215*87b42c8bSMikhail Kshevetskiy .regmap[0] = { \ 216*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, \ 217*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, \ 218*87b42c8bSMikhail Kshevetskiy (mux_val), \ 219*87b42c8bSMikhail Kshevetskiy (mux_val) \ 220*87b42c8bSMikhail Kshevetskiy }, \ 221*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, \ 222*87b42c8bSMikhail Kshevetskiy } 223*87b42c8bSMikhail Kshevetskiy 224*87b42c8bSMikhail Kshevetskiy #define AIROHA_PINCTRL_GPIO_EXT(gpio, mux_val, smux_val) \ 225*87b42c8bSMikhail Kshevetskiy { \ 226*87b42c8bSMikhail Kshevetskiy .name = (gpio), \ 227*87b42c8bSMikhail Kshevetskiy .regmap[0] = { \ 228*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_PWM_EXT_MUX, \ 229*87b42c8bSMikhail Kshevetskiy REG_GPIO_FLASH_MODE_CFG_EXT, \ 230*87b42c8bSMikhail Kshevetskiy (mux_val), \ 231*87b42c8bSMikhail Kshevetskiy 0 \ 232*87b42c8bSMikhail Kshevetskiy }, \ 233*87b42c8bSMikhail Kshevetskiy .regmap[1] = { \ 234*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, \ 235*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, \ 236*87b42c8bSMikhail Kshevetskiy (smux_val), \ 237*87b42c8bSMikhail Kshevetskiy (smux_val) \ 238*87b42c8bSMikhail Kshevetskiy }, \ 239*87b42c8bSMikhail Kshevetskiy .regmap_size = 2, \ 240*87b42c8bSMikhail Kshevetskiy } 241*87b42c8bSMikhail Kshevetskiy 242*87b42c8bSMikhail Kshevetskiy /* PWM */ 243*87b42c8bSMikhail Kshevetskiy #define AIROHA_PINCTRL_PWM(gpio, mux_val) \ 244*87b42c8bSMikhail Kshevetskiy { \ 245*87b42c8bSMikhail Kshevetskiy .name = (gpio), \ 246*87b42c8bSMikhail Kshevetskiy .regmap[0] = { \ 247*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_PWM_MUX, \ 248*87b42c8bSMikhail Kshevetskiy REG_GPIO_FLASH_MODE_CFG, \ 249*87b42c8bSMikhail Kshevetskiy (mux_val), \ 250*87b42c8bSMikhail Kshevetskiy (mux_val) \ 251*87b42c8bSMikhail Kshevetskiy }, \ 252*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, \ 253*87b42c8bSMikhail Kshevetskiy } 254*87b42c8bSMikhail Kshevetskiy 255*87b42c8bSMikhail Kshevetskiy #define AIROHA_PINCTRL_PWM_EXT(gpio, mux_val) \ 256*87b42c8bSMikhail Kshevetskiy { \ 257*87b42c8bSMikhail Kshevetskiy .name = (gpio), \ 258*87b42c8bSMikhail Kshevetskiy .regmap[0] = { \ 259*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_PWM_EXT_MUX, \ 260*87b42c8bSMikhail Kshevetskiy REG_GPIO_FLASH_MODE_CFG_EXT, \ 261*87b42c8bSMikhail Kshevetskiy (mux_val), \ 262*87b42c8bSMikhail Kshevetskiy (mux_val) \ 263*87b42c8bSMikhail Kshevetskiy }, \ 264*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, \ 265*87b42c8bSMikhail Kshevetskiy } 266*87b42c8bSMikhail Kshevetskiy 267*87b42c8bSMikhail Kshevetskiy #define AIROHA_PINCTRL_PWM_EXT_SEC(gpio, mux_val, smux_val) \ 268*87b42c8bSMikhail Kshevetskiy { \ 269*87b42c8bSMikhail Kshevetskiy .name = (gpio), \ 270*87b42c8bSMikhail Kshevetskiy .regmap[0] = { \ 271*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_PWM_EXT_MUX, \ 272*87b42c8bSMikhail Kshevetskiy REG_GPIO_FLASH_MODE_CFG_EXT, \ 273*87b42c8bSMikhail Kshevetskiy (mux_val), \ 274*87b42c8bSMikhail Kshevetskiy (mux_val) \ 275*87b42c8bSMikhail Kshevetskiy }, \ 276*87b42c8bSMikhail Kshevetskiy .regmap[1] = { \ 277*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, \ 278*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, \ 279*87b42c8bSMikhail Kshevetskiy (smux_val), \ 280*87b42c8bSMikhail Kshevetskiy (smux_val) \ 281*87b42c8bSMikhail Kshevetskiy }, \ 282*87b42c8bSMikhail Kshevetskiy .regmap_size = 2, \ 283*87b42c8bSMikhail Kshevetskiy } 284*87b42c8bSMikhail Kshevetskiy 285*87b42c8bSMikhail Kshevetskiy #define AIROHA_PINCTRL_PHY_LED0(gpio, mux_val, map_mask, map_val) \ 286*87b42c8bSMikhail Kshevetskiy { \ 287*87b42c8bSMikhail Kshevetskiy .name = (gpio), \ 288*87b42c8bSMikhail Kshevetskiy .regmap[0] = { \ 289*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, \ 290*87b42c8bSMikhail Kshevetskiy REG_GPIO_2ND_I2C_MODE, \ 291*87b42c8bSMikhail Kshevetskiy (mux_val), \ 292*87b42c8bSMikhail Kshevetskiy (mux_val), \ 293*87b42c8bSMikhail Kshevetskiy }, \ 294*87b42c8bSMikhail Kshevetskiy .regmap[1] = { \ 295*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, \ 296*87b42c8bSMikhail Kshevetskiy REG_LAN_LED0_MAPPING, \ 297*87b42c8bSMikhail Kshevetskiy (map_mask), \ 298*87b42c8bSMikhail Kshevetskiy (map_val), \ 299*87b42c8bSMikhail Kshevetskiy }, \ 300*87b42c8bSMikhail Kshevetskiy .regmap_size = 2, \ 301*87b42c8bSMikhail Kshevetskiy } 302*87b42c8bSMikhail Kshevetskiy 303*87b42c8bSMikhail Kshevetskiy #define AIROHA_PINCTRL_PHY_LED1(gpio, mux_val, map_mask, map_val) \ 304*87b42c8bSMikhail Kshevetskiy { \ 305*87b42c8bSMikhail Kshevetskiy .name = (gpio), \ 306*87b42c8bSMikhail Kshevetskiy .regmap[0] = { \ 307*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, \ 308*87b42c8bSMikhail Kshevetskiy REG_GPIO_2ND_I2C_MODE, \ 309*87b42c8bSMikhail Kshevetskiy (mux_val), \ 310*87b42c8bSMikhail Kshevetskiy (mux_val), \ 311*87b42c8bSMikhail Kshevetskiy }, \ 312*87b42c8bSMikhail Kshevetskiy .regmap[1] = { \ 313*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, \ 314*87b42c8bSMikhail Kshevetskiy REG_LAN_LED1_MAPPING, \ 315*87b42c8bSMikhail Kshevetskiy (map_mask), \ 316*87b42c8bSMikhail Kshevetskiy (map_val), \ 317*87b42c8bSMikhail Kshevetskiy }, \ 318*87b42c8bSMikhail Kshevetskiy .regmap_size = 2, \ 319*87b42c8bSMikhail Kshevetskiy } 320*87b42c8bSMikhail Kshevetskiy 321*87b42c8bSMikhail Kshevetskiy static const struct pinctrl_pin_desc pinctrl_pins[] = { 322*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(0, "gpio0"), 323*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(1, "gpio1"), 324*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(2, "gpio2"), 325*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(3, "gpio3"), 326*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(4, "gpio4"), 327*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(5, "gpio5"), 328*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(6, "gpio6"), 329*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(7, "gpio7"), 330*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(8, "gpio8"), 331*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(9, "gpio9"), 332*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(10, "gpio10"), 333*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(11, "gpio11"), 334*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(12, "gpio12"), 335*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(13, "gpio13"), 336*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(14, "gpio14"), 337*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(15, "gpio15"), 338*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(16, "gpio16"), 339*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(17, "gpio17"), 340*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(18, "gpio18"), 341*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(19, "gpio19"), 342*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(20, "gpio20"), 343*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(21, "gpio21"), 344*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(22, "gpio22"), 345*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(23, "gpio23"), 346*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(24, "gpio24"), 347*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(25, "gpio25"), 348*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(26, "gpio26"), 349*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(27, "gpio27"), 350*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(28, "pcie_reset0"), /* GPIO28 */ 351*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(29, "pcie_reset1"), /* GPIO29 */ 352*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(30, "i2c_scl"), /* GPIO30 */ 353*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(31, "i2c_sda"), /* GPIO31 */ 354*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(32, "spi_clk"), /* GPIO32 */ 355*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(33, "spi_cs"), /* GPIO33 */ 356*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(34, "spi_mosi"), /* GPIO34 */ 357*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(35, "spi_miso"), /* GPIO35 */ 358*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(36, "uart_txd"), /* GPIO36 */ 359*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN(37, "uart_rxd"), /* GPIO37 */ 360*87b42c8bSMikhail Kshevetskiy }; 361*87b42c8bSMikhail Kshevetskiy 362*87b42c8bSMikhail Kshevetskiy static const int pon_pins[] = { 14, 15, 16, 17, 18, 19 }; 363*87b42c8bSMikhail Kshevetskiy static const int sipo_pins[] = { 20, 21 }; 364*87b42c8bSMikhail Kshevetskiy static const int sipo_rclk_pins[] = { 20, 21, 26 }; 365*87b42c8bSMikhail Kshevetskiy static const int mdio_pins[] = { 30, 31 }; 366*87b42c8bSMikhail Kshevetskiy static const int hsuart_pins[] = { 16, 17 }; 367*87b42c8bSMikhail Kshevetskiy static const int hsuart_cts_rts_pins[] = { 14, 15 }; 368*87b42c8bSMikhail Kshevetskiy static const int i2c_pins[] = { 30, 31 }; 369*87b42c8bSMikhail Kshevetskiy static const int jtag_udi_pins[] = { 7, 8, 9, 10, 11 }; 370*87b42c8bSMikhail Kshevetskiy static const int jtag_dfd_pins[] = { 7, 8, 9, 10, 11 }; 371*87b42c8bSMikhail Kshevetskiy static const int pcm1_pins[] = { 22, 23, 24, 25 }; 372*87b42c8bSMikhail Kshevetskiy static const int pcm2_pins[] = { 1, 2, 3, 4 }; 373*87b42c8bSMikhail Kshevetskiy static const int spi_pins[] = { 32, 33, 34, 35 }; 374*87b42c8bSMikhail Kshevetskiy static const int spi_quad_pins[] = { 2, 3 }; 375*87b42c8bSMikhail Kshevetskiy static const int spi_cs1_pins[] = { 4 }; 376*87b42c8bSMikhail Kshevetskiy static const int pnand_pins[] = { 377*87b42c8bSMikhail Kshevetskiy 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 27, 32, 33, 34, 35 378*87b42c8bSMikhail Kshevetskiy }; 379*87b42c8bSMikhail Kshevetskiy static const int gpio0_pins[] = { 0 }; 380*87b42c8bSMikhail Kshevetskiy static const int gpio1_pins[] = { 1 }; 381*87b42c8bSMikhail Kshevetskiy static const int gpio2_pins[] = { 2 }; 382*87b42c8bSMikhail Kshevetskiy static const int gpio3_pins[] = { 3 }; 383*87b42c8bSMikhail Kshevetskiy static const int gpio4_pins[] = { 4 }; 384*87b42c8bSMikhail Kshevetskiy static const int gpio5_pins[] = { 5 }; 385*87b42c8bSMikhail Kshevetskiy static const int gpio6_pins[] = { 6 }; 386*87b42c8bSMikhail Kshevetskiy static const int gpio7_pins[] = { 7 }; 387*87b42c8bSMikhail Kshevetskiy static const int gpio8_pins[] = { 8 }; 388*87b42c8bSMikhail Kshevetskiy static const int gpio9_pins[] = { 9 }; 389*87b42c8bSMikhail Kshevetskiy static const int gpio10_pins[] = { 10 }; 390*87b42c8bSMikhail Kshevetskiy static const int gpio11_pins[] = { 11 }; 391*87b42c8bSMikhail Kshevetskiy static const int gpio12_pins[] = { 12 }; 392*87b42c8bSMikhail Kshevetskiy static const int gpio13_pins[] = { 13 }; 393*87b42c8bSMikhail Kshevetskiy static const int gpio14_pins[] = { 14 }; 394*87b42c8bSMikhail Kshevetskiy static const int gpio15_pins[] = { 15 }; 395*87b42c8bSMikhail Kshevetskiy static const int gpio16_pins[] = { 16 }; 396*87b42c8bSMikhail Kshevetskiy static const int gpio17_pins[] = { 17 }; 397*87b42c8bSMikhail Kshevetskiy static const int gpio18_pins[] = { 18 }; 398*87b42c8bSMikhail Kshevetskiy static const int gpio19_pins[] = { 19 }; 399*87b42c8bSMikhail Kshevetskiy static const int gpio20_pins[] = { 20 }; 400*87b42c8bSMikhail Kshevetskiy static const int gpio21_pins[] = { 21 }; 401*87b42c8bSMikhail Kshevetskiy static const int gpio22_pins[] = { 22 }; 402*87b42c8bSMikhail Kshevetskiy static const int gpio23_pins[] = { 23 }; 403*87b42c8bSMikhail Kshevetskiy static const int gpio24_pins[] = { 24 }; 404*87b42c8bSMikhail Kshevetskiy static const int gpio25_pins[] = { 25 }; 405*87b42c8bSMikhail Kshevetskiy static const int gpio26_pins[] = { 26 }; 406*87b42c8bSMikhail Kshevetskiy static const int gpio27_pins[] = { 27 }; 407*87b42c8bSMikhail Kshevetskiy static const int gpio28_pins[] = { 28 }; 408*87b42c8bSMikhail Kshevetskiy static const int gpio29_pins[] = { 29 }; 409*87b42c8bSMikhail Kshevetskiy static const int gpio30_pins[] = { 30 }; 410*87b42c8bSMikhail Kshevetskiy static const int gpio31_pins[] = { 31 }; 411*87b42c8bSMikhail Kshevetskiy static const int gpio32_pins[] = { 32 }; 412*87b42c8bSMikhail Kshevetskiy static const int gpio33_pins[] = { 33 }; 413*87b42c8bSMikhail Kshevetskiy static const int gpio34_pins[] = { 34 }; 414*87b42c8bSMikhail Kshevetskiy static const int gpio35_pins[] = { 35 }; 415*87b42c8bSMikhail Kshevetskiy static const int gpio36_pins[] = { 36 }; 416*87b42c8bSMikhail Kshevetskiy static const int gpio37_pins[] = { 37 }; 417*87b42c8bSMikhail Kshevetskiy static const int pcie_reset0_pins[] = { 28 }; 418*87b42c8bSMikhail Kshevetskiy static const int pcie_reset1_pins[] = { 29 }; 419*87b42c8bSMikhail Kshevetskiy 420*87b42c8bSMikhail Kshevetskiy static const struct pingroup pinctrl_groups[] = { 421*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("pon", pon), 422*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("sipo", sipo), 423*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("sipo_rclk", sipo_rclk), 424*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("mdio", mdio), 425*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("hsuart", hsuart), 426*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("hsuart_cts_rts", hsuart_cts_rts), 427*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("i2c", i2c), 428*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("jtag_udi", jtag_udi), 429*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("jtag_dfd", jtag_dfd), 430*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("pcm1", pcm1), 431*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("pcm2", pcm2), 432*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("spi", spi), 433*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("spi_quad", spi_quad), 434*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("spi_cs1", spi_cs1), 435*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("pnand", pnand), 436*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio0", gpio0), 437*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio1", gpio1), 438*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio2", gpio2), 439*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio3", gpio3), 440*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio4", gpio4), 441*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio5", gpio5), 442*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio6", gpio6), 443*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio7", gpio7), 444*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio8", gpio8), 445*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio9", gpio9), 446*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio10", gpio10), 447*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio11", gpio11), 448*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio12", gpio12), 449*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio13", gpio13), 450*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio14", gpio14), 451*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio15", gpio15), 452*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio16", gpio16), 453*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio17", gpio17), 454*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio18", gpio18), 455*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio19", gpio19), 456*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio20", gpio20), 457*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio21", gpio21), 458*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio22", gpio22), 459*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio23", gpio23), 460*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio24", gpio24), 461*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio25", gpio25), 462*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio26", gpio26), 463*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio27", gpio27), 464*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio28", gpio28), 465*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio29", gpio29), 466*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio30", gpio30), 467*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio31", gpio31), 468*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio32", gpio32), 469*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio33", gpio33), 470*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio34", gpio34), 471*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio35", gpio35), 472*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio36", gpio36), 473*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio37", gpio37), 474*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("pcie_reset0", pcie_reset0), 475*87b42c8bSMikhail Kshevetskiy PINCTRL_PIN_GROUP("pcie_reset1", pcie_reset1), 476*87b42c8bSMikhail Kshevetskiy }; 477*87b42c8bSMikhail Kshevetskiy 478*87b42c8bSMikhail Kshevetskiy /* shared */ 479*87b42c8bSMikhail Kshevetskiy static const char *const pon_groups[] = { "pon" }; 480*87b42c8bSMikhail Kshevetskiy static const char *const sipo_groups[] = { "sipo", "sipo_rclk" }; 481*87b42c8bSMikhail Kshevetskiy static const char *const mdio_groups[] = { "mdio" }; 482*87b42c8bSMikhail Kshevetskiy static const char *const uart_groups[] = { 483*87b42c8bSMikhail Kshevetskiy "hsuart", "hsuart_cts_rts" 484*87b42c8bSMikhail Kshevetskiy }; 485*87b42c8bSMikhail Kshevetskiy static const char *const jtag_groups[] = { "jtag_udi", "jtag_dfd" }; 486*87b42c8bSMikhail Kshevetskiy static const char *const pcm_groups[] = { "pcm1", "pcm2" }; 487*87b42c8bSMikhail Kshevetskiy static const char *const spi_groups[] = { "spi_quad", "spi_cs1" }; 488*87b42c8bSMikhail Kshevetskiy static const char *const pnand_groups[] = { "pnand" }; 489*87b42c8bSMikhail Kshevetskiy static const char *const gpio_groups[] = { 490*87b42c8bSMikhail Kshevetskiy "gpio28", "gpio29", "gpio30", "gpio31", "gpio32", 491*87b42c8bSMikhail Kshevetskiy "gpio33", "gpio34", "gpio35", "gpio36", "gpio37" 492*87b42c8bSMikhail Kshevetskiy }; 493*87b42c8bSMikhail Kshevetskiy static const char *const pcie_reset_groups[] = { 494*87b42c8bSMikhail Kshevetskiy "pcie_reset0", "pcie_reset1" 495*87b42c8bSMikhail Kshevetskiy }; 496*87b42c8bSMikhail Kshevetskiy static const char *const pwm_groups[] = { 497*87b42c8bSMikhail Kshevetskiy "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", 498*87b42c8bSMikhail Kshevetskiy "gpio6", "gpio7", "gpio8", "gpio9", "gpio10", "gpio11", 499*87b42c8bSMikhail Kshevetskiy "gpio12", "gpio13", "gpio14", "gpio15", "gpio16", "gpio17", 500*87b42c8bSMikhail Kshevetskiy "gpio18", "gpio19", "gpio20", "gpio21", "gpio22", "gpio23", 501*87b42c8bSMikhail Kshevetskiy "gpio24", "gpio25", "gpio26", "gpio27", "gpio28", "gpio29", 502*87b42c8bSMikhail Kshevetskiy "gpio30", "gpio31", "gpio36", "gpio37" 503*87b42c8bSMikhail Kshevetskiy }; 504*87b42c8bSMikhail Kshevetskiy static const char *const phy1_led0_groups[] = { 505*87b42c8bSMikhail Kshevetskiy "gpio8", "gpio9", "gpio10", "gpio11" 506*87b42c8bSMikhail Kshevetskiy }; 507*87b42c8bSMikhail Kshevetskiy static const char *const phy2_led0_groups[] = { 508*87b42c8bSMikhail Kshevetskiy "gpio8", "gpio9", "gpio10", "gpio11" 509*87b42c8bSMikhail Kshevetskiy }; 510*87b42c8bSMikhail Kshevetskiy static const char *const phy3_led0_groups[] = { 511*87b42c8bSMikhail Kshevetskiy "gpio8", "gpio9", "gpio10", "gpio11" 512*87b42c8bSMikhail Kshevetskiy }; 513*87b42c8bSMikhail Kshevetskiy static const char *const phy4_led0_groups[] = { 514*87b42c8bSMikhail Kshevetskiy "gpio8", "gpio9", "gpio10", "gpio11" 515*87b42c8bSMikhail Kshevetskiy }; 516*87b42c8bSMikhail Kshevetskiy static const char *const phy1_led1_groups[] = { 517*87b42c8bSMikhail Kshevetskiy "gpio4", "gpio5", "gpio6", "gpio7" 518*87b42c8bSMikhail Kshevetskiy }; 519*87b42c8bSMikhail Kshevetskiy static const char *const phy2_led1_groups[] = { 520*87b42c8bSMikhail Kshevetskiy "gpio4", "gpio5", "gpio6", "gpio7" 521*87b42c8bSMikhail Kshevetskiy }; 522*87b42c8bSMikhail Kshevetskiy static const char *const phy3_led1_groups[] = { 523*87b42c8bSMikhail Kshevetskiy "gpio4", "gpio5", "gpio6", "gpio7" 524*87b42c8bSMikhail Kshevetskiy }; 525*87b42c8bSMikhail Kshevetskiy static const char *const phy4_led1_groups[] = { 526*87b42c8bSMikhail Kshevetskiy "gpio4", "gpio5", "gpio6", "gpio7" 527*87b42c8bSMikhail Kshevetskiy }; 528*87b42c8bSMikhail Kshevetskiy 529*87b42c8bSMikhail Kshevetskiy /* shared */ 530*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group pon_func_group[] = { 531*87b42c8bSMikhail Kshevetskiy { 532*87b42c8bSMikhail Kshevetskiy .name = "pon", 533*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 534*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 535*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, 536*87b42c8bSMikhail Kshevetskiy GPIO_PON_MODE_MASK, 537*87b42c8bSMikhail Kshevetskiy GPIO_PON_MODE_MASK 538*87b42c8bSMikhail Kshevetskiy }, 539*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 540*87b42c8bSMikhail Kshevetskiy }, 541*87b42c8bSMikhail Kshevetskiy }; 542*87b42c8bSMikhail Kshevetskiy 543*87b42c8bSMikhail Kshevetskiy /* shared */ 544*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group sipo_func_group[] = { 545*87b42c8bSMikhail Kshevetskiy { 546*87b42c8bSMikhail Kshevetskiy .name = "sipo", 547*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 548*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 549*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, 550*87b42c8bSMikhail Kshevetskiy GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK, 551*87b42c8bSMikhail Kshevetskiy GPIO_SIPO_MODE_MASK 552*87b42c8bSMikhail Kshevetskiy }, 553*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 554*87b42c8bSMikhail Kshevetskiy }, { 555*87b42c8bSMikhail Kshevetskiy .name = "sipo_rclk", 556*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 557*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 558*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, 559*87b42c8bSMikhail Kshevetskiy GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK, 560*87b42c8bSMikhail Kshevetskiy GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK 561*87b42c8bSMikhail Kshevetskiy }, 562*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 563*87b42c8bSMikhail Kshevetskiy }, 564*87b42c8bSMikhail Kshevetskiy }; 565*87b42c8bSMikhail Kshevetskiy 566*87b42c8bSMikhail Kshevetskiy /* 567*87b42c8bSMikhail Kshevetskiy * On AN7563 the SMI master (MDC/MDIO) is shared with the I2C_SCL/I2C_SDA 568*87b42c8bSMikhail Kshevetskiy * pads and selected via the SGMII MDIO mode bit. I2C is the default pad 569*87b42c8bSMikhail Kshevetskiy * function (no mux bit). 570*87b42c8bSMikhail Kshevetskiy */ 571*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group mdio_func_group[] = { 572*87b42c8bSMikhail Kshevetskiy { 573*87b42c8bSMikhail Kshevetskiy .name = "mdio", 574*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 575*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 576*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, 577*87b42c8bSMikhail Kshevetskiy GPIO_SGMII_MDIO_MODE_MASK, 578*87b42c8bSMikhail Kshevetskiy GPIO_SGMII_MDIO_MODE_MASK 579*87b42c8bSMikhail Kshevetskiy }, 580*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 581*87b42c8bSMikhail Kshevetskiy }, 582*87b42c8bSMikhail Kshevetskiy }; 583*87b42c8bSMikhail Kshevetskiy 584*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group uart_func_group[] = { 585*87b42c8bSMikhail Kshevetskiy { 586*87b42c8bSMikhail Kshevetskiy .name = "hsuart", 587*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 588*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 589*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, 590*87b42c8bSMikhail Kshevetskiy GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK, 591*87b42c8bSMikhail Kshevetskiy GPIO_HSUART_MODE_MASK 592*87b42c8bSMikhail Kshevetskiy }, 593*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 594*87b42c8bSMikhail Kshevetskiy }, 595*87b42c8bSMikhail Kshevetskiy { 596*87b42c8bSMikhail Kshevetskiy .name = "hsuart_cts_rts", 597*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 598*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 599*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, 600*87b42c8bSMikhail Kshevetskiy GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK, 601*87b42c8bSMikhail Kshevetskiy GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK 602*87b42c8bSMikhail Kshevetskiy }, 603*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 604*87b42c8bSMikhail Kshevetskiy }, 605*87b42c8bSMikhail Kshevetskiy }; 606*87b42c8bSMikhail Kshevetskiy 607*87b42c8bSMikhail Kshevetskiy /* shared */ 608*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group jtag_func_group[] = { 609*87b42c8bSMikhail Kshevetskiy { 610*87b42c8bSMikhail Kshevetskiy .name = "jtag_udi", 611*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 612*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 613*87b42c8bSMikhail Kshevetskiy REG_NPU_UART_EN, 614*87b42c8bSMikhail Kshevetskiy JTAG_UDI_EN_MASK, 615*87b42c8bSMikhail Kshevetskiy JTAG_UDI_EN_MASK 616*87b42c8bSMikhail Kshevetskiy }, 617*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 618*87b42c8bSMikhail Kshevetskiy }, { 619*87b42c8bSMikhail Kshevetskiy .name = "jtag_dfd", 620*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 621*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 622*87b42c8bSMikhail Kshevetskiy REG_NPU_UART_EN, 623*87b42c8bSMikhail Kshevetskiy JTAG_DFD_EN_MASK, 624*87b42c8bSMikhail Kshevetskiy JTAG_DFD_EN_MASK 625*87b42c8bSMikhail Kshevetskiy }, 626*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 627*87b42c8bSMikhail Kshevetskiy }, 628*87b42c8bSMikhail Kshevetskiy }; 629*87b42c8bSMikhail Kshevetskiy 630*87b42c8bSMikhail Kshevetskiy /* shared */ 631*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group pcm_func_group[] = { 632*87b42c8bSMikhail Kshevetskiy { 633*87b42c8bSMikhail Kshevetskiy .name = "pcm1", 634*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 635*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 636*87b42c8bSMikhail Kshevetskiy REG_GPIO_SPI_CS1_MODE, 637*87b42c8bSMikhail Kshevetskiy GPIO_PCM1_MODE_MASK, 638*87b42c8bSMikhail Kshevetskiy GPIO_PCM1_MODE_MASK 639*87b42c8bSMikhail Kshevetskiy }, 640*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 641*87b42c8bSMikhail Kshevetskiy }, { 642*87b42c8bSMikhail Kshevetskiy .name = "pcm2", 643*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 644*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 645*87b42c8bSMikhail Kshevetskiy REG_GPIO_SPI_CS1_MODE, 646*87b42c8bSMikhail Kshevetskiy GPIO_PCM2_MODE_MASK, 647*87b42c8bSMikhail Kshevetskiy GPIO_PCM2_MODE_MASK 648*87b42c8bSMikhail Kshevetskiy }, 649*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 650*87b42c8bSMikhail Kshevetskiy }, 651*87b42c8bSMikhail Kshevetskiy }; 652*87b42c8bSMikhail Kshevetskiy 653*87b42c8bSMikhail Kshevetskiy /* shared */ 654*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group spi_func_group[] = { 655*87b42c8bSMikhail Kshevetskiy { 656*87b42c8bSMikhail Kshevetskiy .name = "spi_quad", 657*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 658*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 659*87b42c8bSMikhail Kshevetskiy REG_GPIO_SPI_CS1_MODE, 660*87b42c8bSMikhail Kshevetskiy GPIO_SPI_QUAD_MODE_MASK, 661*87b42c8bSMikhail Kshevetskiy GPIO_SPI_QUAD_MODE_MASK 662*87b42c8bSMikhail Kshevetskiy }, 663*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 664*87b42c8bSMikhail Kshevetskiy }, { 665*87b42c8bSMikhail Kshevetskiy .name = "spi_cs1", 666*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 667*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 668*87b42c8bSMikhail Kshevetskiy REG_GPIO_SPI_CS1_MODE, 669*87b42c8bSMikhail Kshevetskiy GPIO_SPI_CS1_MODE_MASK, 670*87b42c8bSMikhail Kshevetskiy GPIO_SPI_CS1_MODE_MASK 671*87b42c8bSMikhail Kshevetskiy }, 672*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 673*87b42c8bSMikhail Kshevetskiy }, 674*87b42c8bSMikhail Kshevetskiy }; 675*87b42c8bSMikhail Kshevetskiy 676*87b42c8bSMikhail Kshevetskiy /* shared */ 677*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group pnand_func_group[] = { 678*87b42c8bSMikhail Kshevetskiy { 679*87b42c8bSMikhail Kshevetskiy .name = "pnand", 680*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 681*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 682*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, 683*87b42c8bSMikhail Kshevetskiy GPIO_PARALLEL_NAND_MODE_MASK, 684*87b42c8bSMikhail Kshevetskiy GPIO_PARALLEL_NAND_MODE_MASK 685*87b42c8bSMikhail Kshevetskiy }, 686*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 687*87b42c8bSMikhail Kshevetskiy }, 688*87b42c8bSMikhail Kshevetskiy }; 689*87b42c8bSMikhail Kshevetskiy 690*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group gpio_func_group[] = { 691*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_GPIO_EXT("gpio28", GPIO28_FLASH_MODE_CFG, 692*87b42c8bSMikhail Kshevetskiy GPIO_PCIE_RESET0_MASK), 693*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_GPIO_EXT("gpio29", GPIO29_FLASH_MODE_CFG, 694*87b42c8bSMikhail Kshevetskiy GPIO_PCIE_RESET1_MASK), 695*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_GPIO_EXT("gpio30", GPIO30_FLASH_MODE_CFG, 696*87b42c8bSMikhail Kshevetskiy I2C_SCL_GPIO_MODE_MASK), 697*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_GPIO_EXT("gpio31", GPIO31_FLASH_MODE_CFG, 698*87b42c8bSMikhail Kshevetskiy I2C_SDA_GPIO_MODE_MASK), 699*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_GPIO("gpio32", SPI_CLK_GPIO_MODE_MASK), 700*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_GPIO("gpio33", SPI_CS_GPIO_MODE_MASK), 701*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_GPIO("gpio34", SPI_MOSI_GPIO_MODE_MASK), 702*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_GPIO("gpio35", SPI_MISO_GPIO_MODE_MASK), 703*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_GPIO_EXT("gpio36", GPIO36_FLASH_MODE_CFG, 704*87b42c8bSMikhail Kshevetskiy UART_TXD_GPIO_MODE_MASK), 705*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_GPIO_EXT("gpio37", GPIO37_FLASH_MODE_CFG, 706*87b42c8bSMikhail Kshevetskiy UART_RXD_GPIO_MODE_MASK), 707*87b42c8bSMikhail Kshevetskiy }; 708*87b42c8bSMikhail Kshevetskiy 709*87b42c8bSMikhail Kshevetskiy /* 710*87b42c8bSMikhail Kshevetskiy * On AN7563 a set GPIO_PCIE_RESET{0,1} bit routes the pad to its GPIO 711*87b42c8bSMikhail Kshevetskiy * function, so the PCIe reset function must clear it. 712*87b42c8bSMikhail Kshevetskiy */ 713*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group pcie_reset_func_group[] = { 714*87b42c8bSMikhail Kshevetskiy { 715*87b42c8bSMikhail Kshevetskiy .name = "pcie_reset0", 716*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 717*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 718*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, 719*87b42c8bSMikhail Kshevetskiy GPIO_PCIE_RESET0_MASK, 720*87b42c8bSMikhail Kshevetskiy 0 721*87b42c8bSMikhail Kshevetskiy }, 722*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 723*87b42c8bSMikhail Kshevetskiy }, { 724*87b42c8bSMikhail Kshevetskiy .name = "pcie_reset1", 725*87b42c8bSMikhail Kshevetskiy .regmap[0] = { 726*87b42c8bSMikhail Kshevetskiy AIROHA_FUNC_MUX, 727*87b42c8bSMikhail Kshevetskiy REG_GPIO_PON_MODE, 728*87b42c8bSMikhail Kshevetskiy GPIO_PCIE_RESET1_MASK, 729*87b42c8bSMikhail Kshevetskiy 0 730*87b42c8bSMikhail Kshevetskiy }, 731*87b42c8bSMikhail Kshevetskiy .regmap_size = 1, 732*87b42c8bSMikhail Kshevetskiy }, 733*87b42c8bSMikhail Kshevetskiy }; 734*87b42c8bSMikhail Kshevetskiy 735*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group pwm_func_group[] = { 736*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio0", GPIO0_FLASH_MODE_CFG), 737*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio1", GPIO1_FLASH_MODE_CFG), 738*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio2", GPIO2_FLASH_MODE_CFG), 739*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio3", GPIO3_FLASH_MODE_CFG), 740*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio4", GPIO4_FLASH_MODE_CFG), 741*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio5", GPIO5_FLASH_MODE_CFG), 742*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio6", GPIO6_FLASH_MODE_CFG), 743*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio7", GPIO7_FLASH_MODE_CFG), 744*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio8", GPIO8_FLASH_MODE_CFG), 745*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio9", GPIO9_FLASH_MODE_CFG), 746*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio10", GPIO10_FLASH_MODE_CFG), 747*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio11", GPIO11_FLASH_MODE_CFG), 748*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio12", GPIO12_FLASH_MODE_CFG), 749*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio13", GPIO13_FLASH_MODE_CFG), 750*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio14", GPIO14_FLASH_MODE_CFG), 751*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio15", GPIO15_FLASH_MODE_CFG), 752*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio16", GPIO16_FLASH_MODE_CFG), 753*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio17", GPIO17_FLASH_MODE_CFG), 754*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio18", GPIO18_FLASH_MODE_CFG), 755*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio19", GPIO19_FLASH_MODE_CFG), 756*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio20", GPIO20_FLASH_MODE_CFG), 757*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio21", GPIO21_FLASH_MODE_CFG), 758*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio22", GPIO22_FLASH_MODE_CFG), 759*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio23", GPIO23_FLASH_MODE_CFG), 760*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio24", GPIO24_FLASH_MODE_CFG), 761*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio25", GPIO25_FLASH_MODE_CFG), 762*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio26", GPIO26_FLASH_MODE_CFG), 763*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio27", GPIO27_FLASH_MODE_CFG), 764*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT_SEC("gpio28", GPIO28_FLASH_MODE_CFG, 765*87b42c8bSMikhail Kshevetskiy GPIO_PCIE_RESET0_MASK), 766*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT_SEC("gpio29", GPIO29_FLASH_MODE_CFG, 767*87b42c8bSMikhail Kshevetskiy GPIO_PCIE_RESET1_MASK), 768*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT_SEC("gpio30", GPIO30_FLASH_MODE_CFG, 769*87b42c8bSMikhail Kshevetskiy I2C_SCL_GPIO_MODE_MASK), 770*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT_SEC("gpio31", GPIO31_FLASH_MODE_CFG, 771*87b42c8bSMikhail Kshevetskiy I2C_SDA_GPIO_MODE_MASK), 772*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT_SEC("gpio36", GPIO36_FLASH_MODE_CFG, 773*87b42c8bSMikhail Kshevetskiy UART_TXD_GPIO_MODE_MASK), 774*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT_SEC("gpio37", GPIO37_FLASH_MODE_CFG, 775*87b42c8bSMikhail Kshevetskiy UART_RXD_GPIO_MODE_MASK), 776*87b42c8bSMikhail Kshevetskiy }; 777*87b42c8bSMikhail Kshevetskiy 778*87b42c8bSMikhail Kshevetskiy /* 779*87b42c8bSMikhail Kshevetskiy * LED pad mapping (datasheet table 4-9): 780*87b42c8bSMikhail Kshevetskiy * GPIO8: LAN0_LED0, GPIO9: LAN1_LED0, GPIO10: LAN2_LED0, GPIO11: LAN3_LED0 781*87b42c8bSMikhail Kshevetskiy * GPIO7: LAN0_LED1, GPIO6: LAN1_LED1, GPIO5: LAN2_LED1, GPIO4: LAN3_LED1 782*87b42c8bSMikhail Kshevetskiy */ 783*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group phy1_led0_func_group[] = { 784*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio8", GPIO_LAN0_LED0_MODE_MASK, 785*87b42c8bSMikhail Kshevetskiy LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(0)), 786*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio9", GPIO_LAN1_LED0_MODE_MASK, 787*87b42c8bSMikhail Kshevetskiy LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(0)), 788*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio10", GPIO_LAN2_LED0_MODE_MASK, 789*87b42c8bSMikhail Kshevetskiy LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(0)), 790*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio11", GPIO_LAN3_LED0_MODE_MASK, 791*87b42c8bSMikhail Kshevetskiy LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(0)), 792*87b42c8bSMikhail Kshevetskiy }; 793*87b42c8bSMikhail Kshevetskiy 794*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group phy2_led0_func_group[] = { 795*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio8", GPIO_LAN0_LED0_MODE_MASK, 796*87b42c8bSMikhail Kshevetskiy LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(1)), 797*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio9", GPIO_LAN1_LED0_MODE_MASK, 798*87b42c8bSMikhail Kshevetskiy LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(1)), 799*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio10", GPIO_LAN2_LED0_MODE_MASK, 800*87b42c8bSMikhail Kshevetskiy LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(1)), 801*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio11", GPIO_LAN3_LED0_MODE_MASK, 802*87b42c8bSMikhail Kshevetskiy LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(1)), 803*87b42c8bSMikhail Kshevetskiy }; 804*87b42c8bSMikhail Kshevetskiy 805*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group phy3_led0_func_group[] = { 806*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio8", GPIO_LAN0_LED0_MODE_MASK, 807*87b42c8bSMikhail Kshevetskiy LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)), 808*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio9", GPIO_LAN1_LED0_MODE_MASK, 809*87b42c8bSMikhail Kshevetskiy LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)), 810*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio10", GPIO_LAN2_LED0_MODE_MASK, 811*87b42c8bSMikhail Kshevetskiy LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)), 812*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio11", GPIO_LAN3_LED0_MODE_MASK, 813*87b42c8bSMikhail Kshevetskiy LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)), 814*87b42c8bSMikhail Kshevetskiy }; 815*87b42c8bSMikhail Kshevetskiy 816*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group phy4_led0_func_group[] = { 817*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio8", GPIO_LAN0_LED0_MODE_MASK, 818*87b42c8bSMikhail Kshevetskiy LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(3)), 819*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio9", GPIO_LAN1_LED0_MODE_MASK, 820*87b42c8bSMikhail Kshevetskiy LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(3)), 821*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio10", GPIO_LAN2_LED0_MODE_MASK, 822*87b42c8bSMikhail Kshevetskiy LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(3)), 823*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED0("gpio11", GPIO_LAN3_LED0_MODE_MASK, 824*87b42c8bSMikhail Kshevetskiy LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(3)), 825*87b42c8bSMikhail Kshevetskiy }; 826*87b42c8bSMikhail Kshevetskiy 827*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group phy1_led1_func_group[] = { 828*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio4", GPIO_LAN3_LED1_MODE_MASK, 829*87b42c8bSMikhail Kshevetskiy LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(0)), 830*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio5", GPIO_LAN2_LED1_MODE_MASK, 831*87b42c8bSMikhail Kshevetskiy LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(0)), 832*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio6", GPIO_LAN1_LED1_MODE_MASK, 833*87b42c8bSMikhail Kshevetskiy LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(0)), 834*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio7", GPIO_LAN0_LED1_MODE_MASK, 835*87b42c8bSMikhail Kshevetskiy LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(0)), 836*87b42c8bSMikhail Kshevetskiy }; 837*87b42c8bSMikhail Kshevetskiy 838*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group phy2_led1_func_group[] = { 839*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio4", GPIO_LAN3_LED1_MODE_MASK, 840*87b42c8bSMikhail Kshevetskiy LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(1)), 841*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio5", GPIO_LAN2_LED1_MODE_MASK, 842*87b42c8bSMikhail Kshevetskiy LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(1)), 843*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio6", GPIO_LAN1_LED1_MODE_MASK, 844*87b42c8bSMikhail Kshevetskiy LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(1)), 845*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio7", GPIO_LAN0_LED1_MODE_MASK, 846*87b42c8bSMikhail Kshevetskiy LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(1)), 847*87b42c8bSMikhail Kshevetskiy }; 848*87b42c8bSMikhail Kshevetskiy 849*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group phy3_led1_func_group[] = { 850*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio4", GPIO_LAN3_LED1_MODE_MASK, 851*87b42c8bSMikhail Kshevetskiy LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)), 852*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio5", GPIO_LAN2_LED1_MODE_MASK, 853*87b42c8bSMikhail Kshevetskiy LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)), 854*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio6", GPIO_LAN1_LED1_MODE_MASK, 855*87b42c8bSMikhail Kshevetskiy LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)), 856*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio7", GPIO_LAN0_LED1_MODE_MASK, 857*87b42c8bSMikhail Kshevetskiy LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)), 858*87b42c8bSMikhail Kshevetskiy }; 859*87b42c8bSMikhail Kshevetskiy 860*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func_group phy4_led1_func_group[] = { 861*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio4", GPIO_LAN3_LED1_MODE_MASK, 862*87b42c8bSMikhail Kshevetskiy LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(3)), 863*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio5", GPIO_LAN2_LED1_MODE_MASK, 864*87b42c8bSMikhail Kshevetskiy LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(3)), 865*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio6", GPIO_LAN1_LED1_MODE_MASK, 866*87b42c8bSMikhail Kshevetskiy LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(3)), 867*87b42c8bSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio7", GPIO_LAN0_LED1_MODE_MASK, 868*87b42c8bSMikhail Kshevetskiy LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(3)), 869*87b42c8bSMikhail Kshevetskiy }; 870*87b42c8bSMikhail Kshevetskiy 871*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_func pinctrl_funcs[] = { 872*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("pon", pon), 873*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("sipo", sipo), 874*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("mdio", mdio), 875*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("uart", uart), 876*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("jtag", jtag), 877*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("pcm", pcm), 878*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("spi", spi), 879*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("pnand", pnand), 880*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("gpio", gpio), 881*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("pcie_reset", pcie_reset), 882*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("pwm", pwm), 883*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("phy1_led0", phy1_led0), 884*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("phy2_led0", phy2_led0), 885*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("phy3_led0", phy3_led0), 886*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("phy4_led0", phy4_led0), 887*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("phy1_led1", phy1_led1), 888*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("phy2_led1", phy2_led1), 889*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("phy3_led1", phy3_led1), 890*87b42c8bSMikhail Kshevetskiy PINCTRL_FUNC_DESC("phy4_led1", phy4_led1), 891*87b42c8bSMikhail Kshevetskiy }; 892*87b42c8bSMikhail Kshevetskiy 893*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_conf pinctrl_pullup_conf[] = { 894*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(0, REG_GPIO_L_PU, BIT(0)), 895*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(1, REG_GPIO_L_PU, BIT(1)), 896*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(2, REG_GPIO_L_PU, BIT(2)), 897*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(3, REG_GPIO_L_PU, BIT(3)), 898*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(4, REG_GPIO_L_PU, BIT(4)), 899*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(5, REG_GPIO_L_PU, BIT(5)), 900*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(6, REG_GPIO_L_PU, BIT(6)), 901*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(7, REG_GPIO_L_PU, BIT(7)), 902*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(8, REG_GPIO_L_PU, BIT(8)), 903*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(9, REG_GPIO_L_PU, BIT(9)), 904*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(10, REG_GPIO_L_PU, BIT(10)), 905*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(11, REG_GPIO_L_PU, BIT(11)), 906*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(12, REG_GPIO_L_PU, BIT(12)), 907*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(13, REG_GPIO_L_PU, BIT(13)), 908*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(14, REG_GPIO_L_PU, BIT(14)), 909*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(15, REG_GPIO_L_PU, BIT(15)), 910*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(16, REG_GPIO_L_PU, BIT(16)), 911*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(17, REG_GPIO_L_PU, BIT(17)), 912*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(18, REG_GPIO_L_PU, BIT(18)), 913*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(19, REG_GPIO_L_PU, BIT(19)), 914*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(20, REG_GPIO_L_PU, BIT(20)), 915*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(21, REG_GPIO_L_PU, BIT(21)), 916*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(22, REG_GPIO_L_PU, BIT(22)), 917*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(23, REG_GPIO_L_PU, BIT(23)), 918*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(24, REG_GPIO_L_PU, BIT(24)), 919*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(25, REG_GPIO_L_PU, BIT(25)), 920*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(26, REG_GPIO_L_PU, BIT(26)), 921*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(27, REG_GPIO_L_PU, BIT(27)), 922*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(28, REG_I2C_SDA_PU, PCIE0_RESET_PU_MASK), 923*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(29, REG_I2C_SDA_PU, PCIE1_RESET_PU_MASK), 924*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(30, REG_I2C_SDA_PU, I2C_SCL_PU_MASK), 925*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(31, REG_I2C_SDA_PU, I2C_SDA_PU_MASK), 926*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(32, REG_I2C_SDA_PU, SPI_CLK_PU_MASK), 927*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(33, REG_I2C_SDA_PU, SPI_CS0_PU_MASK), 928*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(34, REG_I2C_SDA_PU, SPI_MOSI_PU_MASK), 929*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(35, REG_I2C_SDA_PU, SPI_MISO_PU_MASK), 930*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(36, REG_I2C_SDA_PU, UART1_TXD_PU_MASK), 931*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(37, REG_I2C_SDA_PU, UART1_RXD_PU_MASK), 932*87b42c8bSMikhail Kshevetskiy }; 933*87b42c8bSMikhail Kshevetskiy 934*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_conf pinctrl_pulldown_conf[] = { 935*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(0, REG_GPIO_L_PD, BIT(0)), 936*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(1, REG_GPIO_L_PD, BIT(1)), 937*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(2, REG_GPIO_L_PD, BIT(2)), 938*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(3, REG_GPIO_L_PD, BIT(3)), 939*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(4, REG_GPIO_L_PD, BIT(4)), 940*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(5, REG_GPIO_L_PD, BIT(5)), 941*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(6, REG_GPIO_L_PD, BIT(6)), 942*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(7, REG_GPIO_L_PD, BIT(7)), 943*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(8, REG_GPIO_L_PD, BIT(8)), 944*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(9, REG_GPIO_L_PD, BIT(9)), 945*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(10, REG_GPIO_L_PD, BIT(10)), 946*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(11, REG_GPIO_L_PD, BIT(11)), 947*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(12, REG_GPIO_L_PD, BIT(12)), 948*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(13, REG_GPIO_L_PD, BIT(13)), 949*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(14, REG_GPIO_L_PD, BIT(14)), 950*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(15, REG_GPIO_L_PD, BIT(15)), 951*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(16, REG_GPIO_L_PD, BIT(16)), 952*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(17, REG_GPIO_L_PD, BIT(17)), 953*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(18, REG_GPIO_L_PD, BIT(18)), 954*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(19, REG_GPIO_L_PD, BIT(19)), 955*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(20, REG_GPIO_L_PD, BIT(20)), 956*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(21, REG_GPIO_L_PD, BIT(21)), 957*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(22, REG_GPIO_L_PD, BIT(22)), 958*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(23, REG_GPIO_L_PD, BIT(23)), 959*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(24, REG_GPIO_L_PD, BIT(24)), 960*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(25, REG_GPIO_L_PD, BIT(25)), 961*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(26, REG_GPIO_L_PD, BIT(26)), 962*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(27, REG_GPIO_L_PD, BIT(27)), 963*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(28, REG_I2C_SDA_PD, PCIE0_RESET_PD_MASK), 964*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(29, REG_I2C_SDA_PD, PCIE1_RESET_PD_MASK), 965*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(30, REG_I2C_SDA_PD, I2C_SCL_PD_MASK), 966*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(31, REG_I2C_SDA_PD, I2C_SDA_PD_MASK), 967*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(32, REG_I2C_SDA_PD, SPI_CLK_PD_MASK), 968*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(33, REG_I2C_SDA_PD, SPI_CS0_PD_MASK), 969*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(34, REG_I2C_SDA_PD, SPI_MOSI_PD_MASK), 970*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(35, REG_I2C_SDA_PD, SPI_MISO_PD_MASK), 971*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(36, REG_I2C_SDA_PD, UART1_TXD_PD_MASK), 972*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(37, REG_I2C_SDA_PD, UART1_RXD_PD_MASK), 973*87b42c8bSMikhail Kshevetskiy }; 974*87b42c8bSMikhail Kshevetskiy 975*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_conf pinctrl_drive_e2_conf[] = { 976*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(0, REG_GPIO_L_E2, BIT(0)), 977*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(1, REG_GPIO_L_E2, BIT(1)), 978*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(2, REG_GPIO_L_E2, BIT(2)), 979*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(3, REG_GPIO_L_E2, BIT(3)), 980*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(4, REG_GPIO_L_E2, BIT(4)), 981*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(5, REG_GPIO_L_E2, BIT(5)), 982*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(6, REG_GPIO_L_E2, BIT(6)), 983*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(7, REG_GPIO_L_E2, BIT(7)), 984*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(8, REG_GPIO_L_E2, BIT(8)), 985*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(9, REG_GPIO_L_E2, BIT(9)), 986*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(10, REG_GPIO_L_E2, BIT(10)), 987*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(11, REG_GPIO_L_E2, BIT(11)), 988*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(12, REG_GPIO_L_E2, BIT(12)), 989*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(13, REG_GPIO_L_E2, BIT(13)), 990*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(14, REG_GPIO_L_E2, BIT(14)), 991*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(15, REG_GPIO_L_E2, BIT(15)), 992*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(16, REG_GPIO_L_E2, BIT(16)), 993*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(17, REG_GPIO_L_E2, BIT(17)), 994*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(18, REG_GPIO_L_E2, BIT(18)), 995*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(19, REG_GPIO_L_E2, BIT(19)), 996*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(20, REG_GPIO_L_E2, BIT(20)), 997*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(21, REG_GPIO_L_E2, BIT(21)), 998*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(22, REG_GPIO_L_E2, BIT(22)), 999*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(23, REG_GPIO_L_E2, BIT(23)), 1000*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(24, REG_GPIO_L_E2, BIT(24)), 1001*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(25, REG_GPIO_L_E2, BIT(25)), 1002*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(26, REG_GPIO_L_E2, BIT(26)), 1003*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(27, REG_GPIO_L_E2, BIT(27)), 1004*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(28, REG_I2C_SDA_E2, PCIE0_RESET_E2_MASK), 1005*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(29, REG_I2C_SDA_E2, PCIE1_RESET_E2_MASK), 1006*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(30, REG_I2C_SDA_E2, I2C_SCL_E2_MASK), 1007*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(31, REG_I2C_SDA_E2, I2C_SDA_E2_MASK), 1008*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(32, REG_I2C_SDA_E2, SPI_CLK_E2_MASK), 1009*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(33, REG_I2C_SDA_E2, SPI_CS0_E2_MASK), 1010*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(34, REG_I2C_SDA_E2, SPI_MOSI_E2_MASK), 1011*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(35, REG_I2C_SDA_E2, SPI_MISO_E2_MASK), 1012*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(36, REG_I2C_SDA_E2, UART1_TXD_E2_MASK), 1013*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(37, REG_I2C_SDA_E2, UART1_RXD_E2_MASK), 1014*87b42c8bSMikhail Kshevetskiy }; 1015*87b42c8bSMikhail Kshevetskiy 1016*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_conf pinctrl_drive_e4_conf[] = { 1017*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(0, REG_GPIO_L_E4, BIT(0)), 1018*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(1, REG_GPIO_L_E4, BIT(1)), 1019*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(2, REG_GPIO_L_E4, BIT(2)), 1020*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(3, REG_GPIO_L_E4, BIT(3)), 1021*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(4, REG_GPIO_L_E4, BIT(4)), 1022*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(5, REG_GPIO_L_E4, BIT(5)), 1023*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(6, REG_GPIO_L_E4, BIT(6)), 1024*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(7, REG_GPIO_L_E4, BIT(7)), 1025*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(8, REG_GPIO_L_E4, BIT(8)), 1026*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(9, REG_GPIO_L_E4, BIT(9)), 1027*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(10, REG_GPIO_L_E4, BIT(10)), 1028*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(11, REG_GPIO_L_E4, BIT(11)), 1029*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(12, REG_GPIO_L_E4, BIT(12)), 1030*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(13, REG_GPIO_L_E4, BIT(13)), 1031*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(14, REG_GPIO_L_E4, BIT(14)), 1032*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(15, REG_GPIO_L_E4, BIT(15)), 1033*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(16, REG_GPIO_L_E4, BIT(16)), 1034*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(17, REG_GPIO_L_E4, BIT(17)), 1035*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(18, REG_GPIO_L_E4, BIT(18)), 1036*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(19, REG_GPIO_L_E4, BIT(19)), 1037*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(20, REG_GPIO_L_E4, BIT(20)), 1038*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(21, REG_GPIO_L_E4, BIT(21)), 1039*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(22, REG_GPIO_L_E4, BIT(22)), 1040*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(23, REG_GPIO_L_E4, BIT(23)), 1041*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(24, REG_GPIO_L_E4, BIT(24)), 1042*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(25, REG_GPIO_L_E4, BIT(25)), 1043*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(26, REG_GPIO_L_E4, BIT(26)), 1044*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(27, REG_GPIO_L_E4, BIT(27)), 1045*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(28, REG_I2C_SDA_E4, PCIE0_RESET_E4_MASK), 1046*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(29, REG_I2C_SDA_E4, PCIE1_RESET_E4_MASK), 1047*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(30, REG_I2C_SDA_E4, I2C_SCL_E4_MASK), 1048*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(31, REG_I2C_SDA_E4, I2C_SDA_E4_MASK), 1049*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(32, REG_I2C_SDA_E4, SPI_CLK_E4_MASK), 1050*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(33, REG_I2C_SDA_E4, SPI_CS0_E4_MASK), 1051*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(34, REG_I2C_SDA_E4, SPI_MOSI_E4_MASK), 1052*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(35, REG_I2C_SDA_E4, SPI_MISO_E4_MASK), 1053*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(36, REG_I2C_SDA_E4, UART1_TXD_E4_MASK), 1054*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(37, REG_I2C_SDA_E4, UART1_RXD_E4_MASK), 1055*87b42c8bSMikhail Kshevetskiy }; 1056*87b42c8bSMikhail Kshevetskiy 1057*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_conf pinctrl_pcie_rst_od_conf[] = { 1058*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(28, REG_PCIE_RESET_OD, PCIE0_RESET_OD_MASK), 1059*87b42c8bSMikhail Kshevetskiy PINCTRL_CONF_DESC(29, REG_PCIE_RESET_OD, PCIE1_RESET_OD_MASK), 1060*87b42c8bSMikhail Kshevetskiy }; 1061*87b42c8bSMikhail Kshevetskiy 1062*87b42c8bSMikhail Kshevetskiy static const struct airoha_pinctrl_match_data pinctrl_match_data = { 1063*87b42c8bSMikhail Kshevetskiy .chip_scu_compatible = "airoha,en7581-chip-scu", 1064*87b42c8bSMikhail Kshevetskiy .pinctrl_name = KBUILD_MODNAME, 1065*87b42c8bSMikhail Kshevetskiy .pinctrl_owner = THIS_MODULE, 1066*87b42c8bSMikhail Kshevetskiy .pins = pinctrl_pins, 1067*87b42c8bSMikhail Kshevetskiy .num_pins = ARRAY_SIZE(pinctrl_pins), 1068*87b42c8bSMikhail Kshevetskiy .grps = pinctrl_groups, 1069*87b42c8bSMikhail Kshevetskiy .num_grps = ARRAY_SIZE(pinctrl_groups), 1070*87b42c8bSMikhail Kshevetskiy .funcs = pinctrl_funcs, 1071*87b42c8bSMikhail Kshevetskiy .num_funcs = ARRAY_SIZE(pinctrl_funcs), 1072*87b42c8bSMikhail Kshevetskiy .confs_info = { 1073*87b42c8bSMikhail Kshevetskiy [AIROHA_PINCTRL_CONFS_PULLUP] = { 1074*87b42c8bSMikhail Kshevetskiy .confs = pinctrl_pullup_conf, 1075*87b42c8bSMikhail Kshevetskiy .num_confs = ARRAY_SIZE(pinctrl_pullup_conf), 1076*87b42c8bSMikhail Kshevetskiy }, 1077*87b42c8bSMikhail Kshevetskiy [AIROHA_PINCTRL_CONFS_PULLDOWN] = { 1078*87b42c8bSMikhail Kshevetskiy .confs = pinctrl_pulldown_conf, 1079*87b42c8bSMikhail Kshevetskiy .num_confs = ARRAY_SIZE(pinctrl_pulldown_conf), 1080*87b42c8bSMikhail Kshevetskiy }, 1081*87b42c8bSMikhail Kshevetskiy [AIROHA_PINCTRL_CONFS_DRIVE_E2] = { 1082*87b42c8bSMikhail Kshevetskiy .confs = pinctrl_drive_e2_conf, 1083*87b42c8bSMikhail Kshevetskiy .num_confs = ARRAY_SIZE(pinctrl_drive_e2_conf), 1084*87b42c8bSMikhail Kshevetskiy }, 1085*87b42c8bSMikhail Kshevetskiy [AIROHA_PINCTRL_CONFS_DRIVE_E4] = { 1086*87b42c8bSMikhail Kshevetskiy .confs = pinctrl_drive_e4_conf, 1087*87b42c8bSMikhail Kshevetskiy .num_confs = ARRAY_SIZE(pinctrl_drive_e4_conf), 1088*87b42c8bSMikhail Kshevetskiy }, 1089*87b42c8bSMikhail Kshevetskiy [AIROHA_PINCTRL_CONFS_PCIE_RST_OD] = { 1090*87b42c8bSMikhail Kshevetskiy .confs = pinctrl_pcie_rst_od_conf, 1091*87b42c8bSMikhail Kshevetskiy .num_confs = ARRAY_SIZE(pinctrl_pcie_rst_od_conf), 1092*87b42c8bSMikhail Kshevetskiy }, 1093*87b42c8bSMikhail Kshevetskiy }, 1094*87b42c8bSMikhail Kshevetskiy }; 1095*87b42c8bSMikhail Kshevetskiy 1096*87b42c8bSMikhail Kshevetskiy static const struct of_device_id airoha_pinctrl_of_match[] = { 1097*87b42c8bSMikhail Kshevetskiy { .compatible = "airoha,an7563-pinctrl", .data = &pinctrl_match_data }, 1098*87b42c8bSMikhail Kshevetskiy { /* sentinel */ } 1099*87b42c8bSMikhail Kshevetskiy }; 1100*87b42c8bSMikhail Kshevetskiy MODULE_DEVICE_TABLE(of, airoha_pinctrl_of_match); 1101*87b42c8bSMikhail Kshevetskiy 1102*87b42c8bSMikhail Kshevetskiy static struct platform_driver airoha_pinctrl_driver = { 1103*87b42c8bSMikhail Kshevetskiy .probe = airoha_pinctrl_probe, 1104*87b42c8bSMikhail Kshevetskiy .driver = { 1105*87b42c8bSMikhail Kshevetskiy .name = "pinctrl-airoha-an7563", 1106*87b42c8bSMikhail Kshevetskiy .of_match_table = airoha_pinctrl_of_match, 1107*87b42c8bSMikhail Kshevetskiy }, 1108*87b42c8bSMikhail Kshevetskiy }; 1109*87b42c8bSMikhail Kshevetskiy module_platform_driver(airoha_pinctrl_driver); 1110*87b42c8bSMikhail Kshevetskiy 1111*87b42c8bSMikhail Kshevetskiy MODULE_LICENSE("GPL"); 1112*87b42c8bSMikhail Kshevetskiy MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>"); 1113*87b42c8bSMikhail Kshevetskiy MODULE_AUTHOR("Benjamin Larsson <benjamin.larsson@genexis.eu>"); 1114*87b42c8bSMikhail Kshevetskiy MODULE_AUTHOR("Markus Gothe <markus.gothe@genexis.eu>"); 1115*87b42c8bSMikhail Kshevetskiy MODULE_DESCRIPTION("Pinctrl driver for Airoha AN7563 SoC"); 1116