127aa791dSChristian Marangi // SPDX-License-Identifier: GPL-2.0-only 227aa791dSChristian Marangi /* 327aa791dSChristian Marangi * Author: Lorenzo Bianconi <lorenzo@kernel.org> 427aa791dSChristian Marangi * Author: Benjamin Larsson <benjamin.larsson@genexis.eu> 527aa791dSChristian Marangi * Author: Markus Gothe <markus.gothe@genexis.eu> 627aa791dSChristian Marangi */ 727aa791dSChristian Marangi 827aa791dSChristian Marangi #include <dt-bindings/pinctrl/mt65xx.h> 927aa791dSChristian Marangi #include <linux/bitfield.h> 1027aa791dSChristian Marangi #include <linux/bits.h> 1127aa791dSChristian Marangi #include <linux/cleanup.h> 1227aa791dSChristian Marangi #include <linux/gpio/driver.h> 1327aa791dSChristian Marangi #include <linux/interrupt.h> 1427aa791dSChristian Marangi #include <linux/io.h> 1527aa791dSChristian Marangi #include <linux/irq.h> 1627aa791dSChristian Marangi #include <linux/irqdomain.h> 1727aa791dSChristian Marangi #include <linux/mfd/syscon.h> 1827aa791dSChristian Marangi #include <linux/of.h> 1927aa791dSChristian Marangi #include <linux/of_irq.h> 2027aa791dSChristian Marangi #include <linux/of_platform.h> 2127aa791dSChristian Marangi #include <linux/pinctrl/consumer.h> 2227aa791dSChristian Marangi #include <linux/pinctrl/pinctrl.h> 2327aa791dSChristian Marangi #include <linux/pinctrl/pinconf.h> 2427aa791dSChristian Marangi #include <linux/pinctrl/pinconf-generic.h> 2527aa791dSChristian Marangi #include <linux/pinctrl/pinmux.h> 2627aa791dSChristian Marangi #include <linux/platform_device.h> 2727aa791dSChristian Marangi #include <linux/regmap.h> 2827aa791dSChristian Marangi 2927aa791dSChristian Marangi #include "../core.h" 3027aa791dSChristian Marangi #include "../pinconf.h" 3127aa791dSChristian Marangi #include "../pinmux.h" 3227aa791dSChristian Marangi 3327aa791dSChristian Marangi #define PINCTRL_PIN_GROUP(id, table) \ 3427aa791dSChristian Marangi PINCTRL_PINGROUP(id, table##_pins, ARRAY_SIZE(table##_pins)) 3527aa791dSChristian Marangi 3627aa791dSChristian Marangi #define PINCTRL_FUNC_DESC(id, table) \ 3727aa791dSChristian Marangi { \ 3827aa791dSChristian Marangi .desc = PINCTRL_PINFUNCTION(id, table##_groups, \ 3927aa791dSChristian Marangi ARRAY_SIZE(table##_groups)),\ 4027aa791dSChristian Marangi .groups = table##_func_group, \ 4127aa791dSChristian Marangi .group_size = ARRAY_SIZE(table##_func_group), \ 4227aa791dSChristian Marangi } 4327aa791dSChristian Marangi 4427aa791dSChristian Marangi #define PINCTRL_CONF_DESC(p, offset, mask) \ 4527aa791dSChristian Marangi { \ 4627aa791dSChristian Marangi .pin = p, \ 4727aa791dSChristian Marangi .reg = { offset, mask }, \ 4827aa791dSChristian Marangi } 4927aa791dSChristian Marangi 5027aa791dSChristian Marangi /* MUX */ 5127aa791dSChristian Marangi #define REG_GPIO_2ND_I2C_MODE 0x0214 5227aa791dSChristian Marangi #define GPIO_MDC_IO_MASTER_MODE_MODE BIT(14) 5327aa791dSChristian Marangi #define GPIO_I2C_MASTER_MODE_MODE BIT(13) 5427aa791dSChristian Marangi #define GPIO_I2S_MODE_MASK BIT(12) 5527aa791dSChristian Marangi #define GPIO_I2C_SLAVE_MODE_MODE BIT(11) 5627aa791dSChristian Marangi #define GPIO_LAN3_LED1_MODE_MASK BIT(10) 5727aa791dSChristian Marangi #define GPIO_LAN3_LED0_MODE_MASK BIT(9) 5827aa791dSChristian Marangi #define GPIO_LAN2_LED1_MODE_MASK BIT(8) 5927aa791dSChristian Marangi #define GPIO_LAN2_LED0_MODE_MASK BIT(7) 6027aa791dSChristian Marangi #define GPIO_LAN1_LED1_MODE_MASK BIT(6) 6127aa791dSChristian Marangi #define GPIO_LAN1_LED0_MODE_MASK BIT(5) 6227aa791dSChristian Marangi #define GPIO_LAN0_LED1_MODE_MASK BIT(4) 6327aa791dSChristian Marangi #define GPIO_LAN0_LED0_MODE_MASK BIT(3) 6427aa791dSChristian Marangi #define PON_TOD_1PPS_MODE_MASK BIT(2) 6527aa791dSChristian Marangi #define GSW_TOD_1PPS_MODE_MASK BIT(1) 6627aa791dSChristian Marangi #define GPIO_2ND_I2C_MODE_MASK BIT(0) 6727aa791dSChristian Marangi 6827aa791dSChristian Marangi #define REG_GPIO_SPI_CS1_MODE 0x0218 6927aa791dSChristian Marangi #define GPIO_PCM_SPI_CS4_MODE_MASK BIT(21) 7027aa791dSChristian Marangi #define GPIO_PCM_SPI_CS3_MODE_MASK BIT(20) 7127aa791dSChristian Marangi #define GPIO_PCM_SPI_CS2_MODE_P156_MASK BIT(19) 7227aa791dSChristian Marangi #define GPIO_PCM_SPI_CS2_MODE_P128_MASK BIT(18) 7327aa791dSChristian Marangi #define AN7583_GPIO_PCM_SPI_CS2_MODE_MASK BIT(18) 7427aa791dSChristian Marangi #define GPIO_PCM_SPI_CS1_MODE_MASK BIT(17) 7527aa791dSChristian Marangi #define GPIO_PCM_SPI_MODE_MASK BIT(16) 7627aa791dSChristian Marangi #define GPIO_PCM2_MODE_MASK BIT(13) 7727aa791dSChristian Marangi #define GPIO_PCM1_MODE_MASK BIT(12) 7827aa791dSChristian Marangi #define GPIO_PCM_INT_MODE_MASK BIT(9) 7927aa791dSChristian Marangi #define GPIO_PCM_RESET_MODE_MASK BIT(8) 8027aa791dSChristian Marangi #define GPIO_SPI_QUAD_MODE_MASK BIT(4) 8127aa791dSChristian Marangi #define GPIO_SPI_CS4_MODE_MASK BIT(3) 8227aa791dSChristian Marangi #define GPIO_SPI_CS3_MODE_MASK BIT(2) 8327aa791dSChristian Marangi #define GPIO_SPI_CS2_MODE_MASK BIT(1) 8427aa791dSChristian Marangi #define GPIO_SPI_CS1_MODE_MASK BIT(0) 8527aa791dSChristian Marangi 8627aa791dSChristian Marangi #define REG_GPIO_PON_MODE 0x021c 8727aa791dSChristian Marangi #define GPIO_PARALLEL_NAND_MODE_MASK BIT(14) 8827aa791dSChristian Marangi #define GPIO_SGMII_MDIO_MODE_MASK BIT(13) 8927aa791dSChristian Marangi #define GPIO_PCIE_RESET2_MASK BIT(12) 9027aa791dSChristian Marangi #define SIPO_RCLK_MODE_MASK BIT(11) 9127aa791dSChristian Marangi #define GPIO_PCIE_RESET1_MASK BIT(10) 9227aa791dSChristian Marangi #define GPIO_PCIE_RESET0_MASK BIT(9) 9327aa791dSChristian Marangi #define GPIO_UART5_MODE_MASK BIT(8) 9427aa791dSChristian Marangi #define GPIO_UART4_MODE_MASK BIT(7) 9527aa791dSChristian Marangi #define GPIO_HSUART_CTS_RTS_MODE_MASK BIT(6) 9627aa791dSChristian Marangi #define GPIO_HSUART_MODE_MASK BIT(5) 9727aa791dSChristian Marangi #define GPIO_UART2_CTS_RTS_MODE_MASK BIT(4) 9827aa791dSChristian Marangi #define GPIO_UART2_MODE_MASK BIT(3) 9927aa791dSChristian Marangi #define GPIO_SIPO_MODE_MASK BIT(2) 10027aa791dSChristian Marangi #define GPIO_EMMC_MODE_MASK BIT(1) 10127aa791dSChristian Marangi #define GPIO_PON_MODE_MASK BIT(0) 10227aa791dSChristian Marangi 10327aa791dSChristian Marangi #define REG_NPU_UART_EN 0x0224 10427aa791dSChristian Marangi #define JTAG_UDI_EN_MASK BIT(4) 10527aa791dSChristian Marangi #define JTAG_DFD_EN_MASK BIT(3) 10627aa791dSChristian Marangi 10727aa791dSChristian Marangi #define REG_FORCE_GPIO_EN 0x0228 10827aa791dSChristian Marangi #define FORCE_GPIO_EN(n) BIT(n) 10927aa791dSChristian Marangi 11027aa791dSChristian Marangi /* LED MAP */ 11127aa791dSChristian Marangi #define REG_LAN_LED0_MAPPING 0x027c 11227aa791dSChristian Marangi #define REG_LAN_LED1_MAPPING 0x0280 11327aa791dSChristian Marangi 11427aa791dSChristian Marangi #define LAN4_LED_MAPPING_MASK GENMASK(18, 16) 11527aa791dSChristian Marangi #define LAN4_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN4_LED_MAPPING_MASK, (_n)) 11627aa791dSChristian Marangi 11727aa791dSChristian Marangi #define LAN3_LED_MAPPING_MASK GENMASK(14, 12) 11827aa791dSChristian Marangi #define LAN3_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN3_LED_MAPPING_MASK, (_n)) 11927aa791dSChristian Marangi 12027aa791dSChristian Marangi #define LAN2_LED_MAPPING_MASK GENMASK(10, 8) 12127aa791dSChristian Marangi #define LAN2_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN2_LED_MAPPING_MASK, (_n)) 12227aa791dSChristian Marangi 12327aa791dSChristian Marangi #define LAN1_LED_MAPPING_MASK GENMASK(6, 4) 12427aa791dSChristian Marangi #define LAN1_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN1_LED_MAPPING_MASK, (_n)) 12527aa791dSChristian Marangi 12627aa791dSChristian Marangi #define LAN0_LED_MAPPING_MASK GENMASK(2, 0) 12727aa791dSChristian Marangi #define LAN0_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN0_LED_MAPPING_MASK, (_n)) 12827aa791dSChristian Marangi 12927aa791dSChristian Marangi /* CONF */ 13027aa791dSChristian Marangi #define REG_I2C_SDA_E2 0x001c 13127aa791dSChristian Marangi #define AN7583_I2C1_SCL_E2_MASK BIT(16) 13227aa791dSChristian Marangi #define AN7583_I2C1_SDA_E2_MASK BIT(15) 13327aa791dSChristian Marangi #define SPI_MISO_E2_MASK BIT(14) 13427aa791dSChristian Marangi #define SPI_MOSI_E2_MASK BIT(13) 13527aa791dSChristian Marangi #define SPI_CLK_E2_MASK BIT(12) 13627aa791dSChristian Marangi #define SPI_CS0_E2_MASK BIT(11) 13727aa791dSChristian Marangi #define PCIE2_RESET_E2_MASK BIT(10) 13827aa791dSChristian Marangi #define PCIE1_RESET_E2_MASK BIT(9) 13927aa791dSChristian Marangi #define PCIE0_RESET_E2_MASK BIT(8) 14027aa791dSChristian Marangi #define AN7583_MDIO_0_E2_MASK BIT(5) 14127aa791dSChristian Marangi #define AN7583_MDC_0_E2_MASK BIT(4) 14227aa791dSChristian Marangi #define UART1_RXD_E2_MASK BIT(3) 14327aa791dSChristian Marangi #define UART1_TXD_E2_MASK BIT(2) 14427aa791dSChristian Marangi #define I2C_SCL_E2_MASK BIT(1) 14527aa791dSChristian Marangi #define I2C_SDA_E2_MASK BIT(0) 14627aa791dSChristian Marangi 14727aa791dSChristian Marangi #define REG_I2C_SDA_E4 0x0020 14827aa791dSChristian Marangi #define AN7583_I2C1_SCL_E4_MASK BIT(16) 14927aa791dSChristian Marangi #define AN7583_I2C1_SDA_E4_MASK BIT(15) 15027aa791dSChristian Marangi #define SPI_MISO_E4_MASK BIT(14) 15127aa791dSChristian Marangi #define SPI_MOSI_E4_MASK BIT(13) 15227aa791dSChristian Marangi #define SPI_CLK_E4_MASK BIT(12) 15327aa791dSChristian Marangi #define SPI_CS0_E4_MASK BIT(11) 15427aa791dSChristian Marangi #define PCIE2_RESET_E4_MASK BIT(10) 15527aa791dSChristian Marangi #define PCIE1_RESET_E4_MASK BIT(9) 15627aa791dSChristian Marangi #define PCIE0_RESET_E4_MASK BIT(8) 15727aa791dSChristian Marangi #define AN7583_MDIO_0_E4_MASK BIT(5) 15827aa791dSChristian Marangi #define AN7583_MDC_0_E4_MASK BIT(4) 15927aa791dSChristian Marangi #define UART1_RXD_E4_MASK BIT(3) 16027aa791dSChristian Marangi #define UART1_TXD_E4_MASK BIT(2) 16127aa791dSChristian Marangi #define I2C_SCL_E4_MASK BIT(1) 16227aa791dSChristian Marangi #define I2C_SDA_E4_MASK BIT(0) 16327aa791dSChristian Marangi 16427aa791dSChristian Marangi #define REG_GPIO_L_E2 0x0024 16527aa791dSChristian Marangi #define REG_GPIO_L_E4 0x0028 16627aa791dSChristian Marangi #define REG_GPIO_H_E2 0x002c 16727aa791dSChristian Marangi #define REG_GPIO_H_E4 0x0030 16827aa791dSChristian Marangi 16927aa791dSChristian Marangi #define REG_I2C_SDA_PU 0x0044 17027aa791dSChristian Marangi #define AN7583_I2C1_SCL_PU_MASK BIT(16) 17127aa791dSChristian Marangi #define AN7583_I2C1_SDA_PU_MASK BIT(15) 17227aa791dSChristian Marangi #define SPI_MISO_PU_MASK BIT(14) 17327aa791dSChristian Marangi #define SPI_MOSI_PU_MASK BIT(13) 17427aa791dSChristian Marangi #define SPI_CLK_PU_MASK BIT(12) 17527aa791dSChristian Marangi #define SPI_CS0_PU_MASK BIT(11) 17627aa791dSChristian Marangi #define PCIE2_RESET_PU_MASK BIT(10) 17727aa791dSChristian Marangi #define PCIE1_RESET_PU_MASK BIT(9) 17827aa791dSChristian Marangi #define PCIE0_RESET_PU_MASK BIT(8) 17927aa791dSChristian Marangi #define AN7583_MDIO_0_PU_MASK BIT(5) 18027aa791dSChristian Marangi #define AN7583_MDC_0_PU_MASK BIT(4) 18127aa791dSChristian Marangi #define UART1_RXD_PU_MASK BIT(3) 18227aa791dSChristian Marangi #define UART1_TXD_PU_MASK BIT(2) 18327aa791dSChristian Marangi #define I2C_SCL_PU_MASK BIT(1) 18427aa791dSChristian Marangi #define I2C_SDA_PU_MASK BIT(0) 18527aa791dSChristian Marangi 18627aa791dSChristian Marangi #define REG_I2C_SDA_PD 0x0048 18727aa791dSChristian Marangi #define AN7583_I2C1_SDA_PD_MASK BIT(16) 18827aa791dSChristian Marangi #define AN7583_I2C1_SCL_PD_MASK BIT(15) 18927aa791dSChristian Marangi #define SPI_MISO_PD_MASK BIT(14) 19027aa791dSChristian Marangi #define SPI_MOSI_PD_MASK BIT(13) 19127aa791dSChristian Marangi #define SPI_CLK_PD_MASK BIT(12) 19227aa791dSChristian Marangi #define SPI_CS0_PD_MASK BIT(11) 19327aa791dSChristian Marangi #define PCIE2_RESET_PD_MASK BIT(10) 19427aa791dSChristian Marangi #define PCIE1_RESET_PD_MASK BIT(9) 19527aa791dSChristian Marangi #define PCIE0_RESET_PD_MASK BIT(8) 19627aa791dSChristian Marangi #define AN7583_MDIO_0_PD_MASK BIT(5) 19727aa791dSChristian Marangi #define AN7583_MDC_0_PD_MASK BIT(4) 19827aa791dSChristian Marangi #define UART1_RXD_PD_MASK BIT(3) 19927aa791dSChristian Marangi #define UART1_TXD_PD_MASK BIT(2) 20027aa791dSChristian Marangi #define I2C_SCL_PD_MASK BIT(1) 20127aa791dSChristian Marangi #define I2C_SDA_PD_MASK BIT(0) 20227aa791dSChristian Marangi 20327aa791dSChristian Marangi #define REG_GPIO_L_PU 0x004c 20427aa791dSChristian Marangi #define REG_GPIO_L_PD 0x0050 20527aa791dSChristian Marangi #define REG_GPIO_H_PU 0x0054 20627aa791dSChristian Marangi #define REG_GPIO_H_PD 0x0058 20727aa791dSChristian Marangi 20827aa791dSChristian Marangi #define REG_PCIE_RESET_OD 0x018c 20927aa791dSChristian Marangi #define PCIE2_RESET_OD_MASK BIT(2) 21027aa791dSChristian Marangi #define PCIE1_RESET_OD_MASK BIT(1) 21127aa791dSChristian Marangi #define PCIE0_RESET_OD_MASK BIT(0) 21227aa791dSChristian Marangi 21327aa791dSChristian Marangi /* GPIOs */ 21427aa791dSChristian Marangi #define REG_GPIO_CTRL 0x0000 21527aa791dSChristian Marangi #define REG_GPIO_DATA 0x0004 21627aa791dSChristian Marangi #define REG_GPIO_INT 0x0008 21727aa791dSChristian Marangi #define REG_GPIO_INT_EDGE 0x000c 21827aa791dSChristian Marangi #define REG_GPIO_INT_LEVEL 0x0010 21927aa791dSChristian Marangi #define REG_GPIO_OE 0x0014 22027aa791dSChristian Marangi #define REG_GPIO_CTRL1 0x0020 22127aa791dSChristian Marangi 22227aa791dSChristian Marangi /* PWM MODE CONF */ 22327aa791dSChristian Marangi #define REG_GPIO_FLASH_MODE_CFG 0x0034 22427aa791dSChristian Marangi #define GPIO15_FLASH_MODE_CFG BIT(15) 22527aa791dSChristian Marangi #define GPIO14_FLASH_MODE_CFG BIT(14) 22627aa791dSChristian Marangi #define GPIO13_FLASH_MODE_CFG BIT(13) 22727aa791dSChristian Marangi #define GPIO12_FLASH_MODE_CFG BIT(12) 22827aa791dSChristian Marangi #define GPIO11_FLASH_MODE_CFG BIT(11) 22927aa791dSChristian Marangi #define GPIO10_FLASH_MODE_CFG BIT(10) 23027aa791dSChristian Marangi #define GPIO9_FLASH_MODE_CFG BIT(9) 23127aa791dSChristian Marangi #define GPIO8_FLASH_MODE_CFG BIT(8) 23227aa791dSChristian Marangi #define GPIO7_FLASH_MODE_CFG BIT(7) 23327aa791dSChristian Marangi #define GPIO6_FLASH_MODE_CFG BIT(6) 23427aa791dSChristian Marangi #define GPIO5_FLASH_MODE_CFG BIT(5) 23527aa791dSChristian Marangi #define GPIO4_FLASH_MODE_CFG BIT(4) 23627aa791dSChristian Marangi #define GPIO3_FLASH_MODE_CFG BIT(3) 23727aa791dSChristian Marangi #define GPIO2_FLASH_MODE_CFG BIT(2) 23827aa791dSChristian Marangi #define GPIO1_FLASH_MODE_CFG BIT(1) 23927aa791dSChristian Marangi #define GPIO0_FLASH_MODE_CFG BIT(0) 24027aa791dSChristian Marangi 24127aa791dSChristian Marangi #define REG_GPIO_CTRL2 0x0060 24227aa791dSChristian Marangi #define REG_GPIO_CTRL3 0x0064 24327aa791dSChristian Marangi 24427aa791dSChristian Marangi /* PWM MODE CONF EXT */ 24527aa791dSChristian Marangi #define REG_GPIO_FLASH_MODE_CFG_EXT 0x0068 24627aa791dSChristian Marangi #define GPIO51_FLASH_MODE_CFG BIT(31) 24727aa791dSChristian Marangi #define GPIO50_FLASH_MODE_CFG BIT(30) 24827aa791dSChristian Marangi #define GPIO49_FLASH_MODE_CFG BIT(29) 24927aa791dSChristian Marangi #define GPIO48_FLASH_MODE_CFG BIT(28) 25027aa791dSChristian Marangi #define GPIO47_FLASH_MODE_CFG BIT(27) 25127aa791dSChristian Marangi #define GPIO46_FLASH_MODE_CFG BIT(26) 25227aa791dSChristian Marangi #define GPIO45_FLASH_MODE_CFG BIT(25) 25327aa791dSChristian Marangi #define GPIO44_FLASH_MODE_CFG BIT(24) 25427aa791dSChristian Marangi #define GPIO43_FLASH_MODE_CFG BIT(23) 25527aa791dSChristian Marangi #define GPIO42_FLASH_MODE_CFG BIT(22) 25627aa791dSChristian Marangi #define GPIO41_FLASH_MODE_CFG BIT(21) 25727aa791dSChristian Marangi #define GPIO40_FLASH_MODE_CFG BIT(20) 25827aa791dSChristian Marangi #define GPIO39_FLASH_MODE_CFG BIT(19) 25927aa791dSChristian Marangi #define GPIO38_FLASH_MODE_CFG BIT(18) 26027aa791dSChristian Marangi #define GPIO37_FLASH_MODE_CFG BIT(17) 26127aa791dSChristian Marangi #define GPIO36_FLASH_MODE_CFG BIT(16) 26227aa791dSChristian Marangi #define GPIO31_FLASH_MODE_CFG BIT(15) 26327aa791dSChristian Marangi #define GPIO30_FLASH_MODE_CFG BIT(14) 26427aa791dSChristian Marangi #define GPIO29_FLASH_MODE_CFG BIT(13) 26527aa791dSChristian Marangi #define GPIO28_FLASH_MODE_CFG BIT(12) 26627aa791dSChristian Marangi #define GPIO27_FLASH_MODE_CFG BIT(11) 26727aa791dSChristian Marangi #define GPIO26_FLASH_MODE_CFG BIT(10) 26827aa791dSChristian Marangi #define GPIO25_FLASH_MODE_CFG BIT(9) 26927aa791dSChristian Marangi #define GPIO24_FLASH_MODE_CFG BIT(8) 27027aa791dSChristian Marangi #define GPIO23_FLASH_MODE_CFG BIT(7) 27127aa791dSChristian Marangi #define GPIO22_FLASH_MODE_CFG BIT(6) 27227aa791dSChristian Marangi #define GPIO21_FLASH_MODE_CFG BIT(5) 27327aa791dSChristian Marangi #define GPIO20_FLASH_MODE_CFG BIT(4) 27427aa791dSChristian Marangi #define GPIO19_FLASH_MODE_CFG BIT(3) 27527aa791dSChristian Marangi #define GPIO18_FLASH_MODE_CFG BIT(2) 27627aa791dSChristian Marangi #define GPIO17_FLASH_MODE_CFG BIT(1) 27727aa791dSChristian Marangi #define GPIO16_FLASH_MODE_CFG BIT(0) 27827aa791dSChristian Marangi 27927aa791dSChristian Marangi #define REG_GPIO_DATA1 0x0070 28027aa791dSChristian Marangi #define REG_GPIO_OE1 0x0078 28127aa791dSChristian Marangi #define REG_GPIO_INT1 0x007c 28227aa791dSChristian Marangi #define REG_GPIO_INT_EDGE1 0x0080 28327aa791dSChristian Marangi #define REG_GPIO_INT_EDGE2 0x0084 28427aa791dSChristian Marangi #define REG_GPIO_INT_EDGE3 0x0088 28527aa791dSChristian Marangi #define REG_GPIO_INT_LEVEL1 0x008c 28627aa791dSChristian Marangi #define REG_GPIO_INT_LEVEL2 0x0090 28727aa791dSChristian Marangi #define REG_GPIO_INT_LEVEL3 0x0094 28827aa791dSChristian Marangi 28927aa791dSChristian Marangi #define AIROHA_NUM_PINS 64 29027aa791dSChristian Marangi #define AIROHA_PIN_BANK_SIZE (AIROHA_NUM_PINS / 2) 29127aa791dSChristian Marangi #define AIROHA_REG_GPIOCTRL_NUM_PIN (AIROHA_NUM_PINS / 4) 29227aa791dSChristian Marangi 29327aa791dSChristian Marangi static const u32 gpio_data_regs[] = { 29427aa791dSChristian Marangi REG_GPIO_DATA, 29527aa791dSChristian Marangi REG_GPIO_DATA1 29627aa791dSChristian Marangi }; 29727aa791dSChristian Marangi 29827aa791dSChristian Marangi static const u32 gpio_out_regs[] = { 29927aa791dSChristian Marangi REG_GPIO_OE, 30027aa791dSChristian Marangi REG_GPIO_OE1 30127aa791dSChristian Marangi }; 30227aa791dSChristian Marangi 30327aa791dSChristian Marangi static const u32 gpio_dir_regs[] = { 30427aa791dSChristian Marangi REG_GPIO_CTRL, 30527aa791dSChristian Marangi REG_GPIO_CTRL1, 30627aa791dSChristian Marangi REG_GPIO_CTRL2, 30727aa791dSChristian Marangi REG_GPIO_CTRL3 30827aa791dSChristian Marangi }; 30927aa791dSChristian Marangi 31027aa791dSChristian Marangi static const u32 irq_status_regs[] = { 31127aa791dSChristian Marangi REG_GPIO_INT, 31227aa791dSChristian Marangi REG_GPIO_INT1 31327aa791dSChristian Marangi }; 31427aa791dSChristian Marangi 31527aa791dSChristian Marangi static const u32 irq_level_regs[] = { 31627aa791dSChristian Marangi REG_GPIO_INT_LEVEL, 31727aa791dSChristian Marangi REG_GPIO_INT_LEVEL1, 31827aa791dSChristian Marangi REG_GPIO_INT_LEVEL2, 31927aa791dSChristian Marangi REG_GPIO_INT_LEVEL3 32027aa791dSChristian Marangi }; 32127aa791dSChristian Marangi 32227aa791dSChristian Marangi static const u32 irq_edge_regs[] = { 32327aa791dSChristian Marangi REG_GPIO_INT_EDGE, 32427aa791dSChristian Marangi REG_GPIO_INT_EDGE1, 32527aa791dSChristian Marangi REG_GPIO_INT_EDGE2, 32627aa791dSChristian Marangi REG_GPIO_INT_EDGE3 32727aa791dSChristian Marangi }; 32827aa791dSChristian Marangi 32927aa791dSChristian Marangi struct airoha_pinctrl_reg { 33027aa791dSChristian Marangi u32 offset; 33127aa791dSChristian Marangi u32 mask; 33227aa791dSChristian Marangi }; 33327aa791dSChristian Marangi 33427aa791dSChristian Marangi enum airoha_pinctrl_mux_func { 33527aa791dSChristian Marangi AIROHA_FUNC_MUX, 33627aa791dSChristian Marangi AIROHA_FUNC_PWM_MUX, 33727aa791dSChristian Marangi AIROHA_FUNC_PWM_EXT_MUX, 33827aa791dSChristian Marangi }; 33927aa791dSChristian Marangi 34027aa791dSChristian Marangi struct airoha_pinctrl_func_group { 34127aa791dSChristian Marangi const char *name; 34227aa791dSChristian Marangi struct { 34327aa791dSChristian Marangi enum airoha_pinctrl_mux_func mux; 34427aa791dSChristian Marangi u32 offset; 34527aa791dSChristian Marangi u32 mask; 34627aa791dSChristian Marangi u32 val; 34727aa791dSChristian Marangi } regmap[2]; 34827aa791dSChristian Marangi int regmap_size; 34927aa791dSChristian Marangi }; 35027aa791dSChristian Marangi 35127aa791dSChristian Marangi struct airoha_pinctrl_func { 35227aa791dSChristian Marangi const struct pinfunction desc; 35327aa791dSChristian Marangi const struct airoha_pinctrl_func_group *groups; 35427aa791dSChristian Marangi u8 group_size; 35527aa791dSChristian Marangi }; 35627aa791dSChristian Marangi 35727aa791dSChristian Marangi struct airoha_pinctrl_conf { 35827aa791dSChristian Marangi u32 pin; 35927aa791dSChristian Marangi struct airoha_pinctrl_reg reg; 36027aa791dSChristian Marangi }; 36127aa791dSChristian Marangi 36227aa791dSChristian Marangi struct airoha_pinctrl_gpiochip { 36327aa791dSChristian Marangi struct gpio_chip chip; 36427aa791dSChristian Marangi 36527aa791dSChristian Marangi /* gpio */ 36627aa791dSChristian Marangi const u32 *data; 36727aa791dSChristian Marangi const u32 *dir; 36827aa791dSChristian Marangi const u32 *out; 36927aa791dSChristian Marangi /* irq */ 37027aa791dSChristian Marangi const u32 *status; 37127aa791dSChristian Marangi const u32 *level; 37227aa791dSChristian Marangi const u32 *edge; 37327aa791dSChristian Marangi 37427aa791dSChristian Marangi u32 irq_type[AIROHA_NUM_PINS]; 37527aa791dSChristian Marangi }; 37627aa791dSChristian Marangi 37727aa791dSChristian Marangi struct airoha_pinctrl_confs_info { 37827aa791dSChristian Marangi const struct airoha_pinctrl_conf *confs; 37927aa791dSChristian Marangi unsigned int num_confs; 38027aa791dSChristian Marangi }; 38127aa791dSChristian Marangi 38227aa791dSChristian Marangi enum airoha_pinctrl_confs_type { 38327aa791dSChristian Marangi AIROHA_PINCTRL_CONFS_PULLUP, 38427aa791dSChristian Marangi AIROHA_PINCTRL_CONFS_PULLDOWN, 38527aa791dSChristian Marangi AIROHA_PINCTRL_CONFS_DRIVE_E2, 38627aa791dSChristian Marangi AIROHA_PINCTRL_CONFS_DRIVE_E4, 38727aa791dSChristian Marangi AIROHA_PINCTRL_CONFS_PCIE_RST_OD, 38827aa791dSChristian Marangi 38927aa791dSChristian Marangi AIROHA_PINCTRL_CONFS_MAX, 39027aa791dSChristian Marangi }; 39127aa791dSChristian Marangi 39227aa791dSChristian Marangi struct airoha_pinctrl { 39327aa791dSChristian Marangi struct pinctrl_dev *ctrl; 39427aa791dSChristian Marangi 39527aa791dSChristian Marangi struct pinctrl_desc desc; 39627aa791dSChristian Marangi const struct pingroup *grps; 39727aa791dSChristian Marangi const struct airoha_pinctrl_func *funcs; 39827aa791dSChristian Marangi const struct airoha_pinctrl_confs_info *confs_info; 39927aa791dSChristian Marangi 40027aa791dSChristian Marangi struct regmap *chip_scu; 40127aa791dSChristian Marangi struct regmap *regmap; 40227aa791dSChristian Marangi 40327aa791dSChristian Marangi struct airoha_pinctrl_gpiochip gpiochip; 40427aa791dSChristian Marangi }; 40527aa791dSChristian Marangi 40627aa791dSChristian Marangi struct airoha_pinctrl_match_data { 40727aa791dSChristian Marangi const struct pinctrl_pin_desc *pins; 40827aa791dSChristian Marangi const unsigned int num_pins; 40927aa791dSChristian Marangi const struct pingroup *grps; 41027aa791dSChristian Marangi const unsigned int num_grps; 41127aa791dSChristian Marangi const struct airoha_pinctrl_func *funcs; 41227aa791dSChristian Marangi const unsigned int num_funcs; 41327aa791dSChristian Marangi const struct airoha_pinctrl_confs_info confs_info[AIROHA_PINCTRL_CONFS_MAX]; 41427aa791dSChristian Marangi }; 41527aa791dSChristian Marangi 41627aa791dSChristian Marangi static struct pinctrl_pin_desc en7581_pinctrl_pins[] = { 41727aa791dSChristian Marangi PINCTRL_PIN(0, "uart1_txd"), 41827aa791dSChristian Marangi PINCTRL_PIN(1, "uart1_rxd"), 41927aa791dSChristian Marangi PINCTRL_PIN(2, "i2c_scl"), 42027aa791dSChristian Marangi PINCTRL_PIN(3, "i2c_sda"), 42127aa791dSChristian Marangi PINCTRL_PIN(4, "spi_cs0"), 42227aa791dSChristian Marangi PINCTRL_PIN(5, "spi_clk"), 42327aa791dSChristian Marangi PINCTRL_PIN(6, "spi_mosi"), 42427aa791dSChristian Marangi PINCTRL_PIN(7, "spi_miso"), 42527aa791dSChristian Marangi PINCTRL_PIN(13, "gpio0"), 42627aa791dSChristian Marangi PINCTRL_PIN(14, "gpio1"), 42727aa791dSChristian Marangi PINCTRL_PIN(15, "gpio2"), 42827aa791dSChristian Marangi PINCTRL_PIN(16, "gpio3"), 42927aa791dSChristian Marangi PINCTRL_PIN(17, "gpio4"), 43027aa791dSChristian Marangi PINCTRL_PIN(18, "gpio5"), 43127aa791dSChristian Marangi PINCTRL_PIN(19, "gpio6"), 43227aa791dSChristian Marangi PINCTRL_PIN(20, "gpio7"), 43327aa791dSChristian Marangi PINCTRL_PIN(21, "gpio8"), 43427aa791dSChristian Marangi PINCTRL_PIN(22, "gpio9"), 43527aa791dSChristian Marangi PINCTRL_PIN(23, "gpio10"), 43627aa791dSChristian Marangi PINCTRL_PIN(24, "gpio11"), 43727aa791dSChristian Marangi PINCTRL_PIN(25, "gpio12"), 43827aa791dSChristian Marangi PINCTRL_PIN(26, "gpio13"), 43927aa791dSChristian Marangi PINCTRL_PIN(27, "gpio14"), 44027aa791dSChristian Marangi PINCTRL_PIN(28, "gpio15"), 44127aa791dSChristian Marangi PINCTRL_PIN(29, "gpio16"), 44227aa791dSChristian Marangi PINCTRL_PIN(30, "gpio17"), 44327aa791dSChristian Marangi PINCTRL_PIN(31, "gpio18"), 44427aa791dSChristian Marangi PINCTRL_PIN(32, "gpio19"), 44527aa791dSChristian Marangi PINCTRL_PIN(33, "gpio20"), 44627aa791dSChristian Marangi PINCTRL_PIN(34, "gpio21"), 44727aa791dSChristian Marangi PINCTRL_PIN(35, "gpio22"), 44827aa791dSChristian Marangi PINCTRL_PIN(36, "gpio23"), 44927aa791dSChristian Marangi PINCTRL_PIN(37, "gpio24"), 45027aa791dSChristian Marangi PINCTRL_PIN(38, "gpio25"), 45127aa791dSChristian Marangi PINCTRL_PIN(39, "gpio26"), 45227aa791dSChristian Marangi PINCTRL_PIN(40, "gpio27"), 45327aa791dSChristian Marangi PINCTRL_PIN(41, "gpio28"), 45427aa791dSChristian Marangi PINCTRL_PIN(42, "gpio29"), 45527aa791dSChristian Marangi PINCTRL_PIN(43, "gpio30"), 45627aa791dSChristian Marangi PINCTRL_PIN(44, "gpio31"), 45727aa791dSChristian Marangi PINCTRL_PIN(45, "gpio32"), 45827aa791dSChristian Marangi PINCTRL_PIN(46, "gpio33"), 45927aa791dSChristian Marangi PINCTRL_PIN(47, "gpio34"), 46027aa791dSChristian Marangi PINCTRL_PIN(48, "gpio35"), 46127aa791dSChristian Marangi PINCTRL_PIN(49, "gpio36"), 46227aa791dSChristian Marangi PINCTRL_PIN(50, "gpio37"), 46327aa791dSChristian Marangi PINCTRL_PIN(51, "gpio38"), 46427aa791dSChristian Marangi PINCTRL_PIN(52, "gpio39"), 46527aa791dSChristian Marangi PINCTRL_PIN(53, "gpio40"), 46627aa791dSChristian Marangi PINCTRL_PIN(54, "gpio41"), 46727aa791dSChristian Marangi PINCTRL_PIN(55, "gpio42"), 46827aa791dSChristian Marangi PINCTRL_PIN(56, "gpio43"), 46927aa791dSChristian Marangi PINCTRL_PIN(57, "gpio44"), 47027aa791dSChristian Marangi PINCTRL_PIN(58, "gpio45"), 47127aa791dSChristian Marangi PINCTRL_PIN(59, "gpio46"), 47227aa791dSChristian Marangi PINCTRL_PIN(61, "pcie_reset0"), 47327aa791dSChristian Marangi PINCTRL_PIN(62, "pcie_reset1"), 47427aa791dSChristian Marangi PINCTRL_PIN(63, "pcie_reset2"), 47527aa791dSChristian Marangi }; 47627aa791dSChristian Marangi 47727aa791dSChristian Marangi static const int en7581_pon_pins[] = { 49, 50, 51, 52, 53, 54 }; 47827aa791dSChristian Marangi static const int en7581_pon_tod_1pps_pins[] = { 46 }; 47927aa791dSChristian Marangi static const int en7581_gsw_tod_1pps_pins[] = { 46 }; 48027aa791dSChristian Marangi static const int en7581_sipo_pins[] = { 16, 17 }; 48127aa791dSChristian Marangi static const int en7581_sipo_rclk_pins[] = { 16, 17, 43 }; 48227aa791dSChristian Marangi static const int en7581_mdio_pins[] = { 14, 15 }; 48327aa791dSChristian Marangi static const int en7581_uart2_pins[] = { 48, 55 }; 48427aa791dSChristian Marangi static const int en7581_uart2_cts_rts_pins[] = { 46, 47 }; 48527aa791dSChristian Marangi static const int en7581_hsuart_pins[] = { 28, 29 }; 48627aa791dSChristian Marangi static const int en7581_hsuart_cts_rts_pins[] = { 26, 27 }; 48727aa791dSChristian Marangi static const int en7581_uart4_pins[] = { 38, 39 }; 48827aa791dSChristian Marangi static const int en7581_uart5_pins[] = { 18, 19 }; 48927aa791dSChristian Marangi static const int en7581_i2c0_pins[] = { 2, 3 }; 49027aa791dSChristian Marangi static const int en7581_i2c1_pins[] = { 14, 15 }; 49127aa791dSChristian Marangi static const int en7581_jtag_udi_pins[] = { 16, 17, 18, 19, 20 }; 49227aa791dSChristian Marangi static const int en7581_jtag_dfd_pins[] = { 16, 17, 18, 19, 20 }; 49327aa791dSChristian Marangi static const int en7581_i2s_pins[] = { 26, 27, 28, 29 }; 49427aa791dSChristian Marangi static const int en7581_pcm1_pins[] = { 22, 23, 24, 25 }; 49527aa791dSChristian Marangi static const int en7581_pcm2_pins[] = { 18, 19, 20, 21 }; 49627aa791dSChristian Marangi static const int en7581_spi_quad_pins[] = { 32, 33 }; 49727aa791dSChristian Marangi static const int en7581_spi_pins[] = { 4, 5, 6, 7 }; 49827aa791dSChristian Marangi static const int en7581_spi_cs1_pins[] = { 34 }; 49927aa791dSChristian Marangi static const int en7581_pcm_spi_pins[] = { 18, 19, 20, 21, 22, 23, 24, 25 }; 50027aa791dSChristian Marangi static const int en7581_pcm_spi_int_pins[] = { 14 }; 50127aa791dSChristian Marangi static const int en7581_pcm_spi_rst_pins[] = { 15 }; 50227aa791dSChristian Marangi static const int en7581_pcm_spi_cs1_pins[] = { 43 }; 50327aa791dSChristian Marangi static const int en7581_pcm_spi_cs2_pins[] = { 40 }; 50427aa791dSChristian Marangi static const int en7581_pcm_spi_cs2_p128_pins[] = { 40 }; 50527aa791dSChristian Marangi static const int en7581_pcm_spi_cs2_p156_pins[] = { 40 }; 50627aa791dSChristian Marangi static const int en7581_pcm_spi_cs3_pins[] = { 41 }; 50727aa791dSChristian Marangi static const int en7581_pcm_spi_cs4_pins[] = { 42 }; 50827aa791dSChristian Marangi static const int en7581_emmc_pins[] = { 4, 5, 6, 30, 31, 32, 33, 34, 35, 36, 37 }; 50927aa791dSChristian Marangi static const int en7581_pnand_pins[] = { 4, 5, 6, 7, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42 }; 51027aa791dSChristian Marangi static const int en7581_gpio0_pins[] = { 13 }; 51127aa791dSChristian Marangi static const int en7581_gpio1_pins[] = { 14 }; 51227aa791dSChristian Marangi static const int en7581_gpio2_pins[] = { 15 }; 51327aa791dSChristian Marangi static const int en7581_gpio3_pins[] = { 16 }; 51427aa791dSChristian Marangi static const int en7581_gpio4_pins[] = { 17 }; 51527aa791dSChristian Marangi static const int en7581_gpio5_pins[] = { 18 }; 51627aa791dSChristian Marangi static const int en7581_gpio6_pins[] = { 19 }; 51727aa791dSChristian Marangi static const int en7581_gpio7_pins[] = { 20 }; 51827aa791dSChristian Marangi static const int en7581_gpio8_pins[] = { 21 }; 51927aa791dSChristian Marangi static const int en7581_gpio9_pins[] = { 22 }; 52027aa791dSChristian Marangi static const int en7581_gpio10_pins[] = { 23 }; 52127aa791dSChristian Marangi static const int en7581_gpio11_pins[] = { 24 }; 52227aa791dSChristian Marangi static const int en7581_gpio12_pins[] = { 25 }; 52327aa791dSChristian Marangi static const int en7581_gpio13_pins[] = { 26 }; 52427aa791dSChristian Marangi static const int en7581_gpio14_pins[] = { 27 }; 52527aa791dSChristian Marangi static const int en7581_gpio15_pins[] = { 28 }; 52627aa791dSChristian Marangi static const int en7581_gpio16_pins[] = { 29 }; 52727aa791dSChristian Marangi static const int en7581_gpio17_pins[] = { 30 }; 52827aa791dSChristian Marangi static const int en7581_gpio18_pins[] = { 31 }; 52927aa791dSChristian Marangi static const int en7581_gpio19_pins[] = { 32 }; 53027aa791dSChristian Marangi static const int en7581_gpio20_pins[] = { 33 }; 53127aa791dSChristian Marangi static const int en7581_gpio21_pins[] = { 34 }; 53227aa791dSChristian Marangi static const int en7581_gpio22_pins[] = { 35 }; 53327aa791dSChristian Marangi static const int en7581_gpio23_pins[] = { 36 }; 53427aa791dSChristian Marangi static const int en7581_gpio24_pins[] = { 37 }; 53527aa791dSChristian Marangi static const int en7581_gpio25_pins[] = { 38 }; 53627aa791dSChristian Marangi static const int en7581_gpio26_pins[] = { 39 }; 53727aa791dSChristian Marangi static const int en7581_gpio27_pins[] = { 40 }; 53827aa791dSChristian Marangi static const int en7581_gpio28_pins[] = { 41 }; 53927aa791dSChristian Marangi static const int en7581_gpio29_pins[] = { 42 }; 54027aa791dSChristian Marangi static const int en7581_gpio30_pins[] = { 43 }; 54127aa791dSChristian Marangi static const int en7581_gpio31_pins[] = { 44 }; 542bdc95d7eSMikhail Kshevetskiy static const int en7581_gpio32_pins[] = { 45 }; 54327aa791dSChristian Marangi static const int en7581_gpio33_pins[] = { 46 }; 54427aa791dSChristian Marangi static const int en7581_gpio34_pins[] = { 47 }; 54527aa791dSChristian Marangi static const int en7581_gpio35_pins[] = { 48 }; 54627aa791dSChristian Marangi static const int en7581_gpio36_pins[] = { 49 }; 54727aa791dSChristian Marangi static const int en7581_gpio37_pins[] = { 50 }; 54827aa791dSChristian Marangi static const int en7581_gpio38_pins[] = { 51 }; 54927aa791dSChristian Marangi static const int en7581_gpio39_pins[] = { 52 }; 55027aa791dSChristian Marangi static const int en7581_gpio40_pins[] = { 53 }; 55127aa791dSChristian Marangi static const int en7581_gpio41_pins[] = { 54 }; 55227aa791dSChristian Marangi static const int en7581_gpio42_pins[] = { 55 }; 55327aa791dSChristian Marangi static const int en7581_gpio43_pins[] = { 56 }; 55427aa791dSChristian Marangi static const int en7581_gpio44_pins[] = { 57 }; 55527aa791dSChristian Marangi static const int en7581_gpio45_pins[] = { 58 }; 55627aa791dSChristian Marangi static const int en7581_gpio46_pins[] = { 59 }; 55727aa791dSChristian Marangi static const int en7581_pcie_reset0_pins[] = { 61 }; 55827aa791dSChristian Marangi static const int en7581_pcie_reset1_pins[] = { 62 }; 55927aa791dSChristian Marangi static const int en7581_pcie_reset2_pins[] = { 63 }; 56027aa791dSChristian Marangi 56127aa791dSChristian Marangi static const struct pingroup en7581_pinctrl_groups[] = { 56227aa791dSChristian Marangi PINCTRL_PIN_GROUP("pon", en7581_pon), 56327aa791dSChristian Marangi PINCTRL_PIN_GROUP("pon_tod_1pps", en7581_pon_tod_1pps), 56427aa791dSChristian Marangi PINCTRL_PIN_GROUP("gsw_tod_1pps", en7581_gsw_tod_1pps), 56527aa791dSChristian Marangi PINCTRL_PIN_GROUP("sipo", en7581_sipo), 56627aa791dSChristian Marangi PINCTRL_PIN_GROUP("sipo_rclk", en7581_sipo_rclk), 56727aa791dSChristian Marangi PINCTRL_PIN_GROUP("mdio", en7581_mdio), 56827aa791dSChristian Marangi PINCTRL_PIN_GROUP("uart2", en7581_uart2), 56927aa791dSChristian Marangi PINCTRL_PIN_GROUP("uart2_cts_rts", en7581_uart2_cts_rts), 57027aa791dSChristian Marangi PINCTRL_PIN_GROUP("hsuart", en7581_hsuart), 57127aa791dSChristian Marangi PINCTRL_PIN_GROUP("hsuart_cts_rts", en7581_hsuart_cts_rts), 57227aa791dSChristian Marangi PINCTRL_PIN_GROUP("uart4", en7581_uart4), 57327aa791dSChristian Marangi PINCTRL_PIN_GROUP("uart5", en7581_uart5), 57427aa791dSChristian Marangi PINCTRL_PIN_GROUP("i2c0", en7581_i2c0), 57527aa791dSChristian Marangi PINCTRL_PIN_GROUP("i2c1", en7581_i2c1), 57627aa791dSChristian Marangi PINCTRL_PIN_GROUP("jtag_udi", en7581_jtag_udi), 57727aa791dSChristian Marangi PINCTRL_PIN_GROUP("jtag_dfd", en7581_jtag_dfd), 57827aa791dSChristian Marangi PINCTRL_PIN_GROUP("i2s", en7581_i2s), 57927aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm1", en7581_pcm1), 58027aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm2", en7581_pcm2), 58127aa791dSChristian Marangi PINCTRL_PIN_GROUP("spi", en7581_spi), 58227aa791dSChristian Marangi PINCTRL_PIN_GROUP("spi_quad", en7581_spi_quad), 58327aa791dSChristian Marangi PINCTRL_PIN_GROUP("spi_cs1", en7581_spi_cs1), 58427aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi", en7581_pcm_spi), 58527aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi_int", en7581_pcm_spi_int), 58627aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi_rst", en7581_pcm_spi_rst), 58727aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi_cs1", en7581_pcm_spi_cs1), 58827aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi_cs2_p128", en7581_pcm_spi_cs2_p128), 58927aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi_cs2_p156", en7581_pcm_spi_cs2_p156), 59027aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi_cs2", en7581_pcm_spi_cs2), 59127aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi_cs3", en7581_pcm_spi_cs3), 59227aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi_cs4", en7581_pcm_spi_cs4), 59327aa791dSChristian Marangi PINCTRL_PIN_GROUP("emmc", en7581_emmc), 59427aa791dSChristian Marangi PINCTRL_PIN_GROUP("pnand", en7581_pnand), 59527aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio0", en7581_gpio0), 59627aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio1", en7581_gpio1), 59727aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio2", en7581_gpio2), 59827aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio3", en7581_gpio3), 59927aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio4", en7581_gpio4), 60027aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio5", en7581_gpio5), 60127aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio6", en7581_gpio6), 60227aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio7", en7581_gpio7), 60327aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio8", en7581_gpio8), 60427aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio9", en7581_gpio9), 60527aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio10", en7581_gpio10), 60627aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio11", en7581_gpio11), 60727aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio12", en7581_gpio12), 60827aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio13", en7581_gpio13), 60927aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio14", en7581_gpio14), 61027aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio15", en7581_gpio15), 61127aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio16", en7581_gpio16), 61227aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio17", en7581_gpio17), 61327aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio18", en7581_gpio18), 61427aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio19", en7581_gpio19), 61527aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio20", en7581_gpio20), 61627aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio21", en7581_gpio21), 61727aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio22", en7581_gpio22), 61827aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio23", en7581_gpio23), 61927aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio24", en7581_gpio24), 62027aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio25", en7581_gpio25), 62127aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio26", en7581_gpio26), 62227aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio27", en7581_gpio27), 62327aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio28", en7581_gpio28), 62427aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio29", en7581_gpio29), 62527aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio30", en7581_gpio30), 62627aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio31", en7581_gpio31), 627bdc95d7eSMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio32", en7581_gpio32), 62827aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio33", en7581_gpio33), 62927aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio34", en7581_gpio34), 63027aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio35", en7581_gpio35), 63127aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio36", en7581_gpio36), 63227aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio37", en7581_gpio37), 63327aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio38", en7581_gpio38), 63427aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio39", en7581_gpio39), 63527aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio40", en7581_gpio40), 63627aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio41", en7581_gpio41), 63727aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio42", en7581_gpio42), 63827aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio43", en7581_gpio43), 63927aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio44", en7581_gpio44), 64027aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio45", en7581_gpio45), 64127aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio46", en7581_gpio46), 64227aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcie_reset0", en7581_pcie_reset0), 64327aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcie_reset1", en7581_pcie_reset1), 64427aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcie_reset2", en7581_pcie_reset2), 64527aa791dSChristian Marangi }; 64627aa791dSChristian Marangi 64727aa791dSChristian Marangi static struct pinctrl_pin_desc an7583_pinctrl_pins[] = { 64827aa791dSChristian Marangi PINCTRL_PIN(2, "gpio0"), 64927aa791dSChristian Marangi PINCTRL_PIN(3, "gpio1"), 65027aa791dSChristian Marangi PINCTRL_PIN(4, "gpio2"), 65127aa791dSChristian Marangi PINCTRL_PIN(5, "gpio3"), 65227aa791dSChristian Marangi PINCTRL_PIN(6, "gpio4"), 65327aa791dSChristian Marangi PINCTRL_PIN(7, "gpio5"), 65427aa791dSChristian Marangi PINCTRL_PIN(8, "gpio6"), 65527aa791dSChristian Marangi PINCTRL_PIN(9, "gpio7"), 65627aa791dSChristian Marangi PINCTRL_PIN(10, "gpio8"), 65727aa791dSChristian Marangi PINCTRL_PIN(11, "gpio9"), 65827aa791dSChristian Marangi PINCTRL_PIN(12, "gpio10"), 65927aa791dSChristian Marangi PINCTRL_PIN(13, "gpio11"), 66027aa791dSChristian Marangi PINCTRL_PIN(14, "gpio12"), 66127aa791dSChristian Marangi PINCTRL_PIN(15, "gpio13"), 66227aa791dSChristian Marangi PINCTRL_PIN(16, "gpio14"), 66327aa791dSChristian Marangi PINCTRL_PIN(17, "gpio15"), 66427aa791dSChristian Marangi PINCTRL_PIN(18, "gpio16"), 66527aa791dSChristian Marangi PINCTRL_PIN(19, "gpio17"), 66627aa791dSChristian Marangi PINCTRL_PIN(20, "gpio18"), 66727aa791dSChristian Marangi PINCTRL_PIN(21, "gpio19"), 66827aa791dSChristian Marangi PINCTRL_PIN(22, "gpio20"), 66927aa791dSChristian Marangi PINCTRL_PIN(23, "gpio21"), 67027aa791dSChristian Marangi PINCTRL_PIN(24, "gpio22"), 67127aa791dSChristian Marangi PINCTRL_PIN(25, "gpio23"), 67227aa791dSChristian Marangi PINCTRL_PIN(26, "gpio24"), 67327aa791dSChristian Marangi PINCTRL_PIN(27, "gpio25"), 67427aa791dSChristian Marangi PINCTRL_PIN(28, "gpio26"), 67527aa791dSChristian Marangi PINCTRL_PIN(29, "gpio27"), 67627aa791dSChristian Marangi PINCTRL_PIN(30, "gpio28"), 67727aa791dSChristian Marangi PINCTRL_PIN(31, "gpio29"), 67827aa791dSChristian Marangi PINCTRL_PIN(32, "gpio30"), 67927aa791dSChristian Marangi PINCTRL_PIN(33, "gpio31"), 68027aa791dSChristian Marangi PINCTRL_PIN(34, "gpio32"), 68127aa791dSChristian Marangi PINCTRL_PIN(35, "gpio33"), 68227aa791dSChristian Marangi PINCTRL_PIN(36, "gpio34"), 68327aa791dSChristian Marangi PINCTRL_PIN(37, "gpio35"), 68427aa791dSChristian Marangi PINCTRL_PIN(38, "gpio36"), 68527aa791dSChristian Marangi PINCTRL_PIN(39, "gpio37"), 68627aa791dSChristian Marangi PINCTRL_PIN(40, "gpio38"), 68727aa791dSChristian Marangi PINCTRL_PIN(41, "i2c0_scl"), 68827aa791dSChristian Marangi PINCTRL_PIN(42, "i2c0_sda"), 68927aa791dSChristian Marangi PINCTRL_PIN(43, "i2c1_scl"), 69027aa791dSChristian Marangi PINCTRL_PIN(44, "i2c1_sda"), 69127aa791dSChristian Marangi PINCTRL_PIN(45, "spi_clk"), 69227aa791dSChristian Marangi PINCTRL_PIN(46, "spi_cs"), 69327aa791dSChristian Marangi PINCTRL_PIN(47, "spi_mosi"), 69427aa791dSChristian Marangi PINCTRL_PIN(48, "spi_miso"), 69527aa791dSChristian Marangi PINCTRL_PIN(49, "uart_txd"), 69627aa791dSChristian Marangi PINCTRL_PIN(50, "uart_rxd"), 69727aa791dSChristian Marangi PINCTRL_PIN(51, "pcie_reset0"), 69827aa791dSChristian Marangi PINCTRL_PIN(52, "pcie_reset1"), 69927aa791dSChristian Marangi PINCTRL_PIN(53, "mdc_0"), 70027aa791dSChristian Marangi PINCTRL_PIN(54, "mdio_0"), 70127aa791dSChristian Marangi }; 70227aa791dSChristian Marangi 70327aa791dSChristian Marangi static const int an7583_pon_pins[] = { 15, 16, 17, 18, 19, 20 }; 70427aa791dSChristian Marangi static const int an7583_pon_tod_1pps_pins[] = { 32 }; 70527aa791dSChristian Marangi static const int an7583_gsw_tod_1pps_pins[] = { 32 }; 70627aa791dSChristian Marangi static const int an7583_sipo_pins[] = { 34, 35 }; 70727aa791dSChristian Marangi static const int an7583_sipo_rclk_pins[] = { 34, 35, 33 }; 70827aa791dSChristian Marangi static const int an7583_mdio_pins[] = { 43, 44 }; 70927aa791dSChristian Marangi static const int an7583_uart2_pins[] = { 34, 35 }; 71027aa791dSChristian Marangi static const int an7583_uart2_cts_rts_pins[] = { 32, 33 }; 71127aa791dSChristian Marangi static const int an7583_hsuart_pins[] = { 30, 31 }; 71227aa791dSChristian Marangi static const int an7583_hsuart_cts_rts_pins[] = { 28, 29 }; 71327aa791dSChristian Marangi static const int an7583_npu_uart_pins[] = { 7, 8 }; 71427aa791dSChristian Marangi static const int an7583_uart4_pins[] = { 7, 8 }; 71527aa791dSChristian Marangi static const int an7583_uart5_pins[] = { 23, 24 }; 71627aa791dSChristian Marangi static const int an7583_i2c0_pins[] = { 41, 42 }; 71727aa791dSChristian Marangi static const int an7583_i2c1_pins[] = { 43, 44 }; 71827aa791dSChristian Marangi static const int an7583_jtag_udi_pins[] = { 23, 24, 22, 25, 26 }; 71927aa791dSChristian Marangi static const int an7583_jtag_dfd_pins[] = { 23, 24, 22, 25, 26 }; 72027aa791dSChristian Marangi static const int an7583_pcm1_pins[] = { 10, 11, 12, 13, 14 }; 72127aa791dSChristian Marangi static const int an7583_pcm2_pins[] = { 28, 29, 30, 31, 24 }; 72227aa791dSChristian Marangi static const int an7583_spi_pins[] = { 28, 29, 30, 31 }; 72327aa791dSChristian Marangi static const int an7583_spi_quad_pins[] = { 25, 26 }; 72427aa791dSChristian Marangi static const int an7583_spi_cs1_pins[] = { 27 }; 72527aa791dSChristian Marangi static const int an7583_pcm_spi_pins[] = { 28, 29, 30, 31, 10, 11, 12, 13 }; 72627aa791dSChristian Marangi static const int an7583_pcm_spi_rst_pins[] = { 14 }; 72727aa791dSChristian Marangi static const int an7583_pcm_spi_cs1_pins[] = { 24 }; 72827aa791dSChristian Marangi static const int an7583_emmc_pins[] = { 7, 8, 9, 22, 23, 24, 25, 26, 45, 46, 47 }; 72927aa791dSChristian Marangi static const int an7583_pnand_pins[] = { 7, 8, 9, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 45, 46, 47, 48 }; 73027aa791dSChristian Marangi static const int an7583_gpio0_pins[] = { 2 }; 73127aa791dSChristian Marangi static const int an7583_gpio1_pins[] = { 3 }; 73227aa791dSChristian Marangi static const int an7583_gpio2_pins[] = { 4 }; 73327aa791dSChristian Marangi static const int an7583_gpio3_pins[] = { 5 }; 73427aa791dSChristian Marangi static const int an7583_gpio4_pins[] = { 6 }; 73527aa791dSChristian Marangi static const int an7583_gpio5_pins[] = { 7 }; 73627aa791dSChristian Marangi static const int an7583_gpio6_pins[] = { 8 }; 73727aa791dSChristian Marangi static const int an7583_gpio7_pins[] = { 9 }; 73827aa791dSChristian Marangi static const int an7583_gpio8_pins[] = { 10 }; 73927aa791dSChristian Marangi static const int an7583_gpio9_pins[] = { 11 }; 74027aa791dSChristian Marangi static const int an7583_gpio10_pins[] = { 12 }; 74127aa791dSChristian Marangi static const int an7583_gpio11_pins[] = { 13 }; 74227aa791dSChristian Marangi static const int an7583_gpio12_pins[] = { 14 }; 74327aa791dSChristian Marangi static const int an7583_gpio13_pins[] = { 15 }; 74427aa791dSChristian Marangi static const int an7583_gpio14_pins[] = { 16 }; 74527aa791dSChristian Marangi static const int an7583_gpio15_pins[] = { 17 }; 74627aa791dSChristian Marangi static const int an7583_gpio16_pins[] = { 18 }; 74727aa791dSChristian Marangi static const int an7583_gpio17_pins[] = { 19 }; 74827aa791dSChristian Marangi static const int an7583_gpio18_pins[] = { 20 }; 74927aa791dSChristian Marangi static const int an7583_gpio19_pins[] = { 21 }; 75027aa791dSChristian Marangi static const int an7583_gpio20_pins[] = { 22 }; 751abf92c45SMikhail Kshevetskiy static const int an7583_gpio21_pins[] = { 23 }; 7529ef86358SMikhail Kshevetskiy static const int an7583_gpio22_pins[] = { 24 }; 75327aa791dSChristian Marangi static const int an7583_gpio23_pins[] = { 25 }; 75427aa791dSChristian Marangi static const int an7583_gpio24_pins[] = { 26 }; 75527aa791dSChristian Marangi static const int an7583_gpio25_pins[] = { 27 }; 75627aa791dSChristian Marangi static const int an7583_gpio26_pins[] = { 28 }; 75727aa791dSChristian Marangi static const int an7583_gpio27_pins[] = { 29 }; 75827aa791dSChristian Marangi static const int an7583_gpio28_pins[] = { 30 }; 75927aa791dSChristian Marangi static const int an7583_gpio29_pins[] = { 31 }; 76027aa791dSChristian Marangi static const int an7583_gpio30_pins[] = { 32 }; 76127aa791dSChristian Marangi static const int an7583_gpio31_pins[] = { 33 }; 76281cc2285SMikhail Kshevetskiy static const int an7583_gpio32_pins[] = { 34 }; 76327aa791dSChristian Marangi static const int an7583_gpio33_pins[] = { 35 }; 76427aa791dSChristian Marangi static const int an7583_gpio34_pins[] = { 36 }; 76527aa791dSChristian Marangi static const int an7583_gpio35_pins[] = { 37 }; 76627aa791dSChristian Marangi static const int an7583_gpio36_pins[] = { 38 }; 76727aa791dSChristian Marangi static const int an7583_gpio37_pins[] = { 39 }; 76827aa791dSChristian Marangi static const int an7583_gpio38_pins[] = { 40 }; 76927aa791dSChristian Marangi static const int an7583_gpio39_pins[] = { 41 }; 77027aa791dSChristian Marangi static const int an7583_gpio40_pins[] = { 42 }; 77127aa791dSChristian Marangi static const int an7583_gpio41_pins[] = { 43 }; 77227aa791dSChristian Marangi static const int an7583_gpio42_pins[] = { 44 }; 77327aa791dSChristian Marangi static const int an7583_gpio43_pins[] = { 45 }; 77427aa791dSChristian Marangi static const int an7583_gpio44_pins[] = { 46 }; 77527aa791dSChristian Marangi static const int an7583_gpio45_pins[] = { 47 }; 77627aa791dSChristian Marangi static const int an7583_gpio46_pins[] = { 48 }; 77727aa791dSChristian Marangi static const int an7583_gpio47_pins[] = { 49 }; 77827aa791dSChristian Marangi static const int an7583_gpio48_pins[] = { 50 }; 77927aa791dSChristian Marangi static const int an7583_pcie_reset0_pins[] = { 51 }; 78027aa791dSChristian Marangi static const int an7583_pcie_reset1_pins[] = { 52 }; 78127aa791dSChristian Marangi 78227aa791dSChristian Marangi static const struct pingroup an7583_pinctrl_groups[] = { 78327aa791dSChristian Marangi PINCTRL_PIN_GROUP("pon", an7583_pon), 78427aa791dSChristian Marangi PINCTRL_PIN_GROUP("pon_tod_1pps", an7583_pon_tod_1pps), 78527aa791dSChristian Marangi PINCTRL_PIN_GROUP("gsw_tod_1pps", an7583_gsw_tod_1pps), 78627aa791dSChristian Marangi PINCTRL_PIN_GROUP("sipo", an7583_sipo), 78727aa791dSChristian Marangi PINCTRL_PIN_GROUP("sipo_rclk", an7583_sipo_rclk), 78827aa791dSChristian Marangi PINCTRL_PIN_GROUP("mdio", an7583_mdio), 78927aa791dSChristian Marangi PINCTRL_PIN_GROUP("uart2", an7583_uart2), 79027aa791dSChristian Marangi PINCTRL_PIN_GROUP("uart2_cts_rts", an7583_uart2_cts_rts), 79127aa791dSChristian Marangi PINCTRL_PIN_GROUP("hsuart", an7583_hsuart), 79227aa791dSChristian Marangi PINCTRL_PIN_GROUP("hsuart_cts_rts", an7583_hsuart_cts_rts), 79327aa791dSChristian Marangi PINCTRL_PIN_GROUP("npu_uart", an7583_npu_uart), 79427aa791dSChristian Marangi PINCTRL_PIN_GROUP("uart4", an7583_uart4), 79527aa791dSChristian Marangi PINCTRL_PIN_GROUP("uart5", an7583_uart5), 79627aa791dSChristian Marangi PINCTRL_PIN_GROUP("i2c0", an7583_i2c0), 79727aa791dSChristian Marangi PINCTRL_PIN_GROUP("i2c1", an7583_i2c1), 79827aa791dSChristian Marangi PINCTRL_PIN_GROUP("jtag_udi", an7583_jtag_udi), 79927aa791dSChristian Marangi PINCTRL_PIN_GROUP("jtag_dfd", an7583_jtag_dfd), 80027aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm1", an7583_pcm1), 80127aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm2", an7583_pcm2), 80227aa791dSChristian Marangi PINCTRL_PIN_GROUP("spi", an7583_spi), 80327aa791dSChristian Marangi PINCTRL_PIN_GROUP("spi_quad", an7583_spi_quad), 80427aa791dSChristian Marangi PINCTRL_PIN_GROUP("spi_cs1", an7583_spi_cs1), 80527aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi", an7583_pcm_spi), 80627aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi_rst", an7583_pcm_spi_rst), 80727aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcm_spi_cs1", an7583_pcm_spi_cs1), 80827aa791dSChristian Marangi PINCTRL_PIN_GROUP("emmc", an7583_emmc), 80927aa791dSChristian Marangi PINCTRL_PIN_GROUP("pnand", an7583_pnand), 81027aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio0", an7583_gpio0), 81127aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio1", an7583_gpio1), 81227aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio2", an7583_gpio2), 81327aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio3", an7583_gpio3), 81427aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio4", an7583_gpio4), 81527aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio5", an7583_gpio5), 81627aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio6", an7583_gpio6), 81727aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio7", an7583_gpio7), 81827aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio8", an7583_gpio8), 81927aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio9", an7583_gpio9), 82027aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio10", an7583_gpio10), 82127aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio11", an7583_gpio11), 82227aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio12", an7583_gpio12), 82327aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio13", an7583_gpio13), 82427aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio14", an7583_gpio14), 82527aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio15", an7583_gpio15), 82627aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio16", an7583_gpio16), 82727aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio17", an7583_gpio17), 82827aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio18", an7583_gpio18), 82927aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio19", an7583_gpio19), 83027aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio20", an7583_gpio20), 83127aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio21", an7583_gpio21), 8329ef86358SMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio22", an7583_gpio22), 83327aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio23", an7583_gpio23), 83427aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio24", an7583_gpio24), 83527aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio25", an7583_gpio25), 83627aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio26", an7583_gpio26), 83727aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio27", an7583_gpio27), 83827aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio28", an7583_gpio28), 83927aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio29", an7583_gpio29), 84027aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio30", an7583_gpio30), 84127aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio31", an7583_gpio31), 84281cc2285SMikhail Kshevetskiy PINCTRL_PIN_GROUP("gpio32", an7583_gpio32), 84327aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio33", an7583_gpio33), 84427aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio34", an7583_gpio34), 84527aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio35", an7583_gpio35), 84627aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio36", an7583_gpio36), 84727aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio37", an7583_gpio37), 84827aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio38", an7583_gpio38), 84927aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio39", an7583_gpio39), 85027aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio40", an7583_gpio40), 85127aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio41", an7583_gpio41), 85227aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio42", an7583_gpio42), 85327aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio43", an7583_gpio43), 85427aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio44", an7583_gpio44), 85527aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio45", an7583_gpio45), 85627aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio46", an7583_gpio46), 85727aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio47", an7583_gpio47), 85827aa791dSChristian Marangi PINCTRL_PIN_GROUP("gpio48", an7583_gpio48), 85927aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcie_reset0", an7583_pcie_reset0), 86027aa791dSChristian Marangi PINCTRL_PIN_GROUP("pcie_reset1", an7583_pcie_reset1), 86127aa791dSChristian Marangi }; 86227aa791dSChristian Marangi 86327aa791dSChristian Marangi static const char *const pon_groups[] = { "pon" }; 86427aa791dSChristian Marangi static const char *const tod_1pps_groups[] = { "pon_tod_1pps", "gsw_tod_1pps" }; 86527aa791dSChristian Marangi static const char *const sipo_groups[] = { "sipo", "sipo_rclk" }; 86627aa791dSChristian Marangi static const char *const mdio_groups[] = { "mdio" }; 86727aa791dSChristian Marangi static const char *const an7583_mdio_groups[] = { "mdio" }; 86827aa791dSChristian Marangi static const char *const uart_groups[] = { "uart2", "uart2_cts_rts", "hsuart", 86927aa791dSChristian Marangi "hsuart_cts_rts", "uart4", 87027aa791dSChristian Marangi "uart5" }; 87127aa791dSChristian Marangi static const char *const i2c_groups[] = { "i2c1" }; 87227aa791dSChristian Marangi static const char *const jtag_groups[] = { "jtag_udi", "jtag_dfd" }; 87327aa791dSChristian Marangi static const char *const pcm_groups[] = { "pcm1", "pcm2" }; 87427aa791dSChristian Marangi static const char *const spi_groups[] = { "spi_quad", "spi_cs1" }; 87527aa791dSChristian Marangi static const char *const pcm_spi_groups[] = { "pcm_spi", "pcm_spi_int", 87627aa791dSChristian Marangi "pcm_spi_rst", "pcm_spi_cs1", 87727aa791dSChristian Marangi "pcm_spi_cs2_p156", 87827aa791dSChristian Marangi "pcm_spi_cs2_p128", 87927aa791dSChristian Marangi "pcm_spi_cs3", "pcm_spi_cs4" }; 880*7b87a686SMikhail Kshevetskiy static const char *const an7583_pcm_spi_groups[] = { "pcm_spi", 881*7b87a686SMikhail Kshevetskiy "pcm_spi_rst", "pcm_spi_cs1" }; 88227aa791dSChristian Marangi static const char *const i2s_groups[] = { "i2s" }; 88327aa791dSChristian Marangi static const char *const emmc_groups[] = { "emmc" }; 88427aa791dSChristian Marangi static const char *const pnand_groups[] = { "pnand" }; 88527aa791dSChristian Marangi static const char *const pcie_reset_groups[] = { "pcie_reset0", "pcie_reset1", 88627aa791dSChristian Marangi "pcie_reset2" }; 88727aa791dSChristian Marangi static const char *const an7583_pcie_reset_groups[] = { "pcie_reset0", "pcie_reset1" }; 88827aa791dSChristian Marangi static const char *const pwm_groups[] = { "gpio0", "gpio1", 88927aa791dSChristian Marangi "gpio2", "gpio3", 89027aa791dSChristian Marangi "gpio4", "gpio5", 89127aa791dSChristian Marangi "gpio6", "gpio7", 89227aa791dSChristian Marangi "gpio8", "gpio9", 89327aa791dSChristian Marangi "gpio10", "gpio11", 89427aa791dSChristian Marangi "gpio12", "gpio13", 89527aa791dSChristian Marangi "gpio14", "gpio15", 89627aa791dSChristian Marangi "gpio16", "gpio17", 89727aa791dSChristian Marangi "gpio18", "gpio19", 89827aa791dSChristian Marangi "gpio20", "gpio21", 89927aa791dSChristian Marangi "gpio22", "gpio23", 90027aa791dSChristian Marangi "gpio24", "gpio25", 90127aa791dSChristian Marangi "gpio26", "gpio27", 90227aa791dSChristian Marangi "gpio28", "gpio29", 90327aa791dSChristian Marangi "gpio30", "gpio31", 90427aa791dSChristian Marangi "gpio36", "gpio37", 90527aa791dSChristian Marangi "gpio38", "gpio39", 90627aa791dSChristian Marangi "gpio40", "gpio41", 90727aa791dSChristian Marangi "gpio42", "gpio43", 90827aa791dSChristian Marangi "gpio44", "gpio45", 90908a5af46SMikhail Kshevetskiy "gpio46" }; 91008a5af46SMikhail Kshevetskiy static const char *const an7583_pwm_groups[] = { "gpio0", "gpio1", 91108a5af46SMikhail Kshevetskiy "gpio2", "gpio3", 91208a5af46SMikhail Kshevetskiy "gpio4", "gpio5", 91308a5af46SMikhail Kshevetskiy "gpio6", "gpio7", 91408a5af46SMikhail Kshevetskiy "gpio8", "gpio9", 91508a5af46SMikhail Kshevetskiy "gpio10", "gpio11", 91608a5af46SMikhail Kshevetskiy "gpio12", "gpio13", 91708a5af46SMikhail Kshevetskiy "gpio14", "gpio15", 91808a5af46SMikhail Kshevetskiy "gpio16", "gpio17", 91908a5af46SMikhail Kshevetskiy "gpio18", "gpio19", 92008a5af46SMikhail Kshevetskiy "gpio20", "gpio21", 92108a5af46SMikhail Kshevetskiy "gpio22", "gpio23", 92208a5af46SMikhail Kshevetskiy "gpio24", "gpio25", 92308a5af46SMikhail Kshevetskiy "gpio26", "gpio27", 92408a5af46SMikhail Kshevetskiy "gpio28", "gpio29", 92508a5af46SMikhail Kshevetskiy "gpio30", "gpio31", 92608a5af46SMikhail Kshevetskiy "gpio36", "gpio37", 92708a5af46SMikhail Kshevetskiy "gpio38", "gpio39", 92808a5af46SMikhail Kshevetskiy "gpio40", "gpio41", 92908a5af46SMikhail Kshevetskiy "gpio42", "gpio43", 93008a5af46SMikhail Kshevetskiy "gpio44", "gpio45", 93108a5af46SMikhail Kshevetskiy "gpio46", "gpio47", 93208a5af46SMikhail Kshevetskiy "gpio48" }; 93327aa791dSChristian Marangi static const char *const phy1_led0_groups[] = { "gpio33", "gpio34", 93427aa791dSChristian Marangi "gpio35", "gpio42" }; 93527aa791dSChristian Marangi static const char *const phy2_led0_groups[] = { "gpio33", "gpio34", 93627aa791dSChristian Marangi "gpio35", "gpio42" }; 93727aa791dSChristian Marangi static const char *const phy3_led0_groups[] = { "gpio33", "gpio34", 93827aa791dSChristian Marangi "gpio35", "gpio42" }; 93927aa791dSChristian Marangi static const char *const phy4_led0_groups[] = { "gpio33", "gpio34", 94027aa791dSChristian Marangi "gpio35", "gpio42" }; 94127aa791dSChristian Marangi static const char *const phy1_led1_groups[] = { "gpio43", "gpio44", 94227aa791dSChristian Marangi "gpio45", "gpio46" }; 94327aa791dSChristian Marangi static const char *const phy2_led1_groups[] = { "gpio43", "gpio44", 94427aa791dSChristian Marangi "gpio45", "gpio46" }; 94527aa791dSChristian Marangi static const char *const phy3_led1_groups[] = { "gpio43", "gpio44", 94627aa791dSChristian Marangi "gpio45", "gpio46" }; 94727aa791dSChristian Marangi static const char *const phy4_led1_groups[] = { "gpio43", "gpio44", 94827aa791dSChristian Marangi "gpio45", "gpio46" }; 94927aa791dSChristian Marangi static const char *const an7583_phy1_led0_groups[] = { "gpio1", "gpio2", 95027aa791dSChristian Marangi "gpio3", "gpio4" }; 95127aa791dSChristian Marangi static const char *const an7583_phy2_led0_groups[] = { "gpio1", "gpio2", 95227aa791dSChristian Marangi "gpio3", "gpio4" }; 95327aa791dSChristian Marangi static const char *const an7583_phy3_led0_groups[] = { "gpio1", "gpio2", 95427aa791dSChristian Marangi "gpio3", "gpio4" }; 95527aa791dSChristian Marangi static const char *const an7583_phy4_led0_groups[] = { "gpio1", "gpio2", 95627aa791dSChristian Marangi "gpio3", "gpio4" }; 95727aa791dSChristian Marangi static const char *const an7583_phy1_led1_groups[] = { "gpio8", "gpio9", 95827aa791dSChristian Marangi "gpio10", "gpio11" }; 95927aa791dSChristian Marangi static const char *const an7583_phy2_led1_groups[] = { "gpio8", "gpio9", 96027aa791dSChristian Marangi "gpio10", "gpio11" }; 96127aa791dSChristian Marangi static const char *const an7583_phy3_led1_groups[] = { "gpio8", "gpio9", 96227aa791dSChristian Marangi "gpio10", "gpio11" }; 96327aa791dSChristian Marangi static const char *const an7583_phy4_led1_groups[] = { "gpio8", "gpio9", 96427aa791dSChristian Marangi "gpio10", "gpio11" }; 96527aa791dSChristian Marangi 96627aa791dSChristian Marangi static const struct airoha_pinctrl_func_group pon_func_group[] = { 96727aa791dSChristian Marangi { 96827aa791dSChristian Marangi .name = "pon", 96927aa791dSChristian Marangi .regmap[0] = { 97027aa791dSChristian Marangi AIROHA_FUNC_MUX, 97127aa791dSChristian Marangi REG_GPIO_PON_MODE, 97227aa791dSChristian Marangi GPIO_PON_MODE_MASK, 97327aa791dSChristian Marangi GPIO_PON_MODE_MASK 97427aa791dSChristian Marangi }, 97527aa791dSChristian Marangi .regmap_size = 1, 97627aa791dSChristian Marangi }, 97727aa791dSChristian Marangi }; 97827aa791dSChristian Marangi 97927aa791dSChristian Marangi static const struct airoha_pinctrl_func_group tod_1pps_func_group[] = { 98027aa791dSChristian Marangi { 98127aa791dSChristian Marangi .name = "pon_tod_1pps", 98227aa791dSChristian Marangi .regmap[0] = { 98327aa791dSChristian Marangi AIROHA_FUNC_MUX, 98427aa791dSChristian Marangi REG_GPIO_2ND_I2C_MODE, 98527aa791dSChristian Marangi PON_TOD_1PPS_MODE_MASK, 98627aa791dSChristian Marangi PON_TOD_1PPS_MODE_MASK 98727aa791dSChristian Marangi }, 98827aa791dSChristian Marangi .regmap_size = 1, 98927aa791dSChristian Marangi }, { 99027aa791dSChristian Marangi .name = "gsw_tod_1pps", 99127aa791dSChristian Marangi .regmap[0] = { 99227aa791dSChristian Marangi AIROHA_FUNC_MUX, 99327aa791dSChristian Marangi REG_GPIO_2ND_I2C_MODE, 99427aa791dSChristian Marangi GSW_TOD_1PPS_MODE_MASK, 99527aa791dSChristian Marangi GSW_TOD_1PPS_MODE_MASK 99627aa791dSChristian Marangi }, 99727aa791dSChristian Marangi .regmap_size = 1, 99827aa791dSChristian Marangi }, 99927aa791dSChristian Marangi }; 100027aa791dSChristian Marangi 100127aa791dSChristian Marangi static const struct airoha_pinctrl_func_group sipo_func_group[] = { 100227aa791dSChristian Marangi { 100327aa791dSChristian Marangi .name = "sipo", 100427aa791dSChristian Marangi .regmap[0] = { 100527aa791dSChristian Marangi AIROHA_FUNC_MUX, 100627aa791dSChristian Marangi REG_GPIO_PON_MODE, 100727aa791dSChristian Marangi GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK, 100827aa791dSChristian Marangi GPIO_SIPO_MODE_MASK 100927aa791dSChristian Marangi }, 101027aa791dSChristian Marangi .regmap_size = 1, 101127aa791dSChristian Marangi }, { 101227aa791dSChristian Marangi .name = "sipo_rclk", 101327aa791dSChristian Marangi .regmap[0] = { 101427aa791dSChristian Marangi AIROHA_FUNC_MUX, 101527aa791dSChristian Marangi REG_GPIO_PON_MODE, 101627aa791dSChristian Marangi GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK, 101727aa791dSChristian Marangi GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK 101827aa791dSChristian Marangi }, 101927aa791dSChristian Marangi .regmap_size = 1, 102027aa791dSChristian Marangi }, 102127aa791dSChristian Marangi }; 102227aa791dSChristian Marangi 102327aa791dSChristian Marangi static const struct airoha_pinctrl_func_group mdio_func_group[] = { 102427aa791dSChristian Marangi { 102527aa791dSChristian Marangi .name = "mdio", 102627aa791dSChristian Marangi .regmap[0] = { 102727aa791dSChristian Marangi AIROHA_FUNC_MUX, 102827aa791dSChristian Marangi REG_GPIO_2ND_I2C_MODE, 102927aa791dSChristian Marangi GPIO_MDC_IO_MASTER_MODE_MODE, 103027aa791dSChristian Marangi GPIO_MDC_IO_MASTER_MODE_MODE 103127aa791dSChristian Marangi }, 103227aa791dSChristian Marangi .regmap[1] = { 103327aa791dSChristian Marangi AIROHA_FUNC_MUX, 103427aa791dSChristian Marangi REG_FORCE_GPIO_EN, 103527aa791dSChristian Marangi FORCE_GPIO_EN(1) | FORCE_GPIO_EN(2), 103627aa791dSChristian Marangi FORCE_GPIO_EN(1) | FORCE_GPIO_EN(2) 103727aa791dSChristian Marangi }, 103827aa791dSChristian Marangi .regmap_size = 2, 103927aa791dSChristian Marangi }, 104027aa791dSChristian Marangi }; 104127aa791dSChristian Marangi 104227aa791dSChristian Marangi static const struct airoha_pinctrl_func_group an7583_mdio_func_group[] = { 104327aa791dSChristian Marangi { 104427aa791dSChristian Marangi .name = "mdio", 104527aa791dSChristian Marangi .regmap[0] = { 104627aa791dSChristian Marangi AIROHA_FUNC_MUX, 104727aa791dSChristian Marangi REG_GPIO_PON_MODE, 104827aa791dSChristian Marangi GPIO_SGMII_MDIO_MODE_MASK, 104927aa791dSChristian Marangi GPIO_SGMII_MDIO_MODE_MASK 105027aa791dSChristian Marangi }, 105127aa791dSChristian Marangi .regmap[1] = { 105227aa791dSChristian Marangi AIROHA_FUNC_MUX, 105327aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 105427aa791dSChristian Marangi GPIO_MDC_IO_MASTER_MODE_MODE, 105527aa791dSChristian Marangi GPIO_MDC_IO_MASTER_MODE_MODE 105627aa791dSChristian Marangi }, 105727aa791dSChristian Marangi .regmap_size = 2, 105827aa791dSChristian Marangi }, 105927aa791dSChristian Marangi }; 106027aa791dSChristian Marangi 106127aa791dSChristian Marangi static const struct airoha_pinctrl_func_group uart_func_group[] = { 106227aa791dSChristian Marangi { 106327aa791dSChristian Marangi .name = "uart2", 106427aa791dSChristian Marangi .regmap[0] = { 106527aa791dSChristian Marangi AIROHA_FUNC_MUX, 106627aa791dSChristian Marangi REG_GPIO_PON_MODE, 106727aa791dSChristian Marangi GPIO_UART2_MODE_MASK, 106827aa791dSChristian Marangi GPIO_UART2_MODE_MASK 106927aa791dSChristian Marangi }, 107027aa791dSChristian Marangi .regmap_size = 1, 107127aa791dSChristian Marangi }, { 107227aa791dSChristian Marangi .name = "uart2_cts_rts", 107327aa791dSChristian Marangi .regmap[0] = { 107427aa791dSChristian Marangi AIROHA_FUNC_MUX, 107527aa791dSChristian Marangi REG_GPIO_PON_MODE, 107627aa791dSChristian Marangi GPIO_UART2_MODE_MASK | GPIO_UART2_CTS_RTS_MODE_MASK, 107727aa791dSChristian Marangi GPIO_UART2_MODE_MASK | GPIO_UART2_CTS_RTS_MODE_MASK 107827aa791dSChristian Marangi }, 107927aa791dSChristian Marangi .regmap_size = 1, 108027aa791dSChristian Marangi }, { 108127aa791dSChristian Marangi .name = "hsuart", 108227aa791dSChristian Marangi .regmap[0] = { 108327aa791dSChristian Marangi AIROHA_FUNC_MUX, 108427aa791dSChristian Marangi REG_GPIO_PON_MODE, 108527aa791dSChristian Marangi GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK, 108627aa791dSChristian Marangi GPIO_HSUART_MODE_MASK 108727aa791dSChristian Marangi }, 108827aa791dSChristian Marangi .regmap_size = 1, 108927aa791dSChristian Marangi }, 109027aa791dSChristian Marangi { 109127aa791dSChristian Marangi .name = "hsuart_cts_rts", 109227aa791dSChristian Marangi .regmap[0] = { 109327aa791dSChristian Marangi AIROHA_FUNC_MUX, 109427aa791dSChristian Marangi REG_GPIO_PON_MODE, 109527aa791dSChristian Marangi GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK, 109627aa791dSChristian Marangi GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK 109727aa791dSChristian Marangi }, 109827aa791dSChristian Marangi .regmap_size = 1, 109927aa791dSChristian Marangi }, { 110027aa791dSChristian Marangi .name = "uart4", 110127aa791dSChristian Marangi .regmap[0] = { 110227aa791dSChristian Marangi AIROHA_FUNC_MUX, 110327aa791dSChristian Marangi REG_GPIO_PON_MODE, 110427aa791dSChristian Marangi GPIO_UART4_MODE_MASK, 110527aa791dSChristian Marangi GPIO_UART4_MODE_MASK 110627aa791dSChristian Marangi }, 110727aa791dSChristian Marangi .regmap_size = 1, 110827aa791dSChristian Marangi }, { 110927aa791dSChristian Marangi .name = "uart5", 111027aa791dSChristian Marangi .regmap[0] = { 111127aa791dSChristian Marangi AIROHA_FUNC_MUX, 111227aa791dSChristian Marangi REG_GPIO_PON_MODE, 111327aa791dSChristian Marangi GPIO_UART5_MODE_MASK, 111427aa791dSChristian Marangi GPIO_UART5_MODE_MASK 111527aa791dSChristian Marangi }, 111627aa791dSChristian Marangi .regmap_size = 1, 111727aa791dSChristian Marangi }, 111827aa791dSChristian Marangi }; 111927aa791dSChristian Marangi 112027aa791dSChristian Marangi static const struct airoha_pinctrl_func_group i2c_func_group[] = { 112127aa791dSChristian Marangi { 112227aa791dSChristian Marangi .name = "i2c1", 112327aa791dSChristian Marangi .regmap[0] = { 112427aa791dSChristian Marangi AIROHA_FUNC_MUX, 112527aa791dSChristian Marangi REG_GPIO_2ND_I2C_MODE, 112627aa791dSChristian Marangi GPIO_2ND_I2C_MODE_MASK, 112727aa791dSChristian Marangi GPIO_2ND_I2C_MODE_MASK 112827aa791dSChristian Marangi }, 112927aa791dSChristian Marangi .regmap_size = 1, 113027aa791dSChristian Marangi }, 113127aa791dSChristian Marangi }; 113227aa791dSChristian Marangi 113327aa791dSChristian Marangi static const struct airoha_pinctrl_func_group jtag_func_group[] = { 113427aa791dSChristian Marangi { 113527aa791dSChristian Marangi .name = "jtag_udi", 113627aa791dSChristian Marangi .regmap[0] = { 113727aa791dSChristian Marangi AIROHA_FUNC_MUX, 113827aa791dSChristian Marangi REG_NPU_UART_EN, 113927aa791dSChristian Marangi JTAG_UDI_EN_MASK, 114027aa791dSChristian Marangi JTAG_UDI_EN_MASK 114127aa791dSChristian Marangi }, 114227aa791dSChristian Marangi .regmap_size = 1, 114327aa791dSChristian Marangi }, { 114427aa791dSChristian Marangi .name = "jtag_dfd", 114527aa791dSChristian Marangi .regmap[0] = { 114627aa791dSChristian Marangi AIROHA_FUNC_MUX, 114727aa791dSChristian Marangi REG_NPU_UART_EN, 114827aa791dSChristian Marangi JTAG_DFD_EN_MASK, 114927aa791dSChristian Marangi JTAG_DFD_EN_MASK 115027aa791dSChristian Marangi }, 115127aa791dSChristian Marangi .regmap_size = 1, 115227aa791dSChristian Marangi }, 115327aa791dSChristian Marangi }; 115427aa791dSChristian Marangi 115527aa791dSChristian Marangi static const struct airoha_pinctrl_func_group pcm_func_group[] = { 115627aa791dSChristian Marangi { 115727aa791dSChristian Marangi .name = "pcm1", 115827aa791dSChristian Marangi .regmap[0] = { 115927aa791dSChristian Marangi AIROHA_FUNC_MUX, 116027aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 116127aa791dSChristian Marangi GPIO_PCM1_MODE_MASK, 116227aa791dSChristian Marangi GPIO_PCM1_MODE_MASK 116327aa791dSChristian Marangi }, 116427aa791dSChristian Marangi .regmap_size = 1, 116527aa791dSChristian Marangi }, { 116627aa791dSChristian Marangi .name = "pcm2", 116727aa791dSChristian Marangi .regmap[0] = { 116827aa791dSChristian Marangi AIROHA_FUNC_MUX, 116927aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 117027aa791dSChristian Marangi GPIO_PCM2_MODE_MASK, 117127aa791dSChristian Marangi GPIO_PCM2_MODE_MASK 117227aa791dSChristian Marangi }, 117327aa791dSChristian Marangi .regmap_size = 1, 117427aa791dSChristian Marangi }, 117527aa791dSChristian Marangi }; 117627aa791dSChristian Marangi 117727aa791dSChristian Marangi static const struct airoha_pinctrl_func_group spi_func_group[] = { 117827aa791dSChristian Marangi { 117927aa791dSChristian Marangi .name = "spi_quad", 118027aa791dSChristian Marangi .regmap[0] = { 118127aa791dSChristian Marangi AIROHA_FUNC_MUX, 118227aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 118327aa791dSChristian Marangi GPIO_SPI_QUAD_MODE_MASK, 118427aa791dSChristian Marangi GPIO_SPI_QUAD_MODE_MASK 118527aa791dSChristian Marangi }, 118627aa791dSChristian Marangi .regmap_size = 1, 118727aa791dSChristian Marangi }, { 118827aa791dSChristian Marangi .name = "spi_cs1", 118927aa791dSChristian Marangi .regmap[0] = { 119027aa791dSChristian Marangi AIROHA_FUNC_MUX, 119127aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 119227aa791dSChristian Marangi GPIO_SPI_CS1_MODE_MASK, 119327aa791dSChristian Marangi GPIO_SPI_CS1_MODE_MASK 119427aa791dSChristian Marangi }, 119527aa791dSChristian Marangi .regmap_size = 1, 119627aa791dSChristian Marangi }, { 119727aa791dSChristian Marangi .name = "spi_cs2", 119827aa791dSChristian Marangi .regmap[0] = { 119927aa791dSChristian Marangi AIROHA_FUNC_MUX, 120027aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 120127aa791dSChristian Marangi GPIO_SPI_CS2_MODE_MASK, 120227aa791dSChristian Marangi GPIO_SPI_CS2_MODE_MASK 120327aa791dSChristian Marangi }, 120427aa791dSChristian Marangi .regmap_size = 1, 120527aa791dSChristian Marangi }, { 120627aa791dSChristian Marangi .name = "spi_cs3", 120727aa791dSChristian Marangi .regmap[0] = { 120827aa791dSChristian Marangi AIROHA_FUNC_MUX, 120927aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 121027aa791dSChristian Marangi GPIO_SPI_CS3_MODE_MASK, 121127aa791dSChristian Marangi GPIO_SPI_CS3_MODE_MASK 121227aa791dSChristian Marangi }, 121327aa791dSChristian Marangi .regmap_size = 1, 121427aa791dSChristian Marangi }, { 121527aa791dSChristian Marangi .name = "spi_cs4", 121627aa791dSChristian Marangi .regmap[0] = { 121727aa791dSChristian Marangi AIROHA_FUNC_MUX, 121827aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 121927aa791dSChristian Marangi GPIO_SPI_CS4_MODE_MASK, 122027aa791dSChristian Marangi GPIO_SPI_CS4_MODE_MASK 122127aa791dSChristian Marangi }, 122227aa791dSChristian Marangi .regmap_size = 1, 122327aa791dSChristian Marangi }, 122427aa791dSChristian Marangi }; 122527aa791dSChristian Marangi 122627aa791dSChristian Marangi static const struct airoha_pinctrl_func_group pcm_spi_func_group[] = { 122727aa791dSChristian Marangi { 122827aa791dSChristian Marangi .name = "pcm_spi", 122927aa791dSChristian Marangi .regmap[0] = { 123027aa791dSChristian Marangi AIROHA_FUNC_MUX, 123127aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 123227aa791dSChristian Marangi GPIO_PCM_SPI_MODE_MASK, 123327aa791dSChristian Marangi GPIO_PCM_SPI_MODE_MASK 123427aa791dSChristian Marangi }, 123527aa791dSChristian Marangi .regmap_size = 1, 123627aa791dSChristian Marangi }, { 123727aa791dSChristian Marangi .name = "pcm_spi_int", 123827aa791dSChristian Marangi .regmap[0] = { 123927aa791dSChristian Marangi AIROHA_FUNC_MUX, 124027aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 124127aa791dSChristian Marangi GPIO_PCM_INT_MODE_MASK, 124227aa791dSChristian Marangi GPIO_PCM_INT_MODE_MASK 124327aa791dSChristian Marangi }, 124427aa791dSChristian Marangi .regmap_size = 1, 124527aa791dSChristian Marangi }, { 124627aa791dSChristian Marangi .name = "pcm_spi_rst", 124727aa791dSChristian Marangi .regmap[0] = { 124827aa791dSChristian Marangi AIROHA_FUNC_MUX, 124927aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 125027aa791dSChristian Marangi GPIO_PCM_RESET_MODE_MASK, 125127aa791dSChristian Marangi GPIO_PCM_RESET_MODE_MASK 125227aa791dSChristian Marangi }, 125327aa791dSChristian Marangi .regmap_size = 1, 125427aa791dSChristian Marangi }, { 125527aa791dSChristian Marangi .name = "pcm_spi_cs1", 125627aa791dSChristian Marangi .regmap[0] = { 125727aa791dSChristian Marangi AIROHA_FUNC_MUX, 125827aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 125927aa791dSChristian Marangi GPIO_PCM_SPI_CS1_MODE_MASK, 126027aa791dSChristian Marangi GPIO_PCM_SPI_CS1_MODE_MASK 126127aa791dSChristian Marangi }, 126227aa791dSChristian Marangi .regmap_size = 1, 126327aa791dSChristian Marangi }, { 126427aa791dSChristian Marangi .name = "pcm_spi_cs2_p128", 126527aa791dSChristian Marangi .regmap[0] = { 126627aa791dSChristian Marangi AIROHA_FUNC_MUX, 126727aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 126827aa791dSChristian Marangi GPIO_PCM_SPI_CS2_MODE_P128_MASK, 126927aa791dSChristian Marangi GPIO_PCM_SPI_CS2_MODE_P128_MASK 127027aa791dSChristian Marangi }, 127127aa791dSChristian Marangi .regmap_size = 1, 127227aa791dSChristian Marangi }, { 127327aa791dSChristian Marangi .name = "pcm_spi_cs2_p156", 127427aa791dSChristian Marangi .regmap[0] = { 127527aa791dSChristian Marangi AIROHA_FUNC_MUX, 127627aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 127727aa791dSChristian Marangi GPIO_PCM_SPI_CS2_MODE_P156_MASK, 127827aa791dSChristian Marangi GPIO_PCM_SPI_CS2_MODE_P156_MASK 127927aa791dSChristian Marangi }, 128027aa791dSChristian Marangi .regmap_size = 1, 128127aa791dSChristian Marangi }, { 128227aa791dSChristian Marangi .name = "pcm_spi_cs3", 128327aa791dSChristian Marangi .regmap[0] = { 128427aa791dSChristian Marangi AIROHA_FUNC_MUX, 128527aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 128627aa791dSChristian Marangi GPIO_PCM_SPI_CS3_MODE_MASK, 128727aa791dSChristian Marangi GPIO_PCM_SPI_CS3_MODE_MASK 128827aa791dSChristian Marangi }, 128927aa791dSChristian Marangi .regmap_size = 1, 129027aa791dSChristian Marangi }, { 129127aa791dSChristian Marangi .name = "pcm_spi_cs4", 129227aa791dSChristian Marangi .regmap[0] = { 129327aa791dSChristian Marangi AIROHA_FUNC_MUX, 129427aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 129527aa791dSChristian Marangi GPIO_PCM_SPI_CS4_MODE_MASK, 129627aa791dSChristian Marangi GPIO_PCM_SPI_CS4_MODE_MASK 129727aa791dSChristian Marangi }, 129827aa791dSChristian Marangi .regmap_size = 1, 129927aa791dSChristian Marangi }, 130027aa791dSChristian Marangi }; 130127aa791dSChristian Marangi 130227aa791dSChristian Marangi static const struct airoha_pinctrl_func_group an7583_pcm_spi_func_group[] = { 130327aa791dSChristian Marangi { 130427aa791dSChristian Marangi .name = "pcm_spi", 130527aa791dSChristian Marangi .regmap[0] = { 130627aa791dSChristian Marangi AIROHA_FUNC_MUX, 130727aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 130827aa791dSChristian Marangi GPIO_PCM_SPI_MODE_MASK, 130927aa791dSChristian Marangi GPIO_PCM_SPI_MODE_MASK 131027aa791dSChristian Marangi }, 131127aa791dSChristian Marangi .regmap_size = 1, 131227aa791dSChristian Marangi }, { 131327aa791dSChristian Marangi .name = "pcm_spi_int", 131427aa791dSChristian Marangi .regmap[0] = { 131527aa791dSChristian Marangi AIROHA_FUNC_MUX, 131627aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 131727aa791dSChristian Marangi GPIO_PCM_INT_MODE_MASK, 131827aa791dSChristian Marangi GPIO_PCM_INT_MODE_MASK 131927aa791dSChristian Marangi }, 132027aa791dSChristian Marangi .regmap_size = 1, 132127aa791dSChristian Marangi }, { 132227aa791dSChristian Marangi .name = "pcm_spi_rst", 132327aa791dSChristian Marangi .regmap[0] = { 132427aa791dSChristian Marangi AIROHA_FUNC_MUX, 132527aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 132627aa791dSChristian Marangi GPIO_PCM_RESET_MODE_MASK, 132727aa791dSChristian Marangi GPIO_PCM_RESET_MODE_MASK 132827aa791dSChristian Marangi }, 132927aa791dSChristian Marangi .regmap_size = 1, 133027aa791dSChristian Marangi }, { 133127aa791dSChristian Marangi .name = "pcm_spi_cs1", 133227aa791dSChristian Marangi .regmap[0] = { 133327aa791dSChristian Marangi AIROHA_FUNC_MUX, 133427aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 133527aa791dSChristian Marangi GPIO_PCM_SPI_CS1_MODE_MASK, 133627aa791dSChristian Marangi GPIO_PCM_SPI_CS1_MODE_MASK 133727aa791dSChristian Marangi }, 133827aa791dSChristian Marangi .regmap_size = 1, 133927aa791dSChristian Marangi }, { 134027aa791dSChristian Marangi .name = "pcm_spi_cs2", 134127aa791dSChristian Marangi .regmap[0] = { 134227aa791dSChristian Marangi AIROHA_FUNC_MUX, 134327aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 134427aa791dSChristian Marangi AN7583_GPIO_PCM_SPI_CS2_MODE_MASK, 134527aa791dSChristian Marangi AN7583_GPIO_PCM_SPI_CS2_MODE_MASK 134627aa791dSChristian Marangi }, 134727aa791dSChristian Marangi .regmap_size = 1, 134827aa791dSChristian Marangi }, { 134927aa791dSChristian Marangi .name = "pcm_spi_cs3", 135027aa791dSChristian Marangi .regmap[0] = { 135127aa791dSChristian Marangi AIROHA_FUNC_MUX, 135227aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 135327aa791dSChristian Marangi GPIO_PCM_SPI_CS3_MODE_MASK, 135427aa791dSChristian Marangi GPIO_PCM_SPI_CS3_MODE_MASK 135527aa791dSChristian Marangi }, 135627aa791dSChristian Marangi .regmap_size = 1, 135727aa791dSChristian Marangi }, { 135827aa791dSChristian Marangi .name = "pcm_spi_cs4", 135927aa791dSChristian Marangi .regmap[0] = { 136027aa791dSChristian Marangi AIROHA_FUNC_MUX, 136127aa791dSChristian Marangi REG_GPIO_SPI_CS1_MODE, 136227aa791dSChristian Marangi GPIO_PCM_SPI_CS4_MODE_MASK, 136327aa791dSChristian Marangi GPIO_PCM_SPI_CS4_MODE_MASK 136427aa791dSChristian Marangi }, 136527aa791dSChristian Marangi .regmap_size = 1, 136627aa791dSChristian Marangi }, 136727aa791dSChristian Marangi }; 136827aa791dSChristian Marangi 136927aa791dSChristian Marangi static const struct airoha_pinctrl_func_group i2s_func_group[] = { 137027aa791dSChristian Marangi { 137127aa791dSChristian Marangi .name = "i2s", 137227aa791dSChristian Marangi .regmap[0] = { 137327aa791dSChristian Marangi AIROHA_FUNC_MUX, 137427aa791dSChristian Marangi REG_GPIO_2ND_I2C_MODE, 137527aa791dSChristian Marangi GPIO_I2S_MODE_MASK, 137627aa791dSChristian Marangi GPIO_I2S_MODE_MASK 137727aa791dSChristian Marangi }, 137827aa791dSChristian Marangi .regmap_size = 1, 137927aa791dSChristian Marangi }, 138027aa791dSChristian Marangi }; 138127aa791dSChristian Marangi 138227aa791dSChristian Marangi static const struct airoha_pinctrl_func_group emmc_func_group[] = { 138327aa791dSChristian Marangi { 138427aa791dSChristian Marangi .name = "emmc", 138527aa791dSChristian Marangi .regmap[0] = { 138627aa791dSChristian Marangi AIROHA_FUNC_MUX, 138727aa791dSChristian Marangi REG_GPIO_PON_MODE, 138827aa791dSChristian Marangi GPIO_EMMC_MODE_MASK, 138927aa791dSChristian Marangi GPIO_EMMC_MODE_MASK 139027aa791dSChristian Marangi }, 139127aa791dSChristian Marangi .regmap_size = 1, 139227aa791dSChristian Marangi }, 139327aa791dSChristian Marangi }; 139427aa791dSChristian Marangi 139527aa791dSChristian Marangi static const struct airoha_pinctrl_func_group pnand_func_group[] = { 139627aa791dSChristian Marangi { 139727aa791dSChristian Marangi .name = "pnand", 139827aa791dSChristian Marangi .regmap[0] = { 139927aa791dSChristian Marangi AIROHA_FUNC_MUX, 140027aa791dSChristian Marangi REG_GPIO_PON_MODE, 140127aa791dSChristian Marangi GPIO_PARALLEL_NAND_MODE_MASK, 140227aa791dSChristian Marangi GPIO_PARALLEL_NAND_MODE_MASK 140327aa791dSChristian Marangi }, 140427aa791dSChristian Marangi .regmap_size = 1, 140527aa791dSChristian Marangi }, 140627aa791dSChristian Marangi }; 140727aa791dSChristian Marangi 140827aa791dSChristian Marangi static const struct airoha_pinctrl_func_group pcie_reset_func_group[] = { 140927aa791dSChristian Marangi { 141027aa791dSChristian Marangi .name = "pcie_reset0", 141127aa791dSChristian Marangi .regmap[0] = { 141227aa791dSChristian Marangi AIROHA_FUNC_MUX, 141327aa791dSChristian Marangi REG_GPIO_PON_MODE, 141427aa791dSChristian Marangi GPIO_PCIE_RESET0_MASK, 141527aa791dSChristian Marangi GPIO_PCIE_RESET0_MASK 141627aa791dSChristian Marangi }, 141727aa791dSChristian Marangi .regmap_size = 1, 141827aa791dSChristian Marangi }, { 141927aa791dSChristian Marangi .name = "pcie_reset1", 142027aa791dSChristian Marangi .regmap[0] = { 142127aa791dSChristian Marangi AIROHA_FUNC_MUX, 142227aa791dSChristian Marangi REG_GPIO_PON_MODE, 142327aa791dSChristian Marangi GPIO_PCIE_RESET1_MASK, 142427aa791dSChristian Marangi GPIO_PCIE_RESET1_MASK 142527aa791dSChristian Marangi }, 142627aa791dSChristian Marangi .regmap_size = 1, 142727aa791dSChristian Marangi }, { 142827aa791dSChristian Marangi .name = "pcie_reset2", 142927aa791dSChristian Marangi .regmap[0] = { 143027aa791dSChristian Marangi AIROHA_FUNC_MUX, 143127aa791dSChristian Marangi REG_GPIO_PON_MODE, 143227aa791dSChristian Marangi GPIO_PCIE_RESET2_MASK, 143327aa791dSChristian Marangi GPIO_PCIE_RESET2_MASK 143427aa791dSChristian Marangi }, 143527aa791dSChristian Marangi .regmap_size = 1, 143627aa791dSChristian Marangi }, 143727aa791dSChristian Marangi }; 143827aa791dSChristian Marangi 143927aa791dSChristian Marangi static const struct airoha_pinctrl_func_group an7583_pcie_reset_func_group[] = { 144027aa791dSChristian Marangi { 144127aa791dSChristian Marangi .name = "pcie_reset0", 144227aa791dSChristian Marangi .regmap[0] = { 144327aa791dSChristian Marangi AIROHA_FUNC_MUX, 144427aa791dSChristian Marangi REG_GPIO_PON_MODE, 144527aa791dSChristian Marangi GPIO_PCIE_RESET0_MASK, 144627aa791dSChristian Marangi GPIO_PCIE_RESET0_MASK 144727aa791dSChristian Marangi }, 144827aa791dSChristian Marangi .regmap_size = 1, 144927aa791dSChristian Marangi }, { 145027aa791dSChristian Marangi .name = "pcie_reset1", 145127aa791dSChristian Marangi .regmap[0] = { 145227aa791dSChristian Marangi AIROHA_FUNC_MUX, 145327aa791dSChristian Marangi REG_GPIO_PON_MODE, 145427aa791dSChristian Marangi GPIO_PCIE_RESET1_MASK, 145527aa791dSChristian Marangi GPIO_PCIE_RESET1_MASK 145627aa791dSChristian Marangi }, 145727aa791dSChristian Marangi .regmap_size = 1, 145827aa791dSChristian Marangi }, 145927aa791dSChristian Marangi }; 146027aa791dSChristian Marangi 146127aa791dSChristian Marangi /* PWM */ 146227aa791dSChristian Marangi #define AIROHA_PINCTRL_PWM(gpio, mux_val) \ 146327aa791dSChristian Marangi { \ 146427aa791dSChristian Marangi .name = (gpio), \ 146527aa791dSChristian Marangi .regmap[0] = { \ 146627aa791dSChristian Marangi AIROHA_FUNC_PWM_MUX, \ 146727aa791dSChristian Marangi REG_GPIO_FLASH_MODE_CFG, \ 146827aa791dSChristian Marangi (mux_val), \ 146927aa791dSChristian Marangi (mux_val) \ 147027aa791dSChristian Marangi }, \ 147127aa791dSChristian Marangi .regmap_size = 1, \ 147227aa791dSChristian Marangi } \ 147327aa791dSChristian Marangi 147427aa791dSChristian Marangi #define AIROHA_PINCTRL_PWM_EXT(gpio, mux_val) \ 147527aa791dSChristian Marangi { \ 147627aa791dSChristian Marangi .name = (gpio), \ 147727aa791dSChristian Marangi .regmap[0] = { \ 147827aa791dSChristian Marangi AIROHA_FUNC_PWM_EXT_MUX, \ 147927aa791dSChristian Marangi REG_GPIO_FLASH_MODE_CFG_EXT, \ 148027aa791dSChristian Marangi (mux_val), \ 148127aa791dSChristian Marangi (mux_val) \ 148227aa791dSChristian Marangi }, \ 148327aa791dSChristian Marangi .regmap_size = 1, \ 148427aa791dSChristian Marangi } \ 148527aa791dSChristian Marangi 148627aa791dSChristian Marangi static const struct airoha_pinctrl_func_group pwm_func_group[] = { 148727aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio0", GPIO0_FLASH_MODE_CFG), 148827aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio1", GPIO1_FLASH_MODE_CFG), 148927aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio2", GPIO2_FLASH_MODE_CFG), 149027aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio3", GPIO3_FLASH_MODE_CFG), 149127aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio4", GPIO4_FLASH_MODE_CFG), 149227aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio5", GPIO5_FLASH_MODE_CFG), 149327aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio6", GPIO6_FLASH_MODE_CFG), 149427aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio7", GPIO7_FLASH_MODE_CFG), 149527aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio8", GPIO8_FLASH_MODE_CFG), 149627aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio9", GPIO9_FLASH_MODE_CFG), 149727aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio10", GPIO10_FLASH_MODE_CFG), 149827aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio11", GPIO11_FLASH_MODE_CFG), 149927aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio12", GPIO12_FLASH_MODE_CFG), 150027aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio13", GPIO13_FLASH_MODE_CFG), 150127aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio14", GPIO14_FLASH_MODE_CFG), 150227aa791dSChristian Marangi AIROHA_PINCTRL_PWM("gpio15", GPIO15_FLASH_MODE_CFG), 150327aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio16", GPIO16_FLASH_MODE_CFG), 150427aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio17", GPIO17_FLASH_MODE_CFG), 150527aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio18", GPIO18_FLASH_MODE_CFG), 150627aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio19", GPIO19_FLASH_MODE_CFG), 150727aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio20", GPIO20_FLASH_MODE_CFG), 150827aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio21", GPIO21_FLASH_MODE_CFG), 150927aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio22", GPIO22_FLASH_MODE_CFG), 151027aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio23", GPIO23_FLASH_MODE_CFG), 151127aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio24", GPIO24_FLASH_MODE_CFG), 151227aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio25", GPIO25_FLASH_MODE_CFG), 151327aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio26", GPIO26_FLASH_MODE_CFG), 151427aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio27", GPIO27_FLASH_MODE_CFG), 151527aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio28", GPIO28_FLASH_MODE_CFG), 151627aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio29", GPIO29_FLASH_MODE_CFG), 151727aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio30", GPIO30_FLASH_MODE_CFG), 151827aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio31", GPIO31_FLASH_MODE_CFG), 151927aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio36", GPIO36_FLASH_MODE_CFG), 152027aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio37", GPIO37_FLASH_MODE_CFG), 152127aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio38", GPIO38_FLASH_MODE_CFG), 152227aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio39", GPIO39_FLASH_MODE_CFG), 152327aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio40", GPIO40_FLASH_MODE_CFG), 152427aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio41", GPIO41_FLASH_MODE_CFG), 152527aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio42", GPIO42_FLASH_MODE_CFG), 152627aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio43", GPIO43_FLASH_MODE_CFG), 152727aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio44", GPIO44_FLASH_MODE_CFG), 152827aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio45", GPIO45_FLASH_MODE_CFG), 152927aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio46", GPIO46_FLASH_MODE_CFG), 153008a5af46SMikhail Kshevetskiy }; 153108a5af46SMikhail Kshevetskiy 153208a5af46SMikhail Kshevetskiy static const struct airoha_pinctrl_func_group an7583_pwm_func_group[] = { 153308a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio0", GPIO0_FLASH_MODE_CFG), 153408a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio1", GPIO1_FLASH_MODE_CFG), 153508a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio2", GPIO2_FLASH_MODE_CFG), 153608a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio3", GPIO3_FLASH_MODE_CFG), 153708a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio4", GPIO4_FLASH_MODE_CFG), 153808a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio5", GPIO5_FLASH_MODE_CFG), 153908a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio6", GPIO6_FLASH_MODE_CFG), 154008a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio7", GPIO7_FLASH_MODE_CFG), 154108a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio8", GPIO8_FLASH_MODE_CFG), 154208a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio9", GPIO9_FLASH_MODE_CFG), 154308a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio10", GPIO10_FLASH_MODE_CFG), 154408a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio11", GPIO11_FLASH_MODE_CFG), 154508a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio12", GPIO12_FLASH_MODE_CFG), 154608a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio13", GPIO13_FLASH_MODE_CFG), 154708a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio14", GPIO14_FLASH_MODE_CFG), 154808a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM("gpio15", GPIO15_FLASH_MODE_CFG), 154908a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio16", GPIO16_FLASH_MODE_CFG), 155008a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio17", GPIO17_FLASH_MODE_CFG), 155108a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio18", GPIO18_FLASH_MODE_CFG), 155208a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio19", GPIO19_FLASH_MODE_CFG), 155308a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio20", GPIO20_FLASH_MODE_CFG), 155408a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio21", GPIO21_FLASH_MODE_CFG), 155508a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio22", GPIO22_FLASH_MODE_CFG), 155608a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio23", GPIO23_FLASH_MODE_CFG), 155708a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio24", GPIO24_FLASH_MODE_CFG), 155808a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio25", GPIO25_FLASH_MODE_CFG), 155908a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio26", GPIO26_FLASH_MODE_CFG), 156008a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio27", GPIO27_FLASH_MODE_CFG), 156108a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio28", GPIO28_FLASH_MODE_CFG), 156208a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio29", GPIO29_FLASH_MODE_CFG), 156308a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio30", GPIO30_FLASH_MODE_CFG), 156408a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio31", GPIO31_FLASH_MODE_CFG), 156508a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio36", GPIO36_FLASH_MODE_CFG), 156608a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio37", GPIO37_FLASH_MODE_CFG), 156708a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio38", GPIO38_FLASH_MODE_CFG), 156808a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio39", GPIO39_FLASH_MODE_CFG), 156908a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio40", GPIO40_FLASH_MODE_CFG), 157008a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio41", GPIO41_FLASH_MODE_CFG), 157108a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio42", GPIO42_FLASH_MODE_CFG), 157208a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio43", GPIO43_FLASH_MODE_CFG), 157308a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio44", GPIO44_FLASH_MODE_CFG), 157408a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio45", GPIO45_FLASH_MODE_CFG), 157508a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio46", GPIO46_FLASH_MODE_CFG), 157627aa791dSChristian Marangi AIROHA_PINCTRL_PWM_EXT("gpio47", GPIO47_FLASH_MODE_CFG), 157708a5af46SMikhail Kshevetskiy AIROHA_PINCTRL_PWM_EXT("gpio48", GPIO48_FLASH_MODE_CFG), 157827aa791dSChristian Marangi }; 157927aa791dSChristian Marangi 158027aa791dSChristian Marangi #define AIROHA_PINCTRL_PHY_LED0(gpio, mux_val, map_mask, map_val) \ 158127aa791dSChristian Marangi { \ 158227aa791dSChristian Marangi .name = (gpio), \ 158327aa791dSChristian Marangi .regmap[0] = { \ 158427aa791dSChristian Marangi AIROHA_FUNC_MUX, \ 158527aa791dSChristian Marangi REG_GPIO_2ND_I2C_MODE, \ 158627aa791dSChristian Marangi (mux_val), \ 158727aa791dSChristian Marangi (mux_val), \ 158827aa791dSChristian Marangi }, \ 158927aa791dSChristian Marangi .regmap[1] = { \ 159027aa791dSChristian Marangi AIROHA_FUNC_MUX, \ 159127aa791dSChristian Marangi REG_LAN_LED0_MAPPING, \ 159227aa791dSChristian Marangi (map_mask), \ 159327aa791dSChristian Marangi (map_val), \ 159427aa791dSChristian Marangi }, \ 159527aa791dSChristian Marangi .regmap_size = 2, \ 159627aa791dSChristian Marangi } 159727aa791dSChristian Marangi 159827aa791dSChristian Marangi #define AIROHA_PINCTRL_PHY_LED1(gpio, mux_val, map_mask, map_val) \ 159927aa791dSChristian Marangi { \ 160027aa791dSChristian Marangi .name = (gpio), \ 160127aa791dSChristian Marangi .regmap[0] = { \ 160227aa791dSChristian Marangi AIROHA_FUNC_MUX, \ 160327aa791dSChristian Marangi REG_GPIO_2ND_I2C_MODE, \ 160427aa791dSChristian Marangi (mux_val), \ 160527aa791dSChristian Marangi (mux_val), \ 160627aa791dSChristian Marangi }, \ 160727aa791dSChristian Marangi .regmap[1] = { \ 160827aa791dSChristian Marangi AIROHA_FUNC_MUX, \ 160927aa791dSChristian Marangi REG_LAN_LED1_MAPPING, \ 161027aa791dSChristian Marangi (map_mask), \ 161127aa791dSChristian Marangi (map_val), \ 161227aa791dSChristian Marangi }, \ 161327aa791dSChristian Marangi .regmap_size = 2, \ 161427aa791dSChristian Marangi } 161527aa791dSChristian Marangi 161627aa791dSChristian Marangi static const struct airoha_pinctrl_func_group phy1_led0_func_group[] = { 161727aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio33", GPIO_LAN0_LED0_MODE_MASK, 161827aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(0)), 161927aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio34", GPIO_LAN1_LED0_MODE_MASK, 162027aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(0)), 162127aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio35", GPIO_LAN2_LED0_MODE_MASK, 162227aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(0)), 162327aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio42", GPIO_LAN3_LED0_MODE_MASK, 162427aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(0)), 162527aa791dSChristian Marangi }; 162627aa791dSChristian Marangi 162727aa791dSChristian Marangi static const struct airoha_pinctrl_func_group phy2_led0_func_group[] = { 162827aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio33", GPIO_LAN0_LED0_MODE_MASK, 162927aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(1)), 163027aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio34", GPIO_LAN1_LED0_MODE_MASK, 163127aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(1)), 163227aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio35", GPIO_LAN2_LED0_MODE_MASK, 163327aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(1)), 163427aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio42", GPIO_LAN3_LED0_MODE_MASK, 163527aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(1)), 163627aa791dSChristian Marangi }; 163727aa791dSChristian Marangi 163827aa791dSChristian Marangi static const struct airoha_pinctrl_func_group phy3_led0_func_group[] = { 163927aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio33", GPIO_LAN0_LED0_MODE_MASK, 164027aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)), 164127aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio34", GPIO_LAN1_LED0_MODE_MASK, 164227aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)), 164327aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio35", GPIO_LAN2_LED0_MODE_MASK, 164427aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)), 164527aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio42", GPIO_LAN3_LED0_MODE_MASK, 164627aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)), 164727aa791dSChristian Marangi }; 164827aa791dSChristian Marangi 164927aa791dSChristian Marangi static const struct airoha_pinctrl_func_group phy4_led0_func_group[] = { 165027aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio33", GPIO_LAN0_LED0_MODE_MASK, 165127aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(3)), 165227aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio34", GPIO_LAN1_LED0_MODE_MASK, 165327aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(3)), 165427aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio35", GPIO_LAN2_LED0_MODE_MASK, 165527aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(3)), 165627aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio42", GPIO_LAN3_LED0_MODE_MASK, 165727aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(3)), 165827aa791dSChristian Marangi }; 165927aa791dSChristian Marangi 166027aa791dSChristian Marangi static const struct airoha_pinctrl_func_group phy1_led1_func_group[] = { 166127aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio43", GPIO_LAN0_LED1_MODE_MASK, 166227aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(0)), 166327aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio44", GPIO_LAN1_LED1_MODE_MASK, 166427aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(0)), 166527aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio45", GPIO_LAN2_LED1_MODE_MASK, 166627aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(0)), 166727aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio46", GPIO_LAN3_LED1_MODE_MASK, 166827aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(0)), 166927aa791dSChristian Marangi }; 167027aa791dSChristian Marangi 167127aa791dSChristian Marangi static const struct airoha_pinctrl_func_group phy2_led1_func_group[] = { 167227aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio43", GPIO_LAN0_LED1_MODE_MASK, 167327aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(1)), 167427aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio44", GPIO_LAN1_LED1_MODE_MASK, 167527aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(1)), 167627aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio45", GPIO_LAN2_LED1_MODE_MASK, 167727aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(1)), 167827aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio46", GPIO_LAN3_LED1_MODE_MASK, 167927aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(1)), 168027aa791dSChristian Marangi }; 168127aa791dSChristian Marangi 168227aa791dSChristian Marangi static const struct airoha_pinctrl_func_group phy3_led1_func_group[] = { 168327aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio43", GPIO_LAN0_LED1_MODE_MASK, 168427aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)), 168527aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio44", GPIO_LAN1_LED1_MODE_MASK, 168627aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)), 168727aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio45", GPIO_LAN2_LED1_MODE_MASK, 168827aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)), 168927aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio46", GPIO_LAN3_LED1_MODE_MASK, 169027aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)), 169127aa791dSChristian Marangi }; 169227aa791dSChristian Marangi 169327aa791dSChristian Marangi static const struct airoha_pinctrl_func_group phy4_led1_func_group[] = { 169427aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio43", GPIO_LAN0_LED1_MODE_MASK, 1695e20c85c7SMikhail Kshevetskiy LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(3)), 169627aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio44", GPIO_LAN1_LED1_MODE_MASK, 1697e20c85c7SMikhail Kshevetskiy LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(3)), 169827aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio45", GPIO_LAN2_LED1_MODE_MASK, 1699e20c85c7SMikhail Kshevetskiy LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(3)), 170027aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio46", GPIO_LAN3_LED1_MODE_MASK, 1701e20c85c7SMikhail Kshevetskiy LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(3)), 170227aa791dSChristian Marangi }; 170327aa791dSChristian Marangi 170427aa791dSChristian Marangi static const struct airoha_pinctrl_func_group an7583_phy1_led0_func_group[] = { 170527aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio1", GPIO_LAN0_LED0_MODE_MASK, 170627aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(0)), 170727aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio2", GPIO_LAN1_LED0_MODE_MASK, 170827aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(0)), 170927aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio3", GPIO_LAN2_LED0_MODE_MASK, 171027aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(0)), 171127aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio4", GPIO_LAN3_LED0_MODE_MASK, 171227aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(0)), 171327aa791dSChristian Marangi }; 171427aa791dSChristian Marangi 171527aa791dSChristian Marangi static const struct airoha_pinctrl_func_group an7583_phy2_led0_func_group[] = { 171627aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio1", GPIO_LAN0_LED0_MODE_MASK, 171727aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(1)), 171827aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio2", GPIO_LAN1_LED0_MODE_MASK, 171927aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(1)), 172027aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio3", GPIO_LAN2_LED0_MODE_MASK, 172127aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(1)), 172227aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio4", GPIO_LAN3_LED0_MODE_MASK, 172327aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(1)), 172427aa791dSChristian Marangi }; 172527aa791dSChristian Marangi 172627aa791dSChristian Marangi static const struct airoha_pinctrl_func_group an7583_phy3_led0_func_group[] = { 172727aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio1", GPIO_LAN0_LED0_MODE_MASK, 172827aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)), 172927aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio2", GPIO_LAN1_LED0_MODE_MASK, 173027aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)), 173127aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio3", GPIO_LAN2_LED0_MODE_MASK, 173227aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)), 173327aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio4", GPIO_LAN3_LED0_MODE_MASK, 173427aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)), 173527aa791dSChristian Marangi }; 173627aa791dSChristian Marangi 173727aa791dSChristian Marangi static const struct airoha_pinctrl_func_group an7583_phy4_led0_func_group[] = { 173827aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio1", GPIO_LAN0_LED0_MODE_MASK, 173927aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(3)), 174027aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio2", GPIO_LAN1_LED0_MODE_MASK, 174127aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(3)), 174227aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio3", GPIO_LAN2_LED0_MODE_MASK, 174327aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(3)), 174427aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED0("gpio4", GPIO_LAN3_LED0_MODE_MASK, 174527aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(3)), 174627aa791dSChristian Marangi }; 174727aa791dSChristian Marangi 174827aa791dSChristian Marangi static const struct airoha_pinctrl_func_group an7583_phy1_led1_func_group[] = { 174927aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio8", GPIO_LAN0_LED1_MODE_MASK, 175027aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(0)), 175127aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio9", GPIO_LAN1_LED1_MODE_MASK, 175227aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(0)), 175327aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio10", GPIO_LAN2_LED1_MODE_MASK, 175427aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(0)), 1755dbe28a2aSMikhail Kshevetskiy AIROHA_PINCTRL_PHY_LED1("gpio11", GPIO_LAN3_LED1_MODE_MASK, 175627aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(0)), 175727aa791dSChristian Marangi }; 175827aa791dSChristian Marangi 175927aa791dSChristian Marangi static const struct airoha_pinctrl_func_group an7583_phy2_led1_func_group[] = { 176027aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio8", GPIO_LAN0_LED1_MODE_MASK, 176127aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(1)), 176227aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio9", GPIO_LAN1_LED1_MODE_MASK, 176327aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(1)), 176427aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio10", GPIO_LAN2_LED1_MODE_MASK, 176527aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(1)), 176627aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio11", GPIO_LAN3_LED1_MODE_MASK, 176727aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(1)), 176827aa791dSChristian Marangi }; 176927aa791dSChristian Marangi 177027aa791dSChristian Marangi static const struct airoha_pinctrl_func_group an7583_phy3_led1_func_group[] = { 177127aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio8", GPIO_LAN0_LED1_MODE_MASK, 177227aa791dSChristian Marangi LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)), 177327aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio9", GPIO_LAN1_LED1_MODE_MASK, 177427aa791dSChristian Marangi LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)), 177527aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio10", GPIO_LAN2_LED1_MODE_MASK, 177627aa791dSChristian Marangi LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)), 177727aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio11", GPIO_LAN3_LED1_MODE_MASK, 177827aa791dSChristian Marangi LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)), 177927aa791dSChristian Marangi }; 178027aa791dSChristian Marangi 178127aa791dSChristian Marangi static const struct airoha_pinctrl_func_group an7583_phy4_led1_func_group[] = { 178227aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio8", GPIO_LAN0_LED1_MODE_MASK, 1783a3602577SMikhail Kshevetskiy LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(3)), 178427aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio9", GPIO_LAN1_LED1_MODE_MASK, 1785a3602577SMikhail Kshevetskiy LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(3)), 178627aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio10", GPIO_LAN2_LED1_MODE_MASK, 1787a3602577SMikhail Kshevetskiy LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(3)), 178827aa791dSChristian Marangi AIROHA_PINCTRL_PHY_LED1("gpio11", GPIO_LAN3_LED1_MODE_MASK, 1789a3602577SMikhail Kshevetskiy LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(3)), 179027aa791dSChristian Marangi }; 179127aa791dSChristian Marangi 179227aa791dSChristian Marangi static const struct airoha_pinctrl_func en7581_pinctrl_funcs[] = { 179327aa791dSChristian Marangi PINCTRL_FUNC_DESC("pon", pon), 179427aa791dSChristian Marangi PINCTRL_FUNC_DESC("tod_1pps", tod_1pps), 179527aa791dSChristian Marangi PINCTRL_FUNC_DESC("sipo", sipo), 179627aa791dSChristian Marangi PINCTRL_FUNC_DESC("mdio", mdio), 179727aa791dSChristian Marangi PINCTRL_FUNC_DESC("uart", uart), 179827aa791dSChristian Marangi PINCTRL_FUNC_DESC("i2c", i2c), 179927aa791dSChristian Marangi PINCTRL_FUNC_DESC("jtag", jtag), 180027aa791dSChristian Marangi PINCTRL_FUNC_DESC("pcm", pcm), 180127aa791dSChristian Marangi PINCTRL_FUNC_DESC("spi", spi), 180227aa791dSChristian Marangi PINCTRL_FUNC_DESC("pcm_spi", pcm_spi), 180327aa791dSChristian Marangi PINCTRL_FUNC_DESC("i2s", i2s), 180427aa791dSChristian Marangi PINCTRL_FUNC_DESC("emmc", emmc), 180527aa791dSChristian Marangi PINCTRL_FUNC_DESC("pnand", pnand), 180627aa791dSChristian Marangi PINCTRL_FUNC_DESC("pcie_reset", pcie_reset), 180727aa791dSChristian Marangi PINCTRL_FUNC_DESC("pwm", pwm), 180827aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy1_led0", phy1_led0), 180927aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy2_led0", phy2_led0), 181027aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy3_led0", phy3_led0), 181127aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy4_led0", phy4_led0), 181227aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy1_led1", phy1_led1), 181327aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy2_led1", phy2_led1), 181427aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy3_led1", phy3_led1), 181527aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy4_led1", phy4_led1), 181627aa791dSChristian Marangi }; 181727aa791dSChristian Marangi 181827aa791dSChristian Marangi static const struct airoha_pinctrl_func an7583_pinctrl_funcs[] = { 181927aa791dSChristian Marangi PINCTRL_FUNC_DESC("pon", pon), 182027aa791dSChristian Marangi PINCTRL_FUNC_DESC("tod_1pps", tod_1pps), 182127aa791dSChristian Marangi PINCTRL_FUNC_DESC("sipo", sipo), 182227aa791dSChristian Marangi PINCTRL_FUNC_DESC("mdio", an7583_mdio), 182327aa791dSChristian Marangi PINCTRL_FUNC_DESC("uart", uart), 182427aa791dSChristian Marangi PINCTRL_FUNC_DESC("i2c", i2c), 182527aa791dSChristian Marangi PINCTRL_FUNC_DESC("jtag", jtag), 182627aa791dSChristian Marangi PINCTRL_FUNC_DESC("pcm", pcm), 182727aa791dSChristian Marangi PINCTRL_FUNC_DESC("spi", spi), 182827aa791dSChristian Marangi PINCTRL_FUNC_DESC("pcm_spi", an7583_pcm_spi), 182927aa791dSChristian Marangi PINCTRL_FUNC_DESC("emmc", emmc), 183027aa791dSChristian Marangi PINCTRL_FUNC_DESC("pnand", pnand), 183127aa791dSChristian Marangi PINCTRL_FUNC_DESC("pcie_reset", an7583_pcie_reset), 183208a5af46SMikhail Kshevetskiy PINCTRL_FUNC_DESC("pwm", an7583_pwm), 183327aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy1_led0", an7583_phy1_led0), 183427aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy2_led0", an7583_phy2_led0), 183527aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy3_led0", an7583_phy3_led0), 183627aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy4_led0", an7583_phy4_led0), 183727aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy1_led1", an7583_phy1_led1), 183827aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy2_led1", an7583_phy2_led1), 183927aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy3_led1", an7583_phy3_led1), 184027aa791dSChristian Marangi PINCTRL_FUNC_DESC("phy4_led1", an7583_phy4_led1), 184127aa791dSChristian Marangi }; 184227aa791dSChristian Marangi 184327aa791dSChristian Marangi static const struct airoha_pinctrl_conf en7581_pinctrl_pullup_conf[] = { 184427aa791dSChristian Marangi PINCTRL_CONF_DESC(0, REG_I2C_SDA_PU, UART1_TXD_PU_MASK), 184527aa791dSChristian Marangi PINCTRL_CONF_DESC(1, REG_I2C_SDA_PU, UART1_RXD_PU_MASK), 184627aa791dSChristian Marangi PINCTRL_CONF_DESC(2, REG_I2C_SDA_PU, I2C_SDA_PU_MASK), 184727aa791dSChristian Marangi PINCTRL_CONF_DESC(3, REG_I2C_SDA_PU, I2C_SCL_PU_MASK), 184827aa791dSChristian Marangi PINCTRL_CONF_DESC(4, REG_I2C_SDA_PU, SPI_CS0_PU_MASK), 184927aa791dSChristian Marangi PINCTRL_CONF_DESC(5, REG_I2C_SDA_PU, SPI_CLK_PU_MASK), 185027aa791dSChristian Marangi PINCTRL_CONF_DESC(6, REG_I2C_SDA_PU, SPI_MOSI_PU_MASK), 185127aa791dSChristian Marangi PINCTRL_CONF_DESC(7, REG_I2C_SDA_PU, SPI_MISO_PU_MASK), 185227aa791dSChristian Marangi PINCTRL_CONF_DESC(13, REG_GPIO_L_PU, BIT(0)), 185327aa791dSChristian Marangi PINCTRL_CONF_DESC(14, REG_GPIO_L_PU, BIT(1)), 185427aa791dSChristian Marangi PINCTRL_CONF_DESC(15, REG_GPIO_L_PU, BIT(2)), 185527aa791dSChristian Marangi PINCTRL_CONF_DESC(16, REG_GPIO_L_PU, BIT(3)), 185627aa791dSChristian Marangi PINCTRL_CONF_DESC(17, REG_GPIO_L_PU, BIT(4)), 185727aa791dSChristian Marangi PINCTRL_CONF_DESC(18, REG_GPIO_L_PU, BIT(5)), 185827aa791dSChristian Marangi PINCTRL_CONF_DESC(19, REG_GPIO_L_PU, BIT(6)), 185927aa791dSChristian Marangi PINCTRL_CONF_DESC(20, REG_GPIO_L_PU, BIT(7)), 186027aa791dSChristian Marangi PINCTRL_CONF_DESC(21, REG_GPIO_L_PU, BIT(8)), 186127aa791dSChristian Marangi PINCTRL_CONF_DESC(22, REG_GPIO_L_PU, BIT(9)), 186227aa791dSChristian Marangi PINCTRL_CONF_DESC(23, REG_GPIO_L_PU, BIT(10)), 186327aa791dSChristian Marangi PINCTRL_CONF_DESC(24, REG_GPIO_L_PU, BIT(11)), 186427aa791dSChristian Marangi PINCTRL_CONF_DESC(25, REG_GPIO_L_PU, BIT(12)), 186527aa791dSChristian Marangi PINCTRL_CONF_DESC(26, REG_GPIO_L_PU, BIT(13)), 186627aa791dSChristian Marangi PINCTRL_CONF_DESC(27, REG_GPIO_L_PU, BIT(14)), 186727aa791dSChristian Marangi PINCTRL_CONF_DESC(28, REG_GPIO_L_PU, BIT(15)), 186827aa791dSChristian Marangi PINCTRL_CONF_DESC(29, REG_GPIO_L_PU, BIT(16)), 186927aa791dSChristian Marangi PINCTRL_CONF_DESC(30, REG_GPIO_L_PU, BIT(17)), 187027aa791dSChristian Marangi PINCTRL_CONF_DESC(31, REG_GPIO_L_PU, BIT(18)), 187108a39a06SMikhail Kshevetskiy PINCTRL_CONF_DESC(32, REG_GPIO_L_PU, BIT(19)), 187227aa791dSChristian Marangi PINCTRL_CONF_DESC(33, REG_GPIO_L_PU, BIT(20)), 187327aa791dSChristian Marangi PINCTRL_CONF_DESC(34, REG_GPIO_L_PU, BIT(21)), 187427aa791dSChristian Marangi PINCTRL_CONF_DESC(35, REG_GPIO_L_PU, BIT(22)), 187527aa791dSChristian Marangi PINCTRL_CONF_DESC(36, REG_GPIO_L_PU, BIT(23)), 187627aa791dSChristian Marangi PINCTRL_CONF_DESC(37, REG_GPIO_L_PU, BIT(24)), 187727aa791dSChristian Marangi PINCTRL_CONF_DESC(38, REG_GPIO_L_PU, BIT(25)), 187827aa791dSChristian Marangi PINCTRL_CONF_DESC(39, REG_GPIO_L_PU, BIT(26)), 187927aa791dSChristian Marangi PINCTRL_CONF_DESC(40, REG_GPIO_L_PU, BIT(27)), 188027aa791dSChristian Marangi PINCTRL_CONF_DESC(41, REG_GPIO_L_PU, BIT(28)), 188127aa791dSChristian Marangi PINCTRL_CONF_DESC(42, REG_GPIO_L_PU, BIT(29)), 188227aa791dSChristian Marangi PINCTRL_CONF_DESC(43, REG_GPIO_L_PU, BIT(30)), 188327aa791dSChristian Marangi PINCTRL_CONF_DESC(44, REG_GPIO_L_PU, BIT(31)), 188427aa791dSChristian Marangi PINCTRL_CONF_DESC(45, REG_GPIO_H_PU, BIT(0)), 188527aa791dSChristian Marangi PINCTRL_CONF_DESC(46, REG_GPIO_H_PU, BIT(1)), 188627aa791dSChristian Marangi PINCTRL_CONF_DESC(47, REG_GPIO_H_PU, BIT(2)), 188727aa791dSChristian Marangi PINCTRL_CONF_DESC(48, REG_GPIO_H_PU, BIT(3)), 188827aa791dSChristian Marangi PINCTRL_CONF_DESC(49, REG_GPIO_H_PU, BIT(4)), 188927aa791dSChristian Marangi PINCTRL_CONF_DESC(50, REG_GPIO_H_PU, BIT(5)), 189027aa791dSChristian Marangi PINCTRL_CONF_DESC(51, REG_GPIO_H_PU, BIT(6)), 189127aa791dSChristian Marangi PINCTRL_CONF_DESC(52, REG_GPIO_H_PU, BIT(7)), 189227aa791dSChristian Marangi PINCTRL_CONF_DESC(53, REG_GPIO_H_PU, BIT(8)), 189327aa791dSChristian Marangi PINCTRL_CONF_DESC(54, REG_GPIO_H_PU, BIT(9)), 189427aa791dSChristian Marangi PINCTRL_CONF_DESC(55, REG_GPIO_H_PU, BIT(10)), 189527aa791dSChristian Marangi PINCTRL_CONF_DESC(56, REG_GPIO_H_PU, BIT(11)), 189627aa791dSChristian Marangi PINCTRL_CONF_DESC(57, REG_GPIO_H_PU, BIT(12)), 189727aa791dSChristian Marangi PINCTRL_CONF_DESC(58, REG_GPIO_H_PU, BIT(13)), 189827aa791dSChristian Marangi PINCTRL_CONF_DESC(59, REG_GPIO_H_PU, BIT(14)), 189927aa791dSChristian Marangi PINCTRL_CONF_DESC(61, REG_I2C_SDA_PU, PCIE0_RESET_PU_MASK), 190027aa791dSChristian Marangi PINCTRL_CONF_DESC(62, REG_I2C_SDA_PU, PCIE1_RESET_PU_MASK), 190127aa791dSChristian Marangi PINCTRL_CONF_DESC(63, REG_I2C_SDA_PU, PCIE2_RESET_PU_MASK), 190227aa791dSChristian Marangi }; 190327aa791dSChristian Marangi 190427aa791dSChristian Marangi static const struct airoha_pinctrl_conf an7583_pinctrl_pullup_conf[] = { 190527aa791dSChristian Marangi PINCTRL_CONF_DESC(2, REG_GPIO_L_PU, BIT(0)), 190627aa791dSChristian Marangi PINCTRL_CONF_DESC(3, REG_GPIO_L_PU, BIT(1)), 190727aa791dSChristian Marangi PINCTRL_CONF_DESC(4, REG_GPIO_L_PU, BIT(2)), 190827aa791dSChristian Marangi PINCTRL_CONF_DESC(5, REG_GPIO_L_PU, BIT(3)), 190927aa791dSChristian Marangi PINCTRL_CONF_DESC(6, REG_GPIO_L_PU, BIT(4)), 191027aa791dSChristian Marangi PINCTRL_CONF_DESC(7, REG_GPIO_L_PU, BIT(5)), 191127aa791dSChristian Marangi PINCTRL_CONF_DESC(8, REG_GPIO_L_PU, BIT(6)), 191227aa791dSChristian Marangi PINCTRL_CONF_DESC(9, REG_GPIO_L_PU, BIT(7)), 191327aa791dSChristian Marangi PINCTRL_CONF_DESC(10, REG_GPIO_L_PU, BIT(8)), 191427aa791dSChristian Marangi PINCTRL_CONF_DESC(11, REG_GPIO_L_PU, BIT(9)), 191527aa791dSChristian Marangi PINCTRL_CONF_DESC(12, REG_GPIO_L_PU, BIT(10)), 191627aa791dSChristian Marangi PINCTRL_CONF_DESC(13, REG_GPIO_L_PU, BIT(11)), 191727aa791dSChristian Marangi PINCTRL_CONF_DESC(14, REG_GPIO_L_PU, BIT(12)), 191827aa791dSChristian Marangi PINCTRL_CONF_DESC(15, REG_GPIO_L_PU, BIT(13)), 191927aa791dSChristian Marangi PINCTRL_CONF_DESC(16, REG_GPIO_L_PU, BIT(14)), 192027aa791dSChristian Marangi PINCTRL_CONF_DESC(17, REG_GPIO_L_PU, BIT(15)), 192127aa791dSChristian Marangi PINCTRL_CONF_DESC(18, REG_GPIO_L_PU, BIT(16)), 192227aa791dSChristian Marangi PINCTRL_CONF_DESC(19, REG_GPIO_L_PU, BIT(17)), 192327aa791dSChristian Marangi PINCTRL_CONF_DESC(20, REG_GPIO_L_PU, BIT(18)), 1924a7f3e2b7SMikhail Kshevetskiy PINCTRL_CONF_DESC(21, REG_GPIO_L_PU, BIT(19)), 192527aa791dSChristian Marangi PINCTRL_CONF_DESC(22, REG_GPIO_L_PU, BIT(20)), 192627aa791dSChristian Marangi PINCTRL_CONF_DESC(23, REG_GPIO_L_PU, BIT(21)), 192727aa791dSChristian Marangi PINCTRL_CONF_DESC(24, REG_GPIO_L_PU, BIT(22)), 192827aa791dSChristian Marangi PINCTRL_CONF_DESC(25, REG_GPIO_L_PU, BIT(23)), 192927aa791dSChristian Marangi PINCTRL_CONF_DESC(26, REG_GPIO_L_PU, BIT(24)), 193027aa791dSChristian Marangi PINCTRL_CONF_DESC(27, REG_GPIO_L_PU, BIT(25)), 193127aa791dSChristian Marangi PINCTRL_CONF_DESC(28, REG_GPIO_L_PU, BIT(26)), 193227aa791dSChristian Marangi PINCTRL_CONF_DESC(29, REG_GPIO_L_PU, BIT(27)), 193327aa791dSChristian Marangi PINCTRL_CONF_DESC(30, REG_GPIO_L_PU, BIT(28)), 193427aa791dSChristian Marangi PINCTRL_CONF_DESC(31, REG_GPIO_L_PU, BIT(29)), 193527aa791dSChristian Marangi PINCTRL_CONF_DESC(32, REG_GPIO_L_PU, BIT(30)), 193627aa791dSChristian Marangi PINCTRL_CONF_DESC(33, REG_GPIO_L_PU, BIT(31)), 193727aa791dSChristian Marangi PINCTRL_CONF_DESC(34, REG_GPIO_H_PU, BIT(0)), 193827aa791dSChristian Marangi PINCTRL_CONF_DESC(35, REG_GPIO_H_PU, BIT(1)), 193927aa791dSChristian Marangi PINCTRL_CONF_DESC(36, REG_GPIO_H_PU, BIT(2)), 194027aa791dSChristian Marangi PINCTRL_CONF_DESC(37, REG_GPIO_H_PU, BIT(3)), 194127aa791dSChristian Marangi PINCTRL_CONF_DESC(38, REG_GPIO_H_PU, BIT(4)), 194227aa791dSChristian Marangi PINCTRL_CONF_DESC(39, REG_GPIO_H_PU, BIT(5)), 194327aa791dSChristian Marangi PINCTRL_CONF_DESC(40, REG_GPIO_H_PU, BIT(6)), 194427aa791dSChristian Marangi PINCTRL_CONF_DESC(41, REG_I2C_SDA_PU, I2C_SCL_PU_MASK), 194527aa791dSChristian Marangi PINCTRL_CONF_DESC(42, REG_I2C_SDA_PU, I2C_SDA_PU_MASK), 194627aa791dSChristian Marangi PINCTRL_CONF_DESC(43, REG_I2C_SDA_PU, AN7583_I2C1_SCL_PU_MASK), 194727aa791dSChristian Marangi PINCTRL_CONF_DESC(44, REG_I2C_SDA_PU, AN7583_I2C1_SDA_PU_MASK), 194827aa791dSChristian Marangi PINCTRL_CONF_DESC(45, REG_I2C_SDA_PU, SPI_CLK_PU_MASK), 194927aa791dSChristian Marangi PINCTRL_CONF_DESC(46, REG_I2C_SDA_PU, SPI_CS0_PU_MASK), 195027aa791dSChristian Marangi PINCTRL_CONF_DESC(47, REG_I2C_SDA_PU, SPI_MOSI_PU_MASK), 195127aa791dSChristian Marangi PINCTRL_CONF_DESC(48, REG_I2C_SDA_PU, SPI_MISO_PU_MASK), 195227aa791dSChristian Marangi PINCTRL_CONF_DESC(49, REG_I2C_SDA_PU, UART1_TXD_PU_MASK), 195327aa791dSChristian Marangi PINCTRL_CONF_DESC(50, REG_I2C_SDA_PU, UART1_RXD_PU_MASK), 195427aa791dSChristian Marangi PINCTRL_CONF_DESC(51, REG_I2C_SDA_PU, PCIE0_RESET_PU_MASK), 195527aa791dSChristian Marangi PINCTRL_CONF_DESC(52, REG_I2C_SDA_PU, PCIE1_RESET_PU_MASK), 195627aa791dSChristian Marangi PINCTRL_CONF_DESC(53, REG_I2C_SDA_PU, AN7583_MDC_0_PU_MASK), 195727aa791dSChristian Marangi PINCTRL_CONF_DESC(54, REG_I2C_SDA_PU, AN7583_MDIO_0_PU_MASK), 195827aa791dSChristian Marangi }; 195927aa791dSChristian Marangi 196027aa791dSChristian Marangi static const struct airoha_pinctrl_conf en7581_pinctrl_pulldown_conf[] = { 196127aa791dSChristian Marangi PINCTRL_CONF_DESC(0, REG_I2C_SDA_PD, UART1_TXD_PD_MASK), 196227aa791dSChristian Marangi PINCTRL_CONF_DESC(1, REG_I2C_SDA_PD, UART1_RXD_PD_MASK), 196327aa791dSChristian Marangi PINCTRL_CONF_DESC(2, REG_I2C_SDA_PD, I2C_SDA_PD_MASK), 196427aa791dSChristian Marangi PINCTRL_CONF_DESC(3, REG_I2C_SDA_PD, I2C_SCL_PD_MASK), 196527aa791dSChristian Marangi PINCTRL_CONF_DESC(4, REG_I2C_SDA_PD, SPI_CS0_PD_MASK), 196627aa791dSChristian Marangi PINCTRL_CONF_DESC(5, REG_I2C_SDA_PD, SPI_CLK_PD_MASK), 196727aa791dSChristian Marangi PINCTRL_CONF_DESC(6, REG_I2C_SDA_PD, SPI_MOSI_PD_MASK), 196827aa791dSChristian Marangi PINCTRL_CONF_DESC(7, REG_I2C_SDA_PD, SPI_MISO_PD_MASK), 196927aa791dSChristian Marangi PINCTRL_CONF_DESC(13, REG_GPIO_L_PD, BIT(0)), 197027aa791dSChristian Marangi PINCTRL_CONF_DESC(14, REG_GPIO_L_PD, BIT(1)), 197127aa791dSChristian Marangi PINCTRL_CONF_DESC(15, REG_GPIO_L_PD, BIT(2)), 197227aa791dSChristian Marangi PINCTRL_CONF_DESC(16, REG_GPIO_L_PD, BIT(3)), 197327aa791dSChristian Marangi PINCTRL_CONF_DESC(17, REG_GPIO_L_PD, BIT(4)), 197427aa791dSChristian Marangi PINCTRL_CONF_DESC(18, REG_GPIO_L_PD, BIT(5)), 197527aa791dSChristian Marangi PINCTRL_CONF_DESC(19, REG_GPIO_L_PD, BIT(6)), 197627aa791dSChristian Marangi PINCTRL_CONF_DESC(20, REG_GPIO_L_PD, BIT(7)), 197727aa791dSChristian Marangi PINCTRL_CONF_DESC(21, REG_GPIO_L_PD, BIT(8)), 197827aa791dSChristian Marangi PINCTRL_CONF_DESC(22, REG_GPIO_L_PD, BIT(9)), 197927aa791dSChristian Marangi PINCTRL_CONF_DESC(23, REG_GPIO_L_PD, BIT(10)), 198027aa791dSChristian Marangi PINCTRL_CONF_DESC(24, REG_GPIO_L_PD, BIT(11)), 198127aa791dSChristian Marangi PINCTRL_CONF_DESC(25, REG_GPIO_L_PD, BIT(12)), 198227aa791dSChristian Marangi PINCTRL_CONF_DESC(26, REG_GPIO_L_PD, BIT(13)), 198327aa791dSChristian Marangi PINCTRL_CONF_DESC(27, REG_GPIO_L_PD, BIT(14)), 198427aa791dSChristian Marangi PINCTRL_CONF_DESC(28, REG_GPIO_L_PD, BIT(15)), 198527aa791dSChristian Marangi PINCTRL_CONF_DESC(29, REG_GPIO_L_PD, BIT(16)), 198627aa791dSChristian Marangi PINCTRL_CONF_DESC(30, REG_GPIO_L_PD, BIT(17)), 198727aa791dSChristian Marangi PINCTRL_CONF_DESC(31, REG_GPIO_L_PD, BIT(18)), 198808a39a06SMikhail Kshevetskiy PINCTRL_CONF_DESC(32, REG_GPIO_L_PD, BIT(19)), 198927aa791dSChristian Marangi PINCTRL_CONF_DESC(33, REG_GPIO_L_PD, BIT(20)), 199027aa791dSChristian Marangi PINCTRL_CONF_DESC(34, REG_GPIO_L_PD, BIT(21)), 199127aa791dSChristian Marangi PINCTRL_CONF_DESC(35, REG_GPIO_L_PD, BIT(22)), 199227aa791dSChristian Marangi PINCTRL_CONF_DESC(36, REG_GPIO_L_PD, BIT(23)), 199327aa791dSChristian Marangi PINCTRL_CONF_DESC(37, REG_GPIO_L_PD, BIT(24)), 199427aa791dSChristian Marangi PINCTRL_CONF_DESC(38, REG_GPIO_L_PD, BIT(25)), 199527aa791dSChristian Marangi PINCTRL_CONF_DESC(39, REG_GPIO_L_PD, BIT(26)), 199627aa791dSChristian Marangi PINCTRL_CONF_DESC(40, REG_GPIO_L_PD, BIT(27)), 199727aa791dSChristian Marangi PINCTRL_CONF_DESC(41, REG_GPIO_L_PD, BIT(28)), 199827aa791dSChristian Marangi PINCTRL_CONF_DESC(42, REG_GPIO_L_PD, BIT(29)), 199927aa791dSChristian Marangi PINCTRL_CONF_DESC(43, REG_GPIO_L_PD, BIT(30)), 200027aa791dSChristian Marangi PINCTRL_CONF_DESC(44, REG_GPIO_L_PD, BIT(31)), 200127aa791dSChristian Marangi PINCTRL_CONF_DESC(45, REG_GPIO_H_PD, BIT(0)), 200227aa791dSChristian Marangi PINCTRL_CONF_DESC(46, REG_GPIO_H_PD, BIT(1)), 200327aa791dSChristian Marangi PINCTRL_CONF_DESC(47, REG_GPIO_H_PD, BIT(2)), 200427aa791dSChristian Marangi PINCTRL_CONF_DESC(48, REG_GPIO_H_PD, BIT(3)), 200527aa791dSChristian Marangi PINCTRL_CONF_DESC(49, REG_GPIO_H_PD, BIT(4)), 200627aa791dSChristian Marangi PINCTRL_CONF_DESC(50, REG_GPIO_H_PD, BIT(5)), 200727aa791dSChristian Marangi PINCTRL_CONF_DESC(51, REG_GPIO_H_PD, BIT(6)), 200827aa791dSChristian Marangi PINCTRL_CONF_DESC(52, REG_GPIO_H_PD, BIT(7)), 200927aa791dSChristian Marangi PINCTRL_CONF_DESC(53, REG_GPIO_H_PD, BIT(8)), 201027aa791dSChristian Marangi PINCTRL_CONF_DESC(54, REG_GPIO_H_PD, BIT(9)), 201127aa791dSChristian Marangi PINCTRL_CONF_DESC(55, REG_GPIO_H_PD, BIT(10)), 201227aa791dSChristian Marangi PINCTRL_CONF_DESC(56, REG_GPIO_H_PD, BIT(11)), 201327aa791dSChristian Marangi PINCTRL_CONF_DESC(57, REG_GPIO_H_PD, BIT(12)), 201427aa791dSChristian Marangi PINCTRL_CONF_DESC(58, REG_GPIO_H_PD, BIT(13)), 201527aa791dSChristian Marangi PINCTRL_CONF_DESC(59, REG_GPIO_H_PD, BIT(14)), 201627aa791dSChristian Marangi PINCTRL_CONF_DESC(61, REG_I2C_SDA_PD, PCIE0_RESET_PD_MASK), 201727aa791dSChristian Marangi PINCTRL_CONF_DESC(62, REG_I2C_SDA_PD, PCIE1_RESET_PD_MASK), 201827aa791dSChristian Marangi PINCTRL_CONF_DESC(63, REG_I2C_SDA_PD, PCIE2_RESET_PD_MASK), 201927aa791dSChristian Marangi }; 202027aa791dSChristian Marangi 202127aa791dSChristian Marangi static const struct airoha_pinctrl_conf an7583_pinctrl_pulldown_conf[] = { 202227aa791dSChristian Marangi PINCTRL_CONF_DESC(2, REG_GPIO_L_PD, BIT(0)), 202327aa791dSChristian Marangi PINCTRL_CONF_DESC(3, REG_GPIO_L_PD, BIT(1)), 202427aa791dSChristian Marangi PINCTRL_CONF_DESC(4, REG_GPIO_L_PD, BIT(2)), 202527aa791dSChristian Marangi PINCTRL_CONF_DESC(5, REG_GPIO_L_PD, BIT(3)), 202627aa791dSChristian Marangi PINCTRL_CONF_DESC(6, REG_GPIO_L_PD, BIT(4)), 202727aa791dSChristian Marangi PINCTRL_CONF_DESC(7, REG_GPIO_L_PD, BIT(5)), 202827aa791dSChristian Marangi PINCTRL_CONF_DESC(8, REG_GPIO_L_PD, BIT(6)), 202927aa791dSChristian Marangi PINCTRL_CONF_DESC(9, REG_GPIO_L_PD, BIT(7)), 203027aa791dSChristian Marangi PINCTRL_CONF_DESC(10, REG_GPIO_L_PD, BIT(8)), 203127aa791dSChristian Marangi PINCTRL_CONF_DESC(11, REG_GPIO_L_PD, BIT(9)), 203227aa791dSChristian Marangi PINCTRL_CONF_DESC(12, REG_GPIO_L_PD, BIT(10)), 203327aa791dSChristian Marangi PINCTRL_CONF_DESC(13, REG_GPIO_L_PD, BIT(11)), 203427aa791dSChristian Marangi PINCTRL_CONF_DESC(14, REG_GPIO_L_PD, BIT(12)), 203527aa791dSChristian Marangi PINCTRL_CONF_DESC(15, REG_GPIO_L_PD, BIT(13)), 203627aa791dSChristian Marangi PINCTRL_CONF_DESC(16, REG_GPIO_L_PD, BIT(14)), 203727aa791dSChristian Marangi PINCTRL_CONF_DESC(17, REG_GPIO_L_PD, BIT(15)), 203827aa791dSChristian Marangi PINCTRL_CONF_DESC(18, REG_GPIO_L_PD, BIT(16)), 203927aa791dSChristian Marangi PINCTRL_CONF_DESC(19, REG_GPIO_L_PD, BIT(17)), 204027aa791dSChristian Marangi PINCTRL_CONF_DESC(20, REG_GPIO_L_PD, BIT(18)), 2041a7f3e2b7SMikhail Kshevetskiy PINCTRL_CONF_DESC(21, REG_GPIO_L_PD, BIT(19)), 204227aa791dSChristian Marangi PINCTRL_CONF_DESC(22, REG_GPIO_L_PD, BIT(20)), 204327aa791dSChristian Marangi PINCTRL_CONF_DESC(23, REG_GPIO_L_PD, BIT(21)), 204427aa791dSChristian Marangi PINCTRL_CONF_DESC(24, REG_GPIO_L_PD, BIT(22)), 204527aa791dSChristian Marangi PINCTRL_CONF_DESC(25, REG_GPIO_L_PD, BIT(23)), 204627aa791dSChristian Marangi PINCTRL_CONF_DESC(26, REG_GPIO_L_PD, BIT(24)), 204727aa791dSChristian Marangi PINCTRL_CONF_DESC(27, REG_GPIO_L_PD, BIT(25)), 204827aa791dSChristian Marangi PINCTRL_CONF_DESC(28, REG_GPIO_L_PD, BIT(26)), 204927aa791dSChristian Marangi PINCTRL_CONF_DESC(29, REG_GPIO_L_PD, BIT(27)), 205027aa791dSChristian Marangi PINCTRL_CONF_DESC(30, REG_GPIO_L_PD, BIT(28)), 205127aa791dSChristian Marangi PINCTRL_CONF_DESC(31, REG_GPIO_L_PD, BIT(29)), 205227aa791dSChristian Marangi PINCTRL_CONF_DESC(32, REG_GPIO_L_PD, BIT(30)), 205327aa791dSChristian Marangi PINCTRL_CONF_DESC(33, REG_GPIO_L_PD, BIT(31)), 205427aa791dSChristian Marangi PINCTRL_CONF_DESC(34, REG_GPIO_H_PD, BIT(0)), 205527aa791dSChristian Marangi PINCTRL_CONF_DESC(35, REG_GPIO_H_PD, BIT(1)), 205627aa791dSChristian Marangi PINCTRL_CONF_DESC(36, REG_GPIO_H_PD, BIT(2)), 205727aa791dSChristian Marangi PINCTRL_CONF_DESC(37, REG_GPIO_H_PD, BIT(3)), 205827aa791dSChristian Marangi PINCTRL_CONF_DESC(38, REG_GPIO_H_PD, BIT(4)), 205927aa791dSChristian Marangi PINCTRL_CONF_DESC(39, REG_GPIO_H_PD, BIT(5)), 206027aa791dSChristian Marangi PINCTRL_CONF_DESC(40, REG_GPIO_H_PD, BIT(6)), 206127aa791dSChristian Marangi PINCTRL_CONF_DESC(41, REG_I2C_SDA_PD, I2C_SCL_PD_MASK), 206227aa791dSChristian Marangi PINCTRL_CONF_DESC(42, REG_I2C_SDA_PD, I2C_SDA_PD_MASK), 206327aa791dSChristian Marangi PINCTRL_CONF_DESC(43, REG_I2C_SDA_PD, AN7583_I2C1_SCL_PD_MASK), 206427aa791dSChristian Marangi PINCTRL_CONF_DESC(44, REG_I2C_SDA_PD, AN7583_I2C1_SDA_PD_MASK), 206527aa791dSChristian Marangi PINCTRL_CONF_DESC(45, REG_I2C_SDA_PD, SPI_CLK_PD_MASK), 206627aa791dSChristian Marangi PINCTRL_CONF_DESC(46, REG_I2C_SDA_PD, SPI_CS0_PD_MASK), 206727aa791dSChristian Marangi PINCTRL_CONF_DESC(47, REG_I2C_SDA_PD, SPI_MOSI_PD_MASK), 206827aa791dSChristian Marangi PINCTRL_CONF_DESC(48, REG_I2C_SDA_PD, SPI_MISO_PD_MASK), 206927aa791dSChristian Marangi PINCTRL_CONF_DESC(49, REG_I2C_SDA_PD, UART1_TXD_PD_MASK), 207027aa791dSChristian Marangi PINCTRL_CONF_DESC(50, REG_I2C_SDA_PD, UART1_RXD_PD_MASK), 207127aa791dSChristian Marangi PINCTRL_CONF_DESC(51, REG_I2C_SDA_PD, PCIE0_RESET_PD_MASK), 207227aa791dSChristian Marangi PINCTRL_CONF_DESC(52, REG_I2C_SDA_PD, PCIE1_RESET_PD_MASK), 207327aa791dSChristian Marangi PINCTRL_CONF_DESC(53, REG_I2C_SDA_PD, AN7583_MDC_0_PD_MASK), 207427aa791dSChristian Marangi PINCTRL_CONF_DESC(54, REG_I2C_SDA_PD, AN7583_MDIO_0_PD_MASK), 207527aa791dSChristian Marangi }; 207627aa791dSChristian Marangi 207727aa791dSChristian Marangi static const struct airoha_pinctrl_conf en7581_pinctrl_drive_e2_conf[] = { 207827aa791dSChristian Marangi PINCTRL_CONF_DESC(0, REG_I2C_SDA_E2, UART1_TXD_E2_MASK), 207927aa791dSChristian Marangi PINCTRL_CONF_DESC(1, REG_I2C_SDA_E2, UART1_RXD_E2_MASK), 208027aa791dSChristian Marangi PINCTRL_CONF_DESC(2, REG_I2C_SDA_E2, I2C_SDA_E2_MASK), 208127aa791dSChristian Marangi PINCTRL_CONF_DESC(3, REG_I2C_SDA_E2, I2C_SCL_E2_MASK), 208227aa791dSChristian Marangi PINCTRL_CONF_DESC(4, REG_I2C_SDA_E2, SPI_CS0_E2_MASK), 208327aa791dSChristian Marangi PINCTRL_CONF_DESC(5, REG_I2C_SDA_E2, SPI_CLK_E2_MASK), 208427aa791dSChristian Marangi PINCTRL_CONF_DESC(6, REG_I2C_SDA_E2, SPI_MOSI_E2_MASK), 208527aa791dSChristian Marangi PINCTRL_CONF_DESC(7, REG_I2C_SDA_E2, SPI_MISO_E2_MASK), 208627aa791dSChristian Marangi PINCTRL_CONF_DESC(13, REG_GPIO_L_E2, BIT(0)), 208727aa791dSChristian Marangi PINCTRL_CONF_DESC(14, REG_GPIO_L_E2, BIT(1)), 208827aa791dSChristian Marangi PINCTRL_CONF_DESC(15, REG_GPIO_L_E2, BIT(2)), 208927aa791dSChristian Marangi PINCTRL_CONF_DESC(16, REG_GPIO_L_E2, BIT(3)), 209027aa791dSChristian Marangi PINCTRL_CONF_DESC(17, REG_GPIO_L_E2, BIT(4)), 209127aa791dSChristian Marangi PINCTRL_CONF_DESC(18, REG_GPIO_L_E2, BIT(5)), 209227aa791dSChristian Marangi PINCTRL_CONF_DESC(19, REG_GPIO_L_E2, BIT(6)), 209327aa791dSChristian Marangi PINCTRL_CONF_DESC(20, REG_GPIO_L_E2, BIT(7)), 209427aa791dSChristian Marangi PINCTRL_CONF_DESC(21, REG_GPIO_L_E2, BIT(8)), 209527aa791dSChristian Marangi PINCTRL_CONF_DESC(22, REG_GPIO_L_E2, BIT(9)), 209627aa791dSChristian Marangi PINCTRL_CONF_DESC(23, REG_GPIO_L_E2, BIT(10)), 209727aa791dSChristian Marangi PINCTRL_CONF_DESC(24, REG_GPIO_L_E2, BIT(11)), 209827aa791dSChristian Marangi PINCTRL_CONF_DESC(25, REG_GPIO_L_E2, BIT(12)), 209927aa791dSChristian Marangi PINCTRL_CONF_DESC(26, REG_GPIO_L_E2, BIT(13)), 210027aa791dSChristian Marangi PINCTRL_CONF_DESC(27, REG_GPIO_L_E2, BIT(14)), 210127aa791dSChristian Marangi PINCTRL_CONF_DESC(28, REG_GPIO_L_E2, BIT(15)), 210227aa791dSChristian Marangi PINCTRL_CONF_DESC(29, REG_GPIO_L_E2, BIT(16)), 210327aa791dSChristian Marangi PINCTRL_CONF_DESC(30, REG_GPIO_L_E2, BIT(17)), 210427aa791dSChristian Marangi PINCTRL_CONF_DESC(31, REG_GPIO_L_E2, BIT(18)), 210508a39a06SMikhail Kshevetskiy PINCTRL_CONF_DESC(32, REG_GPIO_L_E2, BIT(19)), 210627aa791dSChristian Marangi PINCTRL_CONF_DESC(33, REG_GPIO_L_E2, BIT(20)), 210727aa791dSChristian Marangi PINCTRL_CONF_DESC(34, REG_GPIO_L_E2, BIT(21)), 210827aa791dSChristian Marangi PINCTRL_CONF_DESC(35, REG_GPIO_L_E2, BIT(22)), 210927aa791dSChristian Marangi PINCTRL_CONF_DESC(36, REG_GPIO_L_E2, BIT(23)), 211027aa791dSChristian Marangi PINCTRL_CONF_DESC(37, REG_GPIO_L_E2, BIT(24)), 211127aa791dSChristian Marangi PINCTRL_CONF_DESC(38, REG_GPIO_L_E2, BIT(25)), 211227aa791dSChristian Marangi PINCTRL_CONF_DESC(39, REG_GPIO_L_E2, BIT(26)), 211327aa791dSChristian Marangi PINCTRL_CONF_DESC(40, REG_GPIO_L_E2, BIT(27)), 211427aa791dSChristian Marangi PINCTRL_CONF_DESC(41, REG_GPIO_L_E2, BIT(28)), 211527aa791dSChristian Marangi PINCTRL_CONF_DESC(42, REG_GPIO_L_E2, BIT(29)), 211627aa791dSChristian Marangi PINCTRL_CONF_DESC(43, REG_GPIO_L_E2, BIT(30)), 211727aa791dSChristian Marangi PINCTRL_CONF_DESC(44, REG_GPIO_L_E2, BIT(31)), 211827aa791dSChristian Marangi PINCTRL_CONF_DESC(45, REG_GPIO_H_E2, BIT(0)), 211927aa791dSChristian Marangi PINCTRL_CONF_DESC(46, REG_GPIO_H_E2, BIT(1)), 212027aa791dSChristian Marangi PINCTRL_CONF_DESC(47, REG_GPIO_H_E2, BIT(2)), 212127aa791dSChristian Marangi PINCTRL_CONF_DESC(48, REG_GPIO_H_E2, BIT(3)), 212227aa791dSChristian Marangi PINCTRL_CONF_DESC(49, REG_GPIO_H_E2, BIT(4)), 212327aa791dSChristian Marangi PINCTRL_CONF_DESC(50, REG_GPIO_H_E2, BIT(5)), 212427aa791dSChristian Marangi PINCTRL_CONF_DESC(51, REG_GPIO_H_E2, BIT(6)), 212527aa791dSChristian Marangi PINCTRL_CONF_DESC(52, REG_GPIO_H_E2, BIT(7)), 212627aa791dSChristian Marangi PINCTRL_CONF_DESC(53, REG_GPIO_H_E2, BIT(8)), 212727aa791dSChristian Marangi PINCTRL_CONF_DESC(54, REG_GPIO_H_E2, BIT(9)), 212827aa791dSChristian Marangi PINCTRL_CONF_DESC(55, REG_GPIO_H_E2, BIT(10)), 212927aa791dSChristian Marangi PINCTRL_CONF_DESC(56, REG_GPIO_H_E2, BIT(11)), 213027aa791dSChristian Marangi PINCTRL_CONF_DESC(57, REG_GPIO_H_E2, BIT(12)), 213127aa791dSChristian Marangi PINCTRL_CONF_DESC(58, REG_GPIO_H_E2, BIT(13)), 213227aa791dSChristian Marangi PINCTRL_CONF_DESC(59, REG_GPIO_H_E2, BIT(14)), 213327aa791dSChristian Marangi PINCTRL_CONF_DESC(61, REG_I2C_SDA_E2, PCIE0_RESET_E2_MASK), 213427aa791dSChristian Marangi PINCTRL_CONF_DESC(62, REG_I2C_SDA_E2, PCIE1_RESET_E2_MASK), 213527aa791dSChristian Marangi PINCTRL_CONF_DESC(63, REG_I2C_SDA_E2, PCIE2_RESET_E2_MASK), 213627aa791dSChristian Marangi }; 213727aa791dSChristian Marangi 213827aa791dSChristian Marangi static const struct airoha_pinctrl_conf an7583_pinctrl_drive_e2_conf[] = { 213927aa791dSChristian Marangi PINCTRL_CONF_DESC(2, REG_GPIO_L_E2, BIT(0)), 214027aa791dSChristian Marangi PINCTRL_CONF_DESC(3, REG_GPIO_L_E2, BIT(1)), 214127aa791dSChristian Marangi PINCTRL_CONF_DESC(4, REG_GPIO_L_E2, BIT(2)), 214227aa791dSChristian Marangi PINCTRL_CONF_DESC(5, REG_GPIO_L_E2, BIT(3)), 214327aa791dSChristian Marangi PINCTRL_CONF_DESC(6, REG_GPIO_L_E2, BIT(4)), 214427aa791dSChristian Marangi PINCTRL_CONF_DESC(7, REG_GPIO_L_E2, BIT(5)), 214527aa791dSChristian Marangi PINCTRL_CONF_DESC(8, REG_GPIO_L_E2, BIT(6)), 214627aa791dSChristian Marangi PINCTRL_CONF_DESC(9, REG_GPIO_L_E2, BIT(7)), 214727aa791dSChristian Marangi PINCTRL_CONF_DESC(10, REG_GPIO_L_E2, BIT(8)), 214827aa791dSChristian Marangi PINCTRL_CONF_DESC(11, REG_GPIO_L_E2, BIT(9)), 214927aa791dSChristian Marangi PINCTRL_CONF_DESC(12, REG_GPIO_L_E2, BIT(10)), 215027aa791dSChristian Marangi PINCTRL_CONF_DESC(13, REG_GPIO_L_E2, BIT(11)), 215127aa791dSChristian Marangi PINCTRL_CONF_DESC(14, REG_GPIO_L_E2, BIT(12)), 215227aa791dSChristian Marangi PINCTRL_CONF_DESC(15, REG_GPIO_L_E2, BIT(13)), 215327aa791dSChristian Marangi PINCTRL_CONF_DESC(16, REG_GPIO_L_E2, BIT(14)), 215427aa791dSChristian Marangi PINCTRL_CONF_DESC(17, REG_GPIO_L_E2, BIT(15)), 215527aa791dSChristian Marangi PINCTRL_CONF_DESC(18, REG_GPIO_L_E2, BIT(16)), 215627aa791dSChristian Marangi PINCTRL_CONF_DESC(19, REG_GPIO_L_E2, BIT(17)), 215727aa791dSChristian Marangi PINCTRL_CONF_DESC(20, REG_GPIO_L_E2, BIT(18)), 2158a7f3e2b7SMikhail Kshevetskiy PINCTRL_CONF_DESC(21, REG_GPIO_L_E2, BIT(19)), 215927aa791dSChristian Marangi PINCTRL_CONF_DESC(22, REG_GPIO_L_E2, BIT(20)), 216027aa791dSChristian Marangi PINCTRL_CONF_DESC(23, REG_GPIO_L_E2, BIT(21)), 216127aa791dSChristian Marangi PINCTRL_CONF_DESC(24, REG_GPIO_L_E2, BIT(22)), 216227aa791dSChristian Marangi PINCTRL_CONF_DESC(25, REG_GPIO_L_E2, BIT(23)), 216327aa791dSChristian Marangi PINCTRL_CONF_DESC(26, REG_GPIO_L_E2, BIT(24)), 216427aa791dSChristian Marangi PINCTRL_CONF_DESC(27, REG_GPIO_L_E2, BIT(25)), 216527aa791dSChristian Marangi PINCTRL_CONF_DESC(28, REG_GPIO_L_E2, BIT(26)), 216627aa791dSChristian Marangi PINCTRL_CONF_DESC(29, REG_GPIO_L_E2, BIT(27)), 216727aa791dSChristian Marangi PINCTRL_CONF_DESC(30, REG_GPIO_L_E2, BIT(28)), 216827aa791dSChristian Marangi PINCTRL_CONF_DESC(31, REG_GPIO_L_E2, BIT(29)), 216927aa791dSChristian Marangi PINCTRL_CONF_DESC(32, REG_GPIO_L_E2, BIT(30)), 217027aa791dSChristian Marangi PINCTRL_CONF_DESC(33, REG_GPIO_L_E2, BIT(31)), 217127aa791dSChristian Marangi PINCTRL_CONF_DESC(34, REG_GPIO_H_E2, BIT(0)), 217227aa791dSChristian Marangi PINCTRL_CONF_DESC(35, REG_GPIO_H_E2, BIT(1)), 217327aa791dSChristian Marangi PINCTRL_CONF_DESC(36, REG_GPIO_H_E2, BIT(2)), 217427aa791dSChristian Marangi PINCTRL_CONF_DESC(37, REG_GPIO_H_E2, BIT(3)), 217527aa791dSChristian Marangi PINCTRL_CONF_DESC(38, REG_GPIO_H_E2, BIT(4)), 217627aa791dSChristian Marangi PINCTRL_CONF_DESC(39, REG_GPIO_H_E2, BIT(5)), 217727aa791dSChristian Marangi PINCTRL_CONF_DESC(40, REG_GPIO_H_E2, BIT(6)), 217827aa791dSChristian Marangi PINCTRL_CONF_DESC(41, REG_I2C_SDA_E2, I2C_SCL_E2_MASK), 217927aa791dSChristian Marangi PINCTRL_CONF_DESC(42, REG_I2C_SDA_E2, I2C_SDA_E2_MASK), 218027aa791dSChristian Marangi PINCTRL_CONF_DESC(43, REG_I2C_SDA_E2, AN7583_I2C1_SCL_E2_MASK), 218127aa791dSChristian Marangi PINCTRL_CONF_DESC(44, REG_I2C_SDA_E2, AN7583_I2C1_SDA_E2_MASK), 218227aa791dSChristian Marangi PINCTRL_CONF_DESC(45, REG_I2C_SDA_E2, SPI_CLK_E2_MASK), 218327aa791dSChristian Marangi PINCTRL_CONF_DESC(46, REG_I2C_SDA_E2, SPI_CS0_E2_MASK), 218427aa791dSChristian Marangi PINCTRL_CONF_DESC(47, REG_I2C_SDA_E2, SPI_MOSI_E2_MASK), 218527aa791dSChristian Marangi PINCTRL_CONF_DESC(48, REG_I2C_SDA_E2, SPI_MISO_E2_MASK), 218627aa791dSChristian Marangi PINCTRL_CONF_DESC(49, REG_I2C_SDA_E2, UART1_TXD_E2_MASK), 218727aa791dSChristian Marangi PINCTRL_CONF_DESC(50, REG_I2C_SDA_E2, UART1_RXD_E2_MASK), 218827aa791dSChristian Marangi PINCTRL_CONF_DESC(51, REG_I2C_SDA_E2, PCIE0_RESET_E2_MASK), 218927aa791dSChristian Marangi PINCTRL_CONF_DESC(52, REG_I2C_SDA_E2, PCIE1_RESET_E2_MASK), 219027aa791dSChristian Marangi PINCTRL_CONF_DESC(53, REG_I2C_SDA_E2, AN7583_MDC_0_E2_MASK), 219127aa791dSChristian Marangi PINCTRL_CONF_DESC(54, REG_I2C_SDA_E2, AN7583_MDIO_0_E2_MASK), 219227aa791dSChristian Marangi }; 219327aa791dSChristian Marangi 219427aa791dSChristian Marangi static const struct airoha_pinctrl_conf en7581_pinctrl_drive_e4_conf[] = { 219527aa791dSChristian Marangi PINCTRL_CONF_DESC(0, REG_I2C_SDA_E4, UART1_TXD_E4_MASK), 219627aa791dSChristian Marangi PINCTRL_CONF_DESC(1, REG_I2C_SDA_E4, UART1_RXD_E4_MASK), 219727aa791dSChristian Marangi PINCTRL_CONF_DESC(2, REG_I2C_SDA_E4, I2C_SDA_E4_MASK), 219827aa791dSChristian Marangi PINCTRL_CONF_DESC(3, REG_I2C_SDA_E4, I2C_SCL_E4_MASK), 219927aa791dSChristian Marangi PINCTRL_CONF_DESC(4, REG_I2C_SDA_E4, SPI_CS0_E4_MASK), 220027aa791dSChristian Marangi PINCTRL_CONF_DESC(5, REG_I2C_SDA_E4, SPI_CLK_E4_MASK), 220127aa791dSChristian Marangi PINCTRL_CONF_DESC(6, REG_I2C_SDA_E4, SPI_MOSI_E4_MASK), 220227aa791dSChristian Marangi PINCTRL_CONF_DESC(7, REG_I2C_SDA_E4, SPI_MISO_E4_MASK), 220327aa791dSChristian Marangi PINCTRL_CONF_DESC(13, REG_GPIO_L_E4, BIT(0)), 220427aa791dSChristian Marangi PINCTRL_CONF_DESC(14, REG_GPIO_L_E4, BIT(1)), 220527aa791dSChristian Marangi PINCTRL_CONF_DESC(15, REG_GPIO_L_E4, BIT(2)), 220627aa791dSChristian Marangi PINCTRL_CONF_DESC(16, REG_GPIO_L_E4, BIT(3)), 220727aa791dSChristian Marangi PINCTRL_CONF_DESC(17, REG_GPIO_L_E4, BIT(4)), 220827aa791dSChristian Marangi PINCTRL_CONF_DESC(18, REG_GPIO_L_E4, BIT(5)), 220927aa791dSChristian Marangi PINCTRL_CONF_DESC(19, REG_GPIO_L_E4, BIT(6)), 221027aa791dSChristian Marangi PINCTRL_CONF_DESC(20, REG_GPIO_L_E4, BIT(7)), 221127aa791dSChristian Marangi PINCTRL_CONF_DESC(21, REG_GPIO_L_E4, BIT(8)), 221227aa791dSChristian Marangi PINCTRL_CONF_DESC(22, REG_GPIO_L_E4, BIT(9)), 221327aa791dSChristian Marangi PINCTRL_CONF_DESC(23, REG_GPIO_L_E4, BIT(10)), 221427aa791dSChristian Marangi PINCTRL_CONF_DESC(24, REG_GPIO_L_E4, BIT(11)), 221527aa791dSChristian Marangi PINCTRL_CONF_DESC(25, REG_GPIO_L_E4, BIT(12)), 221627aa791dSChristian Marangi PINCTRL_CONF_DESC(26, REG_GPIO_L_E4, BIT(13)), 221727aa791dSChristian Marangi PINCTRL_CONF_DESC(27, REG_GPIO_L_E4, BIT(14)), 221827aa791dSChristian Marangi PINCTRL_CONF_DESC(28, REG_GPIO_L_E4, BIT(15)), 221927aa791dSChristian Marangi PINCTRL_CONF_DESC(29, REG_GPIO_L_E4, BIT(16)), 222027aa791dSChristian Marangi PINCTRL_CONF_DESC(30, REG_GPIO_L_E4, BIT(17)), 222127aa791dSChristian Marangi PINCTRL_CONF_DESC(31, REG_GPIO_L_E4, BIT(18)), 222208a39a06SMikhail Kshevetskiy PINCTRL_CONF_DESC(32, REG_GPIO_L_E4, BIT(19)), 222327aa791dSChristian Marangi PINCTRL_CONF_DESC(33, REG_GPIO_L_E4, BIT(20)), 222427aa791dSChristian Marangi PINCTRL_CONF_DESC(34, REG_GPIO_L_E4, BIT(21)), 222527aa791dSChristian Marangi PINCTRL_CONF_DESC(35, REG_GPIO_L_E4, BIT(22)), 222627aa791dSChristian Marangi PINCTRL_CONF_DESC(36, REG_GPIO_L_E4, BIT(23)), 222727aa791dSChristian Marangi PINCTRL_CONF_DESC(37, REG_GPIO_L_E4, BIT(24)), 222827aa791dSChristian Marangi PINCTRL_CONF_DESC(38, REG_GPIO_L_E4, BIT(25)), 222927aa791dSChristian Marangi PINCTRL_CONF_DESC(39, REG_GPIO_L_E4, BIT(26)), 223027aa791dSChristian Marangi PINCTRL_CONF_DESC(40, REG_GPIO_L_E4, BIT(27)), 223127aa791dSChristian Marangi PINCTRL_CONF_DESC(41, REG_GPIO_L_E4, BIT(28)), 223227aa791dSChristian Marangi PINCTRL_CONF_DESC(42, REG_GPIO_L_E4, BIT(29)), 223327aa791dSChristian Marangi PINCTRL_CONF_DESC(43, REG_GPIO_L_E4, BIT(30)), 223427aa791dSChristian Marangi PINCTRL_CONF_DESC(44, REG_GPIO_L_E4, BIT(31)), 223527aa791dSChristian Marangi PINCTRL_CONF_DESC(45, REG_GPIO_H_E4, BIT(0)), 223627aa791dSChristian Marangi PINCTRL_CONF_DESC(46, REG_GPIO_H_E4, BIT(1)), 223727aa791dSChristian Marangi PINCTRL_CONF_DESC(47, REG_GPIO_H_E4, BIT(2)), 223827aa791dSChristian Marangi PINCTRL_CONF_DESC(48, REG_GPIO_H_E4, BIT(3)), 223927aa791dSChristian Marangi PINCTRL_CONF_DESC(49, REG_GPIO_H_E4, BIT(4)), 224027aa791dSChristian Marangi PINCTRL_CONF_DESC(50, REG_GPIO_H_E4, BIT(5)), 224127aa791dSChristian Marangi PINCTRL_CONF_DESC(51, REG_GPIO_H_E4, BIT(6)), 224227aa791dSChristian Marangi PINCTRL_CONF_DESC(52, REG_GPIO_H_E4, BIT(7)), 224327aa791dSChristian Marangi PINCTRL_CONF_DESC(53, REG_GPIO_H_E4, BIT(8)), 224427aa791dSChristian Marangi PINCTRL_CONF_DESC(54, REG_GPIO_H_E4, BIT(9)), 224527aa791dSChristian Marangi PINCTRL_CONF_DESC(55, REG_GPIO_H_E4, BIT(10)), 224627aa791dSChristian Marangi PINCTRL_CONF_DESC(56, REG_GPIO_H_E4, BIT(11)), 224727aa791dSChristian Marangi PINCTRL_CONF_DESC(57, REG_GPIO_H_E4, BIT(12)), 224827aa791dSChristian Marangi PINCTRL_CONF_DESC(58, REG_GPIO_H_E4, BIT(13)), 224927aa791dSChristian Marangi PINCTRL_CONF_DESC(59, REG_GPIO_H_E4, BIT(14)), 225027aa791dSChristian Marangi PINCTRL_CONF_DESC(61, REG_I2C_SDA_E4, PCIE0_RESET_E4_MASK), 225127aa791dSChristian Marangi PINCTRL_CONF_DESC(62, REG_I2C_SDA_E4, PCIE1_RESET_E4_MASK), 225227aa791dSChristian Marangi PINCTRL_CONF_DESC(63, REG_I2C_SDA_E4, PCIE2_RESET_E4_MASK), 225327aa791dSChristian Marangi }; 225427aa791dSChristian Marangi 225527aa791dSChristian Marangi static const struct airoha_pinctrl_conf an7583_pinctrl_drive_e4_conf[] = { 225627aa791dSChristian Marangi PINCTRL_CONF_DESC(2, REG_GPIO_L_E4, BIT(0)), 225727aa791dSChristian Marangi PINCTRL_CONF_DESC(3, REG_GPIO_L_E4, BIT(1)), 225827aa791dSChristian Marangi PINCTRL_CONF_DESC(4, REG_GPIO_L_E4, BIT(2)), 225927aa791dSChristian Marangi PINCTRL_CONF_DESC(5, REG_GPIO_L_E4, BIT(3)), 226027aa791dSChristian Marangi PINCTRL_CONF_DESC(6, REG_GPIO_L_E4, BIT(4)), 226127aa791dSChristian Marangi PINCTRL_CONF_DESC(7, REG_GPIO_L_E4, BIT(5)), 226227aa791dSChristian Marangi PINCTRL_CONF_DESC(8, REG_GPIO_L_E4, BIT(6)), 226327aa791dSChristian Marangi PINCTRL_CONF_DESC(9, REG_GPIO_L_E4, BIT(7)), 226427aa791dSChristian Marangi PINCTRL_CONF_DESC(10, REG_GPIO_L_E4, BIT(8)), 226527aa791dSChristian Marangi PINCTRL_CONF_DESC(11, REG_GPIO_L_E4, BIT(9)), 226627aa791dSChristian Marangi PINCTRL_CONF_DESC(12, REG_GPIO_L_E4, BIT(10)), 226727aa791dSChristian Marangi PINCTRL_CONF_DESC(13, REG_GPIO_L_E4, BIT(11)), 226827aa791dSChristian Marangi PINCTRL_CONF_DESC(14, REG_GPIO_L_E4, BIT(12)), 226927aa791dSChristian Marangi PINCTRL_CONF_DESC(15, REG_GPIO_L_E4, BIT(13)), 227027aa791dSChristian Marangi PINCTRL_CONF_DESC(16, REG_GPIO_L_E4, BIT(14)), 227127aa791dSChristian Marangi PINCTRL_CONF_DESC(17, REG_GPIO_L_E4, BIT(15)), 227227aa791dSChristian Marangi PINCTRL_CONF_DESC(18, REG_GPIO_L_E4, BIT(16)), 227327aa791dSChristian Marangi PINCTRL_CONF_DESC(19, REG_GPIO_L_E4, BIT(17)), 227427aa791dSChristian Marangi PINCTRL_CONF_DESC(20, REG_GPIO_L_E4, BIT(18)), 2275a7f3e2b7SMikhail Kshevetskiy PINCTRL_CONF_DESC(21, REG_GPIO_L_E4, BIT(19)), 227627aa791dSChristian Marangi PINCTRL_CONF_DESC(22, REG_GPIO_L_E4, BIT(20)), 227727aa791dSChristian Marangi PINCTRL_CONF_DESC(23, REG_GPIO_L_E4, BIT(21)), 227827aa791dSChristian Marangi PINCTRL_CONF_DESC(24, REG_GPIO_L_E4, BIT(22)), 227927aa791dSChristian Marangi PINCTRL_CONF_DESC(25, REG_GPIO_L_E4, BIT(23)), 228027aa791dSChristian Marangi PINCTRL_CONF_DESC(26, REG_GPIO_L_E4, BIT(24)), 228127aa791dSChristian Marangi PINCTRL_CONF_DESC(27, REG_GPIO_L_E4, BIT(25)), 228227aa791dSChristian Marangi PINCTRL_CONF_DESC(28, REG_GPIO_L_E4, BIT(26)), 228327aa791dSChristian Marangi PINCTRL_CONF_DESC(29, REG_GPIO_L_E4, BIT(27)), 228427aa791dSChristian Marangi PINCTRL_CONF_DESC(30, REG_GPIO_L_E4, BIT(28)), 228527aa791dSChristian Marangi PINCTRL_CONF_DESC(31, REG_GPIO_L_E4, BIT(29)), 228627aa791dSChristian Marangi PINCTRL_CONF_DESC(32, REG_GPIO_L_E4, BIT(30)), 228727aa791dSChristian Marangi PINCTRL_CONF_DESC(33, REG_GPIO_L_E4, BIT(31)), 228827aa791dSChristian Marangi PINCTRL_CONF_DESC(34, REG_GPIO_H_E4, BIT(0)), 228927aa791dSChristian Marangi PINCTRL_CONF_DESC(35, REG_GPIO_H_E4, BIT(1)), 229027aa791dSChristian Marangi PINCTRL_CONF_DESC(36, REG_GPIO_H_E4, BIT(2)), 229127aa791dSChristian Marangi PINCTRL_CONF_DESC(37, REG_GPIO_H_E4, BIT(3)), 229227aa791dSChristian Marangi PINCTRL_CONF_DESC(38, REG_GPIO_H_E4, BIT(4)), 229327aa791dSChristian Marangi PINCTRL_CONF_DESC(39, REG_GPIO_H_E4, BIT(5)), 229427aa791dSChristian Marangi PINCTRL_CONF_DESC(40, REG_GPIO_H_E4, BIT(6)), 229527aa791dSChristian Marangi PINCTRL_CONF_DESC(41, REG_I2C_SDA_E4, I2C_SCL_E4_MASK), 229627aa791dSChristian Marangi PINCTRL_CONF_DESC(42, REG_I2C_SDA_E4, I2C_SDA_E4_MASK), 229727aa791dSChristian Marangi PINCTRL_CONF_DESC(43, REG_I2C_SDA_E4, AN7583_I2C1_SCL_E4_MASK), 229827aa791dSChristian Marangi PINCTRL_CONF_DESC(44, REG_I2C_SDA_E4, AN7583_I2C1_SDA_E4_MASK), 229927aa791dSChristian Marangi PINCTRL_CONF_DESC(45, REG_I2C_SDA_E4, SPI_CLK_E4_MASK), 230027aa791dSChristian Marangi PINCTRL_CONF_DESC(46, REG_I2C_SDA_E4, SPI_CS0_E4_MASK), 230127aa791dSChristian Marangi PINCTRL_CONF_DESC(47, REG_I2C_SDA_E4, SPI_MOSI_E4_MASK), 230227aa791dSChristian Marangi PINCTRL_CONF_DESC(48, REG_I2C_SDA_E4, SPI_MISO_E4_MASK), 230327aa791dSChristian Marangi PINCTRL_CONF_DESC(49, REG_I2C_SDA_E4, UART1_TXD_E4_MASK), 230427aa791dSChristian Marangi PINCTRL_CONF_DESC(50, REG_I2C_SDA_E4, UART1_RXD_E4_MASK), 230527aa791dSChristian Marangi PINCTRL_CONF_DESC(51, REG_I2C_SDA_E4, PCIE0_RESET_E4_MASK), 230627aa791dSChristian Marangi PINCTRL_CONF_DESC(52, REG_I2C_SDA_E4, PCIE1_RESET_E4_MASK), 230727aa791dSChristian Marangi PINCTRL_CONF_DESC(53, REG_I2C_SDA_E4, AN7583_MDC_0_E4_MASK), 230827aa791dSChristian Marangi PINCTRL_CONF_DESC(54, REG_I2C_SDA_E4, AN7583_MDIO_0_E4_MASK), 230927aa791dSChristian Marangi }; 231027aa791dSChristian Marangi 231127aa791dSChristian Marangi static const struct airoha_pinctrl_conf en7581_pinctrl_pcie_rst_od_conf[] = { 231227aa791dSChristian Marangi PINCTRL_CONF_DESC(61, REG_PCIE_RESET_OD, PCIE0_RESET_OD_MASK), 231327aa791dSChristian Marangi PINCTRL_CONF_DESC(62, REG_PCIE_RESET_OD, PCIE1_RESET_OD_MASK), 231427aa791dSChristian Marangi PINCTRL_CONF_DESC(63, REG_PCIE_RESET_OD, PCIE2_RESET_OD_MASK), 231527aa791dSChristian Marangi }; 231627aa791dSChristian Marangi 231727aa791dSChristian Marangi static const struct airoha_pinctrl_conf an7583_pinctrl_pcie_rst_od_conf[] = { 231827aa791dSChristian Marangi PINCTRL_CONF_DESC(51, REG_PCIE_RESET_OD, PCIE0_RESET_OD_MASK), 231927aa791dSChristian Marangi PINCTRL_CONF_DESC(52, REG_PCIE_RESET_OD, PCIE1_RESET_OD_MASK), 232027aa791dSChristian Marangi }; 232127aa791dSChristian Marangi 232227aa791dSChristian Marangi static int airoha_convert_pin_to_reg_offset(struct pinctrl_dev *pctrl_dev, 232327aa791dSChristian Marangi struct pinctrl_gpio_range *range, 232427aa791dSChristian Marangi int pin) 232527aa791dSChristian Marangi { 232627aa791dSChristian Marangi if (!range) 232727aa791dSChristian Marangi range = pinctrl_find_gpio_range_from_pin_nolock(pctrl_dev, 232827aa791dSChristian Marangi pin); 232927aa791dSChristian Marangi if (!range) 233027aa791dSChristian Marangi return -EINVAL; 233127aa791dSChristian Marangi 233227aa791dSChristian Marangi return pin - range->pin_base; 233327aa791dSChristian Marangi } 233427aa791dSChristian Marangi 233527aa791dSChristian Marangi /* gpio callbacks */ 233627aa791dSChristian Marangi static int airoha_gpio_set(struct gpio_chip *chip, unsigned int gpio, 233727aa791dSChristian Marangi int value) 233827aa791dSChristian Marangi { 233927aa791dSChristian Marangi struct airoha_pinctrl *pinctrl = gpiochip_get_data(chip); 234027aa791dSChristian Marangi u32 offset = gpio % AIROHA_PIN_BANK_SIZE; 234127aa791dSChristian Marangi u8 index = gpio / AIROHA_PIN_BANK_SIZE; 234227aa791dSChristian Marangi 234327aa791dSChristian Marangi return regmap_update_bits(pinctrl->regmap, 234427aa791dSChristian Marangi pinctrl->gpiochip.data[index], 234527aa791dSChristian Marangi BIT(offset), value ? BIT(offset) : 0); 234627aa791dSChristian Marangi } 234727aa791dSChristian Marangi 234827aa791dSChristian Marangi static int airoha_gpio_get(struct gpio_chip *chip, unsigned int gpio) 234927aa791dSChristian Marangi { 235027aa791dSChristian Marangi struct airoha_pinctrl *pinctrl = gpiochip_get_data(chip); 235127aa791dSChristian Marangi u32 val, pin = gpio % AIROHA_PIN_BANK_SIZE; 235227aa791dSChristian Marangi u8 index = gpio / AIROHA_PIN_BANK_SIZE; 235327aa791dSChristian Marangi int err; 235427aa791dSChristian Marangi 235527aa791dSChristian Marangi err = regmap_read(pinctrl->regmap, 235627aa791dSChristian Marangi pinctrl->gpiochip.data[index], &val); 235727aa791dSChristian Marangi 235827aa791dSChristian Marangi return err ? err : !!(val & BIT(pin)); 235927aa791dSChristian Marangi } 236027aa791dSChristian Marangi 236127aa791dSChristian Marangi static int airoha_gpio_direction_output(struct gpio_chip *chip, 236227aa791dSChristian Marangi unsigned int gpio, int value) 236327aa791dSChristian Marangi { 236427aa791dSChristian Marangi int err; 236527aa791dSChristian Marangi 236627aa791dSChristian Marangi err = pinctrl_gpio_direction_output(chip, gpio); 236727aa791dSChristian Marangi if (err) 236827aa791dSChristian Marangi return err; 236927aa791dSChristian Marangi 237027aa791dSChristian Marangi return airoha_gpio_set(chip, gpio, value); 237127aa791dSChristian Marangi } 237227aa791dSChristian Marangi 237327aa791dSChristian Marangi /* irq callbacks */ 237427aa791dSChristian Marangi static void airoha_irq_unmask(struct irq_data *data) 237527aa791dSChristian Marangi { 237627aa791dSChristian Marangi u8 offset = data->hwirq % AIROHA_REG_GPIOCTRL_NUM_PIN; 237727aa791dSChristian Marangi u8 index = data->hwirq / AIROHA_REG_GPIOCTRL_NUM_PIN; 237827aa791dSChristian Marangi u32 mask = GENMASK(2 * offset + 1, 2 * offset); 237927aa791dSChristian Marangi struct airoha_pinctrl_gpiochip *gpiochip; 238027aa791dSChristian Marangi struct airoha_pinctrl *pinctrl; 238127aa791dSChristian Marangi u32 val = BIT(2 * offset); 238227aa791dSChristian Marangi 238327aa791dSChristian Marangi gpiochip = irq_data_get_irq_chip_data(data); 238427aa791dSChristian Marangi if (WARN_ON_ONCE(data->hwirq >= ARRAY_SIZE(gpiochip->irq_type))) 238527aa791dSChristian Marangi return; 238627aa791dSChristian Marangi 238727aa791dSChristian Marangi pinctrl = container_of(gpiochip, struct airoha_pinctrl, gpiochip); 238827aa791dSChristian Marangi switch (gpiochip->irq_type[data->hwirq]) { 238927aa791dSChristian Marangi case IRQ_TYPE_LEVEL_LOW: 239027aa791dSChristian Marangi val = val << 1; 239127aa791dSChristian Marangi fallthrough; 239227aa791dSChristian Marangi case IRQ_TYPE_LEVEL_HIGH: 239327aa791dSChristian Marangi regmap_update_bits(pinctrl->regmap, gpiochip->level[index], 239427aa791dSChristian Marangi mask, val); 239527aa791dSChristian Marangi break; 239627aa791dSChristian Marangi case IRQ_TYPE_EDGE_FALLING: 239727aa791dSChristian Marangi val = val << 1; 239827aa791dSChristian Marangi fallthrough; 239927aa791dSChristian Marangi case IRQ_TYPE_EDGE_RISING: 240027aa791dSChristian Marangi regmap_update_bits(pinctrl->regmap, gpiochip->edge[index], 240127aa791dSChristian Marangi mask, val); 240227aa791dSChristian Marangi break; 240327aa791dSChristian Marangi case IRQ_TYPE_EDGE_BOTH: 240427aa791dSChristian Marangi regmap_set_bits(pinctrl->regmap, gpiochip->edge[index], mask); 240527aa791dSChristian Marangi break; 240627aa791dSChristian Marangi default: 240727aa791dSChristian Marangi break; 240827aa791dSChristian Marangi } 240927aa791dSChristian Marangi } 241027aa791dSChristian Marangi 241127aa791dSChristian Marangi static void airoha_irq_mask(struct irq_data *data) 241227aa791dSChristian Marangi { 241327aa791dSChristian Marangi u8 offset = data->hwirq % AIROHA_REG_GPIOCTRL_NUM_PIN; 241427aa791dSChristian Marangi u8 index = data->hwirq / AIROHA_REG_GPIOCTRL_NUM_PIN; 241527aa791dSChristian Marangi u32 mask = GENMASK(2 * offset + 1, 2 * offset); 241627aa791dSChristian Marangi struct airoha_pinctrl_gpiochip *gpiochip; 241727aa791dSChristian Marangi struct airoha_pinctrl *pinctrl; 241827aa791dSChristian Marangi 241927aa791dSChristian Marangi gpiochip = irq_data_get_irq_chip_data(data); 242027aa791dSChristian Marangi pinctrl = container_of(gpiochip, struct airoha_pinctrl, gpiochip); 242127aa791dSChristian Marangi 242227aa791dSChristian Marangi regmap_clear_bits(pinctrl->regmap, gpiochip->level[index], mask); 242327aa791dSChristian Marangi regmap_clear_bits(pinctrl->regmap, gpiochip->edge[index], mask); 242427aa791dSChristian Marangi } 242527aa791dSChristian Marangi 242627aa791dSChristian Marangi static int airoha_irq_type(struct irq_data *data, unsigned int type) 242727aa791dSChristian Marangi { 242827aa791dSChristian Marangi struct airoha_pinctrl_gpiochip *gpiochip; 242927aa791dSChristian Marangi 243027aa791dSChristian Marangi gpiochip = irq_data_get_irq_chip_data(data); 243127aa791dSChristian Marangi if (data->hwirq >= ARRAY_SIZE(gpiochip->irq_type)) 243227aa791dSChristian Marangi return -EINVAL; 243327aa791dSChristian Marangi 243427aa791dSChristian Marangi if (type == IRQ_TYPE_PROBE) { 243527aa791dSChristian Marangi if (gpiochip->irq_type[data->hwirq]) 243627aa791dSChristian Marangi return 0; 243727aa791dSChristian Marangi 243827aa791dSChristian Marangi type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING; 243927aa791dSChristian Marangi } 244027aa791dSChristian Marangi gpiochip->irq_type[data->hwirq] = type & IRQ_TYPE_SENSE_MASK; 244127aa791dSChristian Marangi 244227aa791dSChristian Marangi return 0; 244327aa791dSChristian Marangi } 244427aa791dSChristian Marangi 244527aa791dSChristian Marangi static irqreturn_t airoha_irq_handler(int irq, void *data) 244627aa791dSChristian Marangi { 244727aa791dSChristian Marangi struct airoha_pinctrl *pinctrl = data; 244827aa791dSChristian Marangi bool handled = false; 244927aa791dSChristian Marangi int i; 245027aa791dSChristian Marangi 245127aa791dSChristian Marangi for (i = 0; i < ARRAY_SIZE(irq_status_regs); i++) { 245227aa791dSChristian Marangi struct gpio_irq_chip *girq = &pinctrl->gpiochip.chip.irq; 245327aa791dSChristian Marangi u32 regmap; 245427aa791dSChristian Marangi unsigned long status; 245527aa791dSChristian Marangi int irq; 245627aa791dSChristian Marangi 245727aa791dSChristian Marangi if (regmap_read(pinctrl->regmap, pinctrl->gpiochip.status[i], 245827aa791dSChristian Marangi ®map)) 245927aa791dSChristian Marangi continue; 246027aa791dSChristian Marangi 246127aa791dSChristian Marangi status = regmap; 246227aa791dSChristian Marangi for_each_set_bit(irq, &status, AIROHA_PIN_BANK_SIZE) { 246327aa791dSChristian Marangi u32 offset = irq + i * AIROHA_PIN_BANK_SIZE; 246427aa791dSChristian Marangi 246527aa791dSChristian Marangi generic_handle_irq(irq_find_mapping(girq->domain, 246627aa791dSChristian Marangi offset)); 246727aa791dSChristian Marangi regmap_write(pinctrl->regmap, 246827aa791dSChristian Marangi pinctrl->gpiochip.status[i], BIT(irq)); 246927aa791dSChristian Marangi } 247027aa791dSChristian Marangi handled |= !!status; 247127aa791dSChristian Marangi } 247227aa791dSChristian Marangi 247327aa791dSChristian Marangi return handled ? IRQ_HANDLED : IRQ_NONE; 247427aa791dSChristian Marangi } 247527aa791dSChristian Marangi 247627aa791dSChristian Marangi static const struct irq_chip airoha_gpio_irq_chip = { 247727aa791dSChristian Marangi .name = "airoha-gpio-irq", 247827aa791dSChristian Marangi .irq_unmask = airoha_irq_unmask, 247927aa791dSChristian Marangi .irq_mask = airoha_irq_mask, 248027aa791dSChristian Marangi .irq_mask_ack = airoha_irq_mask, 248127aa791dSChristian Marangi .irq_set_type = airoha_irq_type, 248227aa791dSChristian Marangi .flags = IRQCHIP_SET_TYPE_MASKED | IRQCHIP_IMMUTABLE, 248327aa791dSChristian Marangi }; 248427aa791dSChristian Marangi 248527aa791dSChristian Marangi static int airoha_pinctrl_add_gpiochip(struct airoha_pinctrl *pinctrl, 248627aa791dSChristian Marangi struct platform_device *pdev) 248727aa791dSChristian Marangi { 248827aa791dSChristian Marangi struct airoha_pinctrl_gpiochip *chip = &pinctrl->gpiochip; 248927aa791dSChristian Marangi struct gpio_chip *gc = &chip->chip; 249027aa791dSChristian Marangi struct gpio_irq_chip *girq = &gc->irq; 249127aa791dSChristian Marangi struct device *dev = &pdev->dev; 249227aa791dSChristian Marangi int irq, err; 249327aa791dSChristian Marangi 249427aa791dSChristian Marangi chip->data = gpio_data_regs; 249527aa791dSChristian Marangi chip->dir = gpio_dir_regs; 249627aa791dSChristian Marangi chip->out = gpio_out_regs; 249727aa791dSChristian Marangi chip->status = irq_status_regs; 249827aa791dSChristian Marangi chip->level = irq_level_regs; 249927aa791dSChristian Marangi chip->edge = irq_edge_regs; 250027aa791dSChristian Marangi 250127aa791dSChristian Marangi gc->parent = dev; 250227aa791dSChristian Marangi gc->label = dev_name(dev); 250327aa791dSChristian Marangi gc->request = gpiochip_generic_request; 250427aa791dSChristian Marangi gc->free = gpiochip_generic_free; 250527aa791dSChristian Marangi gc->direction_input = pinctrl_gpio_direction_input; 250627aa791dSChristian Marangi gc->direction_output = airoha_gpio_direction_output; 250727aa791dSChristian Marangi gc->set = airoha_gpio_set; 250827aa791dSChristian Marangi gc->get = airoha_gpio_get; 250927aa791dSChristian Marangi gc->base = -1; 251027aa791dSChristian Marangi gc->ngpio = AIROHA_NUM_PINS; 251127aa791dSChristian Marangi 251227aa791dSChristian Marangi girq->default_type = IRQ_TYPE_NONE; 251327aa791dSChristian Marangi girq->handler = handle_simple_irq; 251427aa791dSChristian Marangi gpio_irq_chip_set_chip(girq, &airoha_gpio_irq_chip); 251527aa791dSChristian Marangi 251627aa791dSChristian Marangi irq = platform_get_irq(pdev, 0); 251727aa791dSChristian Marangi if (irq < 0) 251827aa791dSChristian Marangi return irq; 251927aa791dSChristian Marangi 252027aa791dSChristian Marangi err = devm_request_irq(dev, irq, airoha_irq_handler, IRQF_SHARED, 252127aa791dSChristian Marangi dev_name(dev), pinctrl); 252227aa791dSChristian Marangi if (err) { 252327aa791dSChristian Marangi dev_err(dev, "error requesting irq %d: %d\n", irq, err); 252427aa791dSChristian Marangi return err; 252527aa791dSChristian Marangi } 252627aa791dSChristian Marangi 252727aa791dSChristian Marangi return devm_gpiochip_add_data(dev, gc, pinctrl); 252827aa791dSChristian Marangi } 252927aa791dSChristian Marangi 253027aa791dSChristian Marangi /* pinmux callbacks */ 253127aa791dSChristian Marangi static int airoha_pinmux_set_mux(struct pinctrl_dev *pctrl_dev, 253227aa791dSChristian Marangi unsigned int selector, 253327aa791dSChristian Marangi unsigned int group) 253427aa791dSChristian Marangi { 253527aa791dSChristian Marangi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev); 253627aa791dSChristian Marangi const struct airoha_pinctrl_func *func; 253727aa791dSChristian Marangi const struct function_desc *desc; 253827aa791dSChristian Marangi struct group_desc *grp; 253927aa791dSChristian Marangi int i; 254027aa791dSChristian Marangi 254127aa791dSChristian Marangi desc = pinmux_generic_get_function(pctrl_dev, selector); 254227aa791dSChristian Marangi if (!desc) 254327aa791dSChristian Marangi return -EINVAL; 254427aa791dSChristian Marangi 254527aa791dSChristian Marangi grp = pinctrl_generic_get_group(pctrl_dev, group); 254627aa791dSChristian Marangi if (!grp) 254727aa791dSChristian Marangi return -EINVAL; 254827aa791dSChristian Marangi 254927aa791dSChristian Marangi dev_dbg(pctrl_dev->dev, "enable function %s group %s\n", 255027aa791dSChristian Marangi desc->func->name, grp->grp.name); 255127aa791dSChristian Marangi 255227aa791dSChristian Marangi func = desc->data; 255327aa791dSChristian Marangi for (i = 0; i < func->group_size; i++) { 255427aa791dSChristian Marangi const struct airoha_pinctrl_func_group *group; 255527aa791dSChristian Marangi int j; 255627aa791dSChristian Marangi 255727aa791dSChristian Marangi group = &func->groups[i]; 255827aa791dSChristian Marangi if (strcmp(group->name, grp->grp.name)) 255927aa791dSChristian Marangi continue; 256027aa791dSChristian Marangi 256127aa791dSChristian Marangi for (j = 0; j < group->regmap_size; j++) { 256227aa791dSChristian Marangi switch (group->regmap[j].mux) { 256327aa791dSChristian Marangi case AIROHA_FUNC_PWM_EXT_MUX: 256427aa791dSChristian Marangi case AIROHA_FUNC_PWM_MUX: 256527aa791dSChristian Marangi regmap_update_bits(pinctrl->regmap, 256627aa791dSChristian Marangi group->regmap[j].offset, 256727aa791dSChristian Marangi group->regmap[j].mask, 256827aa791dSChristian Marangi group->regmap[j].val); 256927aa791dSChristian Marangi break; 257027aa791dSChristian Marangi default: 257127aa791dSChristian Marangi regmap_update_bits(pinctrl->chip_scu, 257227aa791dSChristian Marangi group->regmap[j].offset, 257327aa791dSChristian Marangi group->regmap[j].mask, 257427aa791dSChristian Marangi group->regmap[j].val); 257527aa791dSChristian Marangi break; 257627aa791dSChristian Marangi } 257727aa791dSChristian Marangi } 257827aa791dSChristian Marangi return 0; 257927aa791dSChristian Marangi } 258027aa791dSChristian Marangi 258127aa791dSChristian Marangi return -EINVAL; 258227aa791dSChristian Marangi } 258327aa791dSChristian Marangi 258427aa791dSChristian Marangi static int airoha_pinmux_set_direction(struct pinctrl_dev *pctrl_dev, 258527aa791dSChristian Marangi struct pinctrl_gpio_range *range, 258627aa791dSChristian Marangi unsigned int p, bool input) 258727aa791dSChristian Marangi { 258827aa791dSChristian Marangi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev); 258927aa791dSChristian Marangi u32 mask, index; 259027aa791dSChristian Marangi int err, pin; 259127aa791dSChristian Marangi 259227aa791dSChristian Marangi pin = airoha_convert_pin_to_reg_offset(pctrl_dev, range, p); 259327aa791dSChristian Marangi if (pin < 0) 259427aa791dSChristian Marangi return pin; 259527aa791dSChristian Marangi 259627aa791dSChristian Marangi /* set output enable */ 259727aa791dSChristian Marangi mask = BIT(pin % AIROHA_PIN_BANK_SIZE); 259827aa791dSChristian Marangi index = pin / AIROHA_PIN_BANK_SIZE; 259927aa791dSChristian Marangi err = regmap_update_bits(pinctrl->regmap, pinctrl->gpiochip.out[index], 260027aa791dSChristian Marangi mask, !input ? mask : 0); 260127aa791dSChristian Marangi if (err) 260227aa791dSChristian Marangi return err; 260327aa791dSChristian Marangi 260427aa791dSChristian Marangi /* set direction */ 260527aa791dSChristian Marangi mask = BIT(2 * (pin % AIROHA_REG_GPIOCTRL_NUM_PIN)); 260627aa791dSChristian Marangi index = pin / AIROHA_REG_GPIOCTRL_NUM_PIN; 260727aa791dSChristian Marangi return regmap_update_bits(pinctrl->regmap, 260827aa791dSChristian Marangi pinctrl->gpiochip.dir[index], mask, 260927aa791dSChristian Marangi !input ? mask : 0); 261027aa791dSChristian Marangi } 261127aa791dSChristian Marangi 261227aa791dSChristian Marangi static const struct pinmux_ops airoha_pmxops = { 261327aa791dSChristian Marangi .get_functions_count = pinmux_generic_get_function_count, 261427aa791dSChristian Marangi .get_function_name = pinmux_generic_get_function_name, 261527aa791dSChristian Marangi .get_function_groups = pinmux_generic_get_function_groups, 261627aa791dSChristian Marangi .gpio_set_direction = airoha_pinmux_set_direction, 261727aa791dSChristian Marangi .set_mux = airoha_pinmux_set_mux, 261827aa791dSChristian Marangi .strict = true, 261927aa791dSChristian Marangi }; 262027aa791dSChristian Marangi 262127aa791dSChristian Marangi /* pinconf callbacks */ 262227aa791dSChristian Marangi static const struct airoha_pinctrl_reg * 262327aa791dSChristian Marangi airoha_pinctrl_get_conf_reg(const struct airoha_pinctrl_conf *conf, 262427aa791dSChristian Marangi int conf_size, int pin) 262527aa791dSChristian Marangi { 262627aa791dSChristian Marangi int i; 262727aa791dSChristian Marangi 262827aa791dSChristian Marangi for (i = 0; i < conf_size; i++) { 262927aa791dSChristian Marangi if (conf[i].pin == pin) 263027aa791dSChristian Marangi return &conf[i].reg; 263127aa791dSChristian Marangi } 263227aa791dSChristian Marangi 263327aa791dSChristian Marangi return NULL; 263427aa791dSChristian Marangi } 263527aa791dSChristian Marangi 263627aa791dSChristian Marangi static int airoha_pinctrl_get_conf(struct airoha_pinctrl *pinctrl, 263727aa791dSChristian Marangi enum airoha_pinctrl_confs_type conf_type, 263827aa791dSChristian Marangi int pin, u32 *val) 263927aa791dSChristian Marangi { 264027aa791dSChristian Marangi const struct airoha_pinctrl_confs_info *confs_info; 264127aa791dSChristian Marangi const struct airoha_pinctrl_reg *reg; 264227aa791dSChristian Marangi 264327aa791dSChristian Marangi confs_info = &pinctrl->confs_info[conf_type]; 264427aa791dSChristian Marangi 264527aa791dSChristian Marangi reg = airoha_pinctrl_get_conf_reg(confs_info->confs, 264627aa791dSChristian Marangi confs_info->num_confs, 264727aa791dSChristian Marangi pin); 264827aa791dSChristian Marangi if (!reg) 264927aa791dSChristian Marangi return -EINVAL; 265027aa791dSChristian Marangi 265127aa791dSChristian Marangi if (regmap_read(pinctrl->chip_scu, reg->offset, val)) 265227aa791dSChristian Marangi return -EINVAL; 265327aa791dSChristian Marangi 265427aa791dSChristian Marangi *val = (*val & reg->mask) >> __ffs(reg->mask); 265527aa791dSChristian Marangi 265627aa791dSChristian Marangi return 0; 265727aa791dSChristian Marangi } 265827aa791dSChristian Marangi 265927aa791dSChristian Marangi static int airoha_pinctrl_set_conf(struct airoha_pinctrl *pinctrl, 266027aa791dSChristian Marangi enum airoha_pinctrl_confs_type conf_type, 266127aa791dSChristian Marangi int pin, u32 val) 266227aa791dSChristian Marangi { 266327aa791dSChristian Marangi const struct airoha_pinctrl_confs_info *confs_info; 266427aa791dSChristian Marangi const struct airoha_pinctrl_reg *reg = NULL; 266527aa791dSChristian Marangi 266627aa791dSChristian Marangi confs_info = &pinctrl->confs_info[conf_type]; 266727aa791dSChristian Marangi 266827aa791dSChristian Marangi reg = airoha_pinctrl_get_conf_reg(confs_info->confs, 266927aa791dSChristian Marangi confs_info->num_confs, 267027aa791dSChristian Marangi pin); 267127aa791dSChristian Marangi if (!reg) 267227aa791dSChristian Marangi return -EINVAL; 267327aa791dSChristian Marangi 267427aa791dSChristian Marangi 267527aa791dSChristian Marangi if (regmap_update_bits(pinctrl->chip_scu, reg->offset, reg->mask, 267627aa791dSChristian Marangi val << __ffs(reg->mask))) 267727aa791dSChristian Marangi return -EINVAL; 267827aa791dSChristian Marangi 267927aa791dSChristian Marangi return 0; 268027aa791dSChristian Marangi } 268127aa791dSChristian Marangi 268227aa791dSChristian Marangi #define airoha_pinctrl_get_pullup_conf(pinctrl, pin, val) \ 268327aa791dSChristian Marangi airoha_pinctrl_get_conf((pinctrl), AIROHA_PINCTRL_CONFS_PULLUP, \ 268427aa791dSChristian Marangi (pin), (val)) 268527aa791dSChristian Marangi #define airoha_pinctrl_get_pulldown_conf(pinctrl, pin, val) \ 268627aa791dSChristian Marangi airoha_pinctrl_get_conf((pinctrl), AIROHA_PINCTRL_CONFS_PULLDOWN, \ 268727aa791dSChristian Marangi (pin), (val)) 268827aa791dSChristian Marangi #define airoha_pinctrl_get_drive_e2_conf(pinctrl, pin, val) \ 268927aa791dSChristian Marangi airoha_pinctrl_get_conf((pinctrl), AIROHA_PINCTRL_CONFS_DRIVE_E2, \ 269027aa791dSChristian Marangi (pin), (val)) 269127aa791dSChristian Marangi #define airoha_pinctrl_get_drive_e4_conf(pinctrl, pin, val) \ 269227aa791dSChristian Marangi airoha_pinctrl_get_conf((pinctrl), AIROHA_PINCTRL_CONFS_DRIVE_E4, \ 269327aa791dSChristian Marangi (pin), (val)) 269427aa791dSChristian Marangi #define airoha_pinctrl_get_pcie_rst_od_conf(pinctrl, pin, val) \ 269527aa791dSChristian Marangi airoha_pinctrl_get_conf((pinctrl), AIROHA_PINCTRL_CONFS_PCIE_RST_OD, \ 269627aa791dSChristian Marangi (pin), (val)) 269727aa791dSChristian Marangi #define airoha_pinctrl_set_pullup_conf(pinctrl, pin, val) \ 269827aa791dSChristian Marangi airoha_pinctrl_set_conf((pinctrl), AIROHA_PINCTRL_CONFS_PULLUP, \ 269927aa791dSChristian Marangi (pin), (val)) 270027aa791dSChristian Marangi #define airoha_pinctrl_set_pulldown_conf(pinctrl, pin, val) \ 270127aa791dSChristian Marangi airoha_pinctrl_set_conf((pinctrl), AIROHA_PINCTRL_CONFS_PULLDOWN, \ 270227aa791dSChristian Marangi (pin), (val)) 270327aa791dSChristian Marangi #define airoha_pinctrl_set_drive_e2_conf(pinctrl, pin, val) \ 270427aa791dSChristian Marangi airoha_pinctrl_set_conf((pinctrl), AIROHA_PINCTRL_CONFS_DRIVE_E2, \ 270527aa791dSChristian Marangi (pin), (val)) 270627aa791dSChristian Marangi #define airoha_pinctrl_set_drive_e4_conf(pinctrl, pin, val) \ 270727aa791dSChristian Marangi airoha_pinctrl_set_conf((pinctrl), AIROHA_PINCTRL_CONFS_DRIVE_E4, \ 270827aa791dSChristian Marangi (pin), (val)) 270927aa791dSChristian Marangi #define airoha_pinctrl_set_pcie_rst_od_conf(pinctrl, pin, val) \ 271027aa791dSChristian Marangi airoha_pinctrl_set_conf((pinctrl), AIROHA_PINCTRL_CONFS_PCIE_RST_OD, \ 271127aa791dSChristian Marangi (pin), (val)) 271227aa791dSChristian Marangi 271327aa791dSChristian Marangi static int airoha_pinconf_get_direction(struct pinctrl_dev *pctrl_dev, u32 p) 271427aa791dSChristian Marangi { 271527aa791dSChristian Marangi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev); 271627aa791dSChristian Marangi u32 val, mask; 271727aa791dSChristian Marangi int err, pin; 271827aa791dSChristian Marangi u8 index; 271927aa791dSChristian Marangi 272027aa791dSChristian Marangi pin = airoha_convert_pin_to_reg_offset(pctrl_dev, NULL, p); 272127aa791dSChristian Marangi if (pin < 0) 272227aa791dSChristian Marangi return pin; 272327aa791dSChristian Marangi 272427aa791dSChristian Marangi index = pin / AIROHA_REG_GPIOCTRL_NUM_PIN; 272527aa791dSChristian Marangi err = regmap_read(pinctrl->regmap, pinctrl->gpiochip.dir[index], &val); 272627aa791dSChristian Marangi if (err) 272727aa791dSChristian Marangi return err; 272827aa791dSChristian Marangi 272927aa791dSChristian Marangi mask = BIT(2 * (pin % AIROHA_REG_GPIOCTRL_NUM_PIN)); 273027aa791dSChristian Marangi return val & mask ? PIN_CONFIG_OUTPUT_ENABLE : PIN_CONFIG_INPUT_ENABLE; 273127aa791dSChristian Marangi } 273227aa791dSChristian Marangi 273327aa791dSChristian Marangi static int airoha_pinconf_get(struct pinctrl_dev *pctrl_dev, 273427aa791dSChristian Marangi unsigned int pin, unsigned long *config) 273527aa791dSChristian Marangi { 273627aa791dSChristian Marangi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev); 273727aa791dSChristian Marangi enum pin_config_param param = pinconf_to_config_param(*config); 273827aa791dSChristian Marangi u32 arg; 273927aa791dSChristian Marangi 274027aa791dSChristian Marangi switch (param) { 274127aa791dSChristian Marangi case PIN_CONFIG_BIAS_PULL_DOWN: 274227aa791dSChristian Marangi case PIN_CONFIG_BIAS_DISABLE: 274327aa791dSChristian Marangi case PIN_CONFIG_BIAS_PULL_UP: { 274427aa791dSChristian Marangi u32 pull_up, pull_down; 274527aa791dSChristian Marangi 274627aa791dSChristian Marangi if (airoha_pinctrl_get_pullup_conf(pinctrl, pin, &pull_up) || 274727aa791dSChristian Marangi airoha_pinctrl_get_pulldown_conf(pinctrl, pin, &pull_down)) 274827aa791dSChristian Marangi return -EINVAL; 274927aa791dSChristian Marangi 275027aa791dSChristian Marangi if (param == PIN_CONFIG_BIAS_PULL_UP && 275127aa791dSChristian Marangi !(pull_up && !pull_down)) 275227aa791dSChristian Marangi return -EINVAL; 275327aa791dSChristian Marangi else if (param == PIN_CONFIG_BIAS_PULL_DOWN && 275427aa791dSChristian Marangi !(pull_down && !pull_up)) 275527aa791dSChristian Marangi return -EINVAL; 275627aa791dSChristian Marangi else if (pull_up || pull_down) 275727aa791dSChristian Marangi return -EINVAL; 275827aa791dSChristian Marangi 275927aa791dSChristian Marangi arg = 1; 276027aa791dSChristian Marangi break; 276127aa791dSChristian Marangi } 276227aa791dSChristian Marangi case PIN_CONFIG_DRIVE_STRENGTH: { 276327aa791dSChristian Marangi u32 e2, e4; 276427aa791dSChristian Marangi 276527aa791dSChristian Marangi if (airoha_pinctrl_get_drive_e2_conf(pinctrl, pin, &e2) || 276627aa791dSChristian Marangi airoha_pinctrl_get_drive_e4_conf(pinctrl, pin, &e4)) 276727aa791dSChristian Marangi return -EINVAL; 276827aa791dSChristian Marangi 276927aa791dSChristian Marangi arg = e4 << 1 | e2; 277027aa791dSChristian Marangi break; 277127aa791dSChristian Marangi } 277227aa791dSChristian Marangi case PIN_CONFIG_DRIVE_OPEN_DRAIN: 277327aa791dSChristian Marangi if (airoha_pinctrl_get_pcie_rst_od_conf(pinctrl, pin, &arg)) 277427aa791dSChristian Marangi return -EINVAL; 277527aa791dSChristian Marangi break; 277627aa791dSChristian Marangi case PIN_CONFIG_OUTPUT_ENABLE: 277727aa791dSChristian Marangi case PIN_CONFIG_INPUT_ENABLE: 277827aa791dSChristian Marangi arg = airoha_pinconf_get_direction(pctrl_dev, pin); 277927aa791dSChristian Marangi if (arg != param) 278027aa791dSChristian Marangi return -EINVAL; 278127aa791dSChristian Marangi 278227aa791dSChristian Marangi arg = 1; 278327aa791dSChristian Marangi break; 278427aa791dSChristian Marangi default: 278527aa791dSChristian Marangi return -ENOTSUPP; 278627aa791dSChristian Marangi } 278727aa791dSChristian Marangi 278827aa791dSChristian Marangi *config = pinconf_to_config_packed(param, arg); 278927aa791dSChristian Marangi 279027aa791dSChristian Marangi return 0; 279127aa791dSChristian Marangi } 279227aa791dSChristian Marangi 279327aa791dSChristian Marangi static int airoha_pinconf_set_pin_value(struct pinctrl_dev *pctrl_dev, 279427aa791dSChristian Marangi unsigned int p, bool value) 279527aa791dSChristian Marangi { 279627aa791dSChristian Marangi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev); 279727aa791dSChristian Marangi int pin; 279827aa791dSChristian Marangi 279927aa791dSChristian Marangi pin = airoha_convert_pin_to_reg_offset(pctrl_dev, NULL, p); 280027aa791dSChristian Marangi if (pin < 0) 280127aa791dSChristian Marangi return pin; 280227aa791dSChristian Marangi 280327aa791dSChristian Marangi return airoha_gpio_set(&pinctrl->gpiochip.chip, pin, value); 280427aa791dSChristian Marangi } 280527aa791dSChristian Marangi 280627aa791dSChristian Marangi static int airoha_pinconf_set(struct pinctrl_dev *pctrl_dev, 280727aa791dSChristian Marangi unsigned int pin, unsigned long *configs, 280827aa791dSChristian Marangi unsigned int num_configs) 280927aa791dSChristian Marangi { 281027aa791dSChristian Marangi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev); 281127aa791dSChristian Marangi int i; 281227aa791dSChristian Marangi 281327aa791dSChristian Marangi for (i = 0; i < num_configs; i++) { 281427aa791dSChristian Marangi u32 param = pinconf_to_config_param(configs[i]); 281527aa791dSChristian Marangi u32 arg = pinconf_to_config_argument(configs[i]); 281627aa791dSChristian Marangi 281727aa791dSChristian Marangi switch (param) { 281827aa791dSChristian Marangi case PIN_CONFIG_BIAS_DISABLE: 281927aa791dSChristian Marangi airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 0); 282027aa791dSChristian Marangi airoha_pinctrl_set_pullup_conf(pinctrl, pin, 0); 282127aa791dSChristian Marangi break; 282227aa791dSChristian Marangi case PIN_CONFIG_BIAS_PULL_UP: 282327aa791dSChristian Marangi airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 0); 282427aa791dSChristian Marangi airoha_pinctrl_set_pullup_conf(pinctrl, pin, 1); 282527aa791dSChristian Marangi break; 282627aa791dSChristian Marangi case PIN_CONFIG_BIAS_PULL_DOWN: 282727aa791dSChristian Marangi airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 1); 282827aa791dSChristian Marangi airoha_pinctrl_set_pullup_conf(pinctrl, pin, 0); 282927aa791dSChristian Marangi break; 283027aa791dSChristian Marangi case PIN_CONFIG_DRIVE_STRENGTH: { 283127aa791dSChristian Marangi u32 e2 = 0, e4 = 0; 283227aa791dSChristian Marangi 283327aa791dSChristian Marangi switch (arg) { 283427aa791dSChristian Marangi case MTK_DRIVE_2mA: 283527aa791dSChristian Marangi break; 283627aa791dSChristian Marangi case MTK_DRIVE_4mA: 283727aa791dSChristian Marangi e2 = 1; 283827aa791dSChristian Marangi break; 283927aa791dSChristian Marangi case MTK_DRIVE_6mA: 284027aa791dSChristian Marangi e4 = 1; 284127aa791dSChristian Marangi break; 284227aa791dSChristian Marangi case MTK_DRIVE_8mA: 284327aa791dSChristian Marangi e2 = 1; 284427aa791dSChristian Marangi e4 = 1; 284527aa791dSChristian Marangi break; 284627aa791dSChristian Marangi default: 284727aa791dSChristian Marangi return -EINVAL; 284827aa791dSChristian Marangi } 284927aa791dSChristian Marangi 285027aa791dSChristian Marangi airoha_pinctrl_set_drive_e2_conf(pinctrl, pin, e2); 285127aa791dSChristian Marangi airoha_pinctrl_set_drive_e4_conf(pinctrl, pin, e4); 285227aa791dSChristian Marangi break; 285327aa791dSChristian Marangi } 285427aa791dSChristian Marangi case PIN_CONFIG_DRIVE_OPEN_DRAIN: 285527aa791dSChristian Marangi airoha_pinctrl_set_pcie_rst_od_conf(pinctrl, pin, !!arg); 285627aa791dSChristian Marangi break; 285727aa791dSChristian Marangi case PIN_CONFIG_OUTPUT_ENABLE: 285827aa791dSChristian Marangi case PIN_CONFIG_INPUT_ENABLE: 285927aa791dSChristian Marangi case PIN_CONFIG_LEVEL: { 286027aa791dSChristian Marangi bool input = param == PIN_CONFIG_INPUT_ENABLE; 286127aa791dSChristian Marangi int err; 286227aa791dSChristian Marangi 286327aa791dSChristian Marangi err = airoha_pinmux_set_direction(pctrl_dev, NULL, pin, 286427aa791dSChristian Marangi input); 286527aa791dSChristian Marangi if (err) 286627aa791dSChristian Marangi return err; 286727aa791dSChristian Marangi 286827aa791dSChristian Marangi if (param == PIN_CONFIG_LEVEL) { 286927aa791dSChristian Marangi err = airoha_pinconf_set_pin_value(pctrl_dev, 287027aa791dSChristian Marangi pin, !!arg); 287127aa791dSChristian Marangi if (err) 287227aa791dSChristian Marangi return err; 287327aa791dSChristian Marangi } 287427aa791dSChristian Marangi break; 287527aa791dSChristian Marangi } 287627aa791dSChristian Marangi default: 287727aa791dSChristian Marangi return -ENOTSUPP; 287827aa791dSChristian Marangi } 287927aa791dSChristian Marangi } 288027aa791dSChristian Marangi 288127aa791dSChristian Marangi return 0; 288227aa791dSChristian Marangi } 288327aa791dSChristian Marangi 288427aa791dSChristian Marangi static int airoha_pinconf_group_get(struct pinctrl_dev *pctrl_dev, 288527aa791dSChristian Marangi unsigned int group, unsigned long *config) 288627aa791dSChristian Marangi { 288727aa791dSChristian Marangi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev); 288827aa791dSChristian Marangi unsigned long cur_config = 0; 288927aa791dSChristian Marangi int i; 289027aa791dSChristian Marangi 289127aa791dSChristian Marangi for (i = 0; i < pinctrl->grps[group].npins; i++) { 289227aa791dSChristian Marangi if (airoha_pinconf_get(pctrl_dev, 289327aa791dSChristian Marangi pinctrl->grps[group].pins[i], 289427aa791dSChristian Marangi config)) 289527aa791dSChristian Marangi return -ENOTSUPP; 289627aa791dSChristian Marangi 289727aa791dSChristian Marangi if (i && cur_config != *config) 289827aa791dSChristian Marangi return -ENOTSUPP; 289927aa791dSChristian Marangi 290027aa791dSChristian Marangi cur_config = *config; 290127aa791dSChristian Marangi } 290227aa791dSChristian Marangi 290327aa791dSChristian Marangi return 0; 290427aa791dSChristian Marangi } 290527aa791dSChristian Marangi 290627aa791dSChristian Marangi static int airoha_pinconf_group_set(struct pinctrl_dev *pctrl_dev, 290727aa791dSChristian Marangi unsigned int group, unsigned long *configs, 290827aa791dSChristian Marangi unsigned int num_configs) 290927aa791dSChristian Marangi { 291027aa791dSChristian Marangi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev); 291127aa791dSChristian Marangi int i; 291227aa791dSChristian Marangi 291327aa791dSChristian Marangi for (i = 0; i < pinctrl->grps[group].npins; i++) { 291427aa791dSChristian Marangi int err; 291527aa791dSChristian Marangi 291627aa791dSChristian Marangi err = airoha_pinconf_set(pctrl_dev, 291727aa791dSChristian Marangi pinctrl->grps[group].pins[i], 291827aa791dSChristian Marangi configs, num_configs); 291927aa791dSChristian Marangi if (err) 292027aa791dSChristian Marangi return err; 292127aa791dSChristian Marangi } 292227aa791dSChristian Marangi 292327aa791dSChristian Marangi return 0; 292427aa791dSChristian Marangi } 292527aa791dSChristian Marangi 292627aa791dSChristian Marangi static const struct pinconf_ops airoha_confops = { 292727aa791dSChristian Marangi .is_generic = true, 292827aa791dSChristian Marangi .pin_config_get = airoha_pinconf_get, 292927aa791dSChristian Marangi .pin_config_set = airoha_pinconf_set, 293027aa791dSChristian Marangi .pin_config_group_get = airoha_pinconf_group_get, 293127aa791dSChristian Marangi .pin_config_group_set = airoha_pinconf_group_set, 293227aa791dSChristian Marangi .pin_config_config_dbg_show = pinconf_generic_dump_config, 293327aa791dSChristian Marangi }; 293427aa791dSChristian Marangi 293527aa791dSChristian Marangi static const struct pinctrl_ops airoha_pctlops = { 293627aa791dSChristian Marangi .get_groups_count = pinctrl_generic_get_group_count, 293727aa791dSChristian Marangi .get_group_name = pinctrl_generic_get_group_name, 293827aa791dSChristian Marangi .get_group_pins = pinctrl_generic_get_group_pins, 293927aa791dSChristian Marangi .dt_node_to_map = pinconf_generic_dt_node_to_map_all, 294027aa791dSChristian Marangi .dt_free_map = pinconf_generic_dt_free_map, 294127aa791dSChristian Marangi }; 294227aa791dSChristian Marangi 294327aa791dSChristian Marangi static int airoha_pinctrl_probe(struct platform_device *pdev) 294427aa791dSChristian Marangi { 294527aa791dSChristian Marangi const struct airoha_pinctrl_match_data *data; 294627aa791dSChristian Marangi struct device *dev = &pdev->dev; 294727aa791dSChristian Marangi struct airoha_pinctrl *pinctrl; 294827aa791dSChristian Marangi struct regmap *map; 294927aa791dSChristian Marangi int err, i; 295027aa791dSChristian Marangi 295127aa791dSChristian Marangi data = device_get_match_data(dev); 295227aa791dSChristian Marangi 295327aa791dSChristian Marangi pinctrl = devm_kzalloc(dev, sizeof(*pinctrl), GFP_KERNEL); 295427aa791dSChristian Marangi if (!pinctrl) 295527aa791dSChristian Marangi return -ENOMEM; 295627aa791dSChristian Marangi 295727aa791dSChristian Marangi pinctrl->regmap = device_node_to_regmap(dev->parent->of_node); 295827aa791dSChristian Marangi if (IS_ERR(pinctrl->regmap)) 295927aa791dSChristian Marangi return PTR_ERR(pinctrl->regmap); 296027aa791dSChristian Marangi 296127aa791dSChristian Marangi map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu"); 296227aa791dSChristian Marangi if (IS_ERR(map)) 296327aa791dSChristian Marangi return PTR_ERR(map); 296427aa791dSChristian Marangi 296527aa791dSChristian Marangi pinctrl->chip_scu = map; 296627aa791dSChristian Marangi 296727aa791dSChristian Marangi /* Init pinctrl desc struct */ 296827aa791dSChristian Marangi pinctrl->desc.name = KBUILD_MODNAME; 296927aa791dSChristian Marangi pinctrl->desc.owner = THIS_MODULE; 297027aa791dSChristian Marangi pinctrl->desc.pctlops = &airoha_pctlops; 297127aa791dSChristian Marangi pinctrl->desc.pmxops = &airoha_pmxops; 297227aa791dSChristian Marangi pinctrl->desc.confops = &airoha_confops; 297327aa791dSChristian Marangi pinctrl->desc.pins = data->pins; 297427aa791dSChristian Marangi pinctrl->desc.npins = data->num_pins; 297527aa791dSChristian Marangi 297627aa791dSChristian Marangi err = devm_pinctrl_register_and_init(dev, &pinctrl->desc, 297727aa791dSChristian Marangi pinctrl, &pinctrl->ctrl); 297827aa791dSChristian Marangi if (err) 297927aa791dSChristian Marangi return err; 298027aa791dSChristian Marangi 298127aa791dSChristian Marangi /* build pin groups */ 298227aa791dSChristian Marangi for (i = 0; i < data->num_grps; i++) { 298327aa791dSChristian Marangi const struct pingroup *grp = &data->grps[i]; 298427aa791dSChristian Marangi 298527aa791dSChristian Marangi err = pinctrl_generic_add_group(pinctrl->ctrl, grp->name, 298627aa791dSChristian Marangi grp->pins, grp->npins, 298727aa791dSChristian Marangi (void *)grp); 298827aa791dSChristian Marangi if (err < 0) { 298927aa791dSChristian Marangi dev_err(&pdev->dev, "Failed to register group %s\n", 299027aa791dSChristian Marangi grp->name); 299127aa791dSChristian Marangi return err; 299227aa791dSChristian Marangi } 299327aa791dSChristian Marangi } 299427aa791dSChristian Marangi 299527aa791dSChristian Marangi /* build functions */ 299627aa791dSChristian Marangi for (i = 0; i < data->num_funcs; i++) { 299727aa791dSChristian Marangi const struct airoha_pinctrl_func *func; 299827aa791dSChristian Marangi 299927aa791dSChristian Marangi func = &data->funcs[i]; 300027aa791dSChristian Marangi err = pinmux_generic_add_pinfunction(pinctrl->ctrl, 300127aa791dSChristian Marangi &func->desc, 300227aa791dSChristian Marangi (void *)func); 300327aa791dSChristian Marangi if (err < 0) { 300427aa791dSChristian Marangi dev_err(dev, "Failed to register function %s\n", 300527aa791dSChristian Marangi func->desc.name); 300627aa791dSChristian Marangi return err; 300727aa791dSChristian Marangi } 300827aa791dSChristian Marangi } 300927aa791dSChristian Marangi 301027aa791dSChristian Marangi pinctrl->grps = data->grps; 301127aa791dSChristian Marangi pinctrl->funcs = data->funcs; 301227aa791dSChristian Marangi pinctrl->confs_info = data->confs_info; 301327aa791dSChristian Marangi 301427aa791dSChristian Marangi err = pinctrl_enable(pinctrl->ctrl); 301527aa791dSChristian Marangi if (err) 301627aa791dSChristian Marangi return err; 301727aa791dSChristian Marangi 301827aa791dSChristian Marangi /* build gpio-chip */ 301927aa791dSChristian Marangi return airoha_pinctrl_add_gpiochip(pinctrl, pdev); 302027aa791dSChristian Marangi } 302127aa791dSChristian Marangi 302227aa791dSChristian Marangi static const struct airoha_pinctrl_match_data en7581_pinctrl_match_data = { 302327aa791dSChristian Marangi .pins = en7581_pinctrl_pins, 302427aa791dSChristian Marangi .num_pins = ARRAY_SIZE(en7581_pinctrl_pins), 302527aa791dSChristian Marangi .grps = en7581_pinctrl_groups, 302627aa791dSChristian Marangi .num_grps = ARRAY_SIZE(en7581_pinctrl_groups), 302727aa791dSChristian Marangi .funcs = en7581_pinctrl_funcs, 302827aa791dSChristian Marangi .num_funcs = ARRAY_SIZE(en7581_pinctrl_funcs), 302927aa791dSChristian Marangi .confs_info = { 303027aa791dSChristian Marangi [AIROHA_PINCTRL_CONFS_PULLUP] = { 303127aa791dSChristian Marangi .confs = en7581_pinctrl_pullup_conf, 303227aa791dSChristian Marangi .num_confs = ARRAY_SIZE(en7581_pinctrl_pullup_conf), 303327aa791dSChristian Marangi }, 303427aa791dSChristian Marangi [AIROHA_PINCTRL_CONFS_PULLDOWN] = { 303527aa791dSChristian Marangi .confs = en7581_pinctrl_pulldown_conf, 303627aa791dSChristian Marangi .num_confs = ARRAY_SIZE(en7581_pinctrl_pulldown_conf), 303727aa791dSChristian Marangi }, 303827aa791dSChristian Marangi [AIROHA_PINCTRL_CONFS_DRIVE_E2] = { 303927aa791dSChristian Marangi .confs = en7581_pinctrl_drive_e2_conf, 304027aa791dSChristian Marangi .num_confs = ARRAY_SIZE(en7581_pinctrl_drive_e2_conf), 304127aa791dSChristian Marangi }, 304227aa791dSChristian Marangi [AIROHA_PINCTRL_CONFS_DRIVE_E4] = { 304327aa791dSChristian Marangi .confs = en7581_pinctrl_drive_e4_conf, 304427aa791dSChristian Marangi .num_confs = ARRAY_SIZE(en7581_pinctrl_drive_e4_conf), 304527aa791dSChristian Marangi }, 304627aa791dSChristian Marangi [AIROHA_PINCTRL_CONFS_PCIE_RST_OD] = { 304727aa791dSChristian Marangi .confs = en7581_pinctrl_pcie_rst_od_conf, 304827aa791dSChristian Marangi .num_confs = ARRAY_SIZE(en7581_pinctrl_pcie_rst_od_conf), 304927aa791dSChristian Marangi }, 305027aa791dSChristian Marangi }, 305127aa791dSChristian Marangi }; 305227aa791dSChristian Marangi 305327aa791dSChristian Marangi static const struct airoha_pinctrl_match_data an7583_pinctrl_match_data = { 305427aa791dSChristian Marangi .pins = an7583_pinctrl_pins, 305527aa791dSChristian Marangi .num_pins = ARRAY_SIZE(an7583_pinctrl_pins), 305627aa791dSChristian Marangi .grps = an7583_pinctrl_groups, 305727aa791dSChristian Marangi .num_grps = ARRAY_SIZE(an7583_pinctrl_groups), 305827aa791dSChristian Marangi .funcs = an7583_pinctrl_funcs, 305927aa791dSChristian Marangi .num_funcs = ARRAY_SIZE(an7583_pinctrl_funcs), 306027aa791dSChristian Marangi .confs_info = { 306127aa791dSChristian Marangi [AIROHA_PINCTRL_CONFS_PULLUP] = { 306227aa791dSChristian Marangi .confs = an7583_pinctrl_pullup_conf, 306327aa791dSChristian Marangi .num_confs = ARRAY_SIZE(an7583_pinctrl_pullup_conf), 306427aa791dSChristian Marangi }, 306527aa791dSChristian Marangi [AIROHA_PINCTRL_CONFS_PULLDOWN] = { 306627aa791dSChristian Marangi .confs = an7583_pinctrl_pulldown_conf, 306727aa791dSChristian Marangi .num_confs = ARRAY_SIZE(an7583_pinctrl_pulldown_conf), 306827aa791dSChristian Marangi }, 306927aa791dSChristian Marangi [AIROHA_PINCTRL_CONFS_DRIVE_E2] = { 307027aa791dSChristian Marangi .confs = an7583_pinctrl_drive_e2_conf, 307127aa791dSChristian Marangi .num_confs = ARRAY_SIZE(an7583_pinctrl_drive_e2_conf), 307227aa791dSChristian Marangi }, 307327aa791dSChristian Marangi [AIROHA_PINCTRL_CONFS_DRIVE_E4] = { 307427aa791dSChristian Marangi .confs = an7583_pinctrl_drive_e4_conf, 307527aa791dSChristian Marangi .num_confs = ARRAY_SIZE(an7583_pinctrl_drive_e4_conf), 307627aa791dSChristian Marangi }, 307727aa791dSChristian Marangi [AIROHA_PINCTRL_CONFS_PCIE_RST_OD] = { 307827aa791dSChristian Marangi .confs = an7583_pinctrl_pcie_rst_od_conf, 307927aa791dSChristian Marangi .num_confs = ARRAY_SIZE(an7583_pinctrl_pcie_rst_od_conf), 308027aa791dSChristian Marangi }, 308127aa791dSChristian Marangi }, 308227aa791dSChristian Marangi }; 308327aa791dSChristian Marangi 308427aa791dSChristian Marangi static const struct of_device_id airoha_pinctrl_of_match[] = { 308527aa791dSChristian Marangi { .compatible = "airoha,en7581-pinctrl", .data = &en7581_pinctrl_match_data }, 308627aa791dSChristian Marangi { .compatible = "airoha,an7583-pinctrl", .data = &an7583_pinctrl_match_data }, 308727aa791dSChristian Marangi { /* sentinel */ } 308827aa791dSChristian Marangi }; 308927aa791dSChristian Marangi MODULE_DEVICE_TABLE(of, airoha_pinctrl_of_match); 309027aa791dSChristian Marangi 309127aa791dSChristian Marangi static struct platform_driver airoha_pinctrl_driver = { 309227aa791dSChristian Marangi .probe = airoha_pinctrl_probe, 309327aa791dSChristian Marangi .driver = { 309427aa791dSChristian Marangi .name = "pinctrl-airoha", 309527aa791dSChristian Marangi .of_match_table = airoha_pinctrl_of_match, 309627aa791dSChristian Marangi }, 309727aa791dSChristian Marangi }; 309827aa791dSChristian Marangi module_platform_driver(airoha_pinctrl_driver); 309927aa791dSChristian Marangi 310027aa791dSChristian Marangi MODULE_LICENSE("GPL"); 310127aa791dSChristian Marangi MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>"); 310227aa791dSChristian Marangi MODULE_AUTHOR("Benjamin Larsson <benjamin.larsson@genexis.eu>"); 310327aa791dSChristian Marangi MODULE_AUTHOR("Markus Gothe <markus.gothe@genexis.eu>"); 310427aa791dSChristian Marangi MODULE_DESCRIPTION("Pinctrl driver for Airoha SoC"); 3105