11c8ace2dSLorenzo Bianconi // SPDX-License-Identifier: GPL-2.0-only
21c8ace2dSLorenzo Bianconi /*
31c8ace2dSLorenzo Bianconi * Author: Lorenzo Bianconi <lorenzo@kernel.org>
41c8ace2dSLorenzo Bianconi * Author: Benjamin Larsson <benjamin.larsson@genexis.eu>
51c8ace2dSLorenzo Bianconi * Author: Markus Gothe <markus.gothe@genexis.eu>
61c8ace2dSLorenzo Bianconi */
71c8ace2dSLorenzo Bianconi
81c8ace2dSLorenzo Bianconi #include <dt-bindings/pinctrl/mt65xx.h>
9457d9772SChristian Marangi #include <linux/bitfield.h>
101c8ace2dSLorenzo Bianconi #include <linux/bits.h>
111c8ace2dSLorenzo Bianconi #include <linux/cleanup.h>
121c8ace2dSLorenzo Bianconi #include <linux/gpio/driver.h>
131c8ace2dSLorenzo Bianconi #include <linux/interrupt.h>
141c8ace2dSLorenzo Bianconi #include <linux/io.h>
151c8ace2dSLorenzo Bianconi #include <linux/irq.h>
161c8ace2dSLorenzo Bianconi #include <linux/irqdomain.h>
171c8ace2dSLorenzo Bianconi #include <linux/mfd/syscon.h>
181c8ace2dSLorenzo Bianconi #include <linux/of.h>
191c8ace2dSLorenzo Bianconi #include <linux/of_irq.h>
201c8ace2dSLorenzo Bianconi #include <linux/of_platform.h>
211c8ace2dSLorenzo Bianconi #include <linux/pinctrl/consumer.h>
221c8ace2dSLorenzo Bianconi #include <linux/pinctrl/pinctrl.h>
231c8ace2dSLorenzo Bianconi #include <linux/pinctrl/pinconf.h>
241c8ace2dSLorenzo Bianconi #include <linux/pinctrl/pinconf-generic.h>
251c8ace2dSLorenzo Bianconi #include <linux/pinctrl/pinmux.h>
261c8ace2dSLorenzo Bianconi #include <linux/platform_device.h>
271c8ace2dSLorenzo Bianconi #include <linux/regmap.h>
281c8ace2dSLorenzo Bianconi
291c8ace2dSLorenzo Bianconi #include "../core.h"
301c8ace2dSLorenzo Bianconi #include "../pinconf.h"
311c8ace2dSLorenzo Bianconi #include "../pinmux.h"
321c8ace2dSLorenzo Bianconi
331c8ace2dSLorenzo Bianconi #define PINCTRL_PIN_GROUP(id) \
341c8ace2dSLorenzo Bianconi PINCTRL_PINGROUP(#id, id##_pins, ARRAY_SIZE(id##_pins))
351c8ace2dSLorenzo Bianconi
361c8ace2dSLorenzo Bianconi #define PINCTRL_FUNC_DESC(id) \
371c8ace2dSLorenzo Bianconi { \
381c8ace2dSLorenzo Bianconi .desc = { \
391c8ace2dSLorenzo Bianconi .func = { \
401c8ace2dSLorenzo Bianconi .name = #id, \
411c8ace2dSLorenzo Bianconi .groups = id##_groups, \
421c8ace2dSLorenzo Bianconi .ngroups = ARRAY_SIZE(id##_groups), \
431c8ace2dSLorenzo Bianconi } \
441c8ace2dSLorenzo Bianconi }, \
451c8ace2dSLorenzo Bianconi .groups = id##_func_group, \
461c8ace2dSLorenzo Bianconi .group_size = ARRAY_SIZE(id##_func_group), \
471c8ace2dSLorenzo Bianconi }
481c8ace2dSLorenzo Bianconi
491c8ace2dSLorenzo Bianconi #define PINCTRL_CONF_DESC(p, offset, mask) \
501c8ace2dSLorenzo Bianconi { \
511c8ace2dSLorenzo Bianconi .pin = p, \
521c8ace2dSLorenzo Bianconi .reg = { offset, mask }, \
531c8ace2dSLorenzo Bianconi }
541c8ace2dSLorenzo Bianconi
551c8ace2dSLorenzo Bianconi /* MUX */
561c8ace2dSLorenzo Bianconi #define REG_GPIO_2ND_I2C_MODE 0x0214
571c8ace2dSLorenzo Bianconi #define GPIO_MDC_IO_MASTER_MODE_MODE BIT(14)
581c8ace2dSLorenzo Bianconi #define GPIO_I2C_MASTER_MODE_MODE BIT(13)
591c8ace2dSLorenzo Bianconi #define GPIO_I2S_MODE_MASK BIT(12)
601c8ace2dSLorenzo Bianconi #define GPIO_I2C_SLAVE_MODE_MODE BIT(11)
611c8ace2dSLorenzo Bianconi #define GPIO_LAN3_LED1_MODE_MASK BIT(10)
621c8ace2dSLorenzo Bianconi #define GPIO_LAN3_LED0_MODE_MASK BIT(9)
631c8ace2dSLorenzo Bianconi #define GPIO_LAN2_LED1_MODE_MASK BIT(8)
641c8ace2dSLorenzo Bianconi #define GPIO_LAN2_LED0_MODE_MASK BIT(7)
651c8ace2dSLorenzo Bianconi #define GPIO_LAN1_LED1_MODE_MASK BIT(6)
661c8ace2dSLorenzo Bianconi #define GPIO_LAN1_LED0_MODE_MASK BIT(5)
671c8ace2dSLorenzo Bianconi #define GPIO_LAN0_LED1_MODE_MASK BIT(4)
681c8ace2dSLorenzo Bianconi #define GPIO_LAN0_LED0_MODE_MASK BIT(3)
691c8ace2dSLorenzo Bianconi #define PON_TOD_1PPS_MODE_MASK BIT(2)
701c8ace2dSLorenzo Bianconi #define GSW_TOD_1PPS_MODE_MASK BIT(1)
711c8ace2dSLorenzo Bianconi #define GPIO_2ND_I2C_MODE_MASK BIT(0)
721c8ace2dSLorenzo Bianconi
731c8ace2dSLorenzo Bianconi #define REG_GPIO_SPI_CS1_MODE 0x0218
741c8ace2dSLorenzo Bianconi #define GPIO_PCM_SPI_CS4_MODE_MASK BIT(21)
751c8ace2dSLorenzo Bianconi #define GPIO_PCM_SPI_CS3_MODE_MASK BIT(20)
761c8ace2dSLorenzo Bianconi #define GPIO_PCM_SPI_CS2_MODE_P156_MASK BIT(19)
771c8ace2dSLorenzo Bianconi #define GPIO_PCM_SPI_CS2_MODE_P128_MASK BIT(18)
781c8ace2dSLorenzo Bianconi #define GPIO_PCM_SPI_CS1_MODE_MASK BIT(17)
791c8ace2dSLorenzo Bianconi #define GPIO_PCM_SPI_MODE_MASK BIT(16)
801c8ace2dSLorenzo Bianconi #define GPIO_PCM2_MODE_MASK BIT(13)
811c8ace2dSLorenzo Bianconi #define GPIO_PCM1_MODE_MASK BIT(12)
821c8ace2dSLorenzo Bianconi #define GPIO_PCM_INT_MODE_MASK BIT(9)
831c8ace2dSLorenzo Bianconi #define GPIO_PCM_RESET_MODE_MASK BIT(8)
841c8ace2dSLorenzo Bianconi #define GPIO_SPI_QUAD_MODE_MASK BIT(4)
851c8ace2dSLorenzo Bianconi #define GPIO_SPI_CS4_MODE_MASK BIT(3)
861c8ace2dSLorenzo Bianconi #define GPIO_SPI_CS3_MODE_MASK BIT(2)
871c8ace2dSLorenzo Bianconi #define GPIO_SPI_CS2_MODE_MASK BIT(1)
881c8ace2dSLorenzo Bianconi #define GPIO_SPI_CS1_MODE_MASK BIT(0)
891c8ace2dSLorenzo Bianconi
901c8ace2dSLorenzo Bianconi #define REG_GPIO_PON_MODE 0x021c
911c8ace2dSLorenzo Bianconi #define GPIO_PARALLEL_NAND_MODE_MASK BIT(14)
921c8ace2dSLorenzo Bianconi #define GPIO_SGMII_MDIO_MODE_MASK BIT(13)
931c8ace2dSLorenzo Bianconi #define GPIO_PCIE_RESET2_MASK BIT(12)
941c8ace2dSLorenzo Bianconi #define SIPO_RCLK_MODE_MASK BIT(11)
951c8ace2dSLorenzo Bianconi #define GPIO_PCIE_RESET1_MASK BIT(10)
961c8ace2dSLorenzo Bianconi #define GPIO_PCIE_RESET0_MASK BIT(9)
971c8ace2dSLorenzo Bianconi #define GPIO_UART5_MODE_MASK BIT(8)
981c8ace2dSLorenzo Bianconi #define GPIO_UART4_MODE_MASK BIT(7)
991c8ace2dSLorenzo Bianconi #define GPIO_HSUART_CTS_RTS_MODE_MASK BIT(6)
1001c8ace2dSLorenzo Bianconi #define GPIO_HSUART_MODE_MASK BIT(5)
1011c8ace2dSLorenzo Bianconi #define GPIO_UART2_CTS_RTS_MODE_MASK BIT(4)
1021c8ace2dSLorenzo Bianconi #define GPIO_UART2_MODE_MASK BIT(3)
1031c8ace2dSLorenzo Bianconi #define GPIO_SIPO_MODE_MASK BIT(2)
1041c8ace2dSLorenzo Bianconi #define GPIO_EMMC_MODE_MASK BIT(1)
1051c8ace2dSLorenzo Bianconi #define GPIO_PON_MODE_MASK BIT(0)
1061c8ace2dSLorenzo Bianconi
1071c8ace2dSLorenzo Bianconi #define REG_NPU_UART_EN 0x0224
1081c8ace2dSLorenzo Bianconi #define JTAG_UDI_EN_MASK BIT(4)
1091c8ace2dSLorenzo Bianconi #define JTAG_DFD_EN_MASK BIT(3)
1101c8ace2dSLorenzo Bianconi
1111c8ace2dSLorenzo Bianconi /* LED MAP */
1121c8ace2dSLorenzo Bianconi #define REG_LAN_LED0_MAPPING 0x027c
1131c8ace2dSLorenzo Bianconi #define REG_LAN_LED1_MAPPING 0x0280
1141c8ace2dSLorenzo Bianconi
1151c8ace2dSLorenzo Bianconi #define LAN4_LED_MAPPING_MASK GENMASK(18, 16)
116457d9772SChristian Marangi #define LAN4_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN4_LED_MAPPING_MASK, (_n))
1171c8ace2dSLorenzo Bianconi
1181c8ace2dSLorenzo Bianconi #define LAN3_LED_MAPPING_MASK GENMASK(14, 12)
119457d9772SChristian Marangi #define LAN3_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN3_LED_MAPPING_MASK, (_n))
1201c8ace2dSLorenzo Bianconi
1211c8ace2dSLorenzo Bianconi #define LAN2_LED_MAPPING_MASK GENMASK(10, 8)
122457d9772SChristian Marangi #define LAN2_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN2_LED_MAPPING_MASK, (_n))
1231c8ace2dSLorenzo Bianconi
1241c8ace2dSLorenzo Bianconi #define LAN1_LED_MAPPING_MASK GENMASK(6, 4)
125457d9772SChristian Marangi #define LAN1_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN1_LED_MAPPING_MASK, (_n))
1261c8ace2dSLorenzo Bianconi
1271c8ace2dSLorenzo Bianconi #define LAN0_LED_MAPPING_MASK GENMASK(2, 0)
128457d9772SChristian Marangi #define LAN0_PHY_LED_MAP(_n) FIELD_PREP_CONST(LAN0_LED_MAPPING_MASK, (_n))
1291c8ace2dSLorenzo Bianconi
1301c8ace2dSLorenzo Bianconi /* CONF */
1311c8ace2dSLorenzo Bianconi #define REG_I2C_SDA_E2 0x001c
1321c8ace2dSLorenzo Bianconi #define SPI_MISO_E2_MASK BIT(14)
1331c8ace2dSLorenzo Bianconi #define SPI_MOSI_E2_MASK BIT(13)
1341c8ace2dSLorenzo Bianconi #define SPI_CLK_E2_MASK BIT(12)
1351c8ace2dSLorenzo Bianconi #define SPI_CS0_E2_MASK BIT(11)
1361c8ace2dSLorenzo Bianconi #define PCIE2_RESET_E2_MASK BIT(10)
1371c8ace2dSLorenzo Bianconi #define PCIE1_RESET_E2_MASK BIT(9)
1381c8ace2dSLorenzo Bianconi #define PCIE0_RESET_E2_MASK BIT(8)
1391c8ace2dSLorenzo Bianconi #define UART1_RXD_E2_MASK BIT(3)
1401c8ace2dSLorenzo Bianconi #define UART1_TXD_E2_MASK BIT(2)
1411c8ace2dSLorenzo Bianconi #define I2C_SCL_E2_MASK BIT(1)
1421c8ace2dSLorenzo Bianconi #define I2C_SDA_E2_MASK BIT(0)
1431c8ace2dSLorenzo Bianconi
1441c8ace2dSLorenzo Bianconi #define REG_I2C_SDA_E4 0x0020
1451c8ace2dSLorenzo Bianconi #define SPI_MISO_E4_MASK BIT(14)
1461c8ace2dSLorenzo Bianconi #define SPI_MOSI_E4_MASK BIT(13)
1471c8ace2dSLorenzo Bianconi #define SPI_CLK_E4_MASK BIT(12)
1481c8ace2dSLorenzo Bianconi #define SPI_CS0_E4_MASK BIT(11)
1491c8ace2dSLorenzo Bianconi #define PCIE2_RESET_E4_MASK BIT(10)
1501c8ace2dSLorenzo Bianconi #define PCIE1_RESET_E4_MASK BIT(9)
1511c8ace2dSLorenzo Bianconi #define PCIE0_RESET_E4_MASK BIT(8)
1521c8ace2dSLorenzo Bianconi #define UART1_RXD_E4_MASK BIT(3)
1531c8ace2dSLorenzo Bianconi #define UART1_TXD_E4_MASK BIT(2)
1541c8ace2dSLorenzo Bianconi #define I2C_SCL_E4_MASK BIT(1)
1551c8ace2dSLorenzo Bianconi #define I2C_SDA_E4_MASK BIT(0)
1561c8ace2dSLorenzo Bianconi
1571c8ace2dSLorenzo Bianconi #define REG_GPIO_L_E2 0x0024
1581c8ace2dSLorenzo Bianconi #define REG_GPIO_L_E4 0x0028
1591c8ace2dSLorenzo Bianconi #define REG_GPIO_H_E2 0x002c
1601c8ace2dSLorenzo Bianconi #define REG_GPIO_H_E4 0x0030
1611c8ace2dSLorenzo Bianconi
1621c8ace2dSLorenzo Bianconi #define REG_I2C_SDA_PU 0x0044
1631c8ace2dSLorenzo Bianconi #define SPI_MISO_PU_MASK BIT(14)
1641c8ace2dSLorenzo Bianconi #define SPI_MOSI_PU_MASK BIT(13)
1651c8ace2dSLorenzo Bianconi #define SPI_CLK_PU_MASK BIT(12)
1661c8ace2dSLorenzo Bianconi #define SPI_CS0_PU_MASK BIT(11)
1671c8ace2dSLorenzo Bianconi #define PCIE2_RESET_PU_MASK BIT(10)
1681c8ace2dSLorenzo Bianconi #define PCIE1_RESET_PU_MASK BIT(9)
1691c8ace2dSLorenzo Bianconi #define PCIE0_RESET_PU_MASK BIT(8)
1701c8ace2dSLorenzo Bianconi #define UART1_RXD_PU_MASK BIT(3)
1711c8ace2dSLorenzo Bianconi #define UART1_TXD_PU_MASK BIT(2)
1721c8ace2dSLorenzo Bianconi #define I2C_SCL_PU_MASK BIT(1)
1731c8ace2dSLorenzo Bianconi #define I2C_SDA_PU_MASK BIT(0)
1741c8ace2dSLorenzo Bianconi
1751c8ace2dSLorenzo Bianconi #define REG_I2C_SDA_PD 0x0048
1761c8ace2dSLorenzo Bianconi #define SPI_MISO_PD_MASK BIT(14)
1771c8ace2dSLorenzo Bianconi #define SPI_MOSI_PD_MASK BIT(13)
1781c8ace2dSLorenzo Bianconi #define SPI_CLK_PD_MASK BIT(12)
1791c8ace2dSLorenzo Bianconi #define SPI_CS0_PD_MASK BIT(11)
1801c8ace2dSLorenzo Bianconi #define PCIE2_RESET_PD_MASK BIT(10)
1811c8ace2dSLorenzo Bianconi #define PCIE1_RESET_PD_MASK BIT(9)
1821c8ace2dSLorenzo Bianconi #define PCIE0_RESET_PD_MASK BIT(8)
1831c8ace2dSLorenzo Bianconi #define UART1_RXD_PD_MASK BIT(3)
1841c8ace2dSLorenzo Bianconi #define UART1_TXD_PD_MASK BIT(2)
1851c8ace2dSLorenzo Bianconi #define I2C_SCL_PD_MASK BIT(1)
1861c8ace2dSLorenzo Bianconi #define I2C_SDA_PD_MASK BIT(0)
1871c8ace2dSLorenzo Bianconi
1881c8ace2dSLorenzo Bianconi #define REG_GPIO_L_PU 0x004c
1891c8ace2dSLorenzo Bianconi #define REG_GPIO_L_PD 0x0050
1901c8ace2dSLorenzo Bianconi #define REG_GPIO_H_PU 0x0054
1911c8ace2dSLorenzo Bianconi #define REG_GPIO_H_PD 0x0058
1921c8ace2dSLorenzo Bianconi
1931c8ace2dSLorenzo Bianconi #define REG_PCIE_RESET_OD 0x018c
1941c8ace2dSLorenzo Bianconi #define PCIE2_RESET_OD_MASK BIT(2)
1951c8ace2dSLorenzo Bianconi #define PCIE1_RESET_OD_MASK BIT(1)
1961c8ace2dSLorenzo Bianconi #define PCIE0_RESET_OD_MASK BIT(0)
1971c8ace2dSLorenzo Bianconi
1981c8ace2dSLorenzo Bianconi /* GPIOs */
1991c8ace2dSLorenzo Bianconi #define REG_GPIO_CTRL 0x0000
2001c8ace2dSLorenzo Bianconi #define REG_GPIO_DATA 0x0004
2011c8ace2dSLorenzo Bianconi #define REG_GPIO_INT 0x0008
2021c8ace2dSLorenzo Bianconi #define REG_GPIO_INT_EDGE 0x000c
2031c8ace2dSLorenzo Bianconi #define REG_GPIO_INT_LEVEL 0x0010
2041c8ace2dSLorenzo Bianconi #define REG_GPIO_OE 0x0014
2051c8ace2dSLorenzo Bianconi #define REG_GPIO_CTRL1 0x0020
2061c8ace2dSLorenzo Bianconi
2071c8ace2dSLorenzo Bianconi /* PWM MODE CONF */
2081c8ace2dSLorenzo Bianconi #define REG_GPIO_FLASH_MODE_CFG 0x0034
2091c8ace2dSLorenzo Bianconi #define GPIO15_FLASH_MODE_CFG BIT(15)
2101c8ace2dSLorenzo Bianconi #define GPIO14_FLASH_MODE_CFG BIT(14)
2111c8ace2dSLorenzo Bianconi #define GPIO13_FLASH_MODE_CFG BIT(13)
2121c8ace2dSLorenzo Bianconi #define GPIO12_FLASH_MODE_CFG BIT(12)
2131c8ace2dSLorenzo Bianconi #define GPIO11_FLASH_MODE_CFG BIT(11)
2141c8ace2dSLorenzo Bianconi #define GPIO10_FLASH_MODE_CFG BIT(10)
2151c8ace2dSLorenzo Bianconi #define GPIO9_FLASH_MODE_CFG BIT(9)
2161c8ace2dSLorenzo Bianconi #define GPIO8_FLASH_MODE_CFG BIT(8)
2171c8ace2dSLorenzo Bianconi #define GPIO7_FLASH_MODE_CFG BIT(7)
2181c8ace2dSLorenzo Bianconi #define GPIO6_FLASH_MODE_CFG BIT(6)
2191c8ace2dSLorenzo Bianconi #define GPIO5_FLASH_MODE_CFG BIT(5)
2201c8ace2dSLorenzo Bianconi #define GPIO4_FLASH_MODE_CFG BIT(4)
2211c8ace2dSLorenzo Bianconi #define GPIO3_FLASH_MODE_CFG BIT(3)
2221c8ace2dSLorenzo Bianconi #define GPIO2_FLASH_MODE_CFG BIT(2)
2231c8ace2dSLorenzo Bianconi #define GPIO1_FLASH_MODE_CFG BIT(1)
2241c8ace2dSLorenzo Bianconi #define GPIO0_FLASH_MODE_CFG BIT(0)
2251c8ace2dSLorenzo Bianconi
2261c8ace2dSLorenzo Bianconi #define REG_GPIO_CTRL2 0x0060
2271c8ace2dSLorenzo Bianconi #define REG_GPIO_CTRL3 0x0064
2281c8ace2dSLorenzo Bianconi
2291c8ace2dSLorenzo Bianconi /* PWM MODE CONF EXT */
2301c8ace2dSLorenzo Bianconi #define REG_GPIO_FLASH_MODE_CFG_EXT 0x0068
2311c8ace2dSLorenzo Bianconi #define GPIO51_FLASH_MODE_CFG BIT(31)
2321c8ace2dSLorenzo Bianconi #define GPIO50_FLASH_MODE_CFG BIT(30)
2331c8ace2dSLorenzo Bianconi #define GPIO49_FLASH_MODE_CFG BIT(29)
2341c8ace2dSLorenzo Bianconi #define GPIO48_FLASH_MODE_CFG BIT(28)
2351c8ace2dSLorenzo Bianconi #define GPIO47_FLASH_MODE_CFG BIT(27)
2361c8ace2dSLorenzo Bianconi #define GPIO46_FLASH_MODE_CFG BIT(26)
2371c8ace2dSLorenzo Bianconi #define GPIO45_FLASH_MODE_CFG BIT(25)
2381c8ace2dSLorenzo Bianconi #define GPIO44_FLASH_MODE_CFG BIT(24)
2391c8ace2dSLorenzo Bianconi #define GPIO43_FLASH_MODE_CFG BIT(23)
2401c8ace2dSLorenzo Bianconi #define GPIO42_FLASH_MODE_CFG BIT(22)
2411c8ace2dSLorenzo Bianconi #define GPIO41_FLASH_MODE_CFG BIT(21)
2421c8ace2dSLorenzo Bianconi #define GPIO40_FLASH_MODE_CFG BIT(20)
2431c8ace2dSLorenzo Bianconi #define GPIO39_FLASH_MODE_CFG BIT(19)
2441c8ace2dSLorenzo Bianconi #define GPIO38_FLASH_MODE_CFG BIT(18)
2451c8ace2dSLorenzo Bianconi #define GPIO37_FLASH_MODE_CFG BIT(17)
2461c8ace2dSLorenzo Bianconi #define GPIO36_FLASH_MODE_CFG BIT(16)
2471c8ace2dSLorenzo Bianconi #define GPIO31_FLASH_MODE_CFG BIT(15)
2481c8ace2dSLorenzo Bianconi #define GPIO30_FLASH_MODE_CFG BIT(14)
2491c8ace2dSLorenzo Bianconi #define GPIO29_FLASH_MODE_CFG BIT(13)
2501c8ace2dSLorenzo Bianconi #define GPIO28_FLASH_MODE_CFG BIT(12)
2511c8ace2dSLorenzo Bianconi #define GPIO27_FLASH_MODE_CFG BIT(11)
2521c8ace2dSLorenzo Bianconi #define GPIO26_FLASH_MODE_CFG BIT(10)
2531c8ace2dSLorenzo Bianconi #define GPIO25_FLASH_MODE_CFG BIT(9)
2541c8ace2dSLorenzo Bianconi #define GPIO24_FLASH_MODE_CFG BIT(8)
2551c8ace2dSLorenzo Bianconi #define GPIO23_FLASH_MODE_CFG BIT(7)
2561c8ace2dSLorenzo Bianconi #define GPIO22_FLASH_MODE_CFG BIT(6)
2571c8ace2dSLorenzo Bianconi #define GPIO21_FLASH_MODE_CFG BIT(5)
2581c8ace2dSLorenzo Bianconi #define GPIO20_FLASH_MODE_CFG BIT(4)
2591c8ace2dSLorenzo Bianconi #define GPIO19_FLASH_MODE_CFG BIT(3)
2601c8ace2dSLorenzo Bianconi #define GPIO18_FLASH_MODE_CFG BIT(2)
2611c8ace2dSLorenzo Bianconi #define GPIO17_FLASH_MODE_CFG BIT(1)
2621c8ace2dSLorenzo Bianconi #define GPIO16_FLASH_MODE_CFG BIT(0)
2631c8ace2dSLorenzo Bianconi
2641c8ace2dSLorenzo Bianconi #define REG_GPIO_DATA1 0x0070
2651c8ace2dSLorenzo Bianconi #define REG_GPIO_OE1 0x0078
2661c8ace2dSLorenzo Bianconi #define REG_GPIO_INT1 0x007c
2671c8ace2dSLorenzo Bianconi #define REG_GPIO_INT_EDGE1 0x0080
2681c8ace2dSLorenzo Bianconi #define REG_GPIO_INT_EDGE2 0x0084
2691c8ace2dSLorenzo Bianconi #define REG_GPIO_INT_EDGE3 0x0088
2701c8ace2dSLorenzo Bianconi #define REG_GPIO_INT_LEVEL1 0x008c
2711c8ace2dSLorenzo Bianconi #define REG_GPIO_INT_LEVEL2 0x0090
2721c8ace2dSLorenzo Bianconi #define REG_GPIO_INT_LEVEL3 0x0094
2731c8ace2dSLorenzo Bianconi
2741c8ace2dSLorenzo Bianconi #define AIROHA_NUM_PINS 64
2751c8ace2dSLorenzo Bianconi #define AIROHA_PIN_BANK_SIZE (AIROHA_NUM_PINS / 2)
2761c8ace2dSLorenzo Bianconi #define AIROHA_REG_GPIOCTRL_NUM_PIN (AIROHA_NUM_PINS / 4)
2771c8ace2dSLorenzo Bianconi
2781c8ace2dSLorenzo Bianconi static const u32 gpio_data_regs[] = {
2791c8ace2dSLorenzo Bianconi REG_GPIO_DATA,
2801c8ace2dSLorenzo Bianconi REG_GPIO_DATA1
2811c8ace2dSLorenzo Bianconi };
2821c8ace2dSLorenzo Bianconi
2831c8ace2dSLorenzo Bianconi static const u32 gpio_out_regs[] = {
2841c8ace2dSLorenzo Bianconi REG_GPIO_OE,
2851c8ace2dSLorenzo Bianconi REG_GPIO_OE1
2861c8ace2dSLorenzo Bianconi };
2871c8ace2dSLorenzo Bianconi
2881c8ace2dSLorenzo Bianconi static const u32 gpio_dir_regs[] = {
2891c8ace2dSLorenzo Bianconi REG_GPIO_CTRL,
2901c8ace2dSLorenzo Bianconi REG_GPIO_CTRL1,
2911c8ace2dSLorenzo Bianconi REG_GPIO_CTRL2,
2921c8ace2dSLorenzo Bianconi REG_GPIO_CTRL3
2931c8ace2dSLorenzo Bianconi };
2941c8ace2dSLorenzo Bianconi
2951c8ace2dSLorenzo Bianconi static const u32 irq_status_regs[] = {
2961c8ace2dSLorenzo Bianconi REG_GPIO_INT,
2971c8ace2dSLorenzo Bianconi REG_GPIO_INT1
2981c8ace2dSLorenzo Bianconi };
2991c8ace2dSLorenzo Bianconi
3001c8ace2dSLorenzo Bianconi static const u32 irq_level_regs[] = {
3011c8ace2dSLorenzo Bianconi REG_GPIO_INT_LEVEL,
3021c8ace2dSLorenzo Bianconi REG_GPIO_INT_LEVEL1,
3031c8ace2dSLorenzo Bianconi REG_GPIO_INT_LEVEL2,
3041c8ace2dSLorenzo Bianconi REG_GPIO_INT_LEVEL3
3051c8ace2dSLorenzo Bianconi };
3061c8ace2dSLorenzo Bianconi
3071c8ace2dSLorenzo Bianconi static const u32 irq_edge_regs[] = {
3081c8ace2dSLorenzo Bianconi REG_GPIO_INT_EDGE,
3091c8ace2dSLorenzo Bianconi REG_GPIO_INT_EDGE1,
3101c8ace2dSLorenzo Bianconi REG_GPIO_INT_EDGE2,
3111c8ace2dSLorenzo Bianconi REG_GPIO_INT_EDGE3
3121c8ace2dSLorenzo Bianconi };
3131c8ace2dSLorenzo Bianconi
3141c8ace2dSLorenzo Bianconi struct airoha_pinctrl_reg {
3151c8ace2dSLorenzo Bianconi u32 offset;
3161c8ace2dSLorenzo Bianconi u32 mask;
3171c8ace2dSLorenzo Bianconi };
3181c8ace2dSLorenzo Bianconi
3191c8ace2dSLorenzo Bianconi enum airoha_pinctrl_mux_func {
3201c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
3211c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
3221c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
3231c8ace2dSLorenzo Bianconi };
3241c8ace2dSLorenzo Bianconi
3251c8ace2dSLorenzo Bianconi struct airoha_pinctrl_func_group {
3261c8ace2dSLorenzo Bianconi const char *name;
3271c8ace2dSLorenzo Bianconi struct {
3281c8ace2dSLorenzo Bianconi enum airoha_pinctrl_mux_func mux;
3291c8ace2dSLorenzo Bianconi u32 offset;
3301c8ace2dSLorenzo Bianconi u32 mask;
3311c8ace2dSLorenzo Bianconi u32 val;
3321c8ace2dSLorenzo Bianconi } regmap[2];
3331c8ace2dSLorenzo Bianconi int regmap_size;
3341c8ace2dSLorenzo Bianconi };
3351c8ace2dSLorenzo Bianconi
3361c8ace2dSLorenzo Bianconi struct airoha_pinctrl_func {
3371c8ace2dSLorenzo Bianconi const struct function_desc desc;
3381c8ace2dSLorenzo Bianconi const struct airoha_pinctrl_func_group *groups;
3391c8ace2dSLorenzo Bianconi u8 group_size;
3401c8ace2dSLorenzo Bianconi };
3411c8ace2dSLorenzo Bianconi
3421c8ace2dSLorenzo Bianconi struct airoha_pinctrl_conf {
3431c8ace2dSLorenzo Bianconi u32 pin;
3441c8ace2dSLorenzo Bianconi struct airoha_pinctrl_reg reg;
3451c8ace2dSLorenzo Bianconi };
3461c8ace2dSLorenzo Bianconi
3471c8ace2dSLorenzo Bianconi struct airoha_pinctrl_gpiochip {
3481c8ace2dSLorenzo Bianconi struct gpio_chip chip;
3491c8ace2dSLorenzo Bianconi
3501c8ace2dSLorenzo Bianconi /* gpio */
3511c8ace2dSLorenzo Bianconi const u32 *data;
3521c8ace2dSLorenzo Bianconi const u32 *dir;
3531c8ace2dSLorenzo Bianconi const u32 *out;
3541c8ace2dSLorenzo Bianconi /* irq */
3551c8ace2dSLorenzo Bianconi const u32 *status;
3561c8ace2dSLorenzo Bianconi const u32 *level;
3571c8ace2dSLorenzo Bianconi const u32 *edge;
3581c8ace2dSLorenzo Bianconi
3591c8ace2dSLorenzo Bianconi u32 irq_type[AIROHA_NUM_PINS];
3601c8ace2dSLorenzo Bianconi };
3611c8ace2dSLorenzo Bianconi
3621c8ace2dSLorenzo Bianconi struct airoha_pinctrl {
3631c8ace2dSLorenzo Bianconi struct pinctrl_dev *ctrl;
3641c8ace2dSLorenzo Bianconi
3651c8ace2dSLorenzo Bianconi struct regmap *chip_scu;
3661c8ace2dSLorenzo Bianconi struct regmap *regmap;
3671c8ace2dSLorenzo Bianconi
3681c8ace2dSLorenzo Bianconi struct airoha_pinctrl_gpiochip gpiochip;
3691c8ace2dSLorenzo Bianconi };
3701c8ace2dSLorenzo Bianconi
3711c8ace2dSLorenzo Bianconi static struct pinctrl_pin_desc airoha_pinctrl_pins[] = {
3721c8ace2dSLorenzo Bianconi PINCTRL_PIN(0, "uart1_txd"),
3731c8ace2dSLorenzo Bianconi PINCTRL_PIN(1, "uart1_rxd"),
3741c8ace2dSLorenzo Bianconi PINCTRL_PIN(2, "i2c_scl"),
3751c8ace2dSLorenzo Bianconi PINCTRL_PIN(3, "i2c_sda"),
3761c8ace2dSLorenzo Bianconi PINCTRL_PIN(4, "spi_cs0"),
3771c8ace2dSLorenzo Bianconi PINCTRL_PIN(5, "spi_clk"),
3781c8ace2dSLorenzo Bianconi PINCTRL_PIN(6, "spi_mosi"),
3791c8ace2dSLorenzo Bianconi PINCTRL_PIN(7, "spi_miso"),
3801c8ace2dSLorenzo Bianconi PINCTRL_PIN(13, "gpio0"),
3811c8ace2dSLorenzo Bianconi PINCTRL_PIN(14, "gpio1"),
3821c8ace2dSLorenzo Bianconi PINCTRL_PIN(15, "gpio2"),
3831c8ace2dSLorenzo Bianconi PINCTRL_PIN(16, "gpio3"),
3841c8ace2dSLorenzo Bianconi PINCTRL_PIN(17, "gpio4"),
3851c8ace2dSLorenzo Bianconi PINCTRL_PIN(18, "gpio5"),
3861c8ace2dSLorenzo Bianconi PINCTRL_PIN(19, "gpio6"),
3871c8ace2dSLorenzo Bianconi PINCTRL_PIN(20, "gpio7"),
3881c8ace2dSLorenzo Bianconi PINCTRL_PIN(21, "gpio8"),
3891c8ace2dSLorenzo Bianconi PINCTRL_PIN(22, "gpio9"),
3901c8ace2dSLorenzo Bianconi PINCTRL_PIN(23, "gpio10"),
3911c8ace2dSLorenzo Bianconi PINCTRL_PIN(24, "gpio11"),
3921c8ace2dSLorenzo Bianconi PINCTRL_PIN(25, "gpio12"),
3931c8ace2dSLorenzo Bianconi PINCTRL_PIN(26, "gpio13"),
3941c8ace2dSLorenzo Bianconi PINCTRL_PIN(27, "gpio14"),
3951c8ace2dSLorenzo Bianconi PINCTRL_PIN(28, "gpio15"),
3961c8ace2dSLorenzo Bianconi PINCTRL_PIN(29, "gpio16"),
3971c8ace2dSLorenzo Bianconi PINCTRL_PIN(30, "gpio17"),
3981c8ace2dSLorenzo Bianconi PINCTRL_PIN(31, "gpio18"),
3991c8ace2dSLorenzo Bianconi PINCTRL_PIN(32, "gpio19"),
4001c8ace2dSLorenzo Bianconi PINCTRL_PIN(33, "gpio20"),
4011c8ace2dSLorenzo Bianconi PINCTRL_PIN(34, "gpio21"),
4021c8ace2dSLorenzo Bianconi PINCTRL_PIN(35, "gpio22"),
4031c8ace2dSLorenzo Bianconi PINCTRL_PIN(36, "gpio23"),
4041c8ace2dSLorenzo Bianconi PINCTRL_PIN(37, "gpio24"),
4051c8ace2dSLorenzo Bianconi PINCTRL_PIN(38, "gpio25"),
4061c8ace2dSLorenzo Bianconi PINCTRL_PIN(39, "gpio26"),
4071c8ace2dSLorenzo Bianconi PINCTRL_PIN(40, "gpio27"),
4081c8ace2dSLorenzo Bianconi PINCTRL_PIN(41, "gpio28"),
4091c8ace2dSLorenzo Bianconi PINCTRL_PIN(42, "gpio29"),
4101c8ace2dSLorenzo Bianconi PINCTRL_PIN(43, "gpio30"),
4111c8ace2dSLorenzo Bianconi PINCTRL_PIN(44, "gpio31"),
4121c8ace2dSLorenzo Bianconi PINCTRL_PIN(45, "gpio32"),
4131c8ace2dSLorenzo Bianconi PINCTRL_PIN(46, "gpio33"),
4141c8ace2dSLorenzo Bianconi PINCTRL_PIN(47, "gpio34"),
4151c8ace2dSLorenzo Bianconi PINCTRL_PIN(48, "gpio35"),
4161c8ace2dSLorenzo Bianconi PINCTRL_PIN(49, "gpio36"),
4171c8ace2dSLorenzo Bianconi PINCTRL_PIN(50, "gpio37"),
4181c8ace2dSLorenzo Bianconi PINCTRL_PIN(51, "gpio38"),
4191c8ace2dSLorenzo Bianconi PINCTRL_PIN(52, "gpio39"),
4201c8ace2dSLorenzo Bianconi PINCTRL_PIN(53, "gpio40"),
4211c8ace2dSLorenzo Bianconi PINCTRL_PIN(54, "gpio41"),
4221c8ace2dSLorenzo Bianconi PINCTRL_PIN(55, "gpio42"),
4231c8ace2dSLorenzo Bianconi PINCTRL_PIN(56, "gpio43"),
4241c8ace2dSLorenzo Bianconi PINCTRL_PIN(57, "gpio44"),
4251c8ace2dSLorenzo Bianconi PINCTRL_PIN(58, "gpio45"),
4261c8ace2dSLorenzo Bianconi PINCTRL_PIN(59, "gpio46"),
4271c8ace2dSLorenzo Bianconi PINCTRL_PIN(61, "pcie_reset0"),
4281c8ace2dSLorenzo Bianconi PINCTRL_PIN(62, "pcie_reset1"),
4291c8ace2dSLorenzo Bianconi PINCTRL_PIN(63, "pcie_reset2"),
4301c8ace2dSLorenzo Bianconi };
4311c8ace2dSLorenzo Bianconi
4321c8ace2dSLorenzo Bianconi static const int pon_pins[] = { 49, 50, 51, 52, 53, 54 };
4331c8ace2dSLorenzo Bianconi static const int pon_tod_1pps_pins[] = { 46 };
4341c8ace2dSLorenzo Bianconi static const int gsw_tod_1pps_pins[] = { 46 };
4351c8ace2dSLorenzo Bianconi static const int sipo_pins[] = { 16, 17 };
4361c8ace2dSLorenzo Bianconi static const int sipo_rclk_pins[] = { 16, 17, 43 };
4371c8ace2dSLorenzo Bianconi static const int mdio_pins[] = { 14, 15 };
4381c8ace2dSLorenzo Bianconi static const int uart2_pins[] = { 48, 55 };
4391c8ace2dSLorenzo Bianconi static const int uart2_cts_rts_pins[] = { 46, 47 };
4401c8ace2dSLorenzo Bianconi static const int hsuart_pins[] = { 28, 29 };
4411c8ace2dSLorenzo Bianconi static const int hsuart_cts_rts_pins[] = { 26, 27 };
4421c8ace2dSLorenzo Bianconi static const int uart4_pins[] = { 38, 39 };
4431c8ace2dSLorenzo Bianconi static const int uart5_pins[] = { 18, 19 };
4441c8ace2dSLorenzo Bianconi static const int i2c0_pins[] = { 2, 3 };
4451c8ace2dSLorenzo Bianconi static const int i2c1_pins[] = { 14, 15 };
4461c8ace2dSLorenzo Bianconi static const int jtag_udi_pins[] = { 16, 17, 18, 19, 20 };
4471c8ace2dSLorenzo Bianconi static const int jtag_dfd_pins[] = { 16, 17, 18, 19, 20 };
4481c8ace2dSLorenzo Bianconi static const int i2s_pins[] = { 26, 27, 28, 29 };
4491c8ace2dSLorenzo Bianconi static const int pcm1_pins[] = { 22, 23, 24, 25 };
4501c8ace2dSLorenzo Bianconi static const int pcm2_pins[] = { 18, 19, 20, 21 };
4511c8ace2dSLorenzo Bianconi static const int spi_quad_pins[] = { 32, 33 };
4521c8ace2dSLorenzo Bianconi static const int spi_pins[] = { 4, 5, 6, 7 };
4531c8ace2dSLorenzo Bianconi static const int spi_cs1_pins[] = { 34 };
4541c8ace2dSLorenzo Bianconi static const int pcm_spi_pins[] = { 18, 19, 20, 21, 22, 23, 24, 25 };
4551c8ace2dSLorenzo Bianconi static const int pcm_spi_int_pins[] = { 14 };
4561c8ace2dSLorenzo Bianconi static const int pcm_spi_rst_pins[] = { 15 };
4571c8ace2dSLorenzo Bianconi static const int pcm_spi_cs1_pins[] = { 43 };
4581c8ace2dSLorenzo Bianconi static const int pcm_spi_cs2_pins[] = { 40 };
4591c8ace2dSLorenzo Bianconi static const int pcm_spi_cs2_p128_pins[] = { 40 };
4601c8ace2dSLorenzo Bianconi static const int pcm_spi_cs2_p156_pins[] = { 40 };
4611c8ace2dSLorenzo Bianconi static const int pcm_spi_cs3_pins[] = { 41 };
4621c8ace2dSLorenzo Bianconi static const int pcm_spi_cs4_pins[] = { 42 };
4631c8ace2dSLorenzo Bianconi static const int emmc_pins[] = { 4, 5, 6, 30, 31, 32, 33, 34, 35, 36, 37 };
4641c8ace2dSLorenzo Bianconi static const int pnand_pins[] = { 4, 5, 6, 7, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42 };
4651c8ace2dSLorenzo Bianconi static const int gpio0_pins[] = { 13 };
4661c8ace2dSLorenzo Bianconi static const int gpio1_pins[] = { 14 };
4671c8ace2dSLorenzo Bianconi static const int gpio2_pins[] = { 15 };
4681c8ace2dSLorenzo Bianconi static const int gpio3_pins[] = { 16 };
4691c8ace2dSLorenzo Bianconi static const int gpio4_pins[] = { 17 };
4701c8ace2dSLorenzo Bianconi static const int gpio5_pins[] = { 18 };
4711c8ace2dSLorenzo Bianconi static const int gpio6_pins[] = { 19 };
4721c8ace2dSLorenzo Bianconi static const int gpio7_pins[] = { 20 };
4731c8ace2dSLorenzo Bianconi static const int gpio8_pins[] = { 21 };
4741c8ace2dSLorenzo Bianconi static const int gpio9_pins[] = { 22 };
4751c8ace2dSLorenzo Bianconi static const int gpio10_pins[] = { 23 };
4761c8ace2dSLorenzo Bianconi static const int gpio11_pins[] = { 24 };
4771c8ace2dSLorenzo Bianconi static const int gpio12_pins[] = { 25 };
4781c8ace2dSLorenzo Bianconi static const int gpio13_pins[] = { 26 };
4791c8ace2dSLorenzo Bianconi static const int gpio14_pins[] = { 27 };
4801c8ace2dSLorenzo Bianconi static const int gpio15_pins[] = { 28 };
4811c8ace2dSLorenzo Bianconi static const int gpio16_pins[] = { 29 };
4821c8ace2dSLorenzo Bianconi static const int gpio17_pins[] = { 30 };
4831c8ace2dSLorenzo Bianconi static const int gpio18_pins[] = { 31 };
4841c8ace2dSLorenzo Bianconi static const int gpio19_pins[] = { 32 };
4851c8ace2dSLorenzo Bianconi static const int gpio20_pins[] = { 33 };
4861c8ace2dSLorenzo Bianconi static const int gpio21_pins[] = { 34 };
4871c8ace2dSLorenzo Bianconi static const int gpio22_pins[] = { 35 };
4881c8ace2dSLorenzo Bianconi static const int gpio23_pins[] = { 36 };
4891c8ace2dSLorenzo Bianconi static const int gpio24_pins[] = { 37 };
4901c8ace2dSLorenzo Bianconi static const int gpio25_pins[] = { 38 };
4911c8ace2dSLorenzo Bianconi static const int gpio26_pins[] = { 39 };
4921c8ace2dSLorenzo Bianconi static const int gpio27_pins[] = { 40 };
4931c8ace2dSLorenzo Bianconi static const int gpio28_pins[] = { 41 };
4941c8ace2dSLorenzo Bianconi static const int gpio29_pins[] = { 42 };
4951c8ace2dSLorenzo Bianconi static const int gpio30_pins[] = { 43 };
4961c8ace2dSLorenzo Bianconi static const int gpio31_pins[] = { 44 };
4971c8ace2dSLorenzo Bianconi static const int gpio33_pins[] = { 46 };
4981c8ace2dSLorenzo Bianconi static const int gpio34_pins[] = { 47 };
4991c8ace2dSLorenzo Bianconi static const int gpio35_pins[] = { 48 };
5001c8ace2dSLorenzo Bianconi static const int gpio36_pins[] = { 49 };
5011c8ace2dSLorenzo Bianconi static const int gpio37_pins[] = { 50 };
5021c8ace2dSLorenzo Bianconi static const int gpio38_pins[] = { 51 };
5031c8ace2dSLorenzo Bianconi static const int gpio39_pins[] = { 52 };
5041c8ace2dSLorenzo Bianconi static const int gpio40_pins[] = { 53 };
5051c8ace2dSLorenzo Bianconi static const int gpio41_pins[] = { 54 };
5061c8ace2dSLorenzo Bianconi static const int gpio42_pins[] = { 55 };
5071c8ace2dSLorenzo Bianconi static const int gpio43_pins[] = { 56 };
5081c8ace2dSLorenzo Bianconi static const int gpio44_pins[] = { 57 };
5091c8ace2dSLorenzo Bianconi static const int gpio45_pins[] = { 58 };
5101c8ace2dSLorenzo Bianconi static const int gpio46_pins[] = { 59 };
5111c8ace2dSLorenzo Bianconi static const int pcie_reset0_pins[] = { 61 };
5121c8ace2dSLorenzo Bianconi static const int pcie_reset1_pins[] = { 62 };
5131c8ace2dSLorenzo Bianconi static const int pcie_reset2_pins[] = { 63 };
5141c8ace2dSLorenzo Bianconi
5151c8ace2dSLorenzo Bianconi static const struct pingroup airoha_pinctrl_groups[] = {
5161c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pon),
5171c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pon_tod_1pps),
5181c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gsw_tod_1pps),
5191c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(sipo),
5201c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(sipo_rclk),
5211c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(mdio),
5221c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(uart2),
5231c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(uart2_cts_rts),
5241c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(hsuart),
5251c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(hsuart_cts_rts),
5261c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(uart4),
5271c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(uart5),
5281c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(i2c0),
5291c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(i2c1),
5301c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(jtag_udi),
5311c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(jtag_dfd),
5321c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(i2s),
5331c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcm1),
5341c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcm2),
5351c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(spi),
5361c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(spi_quad),
5371c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(spi_cs1),
5381c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcm_spi),
5391c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcm_spi_int),
5401c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcm_spi_rst),
5411c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcm_spi_cs1),
5421c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcm_spi_cs2_p128),
5431c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcm_spi_cs2_p156),
5441c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcm_spi_cs2),
5451c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcm_spi_cs3),
5461c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcm_spi_cs4),
5471c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(emmc),
5481c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pnand),
5491c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio0),
5501c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio1),
5511c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio2),
5521c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio3),
5531c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio4),
5541c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio5),
5551c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio6),
5561c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio7),
5571c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio8),
5581c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio9),
5591c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio10),
5601c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio11),
5611c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio12),
5621c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio13),
5631c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio14),
5641c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio15),
5651c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio16),
5661c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio17),
5671c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio18),
5681c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio19),
5691c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio20),
5701c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio21),
5711c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio22),
5721c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio23),
5731c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio24),
5741c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio25),
5751c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio26),
5761c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio27),
5771c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio28),
5781c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio29),
5791c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio30),
5801c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio31),
5811c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio33),
5821c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio34),
5831c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio35),
5841c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio36),
5851c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio37),
5861c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio38),
5871c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio39),
5881c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio40),
5891c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio41),
5901c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio42),
5911c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio43),
5921c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio44),
5931c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio45),
5941c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(gpio46),
5951c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcie_reset0),
5961c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcie_reset1),
5971c8ace2dSLorenzo Bianconi PINCTRL_PIN_GROUP(pcie_reset2),
5981c8ace2dSLorenzo Bianconi };
5991c8ace2dSLorenzo Bianconi
6001c8ace2dSLorenzo Bianconi static const char *const pon_groups[] = { "pon" };
6011c8ace2dSLorenzo Bianconi static const char *const tod_1pps_groups[] = { "pon_tod_1pps", "gsw_tod_1pps" };
6021c8ace2dSLorenzo Bianconi static const char *const sipo_groups[] = { "sipo", "sipo_rclk" };
6031c8ace2dSLorenzo Bianconi static const char *const mdio_groups[] = { "mdio" };
6041c8ace2dSLorenzo Bianconi static const char *const uart_groups[] = { "uart2", "uart2_cts_rts", "hsuart",
6051c8ace2dSLorenzo Bianconi "hsuart_cts_rts", "uart4",
6061c8ace2dSLorenzo Bianconi "uart5" };
6071c8ace2dSLorenzo Bianconi static const char *const i2c_groups[] = { "i2c1" };
6081c8ace2dSLorenzo Bianconi static const char *const jtag_groups[] = { "jtag_udi", "jtag_dfd" };
6091c8ace2dSLorenzo Bianconi static const char *const pcm_groups[] = { "pcm1", "pcm2" };
6101c8ace2dSLorenzo Bianconi static const char *const spi_groups[] = { "spi_quad", "spi_cs1" };
6111c8ace2dSLorenzo Bianconi static const char *const pcm_spi_groups[] = { "pcm_spi", "pcm_spi_int",
6121c8ace2dSLorenzo Bianconi "pcm_spi_rst", "pcm_spi_cs1",
6131c8ace2dSLorenzo Bianconi "pcm_spi_cs2_p156",
6141c8ace2dSLorenzo Bianconi "pcm_spi_cs2_p128",
6151c8ace2dSLorenzo Bianconi "pcm_spi_cs3", "pcm_spi_cs4" };
6161c8ace2dSLorenzo Bianconi static const char *const i2s_groups[] = { "i2s" };
6171c8ace2dSLorenzo Bianconi static const char *const emmc_groups[] = { "emmc" };
6181c8ace2dSLorenzo Bianconi static const char *const pnand_groups[] = { "pnand" };
6191c8ace2dSLorenzo Bianconi static const char *const pcie_reset_groups[] = { "pcie_reset0", "pcie_reset1",
6201c8ace2dSLorenzo Bianconi "pcie_reset2" };
6211c8ace2dSLorenzo Bianconi static const char *const pwm_groups[] = { "gpio0", "gpio1",
6221c8ace2dSLorenzo Bianconi "gpio2", "gpio3",
6231c8ace2dSLorenzo Bianconi "gpio4", "gpio5",
6241c8ace2dSLorenzo Bianconi "gpio6", "gpio7",
6251c8ace2dSLorenzo Bianconi "gpio8", "gpio9",
6261c8ace2dSLorenzo Bianconi "gpio10", "gpio11",
6271c8ace2dSLorenzo Bianconi "gpio12", "gpio13",
6281c8ace2dSLorenzo Bianconi "gpio14", "gpio15",
6291c8ace2dSLorenzo Bianconi "gpio16", "gpio17",
6301c8ace2dSLorenzo Bianconi "gpio18", "gpio19",
6311c8ace2dSLorenzo Bianconi "gpio20", "gpio21",
6321c8ace2dSLorenzo Bianconi "gpio22", "gpio23",
6331c8ace2dSLorenzo Bianconi "gpio24", "gpio25",
6341c8ace2dSLorenzo Bianconi "gpio26", "gpio27",
6351c8ace2dSLorenzo Bianconi "gpio28", "gpio29",
6361c8ace2dSLorenzo Bianconi "gpio30", "gpio31",
6371c8ace2dSLorenzo Bianconi "gpio36", "gpio37",
6381c8ace2dSLorenzo Bianconi "gpio38", "gpio39",
6391c8ace2dSLorenzo Bianconi "gpio40", "gpio41",
6401c8ace2dSLorenzo Bianconi "gpio42", "gpio43",
6411c8ace2dSLorenzo Bianconi "gpio44", "gpio45",
6421c8ace2dSLorenzo Bianconi "gpio46", "gpio47" };
6431c8ace2dSLorenzo Bianconi static const char *const phy1_led0_groups[] = { "gpio33", "gpio34",
6441c8ace2dSLorenzo Bianconi "gpio35", "gpio42" };
6451c8ace2dSLorenzo Bianconi static const char *const phy2_led0_groups[] = { "gpio33", "gpio34",
6461c8ace2dSLorenzo Bianconi "gpio35", "gpio42" };
6471c8ace2dSLorenzo Bianconi static const char *const phy3_led0_groups[] = { "gpio33", "gpio34",
6481c8ace2dSLorenzo Bianconi "gpio35", "gpio42" };
6491c8ace2dSLorenzo Bianconi static const char *const phy4_led0_groups[] = { "gpio33", "gpio34",
6501c8ace2dSLorenzo Bianconi "gpio35", "gpio42" };
6511c8ace2dSLorenzo Bianconi static const char *const phy1_led1_groups[] = { "gpio43", "gpio44",
6521c8ace2dSLorenzo Bianconi "gpio45", "gpio46" };
6531c8ace2dSLorenzo Bianconi static const char *const phy2_led1_groups[] = { "gpio43", "gpio44",
6541c8ace2dSLorenzo Bianconi "gpio45", "gpio46" };
6551c8ace2dSLorenzo Bianconi static const char *const phy3_led1_groups[] = { "gpio43", "gpio44",
6561c8ace2dSLorenzo Bianconi "gpio45", "gpio46" };
6571c8ace2dSLorenzo Bianconi static const char *const phy4_led1_groups[] = { "gpio43", "gpio44",
6581c8ace2dSLorenzo Bianconi "gpio45", "gpio46" };
6591c8ace2dSLorenzo Bianconi
6601c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group pon_func_group[] = {
6611c8ace2dSLorenzo Bianconi {
6621c8ace2dSLorenzo Bianconi .name = "pon",
6631c8ace2dSLorenzo Bianconi .regmap[0] = {
6641c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
6651c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
6661c8ace2dSLorenzo Bianconi GPIO_PON_MODE_MASK,
6671c8ace2dSLorenzo Bianconi GPIO_PON_MODE_MASK
6681c8ace2dSLorenzo Bianconi },
6691c8ace2dSLorenzo Bianconi .regmap_size = 1,
6701c8ace2dSLorenzo Bianconi },
6711c8ace2dSLorenzo Bianconi };
6721c8ace2dSLorenzo Bianconi
6731c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group tod_1pps_func_group[] = {
6741c8ace2dSLorenzo Bianconi {
6751c8ace2dSLorenzo Bianconi .name = "pon_tod_1pps",
6761c8ace2dSLorenzo Bianconi .regmap[0] = {
6771c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
6781c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
6791c8ace2dSLorenzo Bianconi PON_TOD_1PPS_MODE_MASK,
6801c8ace2dSLorenzo Bianconi PON_TOD_1PPS_MODE_MASK
6811c8ace2dSLorenzo Bianconi },
6821c8ace2dSLorenzo Bianconi .regmap_size = 1,
6831c8ace2dSLorenzo Bianconi }, {
6841c8ace2dSLorenzo Bianconi .name = "gsw_tod_1pps",
6851c8ace2dSLorenzo Bianconi .regmap[0] = {
6861c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
6871c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
6881c8ace2dSLorenzo Bianconi GSW_TOD_1PPS_MODE_MASK,
6891c8ace2dSLorenzo Bianconi GSW_TOD_1PPS_MODE_MASK
6901c8ace2dSLorenzo Bianconi },
6911c8ace2dSLorenzo Bianconi .regmap_size = 1,
6921c8ace2dSLorenzo Bianconi },
6931c8ace2dSLorenzo Bianconi };
6941c8ace2dSLorenzo Bianconi
6951c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group sipo_func_group[] = {
6961c8ace2dSLorenzo Bianconi {
6971c8ace2dSLorenzo Bianconi .name = "sipo",
6981c8ace2dSLorenzo Bianconi .regmap[0] = {
6991c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
7001c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
7011c8ace2dSLorenzo Bianconi GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK,
7021c8ace2dSLorenzo Bianconi GPIO_SIPO_MODE_MASK
7031c8ace2dSLorenzo Bianconi },
7041c8ace2dSLorenzo Bianconi .regmap_size = 1,
7051c8ace2dSLorenzo Bianconi }, {
7061c8ace2dSLorenzo Bianconi .name = "sipo_rclk",
7071c8ace2dSLorenzo Bianconi .regmap[0] = {
7081c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
7091c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
7101c8ace2dSLorenzo Bianconi GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK,
7111c8ace2dSLorenzo Bianconi GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK
7121c8ace2dSLorenzo Bianconi },
7131c8ace2dSLorenzo Bianconi .regmap_size = 1,
7141c8ace2dSLorenzo Bianconi },
7151c8ace2dSLorenzo Bianconi };
7161c8ace2dSLorenzo Bianconi
7171c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group mdio_func_group[] = {
7181c8ace2dSLorenzo Bianconi {
7191c8ace2dSLorenzo Bianconi .name = "mdio",
7201c8ace2dSLorenzo Bianconi .regmap[0] = {
7211c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
7221c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
7231c8ace2dSLorenzo Bianconi GPIO_SGMII_MDIO_MODE_MASK,
7241c8ace2dSLorenzo Bianconi GPIO_SGMII_MDIO_MODE_MASK
7251c8ace2dSLorenzo Bianconi },
7261c8ace2dSLorenzo Bianconi .regmap[1] = {
7271c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
7281c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
7291c8ace2dSLorenzo Bianconi GPIO_MDC_IO_MASTER_MODE_MODE,
7301c8ace2dSLorenzo Bianconi GPIO_MDC_IO_MASTER_MODE_MODE
7311c8ace2dSLorenzo Bianconi },
7321c8ace2dSLorenzo Bianconi .regmap_size = 2,
7331c8ace2dSLorenzo Bianconi },
7341c8ace2dSLorenzo Bianconi };
7351c8ace2dSLorenzo Bianconi
7361c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group uart_func_group[] = {
7371c8ace2dSLorenzo Bianconi {
7381c8ace2dSLorenzo Bianconi .name = "uart2",
7391c8ace2dSLorenzo Bianconi .regmap[0] = {
7401c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
7411c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
7421c8ace2dSLorenzo Bianconi GPIO_UART2_MODE_MASK,
7431c8ace2dSLorenzo Bianconi GPIO_UART2_MODE_MASK
7441c8ace2dSLorenzo Bianconi },
7451c8ace2dSLorenzo Bianconi .regmap_size = 1,
7461c8ace2dSLorenzo Bianconi }, {
7471c8ace2dSLorenzo Bianconi .name = "uart2_cts_rts",
7481c8ace2dSLorenzo Bianconi .regmap[0] = {
7491c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
7501c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
7511c8ace2dSLorenzo Bianconi GPIO_UART2_MODE_MASK | GPIO_UART2_CTS_RTS_MODE_MASK,
7521c8ace2dSLorenzo Bianconi GPIO_UART2_MODE_MASK | GPIO_UART2_CTS_RTS_MODE_MASK
7531c8ace2dSLorenzo Bianconi },
7541c8ace2dSLorenzo Bianconi .regmap_size = 1,
7551c8ace2dSLorenzo Bianconi }, {
7561c8ace2dSLorenzo Bianconi .name = "hsuart",
7571c8ace2dSLorenzo Bianconi .regmap[0] = {
7581c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
7591c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
7601c8ace2dSLorenzo Bianconi GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK,
7611c8ace2dSLorenzo Bianconi GPIO_HSUART_MODE_MASK
7621c8ace2dSLorenzo Bianconi },
7631c8ace2dSLorenzo Bianconi .regmap_size = 1,
7641c8ace2dSLorenzo Bianconi },
7651c8ace2dSLorenzo Bianconi {
7661c8ace2dSLorenzo Bianconi .name = "hsuart_cts_rts",
7671c8ace2dSLorenzo Bianconi .regmap[0] = {
7681c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
7691c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
7701c8ace2dSLorenzo Bianconi GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK,
7711c8ace2dSLorenzo Bianconi GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK
7721c8ace2dSLorenzo Bianconi },
7731c8ace2dSLorenzo Bianconi .regmap_size = 1,
7741c8ace2dSLorenzo Bianconi }, {
7751c8ace2dSLorenzo Bianconi .name = "uart4",
7761c8ace2dSLorenzo Bianconi .regmap[0] = {
7771c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
7781c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
7791c8ace2dSLorenzo Bianconi GPIO_UART4_MODE_MASK,
7801c8ace2dSLorenzo Bianconi GPIO_UART4_MODE_MASK
7811c8ace2dSLorenzo Bianconi },
7821c8ace2dSLorenzo Bianconi .regmap_size = 1,
7831c8ace2dSLorenzo Bianconi }, {
7841c8ace2dSLorenzo Bianconi .name = "uart5",
7851c8ace2dSLorenzo Bianconi .regmap[0] = {
7861c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
7871c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
7881c8ace2dSLorenzo Bianconi GPIO_UART5_MODE_MASK,
7891c8ace2dSLorenzo Bianconi GPIO_UART5_MODE_MASK
7901c8ace2dSLorenzo Bianconi },
7911c8ace2dSLorenzo Bianconi .regmap_size = 1,
7921c8ace2dSLorenzo Bianconi },
7931c8ace2dSLorenzo Bianconi };
7941c8ace2dSLorenzo Bianconi
7951c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group i2c_func_group[] = {
7961c8ace2dSLorenzo Bianconi {
7971c8ace2dSLorenzo Bianconi .name = "i2c1",
7981c8ace2dSLorenzo Bianconi .regmap[0] = {
7991c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
8001c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
8011c8ace2dSLorenzo Bianconi GPIO_2ND_I2C_MODE_MASK,
8021c8ace2dSLorenzo Bianconi GPIO_2ND_I2C_MODE_MASK
8031c8ace2dSLorenzo Bianconi },
8041c8ace2dSLorenzo Bianconi .regmap_size = 1,
8051c8ace2dSLorenzo Bianconi },
8061c8ace2dSLorenzo Bianconi };
8071c8ace2dSLorenzo Bianconi
8081c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group jtag_func_group[] = {
8091c8ace2dSLorenzo Bianconi {
8101c8ace2dSLorenzo Bianconi .name = "jtag_udi",
8111c8ace2dSLorenzo Bianconi .regmap[0] = {
8121c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
8131c8ace2dSLorenzo Bianconi REG_NPU_UART_EN,
8141c8ace2dSLorenzo Bianconi JTAG_UDI_EN_MASK,
8151c8ace2dSLorenzo Bianconi JTAG_UDI_EN_MASK
8161c8ace2dSLorenzo Bianconi },
8171c8ace2dSLorenzo Bianconi .regmap_size = 1,
8181c8ace2dSLorenzo Bianconi }, {
8191c8ace2dSLorenzo Bianconi .name = "jtag_dfd",
8201c8ace2dSLorenzo Bianconi .regmap[0] = {
8211c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
8221c8ace2dSLorenzo Bianconi REG_NPU_UART_EN,
8231c8ace2dSLorenzo Bianconi JTAG_DFD_EN_MASK,
8241c8ace2dSLorenzo Bianconi JTAG_DFD_EN_MASK
8251c8ace2dSLorenzo Bianconi },
8261c8ace2dSLorenzo Bianconi .regmap_size = 1,
8271c8ace2dSLorenzo Bianconi },
8281c8ace2dSLorenzo Bianconi };
8291c8ace2dSLorenzo Bianconi
8301c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group pcm_func_group[] = {
8311c8ace2dSLorenzo Bianconi {
8321c8ace2dSLorenzo Bianconi .name = "pcm1",
8331c8ace2dSLorenzo Bianconi .regmap[0] = {
8341c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
8351c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
8361c8ace2dSLorenzo Bianconi GPIO_PCM1_MODE_MASK,
8371c8ace2dSLorenzo Bianconi GPIO_PCM1_MODE_MASK
8381c8ace2dSLorenzo Bianconi },
8391c8ace2dSLorenzo Bianconi .regmap_size = 1,
8401c8ace2dSLorenzo Bianconi }, {
8411c8ace2dSLorenzo Bianconi .name = "pcm2",
8421c8ace2dSLorenzo Bianconi .regmap[0] = {
8431c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
8441c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
8451c8ace2dSLorenzo Bianconi GPIO_PCM2_MODE_MASK,
8461c8ace2dSLorenzo Bianconi GPIO_PCM2_MODE_MASK
8471c8ace2dSLorenzo Bianconi },
8481c8ace2dSLorenzo Bianconi .regmap_size = 1,
8491c8ace2dSLorenzo Bianconi },
8501c8ace2dSLorenzo Bianconi };
8511c8ace2dSLorenzo Bianconi
8521c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group spi_func_group[] = {
8531c8ace2dSLorenzo Bianconi {
8541c8ace2dSLorenzo Bianconi .name = "spi_quad",
8551c8ace2dSLorenzo Bianconi .regmap[0] = {
8561c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
8571c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
8581c8ace2dSLorenzo Bianconi GPIO_SPI_QUAD_MODE_MASK,
8591c8ace2dSLorenzo Bianconi GPIO_SPI_QUAD_MODE_MASK
8601c8ace2dSLorenzo Bianconi },
8611c8ace2dSLorenzo Bianconi .regmap_size = 1,
8621c8ace2dSLorenzo Bianconi }, {
8631c8ace2dSLorenzo Bianconi .name = "spi_cs1",
8641c8ace2dSLorenzo Bianconi .regmap[0] = {
8651c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
8661c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
8671c8ace2dSLorenzo Bianconi GPIO_SPI_CS1_MODE_MASK,
8681c8ace2dSLorenzo Bianconi GPIO_SPI_CS1_MODE_MASK
8691c8ace2dSLorenzo Bianconi },
8701c8ace2dSLorenzo Bianconi .regmap_size = 1,
8711c8ace2dSLorenzo Bianconi }, {
8721c8ace2dSLorenzo Bianconi .name = "spi_cs2",
8731c8ace2dSLorenzo Bianconi .regmap[0] = {
8741c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
8751c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
8761c8ace2dSLorenzo Bianconi GPIO_SPI_CS2_MODE_MASK,
8771c8ace2dSLorenzo Bianconi GPIO_SPI_CS2_MODE_MASK
8781c8ace2dSLorenzo Bianconi },
8791c8ace2dSLorenzo Bianconi .regmap_size = 1,
8801c8ace2dSLorenzo Bianconi }, {
8811c8ace2dSLorenzo Bianconi .name = "spi_cs3",
8821c8ace2dSLorenzo Bianconi .regmap[0] = {
8831c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
8841c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
8851c8ace2dSLorenzo Bianconi GPIO_SPI_CS3_MODE_MASK,
8861c8ace2dSLorenzo Bianconi GPIO_SPI_CS3_MODE_MASK
8871c8ace2dSLorenzo Bianconi },
8881c8ace2dSLorenzo Bianconi .regmap_size = 1,
8891c8ace2dSLorenzo Bianconi }, {
8901c8ace2dSLorenzo Bianconi .name = "spi_cs4",
8911c8ace2dSLorenzo Bianconi .regmap[0] = {
8921c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
8931c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
8941c8ace2dSLorenzo Bianconi GPIO_SPI_CS4_MODE_MASK,
8951c8ace2dSLorenzo Bianconi GPIO_SPI_CS4_MODE_MASK
8961c8ace2dSLorenzo Bianconi },
8971c8ace2dSLorenzo Bianconi .regmap_size = 1,
8981c8ace2dSLorenzo Bianconi },
8991c8ace2dSLorenzo Bianconi };
9001c8ace2dSLorenzo Bianconi
9011c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group pcm_spi_func_group[] = {
9021c8ace2dSLorenzo Bianconi {
9031c8ace2dSLorenzo Bianconi .name = "pcm_spi",
9041c8ace2dSLorenzo Bianconi .regmap[0] = {
9051c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
9061c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
9071c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_MODE_MASK,
9081c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_MODE_MASK
9091c8ace2dSLorenzo Bianconi },
9101c8ace2dSLorenzo Bianconi .regmap_size = 1,
9111c8ace2dSLorenzo Bianconi }, {
9121c8ace2dSLorenzo Bianconi .name = "pcm_spi_int",
9131c8ace2dSLorenzo Bianconi .regmap[0] = {
9141c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
9151c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
9161c8ace2dSLorenzo Bianconi GPIO_PCM_INT_MODE_MASK,
9171c8ace2dSLorenzo Bianconi GPIO_PCM_INT_MODE_MASK
9181c8ace2dSLorenzo Bianconi },
9191c8ace2dSLorenzo Bianconi .regmap_size = 1,
9201c8ace2dSLorenzo Bianconi }, {
9211c8ace2dSLorenzo Bianconi .name = "pcm_spi_rst",
9221c8ace2dSLorenzo Bianconi .regmap[0] = {
9231c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
9241c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
9251c8ace2dSLorenzo Bianconi GPIO_PCM_RESET_MODE_MASK,
9261c8ace2dSLorenzo Bianconi GPIO_PCM_RESET_MODE_MASK
9271c8ace2dSLorenzo Bianconi },
9281c8ace2dSLorenzo Bianconi .regmap_size = 1,
9291c8ace2dSLorenzo Bianconi }, {
9301c8ace2dSLorenzo Bianconi .name = "pcm_spi_cs1",
9311c8ace2dSLorenzo Bianconi .regmap[0] = {
9321c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
9331c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
9341c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_CS1_MODE_MASK,
9351c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_CS1_MODE_MASK
9361c8ace2dSLorenzo Bianconi },
9371c8ace2dSLorenzo Bianconi .regmap_size = 1,
9381c8ace2dSLorenzo Bianconi }, {
9391c8ace2dSLorenzo Bianconi .name = "pcm_spi_cs2_p128",
9401c8ace2dSLorenzo Bianconi .regmap[0] = {
9411c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
9421c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
9431c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_CS2_MODE_P128_MASK,
9441c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_CS2_MODE_P128_MASK
9451c8ace2dSLorenzo Bianconi },
9461c8ace2dSLorenzo Bianconi .regmap_size = 1,
9471c8ace2dSLorenzo Bianconi }, {
9481c8ace2dSLorenzo Bianconi .name = "pcm_spi_cs2_p156",
9491c8ace2dSLorenzo Bianconi .regmap[0] = {
9501c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
9511c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
9521c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_CS2_MODE_P156_MASK,
9531c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_CS2_MODE_P156_MASK
9541c8ace2dSLorenzo Bianconi },
9551c8ace2dSLorenzo Bianconi .regmap_size = 1,
9561c8ace2dSLorenzo Bianconi }, {
9571c8ace2dSLorenzo Bianconi .name = "pcm_spi_cs3",
9581c8ace2dSLorenzo Bianconi .regmap[0] = {
9591c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
9601c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
9611c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_CS3_MODE_MASK,
9621c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_CS3_MODE_MASK
9631c8ace2dSLorenzo Bianconi },
9641c8ace2dSLorenzo Bianconi .regmap_size = 1,
9651c8ace2dSLorenzo Bianconi }, {
9661c8ace2dSLorenzo Bianconi .name = "pcm_spi_cs4",
9671c8ace2dSLorenzo Bianconi .regmap[0] = {
9681c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
9691c8ace2dSLorenzo Bianconi REG_GPIO_SPI_CS1_MODE,
9701c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_CS4_MODE_MASK,
9711c8ace2dSLorenzo Bianconi GPIO_PCM_SPI_CS4_MODE_MASK
9721c8ace2dSLorenzo Bianconi },
9731c8ace2dSLorenzo Bianconi .regmap_size = 1,
9741c8ace2dSLorenzo Bianconi },
9751c8ace2dSLorenzo Bianconi };
9761c8ace2dSLorenzo Bianconi
9771c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group i2s_func_group[] = {
9781c8ace2dSLorenzo Bianconi {
9791c8ace2dSLorenzo Bianconi .name = "i2s",
9801c8ace2dSLorenzo Bianconi .regmap[0] = {
9811c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
9821c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
9831c8ace2dSLorenzo Bianconi GPIO_I2S_MODE_MASK,
9841c8ace2dSLorenzo Bianconi GPIO_I2S_MODE_MASK
9851c8ace2dSLorenzo Bianconi },
9861c8ace2dSLorenzo Bianconi .regmap_size = 1,
9871c8ace2dSLorenzo Bianconi },
9881c8ace2dSLorenzo Bianconi };
9891c8ace2dSLorenzo Bianconi
9901c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group emmc_func_group[] = {
9911c8ace2dSLorenzo Bianconi {
9921c8ace2dSLorenzo Bianconi .name = "emmc",
9931c8ace2dSLorenzo Bianconi .regmap[0] = {
9941c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
9951c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
9961c8ace2dSLorenzo Bianconi GPIO_EMMC_MODE_MASK,
9971c8ace2dSLorenzo Bianconi GPIO_EMMC_MODE_MASK
9981c8ace2dSLorenzo Bianconi },
9991c8ace2dSLorenzo Bianconi .regmap_size = 1,
10001c8ace2dSLorenzo Bianconi },
10011c8ace2dSLorenzo Bianconi };
10021c8ace2dSLorenzo Bianconi
10031c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group pnand_func_group[] = {
10041c8ace2dSLorenzo Bianconi {
10051c8ace2dSLorenzo Bianconi .name = "pnand",
10061c8ace2dSLorenzo Bianconi .regmap[0] = {
10071c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
10081c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
10091c8ace2dSLorenzo Bianconi GPIO_PARALLEL_NAND_MODE_MASK,
10101c8ace2dSLorenzo Bianconi GPIO_PARALLEL_NAND_MODE_MASK
10111c8ace2dSLorenzo Bianconi },
10121c8ace2dSLorenzo Bianconi .regmap_size = 1,
10131c8ace2dSLorenzo Bianconi },
10141c8ace2dSLorenzo Bianconi };
10151c8ace2dSLorenzo Bianconi
10161c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group pcie_reset_func_group[] = {
10171c8ace2dSLorenzo Bianconi {
10181c8ace2dSLorenzo Bianconi .name = "pcie_reset0",
10191c8ace2dSLorenzo Bianconi .regmap[0] = {
10201c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
10211c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
10221c8ace2dSLorenzo Bianconi GPIO_PCIE_RESET0_MASK,
10231c8ace2dSLorenzo Bianconi GPIO_PCIE_RESET0_MASK
10241c8ace2dSLorenzo Bianconi },
10251c8ace2dSLorenzo Bianconi .regmap_size = 1,
10261c8ace2dSLorenzo Bianconi }, {
10271c8ace2dSLorenzo Bianconi .name = "pcie_reset1",
10281c8ace2dSLorenzo Bianconi .regmap[0] = {
10291c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
10301c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
10311c8ace2dSLorenzo Bianconi GPIO_PCIE_RESET1_MASK,
10321c8ace2dSLorenzo Bianconi GPIO_PCIE_RESET1_MASK
10331c8ace2dSLorenzo Bianconi },
10341c8ace2dSLorenzo Bianconi .regmap_size = 1,
10351c8ace2dSLorenzo Bianconi }, {
10361c8ace2dSLorenzo Bianconi .name = "pcie_reset2",
10371c8ace2dSLorenzo Bianconi .regmap[0] = {
10381c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
10391c8ace2dSLorenzo Bianconi REG_GPIO_PON_MODE,
10401c8ace2dSLorenzo Bianconi GPIO_PCIE_RESET2_MASK,
10411c8ace2dSLorenzo Bianconi GPIO_PCIE_RESET2_MASK
10421c8ace2dSLorenzo Bianconi },
10431c8ace2dSLorenzo Bianconi .regmap_size = 1,
10441c8ace2dSLorenzo Bianconi },
10451c8ace2dSLorenzo Bianconi };
10461c8ace2dSLorenzo Bianconi
10471c8ace2dSLorenzo Bianconi /* PWM */
10481c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group pwm_func_group[] = {
10491c8ace2dSLorenzo Bianconi {
10501c8ace2dSLorenzo Bianconi .name = "gpio0",
10511c8ace2dSLorenzo Bianconi .regmap[0] = {
10521c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
10531c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
10541c8ace2dSLorenzo Bianconi GPIO0_FLASH_MODE_CFG,
10551c8ace2dSLorenzo Bianconi GPIO0_FLASH_MODE_CFG
10561c8ace2dSLorenzo Bianconi },
10571c8ace2dSLorenzo Bianconi .regmap_size = 1,
10581c8ace2dSLorenzo Bianconi }, {
10591c8ace2dSLorenzo Bianconi .name = "gpio1",
10601c8ace2dSLorenzo Bianconi .regmap[0] = {
10611c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
10621c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
10631c8ace2dSLorenzo Bianconi GPIO1_FLASH_MODE_CFG,
10641c8ace2dSLorenzo Bianconi GPIO1_FLASH_MODE_CFG
10651c8ace2dSLorenzo Bianconi },
10661c8ace2dSLorenzo Bianconi .regmap_size = 1,
10671c8ace2dSLorenzo Bianconi }, {
10681c8ace2dSLorenzo Bianconi .name = "gpio2",
10691c8ace2dSLorenzo Bianconi .regmap[0] = {
10701c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
10711c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
10721c8ace2dSLorenzo Bianconi GPIO2_FLASH_MODE_CFG,
10731c8ace2dSLorenzo Bianconi GPIO2_FLASH_MODE_CFG
10741c8ace2dSLorenzo Bianconi },
10751c8ace2dSLorenzo Bianconi .regmap_size = 1,
10761c8ace2dSLorenzo Bianconi }, {
10771c8ace2dSLorenzo Bianconi .name = "gpio3",
10781c8ace2dSLorenzo Bianconi .regmap[0] = {
10791c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
10801c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
10811c8ace2dSLorenzo Bianconi GPIO3_FLASH_MODE_CFG,
10821c8ace2dSLorenzo Bianconi GPIO3_FLASH_MODE_CFG
10831c8ace2dSLorenzo Bianconi },
10841c8ace2dSLorenzo Bianconi .regmap_size = 1,
10851c8ace2dSLorenzo Bianconi }, {
10861c8ace2dSLorenzo Bianconi .name = "gpio4",
10871c8ace2dSLorenzo Bianconi .regmap[0] = {
10881c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
10891c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
10901c8ace2dSLorenzo Bianconi GPIO4_FLASH_MODE_CFG,
10911c8ace2dSLorenzo Bianconi GPIO4_FLASH_MODE_CFG
10921c8ace2dSLorenzo Bianconi },
10931c8ace2dSLorenzo Bianconi .regmap_size = 1,
10941c8ace2dSLorenzo Bianconi }, {
10951c8ace2dSLorenzo Bianconi .name = "gpio5",
10961c8ace2dSLorenzo Bianconi .regmap[0] = {
10971c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
10981c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
10991c8ace2dSLorenzo Bianconi GPIO5_FLASH_MODE_CFG,
11001c8ace2dSLorenzo Bianconi GPIO5_FLASH_MODE_CFG
11011c8ace2dSLorenzo Bianconi },
11021c8ace2dSLorenzo Bianconi .regmap_size = 1,
11031c8ace2dSLorenzo Bianconi }, {
11041c8ace2dSLorenzo Bianconi .name = "gpio6",
11051c8ace2dSLorenzo Bianconi .regmap[0] = {
11061c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
11071c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
11081c8ace2dSLorenzo Bianconi GPIO6_FLASH_MODE_CFG,
11091c8ace2dSLorenzo Bianconi GPIO6_FLASH_MODE_CFG
11101c8ace2dSLorenzo Bianconi },
11111c8ace2dSLorenzo Bianconi .regmap_size = 1,
11121c8ace2dSLorenzo Bianconi }, {
11131c8ace2dSLorenzo Bianconi .name = "gpio7",
11141c8ace2dSLorenzo Bianconi .regmap[0] = {
11151c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
11161c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
11171c8ace2dSLorenzo Bianconi GPIO7_FLASH_MODE_CFG,
11181c8ace2dSLorenzo Bianconi GPIO7_FLASH_MODE_CFG
11191c8ace2dSLorenzo Bianconi },
11201c8ace2dSLorenzo Bianconi .regmap_size = 1,
11211c8ace2dSLorenzo Bianconi }, {
11221c8ace2dSLorenzo Bianconi .name = "gpio8",
11231c8ace2dSLorenzo Bianconi .regmap[0] = {
11241c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
11251c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
11261c8ace2dSLorenzo Bianconi GPIO8_FLASH_MODE_CFG,
11271c8ace2dSLorenzo Bianconi GPIO8_FLASH_MODE_CFG
11281c8ace2dSLorenzo Bianconi },
11291c8ace2dSLorenzo Bianconi .regmap_size = 1,
11301c8ace2dSLorenzo Bianconi }, {
11311c8ace2dSLorenzo Bianconi .name = "gpio9",
11321c8ace2dSLorenzo Bianconi .regmap[0] = {
11331c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
11341c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
11351c8ace2dSLorenzo Bianconi GPIO9_FLASH_MODE_CFG,
11361c8ace2dSLorenzo Bianconi GPIO9_FLASH_MODE_CFG
11371c8ace2dSLorenzo Bianconi },
11381c8ace2dSLorenzo Bianconi .regmap_size = 1,
11391c8ace2dSLorenzo Bianconi }, {
11401c8ace2dSLorenzo Bianconi .name = "gpio10",
11411c8ace2dSLorenzo Bianconi .regmap[0] = {
11421c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
11431c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
11441c8ace2dSLorenzo Bianconi GPIO10_FLASH_MODE_CFG,
11451c8ace2dSLorenzo Bianconi GPIO10_FLASH_MODE_CFG
11461c8ace2dSLorenzo Bianconi },
11471c8ace2dSLorenzo Bianconi .regmap_size = 1,
11481c8ace2dSLorenzo Bianconi }, {
11491c8ace2dSLorenzo Bianconi .name = "gpio11",
11501c8ace2dSLorenzo Bianconi .regmap[0] = {
11511c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
11521c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
11531c8ace2dSLorenzo Bianconi GPIO11_FLASH_MODE_CFG,
11541c8ace2dSLorenzo Bianconi GPIO11_FLASH_MODE_CFG
11551c8ace2dSLorenzo Bianconi },
11561c8ace2dSLorenzo Bianconi .regmap_size = 1,
11571c8ace2dSLorenzo Bianconi }, {
11581c8ace2dSLorenzo Bianconi .name = "gpio12",
11591c8ace2dSLorenzo Bianconi .regmap[0] = {
11601c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
11611c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
11621c8ace2dSLorenzo Bianconi GPIO12_FLASH_MODE_CFG,
11631c8ace2dSLorenzo Bianconi GPIO12_FLASH_MODE_CFG
11641c8ace2dSLorenzo Bianconi },
11651c8ace2dSLorenzo Bianconi .regmap_size = 1,
11661c8ace2dSLorenzo Bianconi }, {
11671c8ace2dSLorenzo Bianconi .name = "gpio13",
11681c8ace2dSLorenzo Bianconi .regmap[0] = {
11691c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
11701c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
11711c8ace2dSLorenzo Bianconi GPIO13_FLASH_MODE_CFG,
11721c8ace2dSLorenzo Bianconi GPIO13_FLASH_MODE_CFG
11731c8ace2dSLorenzo Bianconi },
11741c8ace2dSLorenzo Bianconi .regmap_size = 1,
11751c8ace2dSLorenzo Bianconi }, {
11761c8ace2dSLorenzo Bianconi .name = "gpio14",
11771c8ace2dSLorenzo Bianconi .regmap[0] = {
11781c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
11791c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
11801c8ace2dSLorenzo Bianconi GPIO14_FLASH_MODE_CFG,
11811c8ace2dSLorenzo Bianconi GPIO14_FLASH_MODE_CFG
11821c8ace2dSLorenzo Bianconi },
11831c8ace2dSLorenzo Bianconi .regmap_size = 1,
11841c8ace2dSLorenzo Bianconi }, {
11851c8ace2dSLorenzo Bianconi .name = "gpio15",
11861c8ace2dSLorenzo Bianconi .regmap[0] = {
11871c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_MUX,
11881c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG,
11891c8ace2dSLorenzo Bianconi GPIO15_FLASH_MODE_CFG,
11901c8ace2dSLorenzo Bianconi GPIO15_FLASH_MODE_CFG
11911c8ace2dSLorenzo Bianconi },
11921c8ace2dSLorenzo Bianconi .regmap_size = 1,
11931c8ace2dSLorenzo Bianconi }, {
11941c8ace2dSLorenzo Bianconi .name = "gpio16",
11951c8ace2dSLorenzo Bianconi .regmap[0] = {
11961c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
11971c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
11981c8ace2dSLorenzo Bianconi GPIO16_FLASH_MODE_CFG,
11991c8ace2dSLorenzo Bianconi GPIO16_FLASH_MODE_CFG
12001c8ace2dSLorenzo Bianconi },
12011c8ace2dSLorenzo Bianconi .regmap_size = 1,
12021c8ace2dSLorenzo Bianconi }, {
12031c8ace2dSLorenzo Bianconi .name = "gpio17",
12041c8ace2dSLorenzo Bianconi .regmap[0] = {
12051c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
12061c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
12071c8ace2dSLorenzo Bianconi GPIO17_FLASH_MODE_CFG,
12081c8ace2dSLorenzo Bianconi GPIO17_FLASH_MODE_CFG
12091c8ace2dSLorenzo Bianconi },
12101c8ace2dSLorenzo Bianconi .regmap_size = 1,
12111c8ace2dSLorenzo Bianconi }, {
12121c8ace2dSLorenzo Bianconi .name = "gpio18",
12131c8ace2dSLorenzo Bianconi .regmap[0] = {
12141c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
12151c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
12161c8ace2dSLorenzo Bianconi GPIO18_FLASH_MODE_CFG,
12171c8ace2dSLorenzo Bianconi GPIO18_FLASH_MODE_CFG
12181c8ace2dSLorenzo Bianconi },
12191c8ace2dSLorenzo Bianconi .regmap_size = 1,
12201c8ace2dSLorenzo Bianconi }, {
12211c8ace2dSLorenzo Bianconi .name = "gpio19",
12221c8ace2dSLorenzo Bianconi .regmap[0] = {
12231c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
12241c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
12251c8ace2dSLorenzo Bianconi GPIO19_FLASH_MODE_CFG,
12261c8ace2dSLorenzo Bianconi GPIO19_FLASH_MODE_CFG
12271c8ace2dSLorenzo Bianconi },
12281c8ace2dSLorenzo Bianconi .regmap_size = 1,
12291c8ace2dSLorenzo Bianconi }, {
12301c8ace2dSLorenzo Bianconi .name = "gpio20",
12311c8ace2dSLorenzo Bianconi .regmap[0] = {
12321c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
12331c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
12341c8ace2dSLorenzo Bianconi GPIO20_FLASH_MODE_CFG,
12351c8ace2dSLorenzo Bianconi GPIO20_FLASH_MODE_CFG
12361c8ace2dSLorenzo Bianconi },
12371c8ace2dSLorenzo Bianconi .regmap_size = 1,
12381c8ace2dSLorenzo Bianconi }, {
12391c8ace2dSLorenzo Bianconi .name = "gpio21",
12401c8ace2dSLorenzo Bianconi .regmap[0] = {
12411c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
12421c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
12431c8ace2dSLorenzo Bianconi GPIO21_FLASH_MODE_CFG,
12441c8ace2dSLorenzo Bianconi GPIO21_FLASH_MODE_CFG
12451c8ace2dSLorenzo Bianconi },
12461c8ace2dSLorenzo Bianconi .regmap_size = 1,
12471c8ace2dSLorenzo Bianconi }, {
12481c8ace2dSLorenzo Bianconi .name = "gpio22",
12491c8ace2dSLorenzo Bianconi .regmap[0] = {
12501c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
12511c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
12521c8ace2dSLorenzo Bianconi GPIO22_FLASH_MODE_CFG,
12531c8ace2dSLorenzo Bianconi GPIO22_FLASH_MODE_CFG
12541c8ace2dSLorenzo Bianconi },
12551c8ace2dSLorenzo Bianconi .regmap_size = 1,
12561c8ace2dSLorenzo Bianconi }, {
12571c8ace2dSLorenzo Bianconi .name = "gpio23",
12581c8ace2dSLorenzo Bianconi .regmap[0] = {
12591c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
12601c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
12611c8ace2dSLorenzo Bianconi GPIO23_FLASH_MODE_CFG,
12621c8ace2dSLorenzo Bianconi GPIO23_FLASH_MODE_CFG
12631c8ace2dSLorenzo Bianconi },
12641c8ace2dSLorenzo Bianconi .regmap_size = 1,
12651c8ace2dSLorenzo Bianconi }, {
12661c8ace2dSLorenzo Bianconi .name = "gpio24",
12671c8ace2dSLorenzo Bianconi .regmap[0] = {
12681c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
12691c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
12701c8ace2dSLorenzo Bianconi GPIO24_FLASH_MODE_CFG,
12711c8ace2dSLorenzo Bianconi GPIO24_FLASH_MODE_CFG
12721c8ace2dSLorenzo Bianconi },
12731c8ace2dSLorenzo Bianconi .regmap_size = 1,
12741c8ace2dSLorenzo Bianconi }, {
12751c8ace2dSLorenzo Bianconi .name = "gpio25",
12761c8ace2dSLorenzo Bianconi .regmap[0] = {
12771c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
12781c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
12791c8ace2dSLorenzo Bianconi GPIO25_FLASH_MODE_CFG,
12801c8ace2dSLorenzo Bianconi GPIO25_FLASH_MODE_CFG
12811c8ace2dSLorenzo Bianconi },
12821c8ace2dSLorenzo Bianconi .regmap_size = 1,
12831c8ace2dSLorenzo Bianconi }, {
12841c8ace2dSLorenzo Bianconi .name = "gpio26",
12851c8ace2dSLorenzo Bianconi .regmap[0] = {
12861c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
12871c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
12881c8ace2dSLorenzo Bianconi GPIO26_FLASH_MODE_CFG,
12891c8ace2dSLorenzo Bianconi GPIO26_FLASH_MODE_CFG
12901c8ace2dSLorenzo Bianconi },
12911c8ace2dSLorenzo Bianconi .regmap_size = 1,
12921c8ace2dSLorenzo Bianconi }, {
12931c8ace2dSLorenzo Bianconi .name = "gpio27",
12941c8ace2dSLorenzo Bianconi .regmap[0] = {
12951c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
12961c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
12971c8ace2dSLorenzo Bianconi GPIO27_FLASH_MODE_CFG,
12981c8ace2dSLorenzo Bianconi GPIO27_FLASH_MODE_CFG
12991c8ace2dSLorenzo Bianconi },
13001c8ace2dSLorenzo Bianconi .regmap_size = 1,
13011c8ace2dSLorenzo Bianconi }, {
13021c8ace2dSLorenzo Bianconi .name = "gpio28",
13031c8ace2dSLorenzo Bianconi .regmap[0] = {
13041c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
13051c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
13061c8ace2dSLorenzo Bianconi GPIO28_FLASH_MODE_CFG,
13071c8ace2dSLorenzo Bianconi GPIO28_FLASH_MODE_CFG
13081c8ace2dSLorenzo Bianconi },
13091c8ace2dSLorenzo Bianconi .regmap_size = 1,
13101c8ace2dSLorenzo Bianconi }, {
13111c8ace2dSLorenzo Bianconi .name = "gpio29",
13121c8ace2dSLorenzo Bianconi .regmap[0] = {
13131c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
13141c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
13151c8ace2dSLorenzo Bianconi GPIO29_FLASH_MODE_CFG,
13161c8ace2dSLorenzo Bianconi GPIO29_FLASH_MODE_CFG
13171c8ace2dSLorenzo Bianconi },
13181c8ace2dSLorenzo Bianconi .regmap_size = 1,
13191c8ace2dSLorenzo Bianconi }, {
13201c8ace2dSLorenzo Bianconi .name = "gpio30",
13211c8ace2dSLorenzo Bianconi .regmap[0] = {
13221c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
13231c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
13241c8ace2dSLorenzo Bianconi GPIO30_FLASH_MODE_CFG,
13251c8ace2dSLorenzo Bianconi GPIO30_FLASH_MODE_CFG
13261c8ace2dSLorenzo Bianconi },
13271c8ace2dSLorenzo Bianconi .regmap_size = 1,
13281c8ace2dSLorenzo Bianconi }, {
13291c8ace2dSLorenzo Bianconi .name = "gpio31",
13301c8ace2dSLorenzo Bianconi .regmap[0] = {
13311c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
13321c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
13331c8ace2dSLorenzo Bianconi GPIO31_FLASH_MODE_CFG,
13341c8ace2dSLorenzo Bianconi GPIO31_FLASH_MODE_CFG
13351c8ace2dSLorenzo Bianconi },
13361c8ace2dSLorenzo Bianconi .regmap_size = 1,
13371c8ace2dSLorenzo Bianconi }, {
13381c8ace2dSLorenzo Bianconi .name = "gpio36",
13391c8ace2dSLorenzo Bianconi .regmap[0] = {
13401c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
13411c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
13421c8ace2dSLorenzo Bianconi GPIO36_FLASH_MODE_CFG,
13431c8ace2dSLorenzo Bianconi GPIO36_FLASH_MODE_CFG
13441c8ace2dSLorenzo Bianconi },
13451c8ace2dSLorenzo Bianconi .regmap_size = 1,
13461c8ace2dSLorenzo Bianconi }, {
13471c8ace2dSLorenzo Bianconi .name = "gpio37",
13481c8ace2dSLorenzo Bianconi .regmap[0] = {
13491c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
13501c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
13511c8ace2dSLorenzo Bianconi GPIO37_FLASH_MODE_CFG,
13521c8ace2dSLorenzo Bianconi GPIO37_FLASH_MODE_CFG
13531c8ace2dSLorenzo Bianconi },
13541c8ace2dSLorenzo Bianconi .regmap_size = 1,
13551c8ace2dSLorenzo Bianconi }, {
13561c8ace2dSLorenzo Bianconi .name = "gpio38",
13571c8ace2dSLorenzo Bianconi .regmap[0] = {
13581c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
13591c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
13601c8ace2dSLorenzo Bianconi GPIO38_FLASH_MODE_CFG,
13611c8ace2dSLorenzo Bianconi GPIO38_FLASH_MODE_CFG
13621c8ace2dSLorenzo Bianconi },
13631c8ace2dSLorenzo Bianconi .regmap_size = 1,
13641c8ace2dSLorenzo Bianconi }, {
13651c8ace2dSLorenzo Bianconi .name = "gpio39",
13661c8ace2dSLorenzo Bianconi .regmap[0] = {
13671c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
13681c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
13691c8ace2dSLorenzo Bianconi GPIO39_FLASH_MODE_CFG,
13701c8ace2dSLorenzo Bianconi GPIO39_FLASH_MODE_CFG
13711c8ace2dSLorenzo Bianconi },
13721c8ace2dSLorenzo Bianconi .regmap_size = 1,
13731c8ace2dSLorenzo Bianconi }, {
13741c8ace2dSLorenzo Bianconi .name = "gpio40",
13751c8ace2dSLorenzo Bianconi .regmap[0] = {
13761c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
13771c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
13781c8ace2dSLorenzo Bianconi GPIO40_FLASH_MODE_CFG,
13791c8ace2dSLorenzo Bianconi GPIO40_FLASH_MODE_CFG
13801c8ace2dSLorenzo Bianconi },
13811c8ace2dSLorenzo Bianconi .regmap_size = 1,
13821c8ace2dSLorenzo Bianconi }, {
13831c8ace2dSLorenzo Bianconi .name = "gpio41",
13841c8ace2dSLorenzo Bianconi .regmap[0] = {
13851c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
13861c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
13871c8ace2dSLorenzo Bianconi GPIO41_FLASH_MODE_CFG,
13881c8ace2dSLorenzo Bianconi GPIO41_FLASH_MODE_CFG
13891c8ace2dSLorenzo Bianconi },
13901c8ace2dSLorenzo Bianconi .regmap_size = 1,
13911c8ace2dSLorenzo Bianconi }, {
13921c8ace2dSLorenzo Bianconi .name = "gpio42",
13931c8ace2dSLorenzo Bianconi .regmap[0] = {
13941c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
13951c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
13961c8ace2dSLorenzo Bianconi GPIO42_FLASH_MODE_CFG,
13971c8ace2dSLorenzo Bianconi GPIO42_FLASH_MODE_CFG
13981c8ace2dSLorenzo Bianconi },
13991c8ace2dSLorenzo Bianconi .regmap_size = 1,
14001c8ace2dSLorenzo Bianconi }, {
14011c8ace2dSLorenzo Bianconi .name = "gpio43",
14021c8ace2dSLorenzo Bianconi .regmap[0] = {
14031c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
14041c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
14051c8ace2dSLorenzo Bianconi GPIO43_FLASH_MODE_CFG,
14061c8ace2dSLorenzo Bianconi GPIO43_FLASH_MODE_CFG
14071c8ace2dSLorenzo Bianconi },
14081c8ace2dSLorenzo Bianconi .regmap_size = 1,
14091c8ace2dSLorenzo Bianconi }, {
14101c8ace2dSLorenzo Bianconi .name = "gpio44",
14111c8ace2dSLorenzo Bianconi .regmap[0] = {
14121c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
14131c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
14141c8ace2dSLorenzo Bianconi GPIO44_FLASH_MODE_CFG,
14151c8ace2dSLorenzo Bianconi GPIO44_FLASH_MODE_CFG
14161c8ace2dSLorenzo Bianconi },
14171c8ace2dSLorenzo Bianconi .regmap_size = 1,
14181c8ace2dSLorenzo Bianconi }, {
14191c8ace2dSLorenzo Bianconi .name = "gpio45",
14201c8ace2dSLorenzo Bianconi .regmap[0] = {
14211c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
14221c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
14231c8ace2dSLorenzo Bianconi GPIO45_FLASH_MODE_CFG,
14241c8ace2dSLorenzo Bianconi GPIO45_FLASH_MODE_CFG
14251c8ace2dSLorenzo Bianconi },
14261c8ace2dSLorenzo Bianconi .regmap_size = 1,
14271c8ace2dSLorenzo Bianconi }, {
14281c8ace2dSLorenzo Bianconi .name = "gpio46",
14291c8ace2dSLorenzo Bianconi .regmap[0] = {
14301c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
14311c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
14321c8ace2dSLorenzo Bianconi GPIO46_FLASH_MODE_CFG,
14331c8ace2dSLorenzo Bianconi GPIO46_FLASH_MODE_CFG
14341c8ace2dSLorenzo Bianconi },
14351c8ace2dSLorenzo Bianconi .regmap_size = 1,
14361c8ace2dSLorenzo Bianconi }, {
14371c8ace2dSLorenzo Bianconi .name = "gpio47",
14381c8ace2dSLorenzo Bianconi .regmap[0] = {
14391c8ace2dSLorenzo Bianconi AIROHA_FUNC_PWM_EXT_MUX,
14401c8ace2dSLorenzo Bianconi REG_GPIO_FLASH_MODE_CFG_EXT,
14411c8ace2dSLorenzo Bianconi GPIO47_FLASH_MODE_CFG,
14421c8ace2dSLorenzo Bianconi GPIO47_FLASH_MODE_CFG
14431c8ace2dSLorenzo Bianconi },
14441c8ace2dSLorenzo Bianconi .regmap_size = 1,
14451c8ace2dSLorenzo Bianconi },
14461c8ace2dSLorenzo Bianconi };
14471c8ace2dSLorenzo Bianconi
14481c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group phy1_led0_func_group[] = {
14491c8ace2dSLorenzo Bianconi {
14501c8ace2dSLorenzo Bianconi .name = "gpio33",
14511c8ace2dSLorenzo Bianconi .regmap[0] = {
14521c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
14531c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
14541c8ace2dSLorenzo Bianconi GPIO_LAN0_LED0_MODE_MASK,
14551c8ace2dSLorenzo Bianconi GPIO_LAN0_LED0_MODE_MASK
14561c8ace2dSLorenzo Bianconi },
14571c8ace2dSLorenzo Bianconi .regmap[1] = {
14581c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
14591c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1460457d9772SChristian Marangi LAN0_LED_MAPPING_MASK,
1461457d9772SChristian Marangi LAN0_PHY_LED_MAP(0)
14621c8ace2dSLorenzo Bianconi },
14631c8ace2dSLorenzo Bianconi .regmap_size = 2,
14641c8ace2dSLorenzo Bianconi }, {
14651c8ace2dSLorenzo Bianconi .name = "gpio34",
14661c8ace2dSLorenzo Bianconi .regmap[0] = {
14671c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
14681c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
14691c8ace2dSLorenzo Bianconi GPIO_LAN1_LED0_MODE_MASK,
14701c8ace2dSLorenzo Bianconi GPIO_LAN1_LED0_MODE_MASK
14711c8ace2dSLorenzo Bianconi },
14721c8ace2dSLorenzo Bianconi .regmap[1] = {
14731c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
14741c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1475457d9772SChristian Marangi LAN1_LED_MAPPING_MASK,
1476457d9772SChristian Marangi LAN1_PHY_LED_MAP(0)
14771c8ace2dSLorenzo Bianconi },
14781c8ace2dSLorenzo Bianconi .regmap_size = 2,
14791c8ace2dSLorenzo Bianconi }, {
14801c8ace2dSLorenzo Bianconi .name = "gpio35",
14811c8ace2dSLorenzo Bianconi .regmap[0] = {
14821c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
14831c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
14841c8ace2dSLorenzo Bianconi GPIO_LAN2_LED0_MODE_MASK,
14851c8ace2dSLorenzo Bianconi GPIO_LAN2_LED0_MODE_MASK
14861c8ace2dSLorenzo Bianconi },
14871c8ace2dSLorenzo Bianconi .regmap[1] = {
14881c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
14891c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1490457d9772SChristian Marangi LAN2_LED_MAPPING_MASK,
1491457d9772SChristian Marangi LAN2_PHY_LED_MAP(0)
14921c8ace2dSLorenzo Bianconi },
14931c8ace2dSLorenzo Bianconi .regmap_size = 2,
14941c8ace2dSLorenzo Bianconi }, {
14951c8ace2dSLorenzo Bianconi .name = "gpio42",
14961c8ace2dSLorenzo Bianconi .regmap[0] = {
14971c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
14981c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
14991c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK,
15001c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK
15011c8ace2dSLorenzo Bianconi },
15021c8ace2dSLorenzo Bianconi .regmap[1] = {
15031c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15041c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1505457d9772SChristian Marangi LAN3_LED_MAPPING_MASK,
1506457d9772SChristian Marangi LAN3_PHY_LED_MAP(0)
15071c8ace2dSLorenzo Bianconi },
15081c8ace2dSLorenzo Bianconi .regmap_size = 2,
15091c8ace2dSLorenzo Bianconi },
15101c8ace2dSLorenzo Bianconi };
15111c8ace2dSLorenzo Bianconi
15121c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group phy2_led0_func_group[] = {
15131c8ace2dSLorenzo Bianconi {
15141c8ace2dSLorenzo Bianconi .name = "gpio33",
15151c8ace2dSLorenzo Bianconi .regmap[0] = {
15161c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15171c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
15181c8ace2dSLorenzo Bianconi GPIO_LAN0_LED0_MODE_MASK,
15191c8ace2dSLorenzo Bianconi GPIO_LAN0_LED0_MODE_MASK
15201c8ace2dSLorenzo Bianconi },
15211c8ace2dSLorenzo Bianconi .regmap[1] = {
15221c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15231c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1524457d9772SChristian Marangi LAN0_LED_MAPPING_MASK,
1525457d9772SChristian Marangi LAN0_PHY_LED_MAP(1)
15261c8ace2dSLorenzo Bianconi },
15271c8ace2dSLorenzo Bianconi .regmap_size = 2,
15281c8ace2dSLorenzo Bianconi }, {
15291c8ace2dSLorenzo Bianconi .name = "gpio34",
15301c8ace2dSLorenzo Bianconi .regmap[0] = {
15311c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15321c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
15331c8ace2dSLorenzo Bianconi GPIO_LAN1_LED0_MODE_MASK,
15341c8ace2dSLorenzo Bianconi GPIO_LAN1_LED0_MODE_MASK
15351c8ace2dSLorenzo Bianconi },
15361c8ace2dSLorenzo Bianconi .regmap[1] = {
15371c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15381c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1539457d9772SChristian Marangi LAN1_LED_MAPPING_MASK,
1540457d9772SChristian Marangi LAN1_PHY_LED_MAP(1)
15411c8ace2dSLorenzo Bianconi },
15421c8ace2dSLorenzo Bianconi .regmap_size = 2,
15431c8ace2dSLorenzo Bianconi }, {
15441c8ace2dSLorenzo Bianconi .name = "gpio35",
15451c8ace2dSLorenzo Bianconi .regmap[0] = {
15461c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15471c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
15481c8ace2dSLorenzo Bianconi GPIO_LAN2_LED0_MODE_MASK,
15491c8ace2dSLorenzo Bianconi GPIO_LAN2_LED0_MODE_MASK
15501c8ace2dSLorenzo Bianconi },
15511c8ace2dSLorenzo Bianconi .regmap[1] = {
15521c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15531c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1554457d9772SChristian Marangi LAN2_LED_MAPPING_MASK,
1555457d9772SChristian Marangi LAN2_PHY_LED_MAP(1)
15561c8ace2dSLorenzo Bianconi },
15571c8ace2dSLorenzo Bianconi .regmap_size = 2,
15581c8ace2dSLorenzo Bianconi }, {
15591c8ace2dSLorenzo Bianconi .name = "gpio42",
15601c8ace2dSLorenzo Bianconi .regmap[0] = {
15611c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15621c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
15631c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK,
15641c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK
15651c8ace2dSLorenzo Bianconi },
15661c8ace2dSLorenzo Bianconi .regmap[1] = {
15671c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15681c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1569457d9772SChristian Marangi LAN3_LED_MAPPING_MASK,
1570457d9772SChristian Marangi LAN3_PHY_LED_MAP(1)
15711c8ace2dSLorenzo Bianconi },
15721c8ace2dSLorenzo Bianconi .regmap_size = 2,
15731c8ace2dSLorenzo Bianconi },
15741c8ace2dSLorenzo Bianconi };
15751c8ace2dSLorenzo Bianconi
15761c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group phy3_led0_func_group[] = {
15771c8ace2dSLorenzo Bianconi {
15781c8ace2dSLorenzo Bianconi .name = "gpio33",
15791c8ace2dSLorenzo Bianconi .regmap[0] = {
15801c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15811c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
15821c8ace2dSLorenzo Bianconi GPIO_LAN0_LED0_MODE_MASK,
15831c8ace2dSLorenzo Bianconi GPIO_LAN0_LED0_MODE_MASK
15841c8ace2dSLorenzo Bianconi },
15851c8ace2dSLorenzo Bianconi .regmap[1] = {
15861c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15871c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1588457d9772SChristian Marangi LAN0_LED_MAPPING_MASK,
1589457d9772SChristian Marangi LAN0_PHY_LED_MAP(2)
15901c8ace2dSLorenzo Bianconi },
15911c8ace2dSLorenzo Bianconi .regmap_size = 2,
15921c8ace2dSLorenzo Bianconi }, {
15931c8ace2dSLorenzo Bianconi .name = "gpio34",
15941c8ace2dSLorenzo Bianconi .regmap[0] = {
15951c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
15961c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
15971c8ace2dSLorenzo Bianconi GPIO_LAN1_LED0_MODE_MASK,
15981c8ace2dSLorenzo Bianconi GPIO_LAN1_LED0_MODE_MASK
15991c8ace2dSLorenzo Bianconi },
16001c8ace2dSLorenzo Bianconi .regmap[1] = {
16011c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16021c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1603457d9772SChristian Marangi LAN1_LED_MAPPING_MASK,
1604457d9772SChristian Marangi LAN1_PHY_LED_MAP(2)
16051c8ace2dSLorenzo Bianconi },
16061c8ace2dSLorenzo Bianconi .regmap_size = 2,
16071c8ace2dSLorenzo Bianconi }, {
16081c8ace2dSLorenzo Bianconi .name = "gpio35",
16091c8ace2dSLorenzo Bianconi .regmap[0] = {
16101c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16111c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
16121c8ace2dSLorenzo Bianconi GPIO_LAN2_LED0_MODE_MASK,
16131c8ace2dSLorenzo Bianconi GPIO_LAN2_LED0_MODE_MASK
16141c8ace2dSLorenzo Bianconi },
16151c8ace2dSLorenzo Bianconi .regmap[1] = {
16161c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16171c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1618457d9772SChristian Marangi LAN2_LED_MAPPING_MASK,
1619457d9772SChristian Marangi LAN2_PHY_LED_MAP(2)
16201c8ace2dSLorenzo Bianconi },
16211c8ace2dSLorenzo Bianconi .regmap_size = 2,
16221c8ace2dSLorenzo Bianconi }, {
16231c8ace2dSLorenzo Bianconi .name = "gpio42",
16241c8ace2dSLorenzo Bianconi .regmap[0] = {
16251c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16261c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
16271c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK,
16281c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK
16291c8ace2dSLorenzo Bianconi },
16301c8ace2dSLorenzo Bianconi .regmap[1] = {
16311c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16321c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1633457d9772SChristian Marangi LAN3_LED_MAPPING_MASK,
1634457d9772SChristian Marangi LAN3_PHY_LED_MAP(2)
16351c8ace2dSLorenzo Bianconi },
16361c8ace2dSLorenzo Bianconi .regmap_size = 2,
16371c8ace2dSLorenzo Bianconi },
16381c8ace2dSLorenzo Bianconi };
16391c8ace2dSLorenzo Bianconi
16401c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group phy4_led0_func_group[] = {
16411c8ace2dSLorenzo Bianconi {
16421c8ace2dSLorenzo Bianconi .name = "gpio33",
16431c8ace2dSLorenzo Bianconi .regmap[0] = {
16441c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16451c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
16461c8ace2dSLorenzo Bianconi GPIO_LAN0_LED0_MODE_MASK,
16471c8ace2dSLorenzo Bianconi GPIO_LAN0_LED0_MODE_MASK
16481c8ace2dSLorenzo Bianconi },
16491c8ace2dSLorenzo Bianconi .regmap[1] = {
16501c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16511c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1652457d9772SChristian Marangi LAN0_LED_MAPPING_MASK,
1653457d9772SChristian Marangi LAN0_PHY_LED_MAP(3)
16541c8ace2dSLorenzo Bianconi },
16551c8ace2dSLorenzo Bianconi .regmap_size = 2,
16561c8ace2dSLorenzo Bianconi }, {
16571c8ace2dSLorenzo Bianconi .name = "gpio34",
16581c8ace2dSLorenzo Bianconi .regmap[0] = {
16591c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16601c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
16611c8ace2dSLorenzo Bianconi GPIO_LAN1_LED0_MODE_MASK,
16621c8ace2dSLorenzo Bianconi GPIO_LAN1_LED0_MODE_MASK
16631c8ace2dSLorenzo Bianconi },
16641c8ace2dSLorenzo Bianconi .regmap[1] = {
16651c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16661c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1667457d9772SChristian Marangi LAN1_LED_MAPPING_MASK,
1668457d9772SChristian Marangi LAN1_PHY_LED_MAP(3)
16691c8ace2dSLorenzo Bianconi },
16701c8ace2dSLorenzo Bianconi .regmap_size = 2,
16711c8ace2dSLorenzo Bianconi }, {
16721c8ace2dSLorenzo Bianconi .name = "gpio35",
16731c8ace2dSLorenzo Bianconi .regmap[0] = {
16741c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16751c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
16761c8ace2dSLorenzo Bianconi GPIO_LAN2_LED0_MODE_MASK,
16771c8ace2dSLorenzo Bianconi GPIO_LAN2_LED0_MODE_MASK
16781c8ace2dSLorenzo Bianconi },
16791c8ace2dSLorenzo Bianconi .regmap[1] = {
16801c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16811c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1682457d9772SChristian Marangi LAN2_LED_MAPPING_MASK,
1683457d9772SChristian Marangi LAN2_PHY_LED_MAP(3)
16841c8ace2dSLorenzo Bianconi },
16851c8ace2dSLorenzo Bianconi .regmap_size = 2,
16861c8ace2dSLorenzo Bianconi }, {
16871c8ace2dSLorenzo Bianconi .name = "gpio42",
16881c8ace2dSLorenzo Bianconi .regmap[0] = {
16891c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16901c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
16911c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK,
16921c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK
16931c8ace2dSLorenzo Bianconi },
16941c8ace2dSLorenzo Bianconi .regmap[1] = {
16951c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
16961c8ace2dSLorenzo Bianconi REG_LAN_LED0_MAPPING,
1697457d9772SChristian Marangi LAN3_LED_MAPPING_MASK,
1698457d9772SChristian Marangi LAN3_PHY_LED_MAP(3)
16991c8ace2dSLorenzo Bianconi },
17001c8ace2dSLorenzo Bianconi .regmap_size = 2,
17011c8ace2dSLorenzo Bianconi },
17021c8ace2dSLorenzo Bianconi };
17031c8ace2dSLorenzo Bianconi
17041c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group phy1_led1_func_group[] = {
17051c8ace2dSLorenzo Bianconi {
17061c8ace2dSLorenzo Bianconi .name = "gpio43",
17071c8ace2dSLorenzo Bianconi .regmap[0] = {
17081c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17091c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
17101c8ace2dSLorenzo Bianconi GPIO_LAN0_LED1_MODE_MASK,
17111c8ace2dSLorenzo Bianconi GPIO_LAN0_LED1_MODE_MASK
17121c8ace2dSLorenzo Bianconi },
17131c8ace2dSLorenzo Bianconi .regmap[1] = {
17141c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17151c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1716457d9772SChristian Marangi LAN0_LED_MAPPING_MASK,
1717457d9772SChristian Marangi LAN0_PHY_LED_MAP(0)
17181c8ace2dSLorenzo Bianconi },
17191c8ace2dSLorenzo Bianconi .regmap_size = 2,
17201c8ace2dSLorenzo Bianconi }, {
17211c8ace2dSLorenzo Bianconi .name = "gpio44",
17221c8ace2dSLorenzo Bianconi .regmap[0] = {
17231c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17241c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
17251c8ace2dSLorenzo Bianconi GPIO_LAN1_LED1_MODE_MASK,
17261c8ace2dSLorenzo Bianconi GPIO_LAN1_LED1_MODE_MASK
17271c8ace2dSLorenzo Bianconi },
17281c8ace2dSLorenzo Bianconi .regmap[1] = {
17291c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17301c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1731457d9772SChristian Marangi LAN1_LED_MAPPING_MASK,
1732457d9772SChristian Marangi LAN1_PHY_LED_MAP(0)
17331c8ace2dSLorenzo Bianconi },
17341c8ace2dSLorenzo Bianconi .regmap_size = 2,
17351c8ace2dSLorenzo Bianconi }, {
17361c8ace2dSLorenzo Bianconi .name = "gpio45",
17371c8ace2dSLorenzo Bianconi .regmap[0] = {
17381c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17391c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
17401c8ace2dSLorenzo Bianconi GPIO_LAN2_LED1_MODE_MASK,
17411c8ace2dSLorenzo Bianconi GPIO_LAN2_LED1_MODE_MASK
17421c8ace2dSLorenzo Bianconi },
17431c8ace2dSLorenzo Bianconi .regmap[1] = {
17441c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17451c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1746457d9772SChristian Marangi LAN2_LED_MAPPING_MASK,
1747457d9772SChristian Marangi LAN2_PHY_LED_MAP(0)
17481c8ace2dSLorenzo Bianconi },
17491c8ace2dSLorenzo Bianconi .regmap_size = 2,
17501c8ace2dSLorenzo Bianconi }, {
17511c8ace2dSLorenzo Bianconi .name = "gpio46",
17521c8ace2dSLorenzo Bianconi .regmap[0] = {
17531c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17541c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
17551c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK,
17561c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK
17571c8ace2dSLorenzo Bianconi },
17581c8ace2dSLorenzo Bianconi .regmap[1] = {
17591c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17601c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1761457d9772SChristian Marangi LAN3_LED_MAPPING_MASK,
1762457d9772SChristian Marangi LAN3_PHY_LED_MAP(0)
17631c8ace2dSLorenzo Bianconi },
17641c8ace2dSLorenzo Bianconi .regmap_size = 2,
17651c8ace2dSLorenzo Bianconi },
17661c8ace2dSLorenzo Bianconi };
17671c8ace2dSLorenzo Bianconi
17681c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group phy2_led1_func_group[] = {
17691c8ace2dSLorenzo Bianconi {
17701c8ace2dSLorenzo Bianconi .name = "gpio43",
17711c8ace2dSLorenzo Bianconi .regmap[0] = {
17721c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17731c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
17741c8ace2dSLorenzo Bianconi GPIO_LAN0_LED1_MODE_MASK,
17751c8ace2dSLorenzo Bianconi GPIO_LAN0_LED1_MODE_MASK
17761c8ace2dSLorenzo Bianconi },
17771c8ace2dSLorenzo Bianconi .regmap[1] = {
17781c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17791c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1780457d9772SChristian Marangi LAN0_LED_MAPPING_MASK,
1781457d9772SChristian Marangi LAN0_PHY_LED_MAP(1)
17821c8ace2dSLorenzo Bianconi },
17831c8ace2dSLorenzo Bianconi .regmap_size = 2,
17841c8ace2dSLorenzo Bianconi }, {
17851c8ace2dSLorenzo Bianconi .name = "gpio44",
17861c8ace2dSLorenzo Bianconi .regmap[0] = {
17871c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17881c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
17891c8ace2dSLorenzo Bianconi GPIO_LAN1_LED1_MODE_MASK,
17901c8ace2dSLorenzo Bianconi GPIO_LAN1_LED1_MODE_MASK
17911c8ace2dSLorenzo Bianconi },
17921c8ace2dSLorenzo Bianconi .regmap[1] = {
17931c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
17941c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1795457d9772SChristian Marangi LAN1_LED_MAPPING_MASK,
1796457d9772SChristian Marangi LAN1_PHY_LED_MAP(1)
17971c8ace2dSLorenzo Bianconi },
17981c8ace2dSLorenzo Bianconi .regmap_size = 2,
17991c8ace2dSLorenzo Bianconi }, {
18001c8ace2dSLorenzo Bianconi .name = "gpio45",
18011c8ace2dSLorenzo Bianconi .regmap[0] = {
18021c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18031c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
18041c8ace2dSLorenzo Bianconi GPIO_LAN2_LED1_MODE_MASK,
18051c8ace2dSLorenzo Bianconi GPIO_LAN2_LED1_MODE_MASK
18061c8ace2dSLorenzo Bianconi },
18071c8ace2dSLorenzo Bianconi .regmap[1] = {
18081c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18091c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1810457d9772SChristian Marangi LAN2_LED_MAPPING_MASK,
1811457d9772SChristian Marangi LAN2_PHY_LED_MAP(1)
18121c8ace2dSLorenzo Bianconi },
18131c8ace2dSLorenzo Bianconi .regmap_size = 2,
18141c8ace2dSLorenzo Bianconi }, {
18151c8ace2dSLorenzo Bianconi .name = "gpio46",
18161c8ace2dSLorenzo Bianconi .regmap[0] = {
18171c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18181c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
18191c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK,
18201c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK
18211c8ace2dSLorenzo Bianconi },
18221c8ace2dSLorenzo Bianconi .regmap[1] = {
18231c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18241c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1825457d9772SChristian Marangi LAN3_LED_MAPPING_MASK,
1826457d9772SChristian Marangi LAN3_PHY_LED_MAP(1)
18271c8ace2dSLorenzo Bianconi },
18281c8ace2dSLorenzo Bianconi .regmap_size = 2,
18291c8ace2dSLorenzo Bianconi },
18301c8ace2dSLorenzo Bianconi };
18311c8ace2dSLorenzo Bianconi
18321c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group phy3_led1_func_group[] = {
18331c8ace2dSLorenzo Bianconi {
18341c8ace2dSLorenzo Bianconi .name = "gpio43",
18351c8ace2dSLorenzo Bianconi .regmap[0] = {
18361c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18371c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
18381c8ace2dSLorenzo Bianconi GPIO_LAN0_LED1_MODE_MASK,
18391c8ace2dSLorenzo Bianconi GPIO_LAN0_LED1_MODE_MASK
18401c8ace2dSLorenzo Bianconi },
18411c8ace2dSLorenzo Bianconi .regmap[1] = {
18421c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18431c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1844457d9772SChristian Marangi LAN0_LED_MAPPING_MASK,
1845457d9772SChristian Marangi LAN0_PHY_LED_MAP(2)
18461c8ace2dSLorenzo Bianconi },
18471c8ace2dSLorenzo Bianconi .regmap_size = 2,
18481c8ace2dSLorenzo Bianconi }, {
18491c8ace2dSLorenzo Bianconi .name = "gpio44",
18501c8ace2dSLorenzo Bianconi .regmap[0] = {
18511c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18521c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
18531c8ace2dSLorenzo Bianconi GPIO_LAN1_LED1_MODE_MASK,
18541c8ace2dSLorenzo Bianconi GPIO_LAN1_LED1_MODE_MASK
18551c8ace2dSLorenzo Bianconi },
18561c8ace2dSLorenzo Bianconi .regmap[1] = {
18571c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18581c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1859457d9772SChristian Marangi LAN1_LED_MAPPING_MASK,
1860457d9772SChristian Marangi LAN1_PHY_LED_MAP(2)
18611c8ace2dSLorenzo Bianconi },
18621c8ace2dSLorenzo Bianconi .regmap_size = 2,
18631c8ace2dSLorenzo Bianconi }, {
18641c8ace2dSLorenzo Bianconi .name = "gpio45",
18651c8ace2dSLorenzo Bianconi .regmap[0] = {
18661c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18671c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
18681c8ace2dSLorenzo Bianconi GPIO_LAN2_LED1_MODE_MASK,
18691c8ace2dSLorenzo Bianconi GPIO_LAN2_LED1_MODE_MASK
18701c8ace2dSLorenzo Bianconi },
18711c8ace2dSLorenzo Bianconi .regmap[1] = {
18721c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18731c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1874457d9772SChristian Marangi LAN2_LED_MAPPING_MASK,
1875457d9772SChristian Marangi LAN2_PHY_LED_MAP(2)
18761c8ace2dSLorenzo Bianconi },
18771c8ace2dSLorenzo Bianconi .regmap_size = 2,
18781c8ace2dSLorenzo Bianconi }, {
18791c8ace2dSLorenzo Bianconi .name = "gpio46",
18801c8ace2dSLorenzo Bianconi .regmap[0] = {
18811c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18821c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
18831c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK,
18841c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK
18851c8ace2dSLorenzo Bianconi },
18861c8ace2dSLorenzo Bianconi .regmap[1] = {
18871c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
18881c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1889457d9772SChristian Marangi LAN3_LED_MAPPING_MASK,
1890457d9772SChristian Marangi LAN3_PHY_LED_MAP(2)
18911c8ace2dSLorenzo Bianconi },
18921c8ace2dSLorenzo Bianconi .regmap_size = 2,
18931c8ace2dSLorenzo Bianconi },
18941c8ace2dSLorenzo Bianconi };
18951c8ace2dSLorenzo Bianconi
18961c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func_group phy4_led1_func_group[] = {
18971c8ace2dSLorenzo Bianconi {
18981c8ace2dSLorenzo Bianconi .name = "gpio43",
18991c8ace2dSLorenzo Bianconi .regmap[0] = {
19001c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
19011c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
19021c8ace2dSLorenzo Bianconi GPIO_LAN0_LED1_MODE_MASK,
19031c8ace2dSLorenzo Bianconi GPIO_LAN0_LED1_MODE_MASK
19041c8ace2dSLorenzo Bianconi },
19051c8ace2dSLorenzo Bianconi .regmap[1] = {
19061c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
19071c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1908457d9772SChristian Marangi LAN0_LED_MAPPING_MASK,
1909457d9772SChristian Marangi LAN0_PHY_LED_MAP(3)
19101c8ace2dSLorenzo Bianconi },
19111c8ace2dSLorenzo Bianconi .regmap_size = 2,
19121c8ace2dSLorenzo Bianconi }, {
19131c8ace2dSLorenzo Bianconi .name = "gpio44",
19141c8ace2dSLorenzo Bianconi .regmap[0] = {
19151c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
19161c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
19171c8ace2dSLorenzo Bianconi GPIO_LAN1_LED1_MODE_MASK,
19181c8ace2dSLorenzo Bianconi GPIO_LAN1_LED1_MODE_MASK
19191c8ace2dSLorenzo Bianconi },
19201c8ace2dSLorenzo Bianconi .regmap[1] = {
19211c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
19221c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1923457d9772SChristian Marangi LAN1_LED_MAPPING_MASK,
1924457d9772SChristian Marangi LAN1_PHY_LED_MAP(3)
19251c8ace2dSLorenzo Bianconi },
19261c8ace2dSLorenzo Bianconi .regmap_size = 2,
19271c8ace2dSLorenzo Bianconi }, {
19281c8ace2dSLorenzo Bianconi .name = "gpio45",
19291c8ace2dSLorenzo Bianconi .regmap[0] = {
19301c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
19311c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
19321c8ace2dSLorenzo Bianconi GPIO_LAN2_LED1_MODE_MASK,
19331c8ace2dSLorenzo Bianconi GPIO_LAN2_LED1_MODE_MASK
19341c8ace2dSLorenzo Bianconi },
19351c8ace2dSLorenzo Bianconi .regmap[1] = {
19361c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
19371c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1938457d9772SChristian Marangi LAN2_LED_MAPPING_MASK,
1939457d9772SChristian Marangi LAN2_PHY_LED_MAP(3)
19401c8ace2dSLorenzo Bianconi },
19411c8ace2dSLorenzo Bianconi .regmap_size = 2,
19421c8ace2dSLorenzo Bianconi }, {
19431c8ace2dSLorenzo Bianconi .name = "gpio46",
19441c8ace2dSLorenzo Bianconi .regmap[0] = {
19451c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
19461c8ace2dSLorenzo Bianconi REG_GPIO_2ND_I2C_MODE,
19471c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK,
19481c8ace2dSLorenzo Bianconi GPIO_LAN3_LED0_MODE_MASK
19491c8ace2dSLorenzo Bianconi },
19501c8ace2dSLorenzo Bianconi .regmap[1] = {
19511c8ace2dSLorenzo Bianconi AIROHA_FUNC_MUX,
19521c8ace2dSLorenzo Bianconi REG_LAN_LED1_MAPPING,
1953457d9772SChristian Marangi LAN3_LED_MAPPING_MASK,
1954457d9772SChristian Marangi LAN3_PHY_LED_MAP(3)
19551c8ace2dSLorenzo Bianconi },
19561c8ace2dSLorenzo Bianconi .regmap_size = 2,
19571c8ace2dSLorenzo Bianconi },
19581c8ace2dSLorenzo Bianconi };
19591c8ace2dSLorenzo Bianconi
19601c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_func airoha_pinctrl_funcs[] = {
19611c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(pon),
19621c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(tod_1pps),
19631c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(sipo),
19641c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(mdio),
19651c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(uart),
19661c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(i2c),
19671c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(jtag),
19681c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(pcm),
19691c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(spi),
19701c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(pcm_spi),
19711c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(i2s),
19721c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(emmc),
19731c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(pnand),
19741c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(pcie_reset),
19751c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(pwm),
19761c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(phy1_led0),
19771c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(phy2_led0),
19781c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(phy3_led0),
19791c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(phy4_led0),
19801c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(phy1_led1),
19811c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(phy2_led1),
19821c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(phy3_led1),
19831c8ace2dSLorenzo Bianconi PINCTRL_FUNC_DESC(phy4_led1),
19841c8ace2dSLorenzo Bianconi };
19851c8ace2dSLorenzo Bianconi
19861c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_conf airoha_pinctrl_pullup_conf[] = {
19871c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(0, REG_I2C_SDA_PU, UART1_TXD_PU_MASK),
19881c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(1, REG_I2C_SDA_PU, UART1_RXD_PU_MASK),
19891c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(2, REG_I2C_SDA_PU, I2C_SDA_PU_MASK),
19901c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(3, REG_I2C_SDA_PU, I2C_SCL_PU_MASK),
19911c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(4, REG_I2C_SDA_PU, SPI_CS0_PU_MASK),
19921c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(5, REG_I2C_SDA_PU, SPI_CLK_PU_MASK),
19931c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(6, REG_I2C_SDA_PU, SPI_MOSI_PU_MASK),
19941c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(7, REG_I2C_SDA_PU, SPI_MISO_PU_MASK),
19951c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(13, REG_GPIO_L_PU, BIT(0)),
19961c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(14, REG_GPIO_L_PU, BIT(1)),
19971c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(15, REG_GPIO_L_PU, BIT(2)),
19981c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(16, REG_GPIO_L_PU, BIT(3)),
19991c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(17, REG_GPIO_L_PU, BIT(4)),
20001c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(18, REG_GPIO_L_PU, BIT(5)),
20011c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(19, REG_GPIO_L_PU, BIT(6)),
20021c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(20, REG_GPIO_L_PU, BIT(7)),
20031c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(21, REG_GPIO_L_PU, BIT(8)),
20041c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(22, REG_GPIO_L_PU, BIT(9)),
20051c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(23, REG_GPIO_L_PU, BIT(10)),
20061c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(24, REG_GPIO_L_PU, BIT(11)),
20071c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(25, REG_GPIO_L_PU, BIT(12)),
20081c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(26, REG_GPIO_L_PU, BIT(13)),
20091c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(27, REG_GPIO_L_PU, BIT(14)),
20101c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(28, REG_GPIO_L_PU, BIT(15)),
20111c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(29, REG_GPIO_L_PU, BIT(16)),
20121c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(30, REG_GPIO_L_PU, BIT(17)),
20131c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(31, REG_GPIO_L_PU, BIT(18)),
20141c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(32, REG_GPIO_L_PU, BIT(18)),
20151c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(33, REG_GPIO_L_PU, BIT(20)),
20161c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(34, REG_GPIO_L_PU, BIT(21)),
20171c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(35, REG_GPIO_L_PU, BIT(22)),
20181c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(36, REG_GPIO_L_PU, BIT(23)),
20191c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(37, REG_GPIO_L_PU, BIT(24)),
20201c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(38, REG_GPIO_L_PU, BIT(25)),
20211c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(39, REG_GPIO_L_PU, BIT(26)),
20221c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(40, REG_GPIO_L_PU, BIT(27)),
20231c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(41, REG_GPIO_L_PU, BIT(28)),
20241c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(42, REG_GPIO_L_PU, BIT(29)),
20251c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(43, REG_GPIO_L_PU, BIT(30)),
20261c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(44, REG_GPIO_L_PU, BIT(31)),
20271c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(45, REG_GPIO_H_PU, BIT(0)),
20281c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(46, REG_GPIO_H_PU, BIT(1)),
20291c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(47, REG_GPIO_H_PU, BIT(2)),
20301c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(48, REG_GPIO_H_PU, BIT(3)),
20311c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(49, REG_GPIO_H_PU, BIT(4)),
20321c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(50, REG_GPIO_H_PU, BIT(5)),
20331c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(51, REG_GPIO_H_PU, BIT(6)),
20341c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(52, REG_GPIO_H_PU, BIT(7)),
20351c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(53, REG_GPIO_H_PU, BIT(8)),
20361c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(54, REG_GPIO_H_PU, BIT(9)),
20371c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(55, REG_GPIO_H_PU, BIT(10)),
20381c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(56, REG_GPIO_H_PU, BIT(11)),
20391c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(57, REG_GPIO_H_PU, BIT(12)),
20401c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(58, REG_GPIO_H_PU, BIT(13)),
20411c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(59, REG_GPIO_H_PU, BIT(14)),
20421c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(61, REG_I2C_SDA_PU, PCIE0_RESET_PU_MASK),
20431c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(62, REG_I2C_SDA_PU, PCIE1_RESET_PU_MASK),
20441c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(63, REG_I2C_SDA_PU, PCIE2_RESET_PU_MASK),
20451c8ace2dSLorenzo Bianconi };
20461c8ace2dSLorenzo Bianconi
20471c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_conf airoha_pinctrl_pulldown_conf[] = {
20481c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(0, REG_I2C_SDA_PD, UART1_TXD_PD_MASK),
20491c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(1, REG_I2C_SDA_PD, UART1_RXD_PD_MASK),
20501c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(2, REG_I2C_SDA_PD, I2C_SDA_PD_MASK),
20511c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(3, REG_I2C_SDA_PD, I2C_SCL_PD_MASK),
20521c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(4, REG_I2C_SDA_PD, SPI_CS0_PD_MASK),
20531c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(5, REG_I2C_SDA_PD, SPI_CLK_PD_MASK),
20541c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(6, REG_I2C_SDA_PD, SPI_MOSI_PD_MASK),
20551c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(7, REG_I2C_SDA_PD, SPI_MISO_PD_MASK),
20561c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(13, REG_GPIO_L_PD, BIT(0)),
20571c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(14, REG_GPIO_L_PD, BIT(1)),
20581c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(15, REG_GPIO_L_PD, BIT(2)),
20591c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(16, REG_GPIO_L_PD, BIT(3)),
20601c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(17, REG_GPIO_L_PD, BIT(4)),
20611c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(18, REG_GPIO_L_PD, BIT(5)),
20621c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(19, REG_GPIO_L_PD, BIT(6)),
20631c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(20, REG_GPIO_L_PD, BIT(7)),
20641c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(21, REG_GPIO_L_PD, BIT(8)),
20651c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(22, REG_GPIO_L_PD, BIT(9)),
20661c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(23, REG_GPIO_L_PD, BIT(10)),
20671c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(24, REG_GPIO_L_PD, BIT(11)),
20681c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(25, REG_GPIO_L_PD, BIT(12)),
20691c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(26, REG_GPIO_L_PD, BIT(13)),
20701c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(27, REG_GPIO_L_PD, BIT(14)),
20711c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(28, REG_GPIO_L_PD, BIT(15)),
20721c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(29, REG_GPIO_L_PD, BIT(16)),
20731c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(30, REG_GPIO_L_PD, BIT(17)),
20741c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(31, REG_GPIO_L_PD, BIT(18)),
20751c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(32, REG_GPIO_L_PD, BIT(18)),
20761c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(33, REG_GPIO_L_PD, BIT(20)),
20771c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(34, REG_GPIO_L_PD, BIT(21)),
20781c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(35, REG_GPIO_L_PD, BIT(22)),
20791c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(36, REG_GPIO_L_PD, BIT(23)),
20801c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(37, REG_GPIO_L_PD, BIT(24)),
20811c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(38, REG_GPIO_L_PD, BIT(25)),
20821c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(39, REG_GPIO_L_PD, BIT(26)),
20831c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(40, REG_GPIO_L_PD, BIT(27)),
20841c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(41, REG_GPIO_L_PD, BIT(28)),
20851c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(42, REG_GPIO_L_PD, BIT(29)),
20861c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(43, REG_GPIO_L_PD, BIT(30)),
20871c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(44, REG_GPIO_L_PD, BIT(31)),
20881c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(45, REG_GPIO_H_PD, BIT(0)),
20891c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(46, REG_GPIO_H_PD, BIT(1)),
20901c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(47, REG_GPIO_H_PD, BIT(2)),
20911c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(48, REG_GPIO_H_PD, BIT(3)),
20921c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(49, REG_GPIO_H_PD, BIT(4)),
20931c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(50, REG_GPIO_H_PD, BIT(5)),
20941c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(51, REG_GPIO_H_PD, BIT(6)),
20951c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(52, REG_GPIO_H_PD, BIT(7)),
20961c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(53, REG_GPIO_H_PD, BIT(8)),
20971c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(54, REG_GPIO_H_PD, BIT(9)),
20981c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(55, REG_GPIO_H_PD, BIT(10)),
20991c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(56, REG_GPIO_H_PD, BIT(11)),
21001c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(57, REG_GPIO_H_PD, BIT(12)),
21011c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(58, REG_GPIO_H_PD, BIT(13)),
21021c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(59, REG_GPIO_H_PD, BIT(14)),
21031c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(61, REG_I2C_SDA_PD, PCIE0_RESET_PD_MASK),
21041c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(62, REG_I2C_SDA_PD, PCIE1_RESET_PD_MASK),
21051c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(63, REG_I2C_SDA_PD, PCIE2_RESET_PD_MASK),
21061c8ace2dSLorenzo Bianconi };
21071c8ace2dSLorenzo Bianconi
21081c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_conf airoha_pinctrl_drive_e2_conf[] = {
21091c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(0, REG_I2C_SDA_E2, UART1_TXD_E2_MASK),
21101c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(1, REG_I2C_SDA_E2, UART1_RXD_E2_MASK),
21111c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(2, REG_I2C_SDA_E2, I2C_SDA_E2_MASK),
21121c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(3, REG_I2C_SDA_E2, I2C_SCL_E2_MASK),
21131c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(4, REG_I2C_SDA_E2, SPI_CS0_E2_MASK),
21141c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(5, REG_I2C_SDA_E2, SPI_CLK_E2_MASK),
21151c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(6, REG_I2C_SDA_E2, SPI_MOSI_E2_MASK),
21161c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(7, REG_I2C_SDA_E2, SPI_MISO_E2_MASK),
21171c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(13, REG_GPIO_L_E2, BIT(0)),
21181c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(14, REG_GPIO_L_E2, BIT(1)),
21191c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(15, REG_GPIO_L_E2, BIT(2)),
21201c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(16, REG_GPIO_L_E2, BIT(3)),
21211c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(17, REG_GPIO_L_E2, BIT(4)),
21221c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(18, REG_GPIO_L_E2, BIT(5)),
21231c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(19, REG_GPIO_L_E2, BIT(6)),
21241c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(20, REG_GPIO_L_E2, BIT(7)),
21251c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(21, REG_GPIO_L_E2, BIT(8)),
21261c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(22, REG_GPIO_L_E2, BIT(9)),
21271c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(23, REG_GPIO_L_E2, BIT(10)),
21281c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(24, REG_GPIO_L_E2, BIT(11)),
21291c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(25, REG_GPIO_L_E2, BIT(12)),
21301c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(26, REG_GPIO_L_E2, BIT(13)),
21311c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(27, REG_GPIO_L_E2, BIT(14)),
21321c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(28, REG_GPIO_L_E2, BIT(15)),
21331c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(29, REG_GPIO_L_E2, BIT(16)),
21341c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(30, REG_GPIO_L_E2, BIT(17)),
21351c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(31, REG_GPIO_L_E2, BIT(18)),
21361c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(32, REG_GPIO_L_E2, BIT(18)),
21371c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(33, REG_GPIO_L_E2, BIT(20)),
21381c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(34, REG_GPIO_L_E2, BIT(21)),
21391c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(35, REG_GPIO_L_E2, BIT(22)),
21401c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(36, REG_GPIO_L_E2, BIT(23)),
21411c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(37, REG_GPIO_L_E2, BIT(24)),
21421c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(38, REG_GPIO_L_E2, BIT(25)),
21431c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(39, REG_GPIO_L_E2, BIT(26)),
21441c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(40, REG_GPIO_L_E2, BIT(27)),
21451c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(41, REG_GPIO_L_E2, BIT(28)),
21461c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(42, REG_GPIO_L_E2, BIT(29)),
21471c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(43, REG_GPIO_L_E2, BIT(30)),
21481c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(44, REG_GPIO_L_E2, BIT(31)),
21491c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(45, REG_GPIO_H_E2, BIT(0)),
21501c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(46, REG_GPIO_H_E2, BIT(1)),
21511c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(47, REG_GPIO_H_E2, BIT(2)),
21521c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(48, REG_GPIO_H_E2, BIT(3)),
21531c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(49, REG_GPIO_H_E2, BIT(4)),
21541c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(50, REG_GPIO_H_E2, BIT(5)),
21551c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(51, REG_GPIO_H_E2, BIT(6)),
21561c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(52, REG_GPIO_H_E2, BIT(7)),
21571c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(53, REG_GPIO_H_E2, BIT(8)),
21581c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(54, REG_GPIO_H_E2, BIT(9)),
21591c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(55, REG_GPIO_H_E2, BIT(10)),
21601c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(56, REG_GPIO_H_E2, BIT(11)),
21611c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(57, REG_GPIO_H_E2, BIT(12)),
21621c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(58, REG_GPIO_H_E2, BIT(13)),
21631c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(59, REG_GPIO_H_E2, BIT(14)),
21641c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(61, REG_I2C_SDA_E2, PCIE0_RESET_E2_MASK),
21651c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(62, REG_I2C_SDA_E2, PCIE1_RESET_E2_MASK),
21661c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(63, REG_I2C_SDA_E2, PCIE2_RESET_E2_MASK),
21671c8ace2dSLorenzo Bianconi };
21681c8ace2dSLorenzo Bianconi
21691c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_conf airoha_pinctrl_drive_e4_conf[] = {
21701c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(0, REG_I2C_SDA_E4, UART1_TXD_E4_MASK),
21711c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(1, REG_I2C_SDA_E4, UART1_RXD_E4_MASK),
21721c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(2, REG_I2C_SDA_E4, I2C_SDA_E4_MASK),
21731c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(3, REG_I2C_SDA_E4, I2C_SCL_E4_MASK),
21741c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(4, REG_I2C_SDA_E4, SPI_CS0_E4_MASK),
21751c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(5, REG_I2C_SDA_E4, SPI_CLK_E4_MASK),
21761c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(6, REG_I2C_SDA_E4, SPI_MOSI_E4_MASK),
21771c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(7, REG_I2C_SDA_E4, SPI_MISO_E4_MASK),
21781c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(13, REG_GPIO_L_E4, BIT(0)),
21791c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(14, REG_GPIO_L_E4, BIT(1)),
21801c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(15, REG_GPIO_L_E4, BIT(2)),
21811c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(16, REG_GPIO_L_E4, BIT(3)),
21821c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(17, REG_GPIO_L_E4, BIT(4)),
21831c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(18, REG_GPIO_L_E4, BIT(5)),
21841c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(19, REG_GPIO_L_E4, BIT(6)),
21851c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(20, REG_GPIO_L_E4, BIT(7)),
21861c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(21, REG_GPIO_L_E4, BIT(8)),
21871c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(22, REG_GPIO_L_E4, BIT(9)),
21881c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(23, REG_GPIO_L_E4, BIT(10)),
21891c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(24, REG_GPIO_L_E4, BIT(11)),
21901c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(25, REG_GPIO_L_E4, BIT(12)),
21911c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(26, REG_GPIO_L_E4, BIT(13)),
21921c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(27, REG_GPIO_L_E4, BIT(14)),
21931c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(28, REG_GPIO_L_E4, BIT(15)),
21941c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(29, REG_GPIO_L_E4, BIT(16)),
21951c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(30, REG_GPIO_L_E4, BIT(17)),
21961c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(31, REG_GPIO_L_E4, BIT(18)),
21971c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(32, REG_GPIO_L_E4, BIT(18)),
21981c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(33, REG_GPIO_L_E4, BIT(20)),
21991c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(34, REG_GPIO_L_E4, BIT(21)),
22001c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(35, REG_GPIO_L_E4, BIT(22)),
22011c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(36, REG_GPIO_L_E4, BIT(23)),
22021c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(37, REG_GPIO_L_E4, BIT(24)),
22031c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(38, REG_GPIO_L_E4, BIT(25)),
22041c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(39, REG_GPIO_L_E4, BIT(26)),
22051c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(40, REG_GPIO_L_E4, BIT(27)),
22061c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(41, REG_GPIO_L_E4, BIT(28)),
22071c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(42, REG_GPIO_L_E4, BIT(29)),
22081c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(43, REG_GPIO_L_E4, BIT(30)),
22091c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(44, REG_GPIO_L_E4, BIT(31)),
22101c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(45, REG_GPIO_H_E4, BIT(0)),
22111c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(46, REG_GPIO_H_E4, BIT(1)),
22121c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(47, REG_GPIO_H_E4, BIT(2)),
22131c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(48, REG_GPIO_H_E4, BIT(3)),
22141c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(49, REG_GPIO_H_E4, BIT(4)),
22151c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(50, REG_GPIO_H_E4, BIT(5)),
22161c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(51, REG_GPIO_H_E4, BIT(6)),
22171c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(52, REG_GPIO_H_E4, BIT(7)),
22181c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(53, REG_GPIO_H_E4, BIT(8)),
22191c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(54, REG_GPIO_H_E4, BIT(9)),
22201c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(55, REG_GPIO_H_E4, BIT(10)),
22211c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(56, REG_GPIO_H_E4, BIT(11)),
22221c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(57, REG_GPIO_H_E4, BIT(12)),
22231c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(58, REG_GPIO_H_E4, BIT(13)),
22241c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(59, REG_GPIO_H_E4, BIT(14)),
22251c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(61, REG_I2C_SDA_E4, PCIE0_RESET_E4_MASK),
22261c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(62, REG_I2C_SDA_E4, PCIE1_RESET_E4_MASK),
22271c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(63, REG_I2C_SDA_E4, PCIE2_RESET_E4_MASK),
22281c8ace2dSLorenzo Bianconi };
22291c8ace2dSLorenzo Bianconi
22301c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_conf airoha_pinctrl_pcie_rst_od_conf[] = {
22311c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(61, REG_PCIE_RESET_OD, PCIE0_RESET_OD_MASK),
22321c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(62, REG_PCIE_RESET_OD, PCIE1_RESET_OD_MASK),
22331c8ace2dSLorenzo Bianconi PINCTRL_CONF_DESC(63, REG_PCIE_RESET_OD, PCIE2_RESET_OD_MASK),
22341c8ace2dSLorenzo Bianconi };
22351c8ace2dSLorenzo Bianconi
airoha_convert_pin_to_reg_offset(struct pinctrl_dev * pctrl_dev,struct pinctrl_gpio_range * range,int pin)22361c8ace2dSLorenzo Bianconi static int airoha_convert_pin_to_reg_offset(struct pinctrl_dev *pctrl_dev,
22371c8ace2dSLorenzo Bianconi struct pinctrl_gpio_range *range,
22381c8ace2dSLorenzo Bianconi int pin)
22391c8ace2dSLorenzo Bianconi {
22401c8ace2dSLorenzo Bianconi if (!range)
22411c8ace2dSLorenzo Bianconi range = pinctrl_find_gpio_range_from_pin_nolock(pctrl_dev,
22421c8ace2dSLorenzo Bianconi pin);
22431c8ace2dSLorenzo Bianconi if (!range)
22441c8ace2dSLorenzo Bianconi return -EINVAL;
22451c8ace2dSLorenzo Bianconi
22461c8ace2dSLorenzo Bianconi return pin - range->pin_base;
22471c8ace2dSLorenzo Bianconi }
22481c8ace2dSLorenzo Bianconi
22491c8ace2dSLorenzo Bianconi /* gpio callbacks */
airoha_gpio_set(struct gpio_chip * chip,unsigned int gpio,int value)2250*7464c881SBartosz Golaszewski static int airoha_gpio_set(struct gpio_chip *chip, unsigned int gpio,
22511c8ace2dSLorenzo Bianconi int value)
22521c8ace2dSLorenzo Bianconi {
22531c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl = gpiochip_get_data(chip);
22541c8ace2dSLorenzo Bianconi u32 offset = gpio % AIROHA_PIN_BANK_SIZE;
22551c8ace2dSLorenzo Bianconi u8 index = gpio / AIROHA_PIN_BANK_SIZE;
22561c8ace2dSLorenzo Bianconi
2257*7464c881SBartosz Golaszewski return regmap_update_bits(pinctrl->regmap,
2258*7464c881SBartosz Golaszewski pinctrl->gpiochip.data[index],
22591c8ace2dSLorenzo Bianconi BIT(offset), value ? BIT(offset) : 0);
22601c8ace2dSLorenzo Bianconi }
22611c8ace2dSLorenzo Bianconi
airoha_gpio_get(struct gpio_chip * chip,unsigned int gpio)22621c8ace2dSLorenzo Bianconi static int airoha_gpio_get(struct gpio_chip *chip, unsigned int gpio)
22631c8ace2dSLorenzo Bianconi {
22641c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl = gpiochip_get_data(chip);
22651c8ace2dSLorenzo Bianconi u32 val, pin = gpio % AIROHA_PIN_BANK_SIZE;
22661c8ace2dSLorenzo Bianconi u8 index = gpio / AIROHA_PIN_BANK_SIZE;
22671c8ace2dSLorenzo Bianconi int err;
22681c8ace2dSLorenzo Bianconi
22691c8ace2dSLorenzo Bianconi err = regmap_read(pinctrl->regmap,
22701c8ace2dSLorenzo Bianconi pinctrl->gpiochip.data[index], &val);
22711c8ace2dSLorenzo Bianconi
22721c8ace2dSLorenzo Bianconi return err ? err : !!(val & BIT(pin));
22731c8ace2dSLorenzo Bianconi }
22741c8ace2dSLorenzo Bianconi
airoha_gpio_direction_output(struct gpio_chip * chip,unsigned int gpio,int value)22751c8ace2dSLorenzo Bianconi static int airoha_gpio_direction_output(struct gpio_chip *chip,
22761c8ace2dSLorenzo Bianconi unsigned int gpio, int value)
22771c8ace2dSLorenzo Bianconi {
22781c8ace2dSLorenzo Bianconi int err;
22791c8ace2dSLorenzo Bianconi
22801c8ace2dSLorenzo Bianconi err = pinctrl_gpio_direction_output(chip, gpio);
22811c8ace2dSLorenzo Bianconi if (err)
22821c8ace2dSLorenzo Bianconi return err;
22831c8ace2dSLorenzo Bianconi
2284*7464c881SBartosz Golaszewski return airoha_gpio_set(chip, gpio, value);
22851c8ace2dSLorenzo Bianconi }
22861c8ace2dSLorenzo Bianconi
22871c8ace2dSLorenzo Bianconi /* irq callbacks */
airoha_irq_unmask(struct irq_data * data)22881c8ace2dSLorenzo Bianconi static void airoha_irq_unmask(struct irq_data *data)
22891c8ace2dSLorenzo Bianconi {
22901c8ace2dSLorenzo Bianconi u8 offset = data->hwirq % AIROHA_REG_GPIOCTRL_NUM_PIN;
22911c8ace2dSLorenzo Bianconi u8 index = data->hwirq / AIROHA_REG_GPIOCTRL_NUM_PIN;
22921c8ace2dSLorenzo Bianconi u32 mask = GENMASK(2 * offset + 1, 2 * offset);
22931c8ace2dSLorenzo Bianconi struct airoha_pinctrl_gpiochip *gpiochip;
22941c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl;
22951c8ace2dSLorenzo Bianconi u32 val = BIT(2 * offset);
22961c8ace2dSLorenzo Bianconi
22971c8ace2dSLorenzo Bianconi gpiochip = irq_data_get_irq_chip_data(data);
22981c8ace2dSLorenzo Bianconi if (WARN_ON_ONCE(data->hwirq >= ARRAY_SIZE(gpiochip->irq_type)))
22991c8ace2dSLorenzo Bianconi return;
23001c8ace2dSLorenzo Bianconi
23011c8ace2dSLorenzo Bianconi pinctrl = container_of(gpiochip, struct airoha_pinctrl, gpiochip);
23021c8ace2dSLorenzo Bianconi switch (gpiochip->irq_type[data->hwirq]) {
23031c8ace2dSLorenzo Bianconi case IRQ_TYPE_LEVEL_LOW:
23041c8ace2dSLorenzo Bianconi val = val << 1;
23051c8ace2dSLorenzo Bianconi fallthrough;
23061c8ace2dSLorenzo Bianconi case IRQ_TYPE_LEVEL_HIGH:
23071c8ace2dSLorenzo Bianconi regmap_update_bits(pinctrl->regmap, gpiochip->level[index],
23081c8ace2dSLorenzo Bianconi mask, val);
23091c8ace2dSLorenzo Bianconi break;
23101c8ace2dSLorenzo Bianconi case IRQ_TYPE_EDGE_FALLING:
23111c8ace2dSLorenzo Bianconi val = val << 1;
23121c8ace2dSLorenzo Bianconi fallthrough;
23131c8ace2dSLorenzo Bianconi case IRQ_TYPE_EDGE_RISING:
23141c8ace2dSLorenzo Bianconi regmap_update_bits(pinctrl->regmap, gpiochip->edge[index],
23151c8ace2dSLorenzo Bianconi mask, val);
23161c8ace2dSLorenzo Bianconi break;
23171c8ace2dSLorenzo Bianconi case IRQ_TYPE_EDGE_BOTH:
23181c8ace2dSLorenzo Bianconi regmap_set_bits(pinctrl->regmap, gpiochip->edge[index], mask);
23191c8ace2dSLorenzo Bianconi break;
23201c8ace2dSLorenzo Bianconi default:
23211c8ace2dSLorenzo Bianconi break;
23221c8ace2dSLorenzo Bianconi }
23231c8ace2dSLorenzo Bianconi }
23241c8ace2dSLorenzo Bianconi
airoha_irq_mask(struct irq_data * data)23251c8ace2dSLorenzo Bianconi static void airoha_irq_mask(struct irq_data *data)
23261c8ace2dSLorenzo Bianconi {
23271c8ace2dSLorenzo Bianconi u8 offset = data->hwirq % AIROHA_REG_GPIOCTRL_NUM_PIN;
23281c8ace2dSLorenzo Bianconi u8 index = data->hwirq / AIROHA_REG_GPIOCTRL_NUM_PIN;
23291c8ace2dSLorenzo Bianconi u32 mask = GENMASK(2 * offset + 1, 2 * offset);
23301c8ace2dSLorenzo Bianconi struct airoha_pinctrl_gpiochip *gpiochip;
23311c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl;
23321c8ace2dSLorenzo Bianconi
23331c8ace2dSLorenzo Bianconi gpiochip = irq_data_get_irq_chip_data(data);
23341c8ace2dSLorenzo Bianconi pinctrl = container_of(gpiochip, struct airoha_pinctrl, gpiochip);
23351c8ace2dSLorenzo Bianconi
23361c8ace2dSLorenzo Bianconi regmap_clear_bits(pinctrl->regmap, gpiochip->level[index], mask);
23371c8ace2dSLorenzo Bianconi regmap_clear_bits(pinctrl->regmap, gpiochip->edge[index], mask);
23381c8ace2dSLorenzo Bianconi }
23391c8ace2dSLorenzo Bianconi
airoha_irq_type(struct irq_data * data,unsigned int type)23401c8ace2dSLorenzo Bianconi static int airoha_irq_type(struct irq_data *data, unsigned int type)
23411c8ace2dSLorenzo Bianconi {
23421c8ace2dSLorenzo Bianconi struct airoha_pinctrl_gpiochip *gpiochip;
23431c8ace2dSLorenzo Bianconi
23441c8ace2dSLorenzo Bianconi gpiochip = irq_data_get_irq_chip_data(data);
23451c8ace2dSLorenzo Bianconi if (data->hwirq >= ARRAY_SIZE(gpiochip->irq_type))
23461c8ace2dSLorenzo Bianconi return -EINVAL;
23471c8ace2dSLorenzo Bianconi
23481c8ace2dSLorenzo Bianconi if (type == IRQ_TYPE_PROBE) {
23491c8ace2dSLorenzo Bianconi if (gpiochip->irq_type[data->hwirq])
23501c8ace2dSLorenzo Bianconi return 0;
23511c8ace2dSLorenzo Bianconi
23521c8ace2dSLorenzo Bianconi type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING;
23531c8ace2dSLorenzo Bianconi }
23541c8ace2dSLorenzo Bianconi gpiochip->irq_type[data->hwirq] = type & IRQ_TYPE_SENSE_MASK;
23551c8ace2dSLorenzo Bianconi
23561c8ace2dSLorenzo Bianconi return 0;
23571c8ace2dSLorenzo Bianconi }
23581c8ace2dSLorenzo Bianconi
airoha_irq_handler(int irq,void * data)23591c8ace2dSLorenzo Bianconi static irqreturn_t airoha_irq_handler(int irq, void *data)
23601c8ace2dSLorenzo Bianconi {
23611c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl = data;
23621c8ace2dSLorenzo Bianconi bool handled = false;
23631c8ace2dSLorenzo Bianconi int i;
23641c8ace2dSLorenzo Bianconi
23651c8ace2dSLorenzo Bianconi for (i = 0; i < ARRAY_SIZE(irq_status_regs); i++) {
23661c8ace2dSLorenzo Bianconi struct gpio_irq_chip *girq = &pinctrl->gpiochip.chip.irq;
2367ac6f0825SKees Cook u32 regmap;
2368ac6f0825SKees Cook unsigned long status;
23691c8ace2dSLorenzo Bianconi int irq;
23701c8ace2dSLorenzo Bianconi
23711c8ace2dSLorenzo Bianconi if (regmap_read(pinctrl->regmap, pinctrl->gpiochip.status[i],
2372ac6f0825SKees Cook ®map))
23731c8ace2dSLorenzo Bianconi continue;
23741c8ace2dSLorenzo Bianconi
2375ac6f0825SKees Cook status = regmap;
2376ac6f0825SKees Cook for_each_set_bit(irq, &status, AIROHA_PIN_BANK_SIZE) {
23771c8ace2dSLorenzo Bianconi u32 offset = irq + i * AIROHA_PIN_BANK_SIZE;
23781c8ace2dSLorenzo Bianconi
23791c8ace2dSLorenzo Bianconi generic_handle_irq(irq_find_mapping(girq->domain,
23801c8ace2dSLorenzo Bianconi offset));
23811c8ace2dSLorenzo Bianconi regmap_write(pinctrl->regmap,
23821c8ace2dSLorenzo Bianconi pinctrl->gpiochip.status[i], BIT(irq));
23831c8ace2dSLorenzo Bianconi }
23841c8ace2dSLorenzo Bianconi handled |= !!status;
23851c8ace2dSLorenzo Bianconi }
23861c8ace2dSLorenzo Bianconi
23871c8ace2dSLorenzo Bianconi return handled ? IRQ_HANDLED : IRQ_NONE;
23881c8ace2dSLorenzo Bianconi }
23891c8ace2dSLorenzo Bianconi
23901c8ace2dSLorenzo Bianconi static const struct irq_chip airoha_gpio_irq_chip = {
23911c8ace2dSLorenzo Bianconi .name = "airoha-gpio-irq",
23921c8ace2dSLorenzo Bianconi .irq_unmask = airoha_irq_unmask,
23931c8ace2dSLorenzo Bianconi .irq_mask = airoha_irq_mask,
23941c8ace2dSLorenzo Bianconi .irq_mask_ack = airoha_irq_mask,
23951c8ace2dSLorenzo Bianconi .irq_set_type = airoha_irq_type,
23961c8ace2dSLorenzo Bianconi .flags = IRQCHIP_SET_TYPE_MASKED | IRQCHIP_IMMUTABLE,
23971c8ace2dSLorenzo Bianconi };
23981c8ace2dSLorenzo Bianconi
airoha_pinctrl_add_gpiochip(struct airoha_pinctrl * pinctrl,struct platform_device * pdev)23991c8ace2dSLorenzo Bianconi static int airoha_pinctrl_add_gpiochip(struct airoha_pinctrl *pinctrl,
24001c8ace2dSLorenzo Bianconi struct platform_device *pdev)
24011c8ace2dSLorenzo Bianconi {
24021c8ace2dSLorenzo Bianconi struct airoha_pinctrl_gpiochip *chip = &pinctrl->gpiochip;
24031c8ace2dSLorenzo Bianconi struct gpio_chip *gc = &chip->chip;
24041c8ace2dSLorenzo Bianconi struct gpio_irq_chip *girq = &gc->irq;
24051c8ace2dSLorenzo Bianconi struct device *dev = &pdev->dev;
24061c8ace2dSLorenzo Bianconi int irq, err;
24071c8ace2dSLorenzo Bianconi
24081c8ace2dSLorenzo Bianconi chip->data = gpio_data_regs;
24091c8ace2dSLorenzo Bianconi chip->dir = gpio_dir_regs;
24101c8ace2dSLorenzo Bianconi chip->out = gpio_out_regs;
24111c8ace2dSLorenzo Bianconi chip->status = irq_status_regs;
24121c8ace2dSLorenzo Bianconi chip->level = irq_level_regs;
24131c8ace2dSLorenzo Bianconi chip->edge = irq_edge_regs;
24141c8ace2dSLorenzo Bianconi
24151c8ace2dSLorenzo Bianconi gc->parent = dev;
24161c8ace2dSLorenzo Bianconi gc->label = dev_name(dev);
24171c8ace2dSLorenzo Bianconi gc->request = gpiochip_generic_request;
24181c8ace2dSLorenzo Bianconi gc->free = gpiochip_generic_free;
24191c8ace2dSLorenzo Bianconi gc->direction_input = pinctrl_gpio_direction_input;
24201c8ace2dSLorenzo Bianconi gc->direction_output = airoha_gpio_direction_output;
2421*7464c881SBartosz Golaszewski gc->set_rv = airoha_gpio_set;
24221c8ace2dSLorenzo Bianconi gc->get = airoha_gpio_get;
24231c8ace2dSLorenzo Bianconi gc->base = -1;
24241c8ace2dSLorenzo Bianconi gc->ngpio = AIROHA_NUM_PINS;
24251c8ace2dSLorenzo Bianconi
24261c8ace2dSLorenzo Bianconi girq->default_type = IRQ_TYPE_NONE;
24271c8ace2dSLorenzo Bianconi girq->handler = handle_simple_irq;
24281c8ace2dSLorenzo Bianconi gpio_irq_chip_set_chip(girq, &airoha_gpio_irq_chip);
24291c8ace2dSLorenzo Bianconi
24301c8ace2dSLorenzo Bianconi irq = platform_get_irq(pdev, 0);
24311c8ace2dSLorenzo Bianconi if (irq < 0)
24321c8ace2dSLorenzo Bianconi return irq;
24331c8ace2dSLorenzo Bianconi
24341c8ace2dSLorenzo Bianconi err = devm_request_irq(dev, irq, airoha_irq_handler, IRQF_SHARED,
24351c8ace2dSLorenzo Bianconi dev_name(dev), pinctrl);
24361c8ace2dSLorenzo Bianconi if (err) {
24371c8ace2dSLorenzo Bianconi dev_err(dev, "error requesting irq %d: %d\n", irq, err);
24381c8ace2dSLorenzo Bianconi return err;
24391c8ace2dSLorenzo Bianconi }
24401c8ace2dSLorenzo Bianconi
24411c8ace2dSLorenzo Bianconi return devm_gpiochip_add_data(dev, gc, pinctrl);
24421c8ace2dSLorenzo Bianconi }
24431c8ace2dSLorenzo Bianconi
24441c8ace2dSLorenzo Bianconi /* pinmux callbacks */
airoha_pinmux_set_mux(struct pinctrl_dev * pctrl_dev,unsigned int selector,unsigned int group)24451c8ace2dSLorenzo Bianconi static int airoha_pinmux_set_mux(struct pinctrl_dev *pctrl_dev,
24461c8ace2dSLorenzo Bianconi unsigned int selector,
24471c8ace2dSLorenzo Bianconi unsigned int group)
24481c8ace2dSLorenzo Bianconi {
24491c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
24501c8ace2dSLorenzo Bianconi const struct airoha_pinctrl_func *func;
24511c8ace2dSLorenzo Bianconi struct function_desc *desc;
24521c8ace2dSLorenzo Bianconi struct group_desc *grp;
24531c8ace2dSLorenzo Bianconi int i;
24541c8ace2dSLorenzo Bianconi
24551c8ace2dSLorenzo Bianconi desc = pinmux_generic_get_function(pctrl_dev, selector);
24561c8ace2dSLorenzo Bianconi if (!desc)
24571c8ace2dSLorenzo Bianconi return -EINVAL;
24581c8ace2dSLorenzo Bianconi
24591c8ace2dSLorenzo Bianconi grp = pinctrl_generic_get_group(pctrl_dev, group);
24601c8ace2dSLorenzo Bianconi if (!grp)
24611c8ace2dSLorenzo Bianconi return -EINVAL;
24621c8ace2dSLorenzo Bianconi
24631c8ace2dSLorenzo Bianconi dev_dbg(pctrl_dev->dev, "enable function %s group %s\n",
24641c8ace2dSLorenzo Bianconi desc->func.name, grp->grp.name);
24651c8ace2dSLorenzo Bianconi
24661c8ace2dSLorenzo Bianconi func = desc->data;
24671c8ace2dSLorenzo Bianconi for (i = 0; i < func->group_size; i++) {
24681c8ace2dSLorenzo Bianconi const struct airoha_pinctrl_func_group *group;
24691c8ace2dSLorenzo Bianconi int j;
24701c8ace2dSLorenzo Bianconi
24711c8ace2dSLorenzo Bianconi group = &func->groups[i];
24721c8ace2dSLorenzo Bianconi if (strcmp(group->name, grp->grp.name))
24731c8ace2dSLorenzo Bianconi continue;
24741c8ace2dSLorenzo Bianconi
24751c8ace2dSLorenzo Bianconi for (j = 0; j < group->regmap_size; j++) {
24761c8ace2dSLorenzo Bianconi switch (group->regmap[j].mux) {
24771c8ace2dSLorenzo Bianconi case AIROHA_FUNC_PWM_EXT_MUX:
24781c8ace2dSLorenzo Bianconi case AIROHA_FUNC_PWM_MUX:
24791c8ace2dSLorenzo Bianconi regmap_update_bits(pinctrl->regmap,
24801c8ace2dSLorenzo Bianconi group->regmap[j].offset,
24811c8ace2dSLorenzo Bianconi group->regmap[j].mask,
24821c8ace2dSLorenzo Bianconi group->regmap[j].val);
24831c8ace2dSLorenzo Bianconi break;
24841c8ace2dSLorenzo Bianconi default:
24851c8ace2dSLorenzo Bianconi regmap_update_bits(pinctrl->chip_scu,
24861c8ace2dSLorenzo Bianconi group->regmap[j].offset,
24871c8ace2dSLorenzo Bianconi group->regmap[j].mask,
24881c8ace2dSLorenzo Bianconi group->regmap[j].val);
24891c8ace2dSLorenzo Bianconi break;
24901c8ace2dSLorenzo Bianconi }
24911c8ace2dSLorenzo Bianconi }
24921c8ace2dSLorenzo Bianconi return 0;
24931c8ace2dSLorenzo Bianconi }
24941c8ace2dSLorenzo Bianconi
24951c8ace2dSLorenzo Bianconi return -EINVAL;
24961c8ace2dSLorenzo Bianconi }
24971c8ace2dSLorenzo Bianconi
airoha_pinmux_set_direction(struct pinctrl_dev * pctrl_dev,struct pinctrl_gpio_range * range,unsigned int p,bool input)24981c8ace2dSLorenzo Bianconi static int airoha_pinmux_set_direction(struct pinctrl_dev *pctrl_dev,
24991c8ace2dSLorenzo Bianconi struct pinctrl_gpio_range *range,
25001c8ace2dSLorenzo Bianconi unsigned int p, bool input)
25011c8ace2dSLorenzo Bianconi {
25021c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
25031c8ace2dSLorenzo Bianconi u32 mask, index;
25041c8ace2dSLorenzo Bianconi int err, pin;
25051c8ace2dSLorenzo Bianconi
25061c8ace2dSLorenzo Bianconi pin = airoha_convert_pin_to_reg_offset(pctrl_dev, range, p);
25071c8ace2dSLorenzo Bianconi if (pin < 0)
25081c8ace2dSLorenzo Bianconi return pin;
25091c8ace2dSLorenzo Bianconi
25101c8ace2dSLorenzo Bianconi /* set output enable */
25111c8ace2dSLorenzo Bianconi mask = BIT(pin % AIROHA_PIN_BANK_SIZE);
25121c8ace2dSLorenzo Bianconi index = pin / AIROHA_PIN_BANK_SIZE;
25131c8ace2dSLorenzo Bianconi err = regmap_update_bits(pinctrl->regmap, pinctrl->gpiochip.out[index],
25141c8ace2dSLorenzo Bianconi mask, !input ? mask : 0);
25151c8ace2dSLorenzo Bianconi if (err)
25161c8ace2dSLorenzo Bianconi return err;
25171c8ace2dSLorenzo Bianconi
25181c8ace2dSLorenzo Bianconi /* set direction */
25191c8ace2dSLorenzo Bianconi mask = BIT(2 * (pin % AIROHA_REG_GPIOCTRL_NUM_PIN));
25201c8ace2dSLorenzo Bianconi index = pin / AIROHA_REG_GPIOCTRL_NUM_PIN;
25211c8ace2dSLorenzo Bianconi return regmap_update_bits(pinctrl->regmap,
25221c8ace2dSLorenzo Bianconi pinctrl->gpiochip.dir[index], mask,
25231c8ace2dSLorenzo Bianconi !input ? mask : 0);
25241c8ace2dSLorenzo Bianconi }
25251c8ace2dSLorenzo Bianconi
25261c8ace2dSLorenzo Bianconi static const struct pinmux_ops airoha_pmxops = {
25271c8ace2dSLorenzo Bianconi .get_functions_count = pinmux_generic_get_function_count,
25281c8ace2dSLorenzo Bianconi .get_function_name = pinmux_generic_get_function_name,
25291c8ace2dSLorenzo Bianconi .get_function_groups = pinmux_generic_get_function_groups,
25301c8ace2dSLorenzo Bianconi .gpio_set_direction = airoha_pinmux_set_direction,
25311c8ace2dSLorenzo Bianconi .set_mux = airoha_pinmux_set_mux,
25321c8ace2dSLorenzo Bianconi .strict = true,
25331c8ace2dSLorenzo Bianconi };
25341c8ace2dSLorenzo Bianconi
25351c8ace2dSLorenzo Bianconi /* pinconf callbacks */
25361c8ace2dSLorenzo Bianconi static const struct airoha_pinctrl_reg *
airoha_pinctrl_get_conf_reg(const struct airoha_pinctrl_conf * conf,int conf_size,int pin)25371c8ace2dSLorenzo Bianconi airoha_pinctrl_get_conf_reg(const struct airoha_pinctrl_conf *conf,
25381c8ace2dSLorenzo Bianconi int conf_size, int pin)
25391c8ace2dSLorenzo Bianconi {
25401c8ace2dSLorenzo Bianconi int i;
25411c8ace2dSLorenzo Bianconi
25421c8ace2dSLorenzo Bianconi for (i = 0; i < conf_size; i++) {
25431c8ace2dSLorenzo Bianconi if (conf[i].pin == pin)
25441c8ace2dSLorenzo Bianconi return &conf[i].reg;
25451c8ace2dSLorenzo Bianconi }
25461c8ace2dSLorenzo Bianconi
25471c8ace2dSLorenzo Bianconi return NULL;
25481c8ace2dSLorenzo Bianconi }
25491c8ace2dSLorenzo Bianconi
airoha_pinctrl_get_conf(struct airoha_pinctrl * pinctrl,const struct airoha_pinctrl_conf * conf,int conf_size,int pin,u32 * val)25501c8ace2dSLorenzo Bianconi static int airoha_pinctrl_get_conf(struct airoha_pinctrl *pinctrl,
25511c8ace2dSLorenzo Bianconi const struct airoha_pinctrl_conf *conf,
25521c8ace2dSLorenzo Bianconi int conf_size, int pin, u32 *val)
25531c8ace2dSLorenzo Bianconi {
25541c8ace2dSLorenzo Bianconi const struct airoha_pinctrl_reg *reg;
25551c8ace2dSLorenzo Bianconi
25561c8ace2dSLorenzo Bianconi reg = airoha_pinctrl_get_conf_reg(conf, conf_size, pin);
25571c8ace2dSLorenzo Bianconi if (!reg)
25581c8ace2dSLorenzo Bianconi return -EINVAL;
25591c8ace2dSLorenzo Bianconi
25601c8ace2dSLorenzo Bianconi if (regmap_read(pinctrl->chip_scu, reg->offset, val))
25611c8ace2dSLorenzo Bianconi return -EINVAL;
25621c8ace2dSLorenzo Bianconi
25631c8ace2dSLorenzo Bianconi *val = (*val & reg->mask) >> __ffs(reg->mask);
25641c8ace2dSLorenzo Bianconi
25651c8ace2dSLorenzo Bianconi return 0;
25661c8ace2dSLorenzo Bianconi }
25671c8ace2dSLorenzo Bianconi
airoha_pinctrl_set_conf(struct airoha_pinctrl * pinctrl,const struct airoha_pinctrl_conf * conf,int conf_size,int pin,u32 val)25681c8ace2dSLorenzo Bianconi static int airoha_pinctrl_set_conf(struct airoha_pinctrl *pinctrl,
25691c8ace2dSLorenzo Bianconi const struct airoha_pinctrl_conf *conf,
25701c8ace2dSLorenzo Bianconi int conf_size, int pin, u32 val)
25711c8ace2dSLorenzo Bianconi {
25721c8ace2dSLorenzo Bianconi const struct airoha_pinctrl_reg *reg = NULL;
25731c8ace2dSLorenzo Bianconi
25741c8ace2dSLorenzo Bianconi reg = airoha_pinctrl_get_conf_reg(conf, conf_size, pin);
25751c8ace2dSLorenzo Bianconi if (!reg)
25761c8ace2dSLorenzo Bianconi return -EINVAL;
25771c8ace2dSLorenzo Bianconi
25781c8ace2dSLorenzo Bianconi
25791c8ace2dSLorenzo Bianconi if (regmap_update_bits(pinctrl->chip_scu, reg->offset, reg->mask,
25801c8ace2dSLorenzo Bianconi val << __ffs(reg->mask)))
25811c8ace2dSLorenzo Bianconi return -EINVAL;
25821c8ace2dSLorenzo Bianconi
25831c8ace2dSLorenzo Bianconi return 0;
25841c8ace2dSLorenzo Bianconi }
25851c8ace2dSLorenzo Bianconi
25861c8ace2dSLorenzo Bianconi #define airoha_pinctrl_get_pullup_conf(pinctrl, pin, val) \
25871c8ace2dSLorenzo Bianconi airoha_pinctrl_get_conf((pinctrl), airoha_pinctrl_pullup_conf, \
25881c8ace2dSLorenzo Bianconi ARRAY_SIZE(airoha_pinctrl_pullup_conf), \
25891c8ace2dSLorenzo Bianconi (pin), (val))
25901c8ace2dSLorenzo Bianconi #define airoha_pinctrl_get_pulldown_conf(pinctrl, pin, val) \
25911c8ace2dSLorenzo Bianconi airoha_pinctrl_get_conf((pinctrl), airoha_pinctrl_pulldown_conf, \
25921c8ace2dSLorenzo Bianconi ARRAY_SIZE(airoha_pinctrl_pulldown_conf), \
25931c8ace2dSLorenzo Bianconi (pin), (val))
25941c8ace2dSLorenzo Bianconi #define airoha_pinctrl_get_drive_e2_conf(pinctrl, pin, val) \
25951c8ace2dSLorenzo Bianconi airoha_pinctrl_get_conf((pinctrl), airoha_pinctrl_drive_e2_conf, \
25961c8ace2dSLorenzo Bianconi ARRAY_SIZE(airoha_pinctrl_drive_e2_conf), \
25971c8ace2dSLorenzo Bianconi (pin), (val))
25981c8ace2dSLorenzo Bianconi #define airoha_pinctrl_get_drive_e4_conf(pinctrl, pin, val) \
25991c8ace2dSLorenzo Bianconi airoha_pinctrl_get_conf((pinctrl), airoha_pinctrl_drive_e4_conf, \
26001c8ace2dSLorenzo Bianconi ARRAY_SIZE(airoha_pinctrl_drive_e4_conf), \
26011c8ace2dSLorenzo Bianconi (pin), (val))
26021c8ace2dSLorenzo Bianconi #define airoha_pinctrl_get_pcie_rst_od_conf(pinctrl, pin, val) \
26031c8ace2dSLorenzo Bianconi airoha_pinctrl_get_conf((pinctrl), airoha_pinctrl_pcie_rst_od_conf, \
26041c8ace2dSLorenzo Bianconi ARRAY_SIZE(airoha_pinctrl_pcie_rst_od_conf), \
26051c8ace2dSLorenzo Bianconi (pin), (val))
26061c8ace2dSLorenzo Bianconi #define airoha_pinctrl_set_pullup_conf(pinctrl, pin, val) \
26071c8ace2dSLorenzo Bianconi airoha_pinctrl_set_conf((pinctrl), airoha_pinctrl_pullup_conf, \
26081c8ace2dSLorenzo Bianconi ARRAY_SIZE(airoha_pinctrl_pullup_conf), \
26091c8ace2dSLorenzo Bianconi (pin), (val))
26101c8ace2dSLorenzo Bianconi #define airoha_pinctrl_set_pulldown_conf(pinctrl, pin, val) \
26111c8ace2dSLorenzo Bianconi airoha_pinctrl_set_conf((pinctrl), airoha_pinctrl_pulldown_conf, \
26121c8ace2dSLorenzo Bianconi ARRAY_SIZE(airoha_pinctrl_pulldown_conf), \
26131c8ace2dSLorenzo Bianconi (pin), (val))
26141c8ace2dSLorenzo Bianconi #define airoha_pinctrl_set_drive_e2_conf(pinctrl, pin, val) \
26151c8ace2dSLorenzo Bianconi airoha_pinctrl_set_conf((pinctrl), airoha_pinctrl_drive_e2_conf, \
26161c8ace2dSLorenzo Bianconi ARRAY_SIZE(airoha_pinctrl_drive_e2_conf), \
26171c8ace2dSLorenzo Bianconi (pin), (val))
26181c8ace2dSLorenzo Bianconi #define airoha_pinctrl_set_drive_e4_conf(pinctrl, pin, val) \
26191c8ace2dSLorenzo Bianconi airoha_pinctrl_set_conf((pinctrl), airoha_pinctrl_drive_e4_conf, \
26201c8ace2dSLorenzo Bianconi ARRAY_SIZE(airoha_pinctrl_drive_e4_conf), \
26211c8ace2dSLorenzo Bianconi (pin), (val))
26221c8ace2dSLorenzo Bianconi #define airoha_pinctrl_set_pcie_rst_od_conf(pinctrl, pin, val) \
26231c8ace2dSLorenzo Bianconi airoha_pinctrl_set_conf((pinctrl), airoha_pinctrl_pcie_rst_od_conf, \
26241c8ace2dSLorenzo Bianconi ARRAY_SIZE(airoha_pinctrl_pcie_rst_od_conf), \
26251c8ace2dSLorenzo Bianconi (pin), (val))
26261c8ace2dSLorenzo Bianconi
airoha_pinconf_get_direction(struct pinctrl_dev * pctrl_dev,u32 p)26271c8ace2dSLorenzo Bianconi static int airoha_pinconf_get_direction(struct pinctrl_dev *pctrl_dev, u32 p)
26281c8ace2dSLorenzo Bianconi {
26291c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
26301c8ace2dSLorenzo Bianconi u32 val, mask;
26311c8ace2dSLorenzo Bianconi int err, pin;
26321c8ace2dSLorenzo Bianconi u8 index;
26331c8ace2dSLorenzo Bianconi
26341c8ace2dSLorenzo Bianconi pin = airoha_convert_pin_to_reg_offset(pctrl_dev, NULL, p);
26351c8ace2dSLorenzo Bianconi if (pin < 0)
26361c8ace2dSLorenzo Bianconi return pin;
26371c8ace2dSLorenzo Bianconi
26381c8ace2dSLorenzo Bianconi index = pin / AIROHA_REG_GPIOCTRL_NUM_PIN;
26391c8ace2dSLorenzo Bianconi err = regmap_read(pinctrl->regmap, pinctrl->gpiochip.dir[index], &val);
26401c8ace2dSLorenzo Bianconi if (err)
26411c8ace2dSLorenzo Bianconi return err;
26421c8ace2dSLorenzo Bianconi
26431c8ace2dSLorenzo Bianconi mask = BIT(2 * (pin % AIROHA_REG_GPIOCTRL_NUM_PIN));
26441c8ace2dSLorenzo Bianconi return val & mask ? PIN_CONFIG_OUTPUT_ENABLE : PIN_CONFIG_INPUT_ENABLE;
26451c8ace2dSLorenzo Bianconi }
26461c8ace2dSLorenzo Bianconi
airoha_pinconf_get(struct pinctrl_dev * pctrl_dev,unsigned int pin,unsigned long * config)26471c8ace2dSLorenzo Bianconi static int airoha_pinconf_get(struct pinctrl_dev *pctrl_dev,
26481c8ace2dSLorenzo Bianconi unsigned int pin, unsigned long *config)
26491c8ace2dSLorenzo Bianconi {
26501c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
26511c8ace2dSLorenzo Bianconi enum pin_config_param param = pinconf_to_config_param(*config);
26521c8ace2dSLorenzo Bianconi u32 arg;
26531c8ace2dSLorenzo Bianconi
26541c8ace2dSLorenzo Bianconi switch (param) {
26551c8ace2dSLorenzo Bianconi case PIN_CONFIG_BIAS_PULL_DOWN:
26561c8ace2dSLorenzo Bianconi case PIN_CONFIG_BIAS_DISABLE:
26571c8ace2dSLorenzo Bianconi case PIN_CONFIG_BIAS_PULL_UP: {
26581c8ace2dSLorenzo Bianconi u32 pull_up, pull_down;
26591c8ace2dSLorenzo Bianconi
26601c8ace2dSLorenzo Bianconi if (airoha_pinctrl_get_pullup_conf(pinctrl, pin, &pull_up) ||
26611c8ace2dSLorenzo Bianconi airoha_pinctrl_get_pulldown_conf(pinctrl, pin, &pull_down))
26621c8ace2dSLorenzo Bianconi return -EINVAL;
26631c8ace2dSLorenzo Bianconi
26641c8ace2dSLorenzo Bianconi if (param == PIN_CONFIG_BIAS_PULL_UP &&
26651c8ace2dSLorenzo Bianconi !(pull_up && !pull_down))
26661c8ace2dSLorenzo Bianconi return -EINVAL;
26671c8ace2dSLorenzo Bianconi else if (param == PIN_CONFIG_BIAS_PULL_DOWN &&
26681c8ace2dSLorenzo Bianconi !(pull_down && !pull_up))
26691c8ace2dSLorenzo Bianconi return -EINVAL;
26701c8ace2dSLorenzo Bianconi else if (pull_up || pull_down)
26711c8ace2dSLorenzo Bianconi return -EINVAL;
26721c8ace2dSLorenzo Bianconi
26731c8ace2dSLorenzo Bianconi arg = 1;
26741c8ace2dSLorenzo Bianconi break;
26751c8ace2dSLorenzo Bianconi }
26761c8ace2dSLorenzo Bianconi case PIN_CONFIG_DRIVE_STRENGTH: {
26771c8ace2dSLorenzo Bianconi u32 e2, e4;
26781c8ace2dSLorenzo Bianconi
26791c8ace2dSLorenzo Bianconi if (airoha_pinctrl_get_drive_e2_conf(pinctrl, pin, &e2) ||
26801c8ace2dSLorenzo Bianconi airoha_pinctrl_get_drive_e4_conf(pinctrl, pin, &e4))
26811c8ace2dSLorenzo Bianconi return -EINVAL;
26821c8ace2dSLorenzo Bianconi
26831c8ace2dSLorenzo Bianconi arg = e4 << 1 | e2;
26841c8ace2dSLorenzo Bianconi break;
26851c8ace2dSLorenzo Bianconi }
26861c8ace2dSLorenzo Bianconi case PIN_CONFIG_DRIVE_OPEN_DRAIN:
26871c8ace2dSLorenzo Bianconi if (airoha_pinctrl_get_pcie_rst_od_conf(pinctrl, pin, &arg))
26881c8ace2dSLorenzo Bianconi return -EINVAL;
26891c8ace2dSLorenzo Bianconi break;
26901c8ace2dSLorenzo Bianconi case PIN_CONFIG_OUTPUT_ENABLE:
26911c8ace2dSLorenzo Bianconi case PIN_CONFIG_INPUT_ENABLE:
26921c8ace2dSLorenzo Bianconi arg = airoha_pinconf_get_direction(pctrl_dev, pin);
26931c8ace2dSLorenzo Bianconi if (arg != param)
26941c8ace2dSLorenzo Bianconi return -EINVAL;
26951c8ace2dSLorenzo Bianconi
26961c8ace2dSLorenzo Bianconi arg = 1;
26971c8ace2dSLorenzo Bianconi break;
26981c8ace2dSLorenzo Bianconi default:
26991c8ace2dSLorenzo Bianconi return -EOPNOTSUPP;
27001c8ace2dSLorenzo Bianconi }
27011c8ace2dSLorenzo Bianconi
27021c8ace2dSLorenzo Bianconi *config = pinconf_to_config_packed(param, arg);
27031c8ace2dSLorenzo Bianconi
27041c8ace2dSLorenzo Bianconi return 0;
27051c8ace2dSLorenzo Bianconi }
27061c8ace2dSLorenzo Bianconi
airoha_pinconf_set_pin_value(struct pinctrl_dev * pctrl_dev,unsigned int p,bool value)27071c8ace2dSLorenzo Bianconi static int airoha_pinconf_set_pin_value(struct pinctrl_dev *pctrl_dev,
27081c8ace2dSLorenzo Bianconi unsigned int p, bool value)
27091c8ace2dSLorenzo Bianconi {
27101c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
27111c8ace2dSLorenzo Bianconi int pin;
27121c8ace2dSLorenzo Bianconi
27131c8ace2dSLorenzo Bianconi pin = airoha_convert_pin_to_reg_offset(pctrl_dev, NULL, p);
27141c8ace2dSLorenzo Bianconi if (pin < 0)
27151c8ace2dSLorenzo Bianconi return pin;
27161c8ace2dSLorenzo Bianconi
2717*7464c881SBartosz Golaszewski return airoha_gpio_set(&pinctrl->gpiochip.chip, pin, value);
27181c8ace2dSLorenzo Bianconi }
27191c8ace2dSLorenzo Bianconi
airoha_pinconf_set(struct pinctrl_dev * pctrl_dev,unsigned int pin,unsigned long * configs,unsigned int num_configs)27201c8ace2dSLorenzo Bianconi static int airoha_pinconf_set(struct pinctrl_dev *pctrl_dev,
27211c8ace2dSLorenzo Bianconi unsigned int pin, unsigned long *configs,
27221c8ace2dSLorenzo Bianconi unsigned int num_configs)
27231c8ace2dSLorenzo Bianconi {
27241c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
27251c8ace2dSLorenzo Bianconi int i;
27261c8ace2dSLorenzo Bianconi
27271c8ace2dSLorenzo Bianconi for (i = 0; i < num_configs; i++) {
27281c8ace2dSLorenzo Bianconi u32 param = pinconf_to_config_param(configs[i]);
27291c8ace2dSLorenzo Bianconi u32 arg = pinconf_to_config_argument(configs[i]);
27301c8ace2dSLorenzo Bianconi
27311c8ace2dSLorenzo Bianconi switch (param) {
27321c8ace2dSLorenzo Bianconi case PIN_CONFIG_BIAS_DISABLE:
27331c8ace2dSLorenzo Bianconi airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 0);
27341c8ace2dSLorenzo Bianconi airoha_pinctrl_set_pullup_conf(pinctrl, pin, 0);
27351c8ace2dSLorenzo Bianconi break;
27361c8ace2dSLorenzo Bianconi case PIN_CONFIG_BIAS_PULL_UP:
27371c8ace2dSLorenzo Bianconi airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 0);
27381c8ace2dSLorenzo Bianconi airoha_pinctrl_set_pullup_conf(pinctrl, pin, 1);
27391c8ace2dSLorenzo Bianconi break;
27401c8ace2dSLorenzo Bianconi case PIN_CONFIG_BIAS_PULL_DOWN:
27411c8ace2dSLorenzo Bianconi airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 1);
27421c8ace2dSLorenzo Bianconi airoha_pinctrl_set_pullup_conf(pinctrl, pin, 0);
27431c8ace2dSLorenzo Bianconi break;
27441c8ace2dSLorenzo Bianconi case PIN_CONFIG_DRIVE_STRENGTH: {
27451c8ace2dSLorenzo Bianconi u32 e2 = 0, e4 = 0;
27461c8ace2dSLorenzo Bianconi
27471c8ace2dSLorenzo Bianconi switch (arg) {
27481c8ace2dSLorenzo Bianconi case MTK_DRIVE_2mA:
27491c8ace2dSLorenzo Bianconi break;
27501c8ace2dSLorenzo Bianconi case MTK_DRIVE_4mA:
27511c8ace2dSLorenzo Bianconi e2 = 1;
27521c8ace2dSLorenzo Bianconi break;
27531c8ace2dSLorenzo Bianconi case MTK_DRIVE_6mA:
27541c8ace2dSLorenzo Bianconi e4 = 1;
27551c8ace2dSLorenzo Bianconi break;
27561c8ace2dSLorenzo Bianconi case MTK_DRIVE_8mA:
27571c8ace2dSLorenzo Bianconi e2 = 1;
27581c8ace2dSLorenzo Bianconi e4 = 1;
27591c8ace2dSLorenzo Bianconi break;
27601c8ace2dSLorenzo Bianconi default:
27611c8ace2dSLorenzo Bianconi return -EINVAL;
27621c8ace2dSLorenzo Bianconi }
27631c8ace2dSLorenzo Bianconi
27641c8ace2dSLorenzo Bianconi airoha_pinctrl_set_drive_e2_conf(pinctrl, pin, e2);
27651c8ace2dSLorenzo Bianconi airoha_pinctrl_set_drive_e4_conf(pinctrl, pin, e4);
27661c8ace2dSLorenzo Bianconi break;
27671c8ace2dSLorenzo Bianconi }
27681c8ace2dSLorenzo Bianconi case PIN_CONFIG_DRIVE_OPEN_DRAIN:
27691c8ace2dSLorenzo Bianconi airoha_pinctrl_set_pcie_rst_od_conf(pinctrl, pin, !!arg);
27701c8ace2dSLorenzo Bianconi break;
27711c8ace2dSLorenzo Bianconi case PIN_CONFIG_OUTPUT_ENABLE:
27721c8ace2dSLorenzo Bianconi case PIN_CONFIG_INPUT_ENABLE:
27731c8ace2dSLorenzo Bianconi case PIN_CONFIG_OUTPUT: {
27741c8ace2dSLorenzo Bianconi bool input = param == PIN_CONFIG_INPUT_ENABLE;
27751c8ace2dSLorenzo Bianconi int err;
27761c8ace2dSLorenzo Bianconi
27771c8ace2dSLorenzo Bianconi err = airoha_pinmux_set_direction(pctrl_dev, NULL, pin,
27781c8ace2dSLorenzo Bianconi input);
27791c8ace2dSLorenzo Bianconi if (err)
27801c8ace2dSLorenzo Bianconi return err;
27811c8ace2dSLorenzo Bianconi
27821c8ace2dSLorenzo Bianconi if (param == PIN_CONFIG_OUTPUT) {
27831c8ace2dSLorenzo Bianconi err = airoha_pinconf_set_pin_value(pctrl_dev,
27841c8ace2dSLorenzo Bianconi pin, !!arg);
27851c8ace2dSLorenzo Bianconi if (err)
27861c8ace2dSLorenzo Bianconi return err;
27871c8ace2dSLorenzo Bianconi }
27881c8ace2dSLorenzo Bianconi break;
27891c8ace2dSLorenzo Bianconi }
27901c8ace2dSLorenzo Bianconi default:
27911c8ace2dSLorenzo Bianconi return -EOPNOTSUPP;
27921c8ace2dSLorenzo Bianconi }
27931c8ace2dSLorenzo Bianconi }
27941c8ace2dSLorenzo Bianconi
27951c8ace2dSLorenzo Bianconi return 0;
27961c8ace2dSLorenzo Bianconi }
27971c8ace2dSLorenzo Bianconi
airoha_pinconf_group_get(struct pinctrl_dev * pctrl_dev,unsigned int group,unsigned long * config)27981c8ace2dSLorenzo Bianconi static int airoha_pinconf_group_get(struct pinctrl_dev *pctrl_dev,
27991c8ace2dSLorenzo Bianconi unsigned int group, unsigned long *config)
28001c8ace2dSLorenzo Bianconi {
28011c8ace2dSLorenzo Bianconi u32 cur_config = 0;
28021c8ace2dSLorenzo Bianconi int i;
28031c8ace2dSLorenzo Bianconi
28041c8ace2dSLorenzo Bianconi for (i = 0; i < airoha_pinctrl_groups[group].npins; i++) {
28051c8ace2dSLorenzo Bianconi if (airoha_pinconf_get(pctrl_dev,
28061c8ace2dSLorenzo Bianconi airoha_pinctrl_groups[group].pins[i],
28071c8ace2dSLorenzo Bianconi config))
28081c8ace2dSLorenzo Bianconi return -EOPNOTSUPP;
28091c8ace2dSLorenzo Bianconi
28101c8ace2dSLorenzo Bianconi if (i && cur_config != *config)
28111c8ace2dSLorenzo Bianconi return -EOPNOTSUPP;
28121c8ace2dSLorenzo Bianconi
28131c8ace2dSLorenzo Bianconi cur_config = *config;
28141c8ace2dSLorenzo Bianconi }
28151c8ace2dSLorenzo Bianconi
28161c8ace2dSLorenzo Bianconi return 0;
28171c8ace2dSLorenzo Bianconi }
28181c8ace2dSLorenzo Bianconi
airoha_pinconf_group_set(struct pinctrl_dev * pctrl_dev,unsigned int group,unsigned long * configs,unsigned int num_configs)28191c8ace2dSLorenzo Bianconi static int airoha_pinconf_group_set(struct pinctrl_dev *pctrl_dev,
28201c8ace2dSLorenzo Bianconi unsigned int group, unsigned long *configs,
28211c8ace2dSLorenzo Bianconi unsigned int num_configs)
28221c8ace2dSLorenzo Bianconi {
28231c8ace2dSLorenzo Bianconi int i;
28241c8ace2dSLorenzo Bianconi
28251c8ace2dSLorenzo Bianconi for (i = 0; i < airoha_pinctrl_groups[group].npins; i++) {
28261c8ace2dSLorenzo Bianconi int err;
28271c8ace2dSLorenzo Bianconi
28281c8ace2dSLorenzo Bianconi err = airoha_pinconf_set(pctrl_dev,
28291c8ace2dSLorenzo Bianconi airoha_pinctrl_groups[group].pins[i],
28301c8ace2dSLorenzo Bianconi configs, num_configs);
28311c8ace2dSLorenzo Bianconi if (err)
28321c8ace2dSLorenzo Bianconi return err;
28331c8ace2dSLorenzo Bianconi }
28341c8ace2dSLorenzo Bianconi
28351c8ace2dSLorenzo Bianconi return 0;
28361c8ace2dSLorenzo Bianconi }
28371c8ace2dSLorenzo Bianconi
28381c8ace2dSLorenzo Bianconi static const struct pinconf_ops airoha_confops = {
28391c8ace2dSLorenzo Bianconi .is_generic = true,
28401c8ace2dSLorenzo Bianconi .pin_config_get = airoha_pinconf_get,
28411c8ace2dSLorenzo Bianconi .pin_config_set = airoha_pinconf_set,
28421c8ace2dSLorenzo Bianconi .pin_config_group_get = airoha_pinconf_group_get,
28431c8ace2dSLorenzo Bianconi .pin_config_group_set = airoha_pinconf_group_set,
28441c8ace2dSLorenzo Bianconi .pin_config_config_dbg_show = pinconf_generic_dump_config,
28451c8ace2dSLorenzo Bianconi };
28461c8ace2dSLorenzo Bianconi
28471c8ace2dSLorenzo Bianconi static const struct pinctrl_ops airoha_pctlops = {
28481c8ace2dSLorenzo Bianconi .get_groups_count = pinctrl_generic_get_group_count,
28491c8ace2dSLorenzo Bianconi .get_group_name = pinctrl_generic_get_group_name,
28501c8ace2dSLorenzo Bianconi .get_group_pins = pinctrl_generic_get_group_pins,
28511c8ace2dSLorenzo Bianconi .dt_node_to_map = pinconf_generic_dt_node_to_map_all,
28521c8ace2dSLorenzo Bianconi .dt_free_map = pinconf_generic_dt_free_map,
28531c8ace2dSLorenzo Bianconi };
28541c8ace2dSLorenzo Bianconi
28551c8ace2dSLorenzo Bianconi static struct pinctrl_desc airoha_pinctrl_desc = {
28561c8ace2dSLorenzo Bianconi .name = KBUILD_MODNAME,
28571c8ace2dSLorenzo Bianconi .owner = THIS_MODULE,
28581c8ace2dSLorenzo Bianconi .pctlops = &airoha_pctlops,
28591c8ace2dSLorenzo Bianconi .pmxops = &airoha_pmxops,
28601c8ace2dSLorenzo Bianconi .confops = &airoha_confops,
28611c8ace2dSLorenzo Bianconi .pins = airoha_pinctrl_pins,
28621c8ace2dSLorenzo Bianconi .npins = ARRAY_SIZE(airoha_pinctrl_pins),
28631c8ace2dSLorenzo Bianconi };
28641c8ace2dSLorenzo Bianconi
airoha_pinctrl_probe(struct platform_device * pdev)28651c8ace2dSLorenzo Bianconi static int airoha_pinctrl_probe(struct platform_device *pdev)
28661c8ace2dSLorenzo Bianconi {
28671c8ace2dSLorenzo Bianconi struct device *dev = &pdev->dev;
28681c8ace2dSLorenzo Bianconi struct airoha_pinctrl *pinctrl;
28691c8ace2dSLorenzo Bianconi struct regmap *map;
28701c8ace2dSLorenzo Bianconi int err, i;
28711c8ace2dSLorenzo Bianconi
28721c8ace2dSLorenzo Bianconi pinctrl = devm_kzalloc(dev, sizeof(*pinctrl), GFP_KERNEL);
28731c8ace2dSLorenzo Bianconi if (!pinctrl)
28741c8ace2dSLorenzo Bianconi return -ENOMEM;
28751c8ace2dSLorenzo Bianconi
28761c8ace2dSLorenzo Bianconi pinctrl->regmap = device_node_to_regmap(dev->parent->of_node);
28771c8ace2dSLorenzo Bianconi if (IS_ERR(pinctrl->regmap))
28781c8ace2dSLorenzo Bianconi return PTR_ERR(pinctrl->regmap);
28791c8ace2dSLorenzo Bianconi
28801c8ace2dSLorenzo Bianconi map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu");
28811c8ace2dSLorenzo Bianconi if (IS_ERR(map))
28821c8ace2dSLorenzo Bianconi return PTR_ERR(map);
28831c8ace2dSLorenzo Bianconi
28841c8ace2dSLorenzo Bianconi pinctrl->chip_scu = map;
28851c8ace2dSLorenzo Bianconi
28861c8ace2dSLorenzo Bianconi err = devm_pinctrl_register_and_init(dev, &airoha_pinctrl_desc,
28871c8ace2dSLorenzo Bianconi pinctrl, &pinctrl->ctrl);
28881c8ace2dSLorenzo Bianconi if (err)
28891c8ace2dSLorenzo Bianconi return err;
28901c8ace2dSLorenzo Bianconi
28911c8ace2dSLorenzo Bianconi /* build pin groups */
28921c8ace2dSLorenzo Bianconi for (i = 0; i < ARRAY_SIZE(airoha_pinctrl_groups); i++) {
28931c8ace2dSLorenzo Bianconi const struct pingroup *grp = &airoha_pinctrl_groups[i];
28941c8ace2dSLorenzo Bianconi
28951c8ace2dSLorenzo Bianconi err = pinctrl_generic_add_group(pinctrl->ctrl, grp->name,
28961c8ace2dSLorenzo Bianconi grp->pins, grp->npins,
28971c8ace2dSLorenzo Bianconi (void *)grp);
28981c8ace2dSLorenzo Bianconi if (err < 0) {
28991c8ace2dSLorenzo Bianconi dev_err(&pdev->dev, "Failed to register group %s\n",
29001c8ace2dSLorenzo Bianconi grp->name);
29011c8ace2dSLorenzo Bianconi return err;
29021c8ace2dSLorenzo Bianconi }
29031c8ace2dSLorenzo Bianconi }
29041c8ace2dSLorenzo Bianconi
29051c8ace2dSLorenzo Bianconi /* build functions */
29061c8ace2dSLorenzo Bianconi for (i = 0; i < ARRAY_SIZE(airoha_pinctrl_funcs); i++) {
29071c8ace2dSLorenzo Bianconi const struct airoha_pinctrl_func *func;
29081c8ace2dSLorenzo Bianconi
29091c8ace2dSLorenzo Bianconi func = &airoha_pinctrl_funcs[i];
29101c8ace2dSLorenzo Bianconi err = pinmux_generic_add_function(pinctrl->ctrl,
29111c8ace2dSLorenzo Bianconi func->desc.func.name,
29121c8ace2dSLorenzo Bianconi func->desc.func.groups,
29131c8ace2dSLorenzo Bianconi func->desc.func.ngroups,
29141c8ace2dSLorenzo Bianconi (void *)func);
29151c8ace2dSLorenzo Bianconi if (err < 0) {
29161c8ace2dSLorenzo Bianconi dev_err(dev, "Failed to register function %s\n",
29171c8ace2dSLorenzo Bianconi func->desc.func.name);
29181c8ace2dSLorenzo Bianconi return err;
29191c8ace2dSLorenzo Bianconi }
29201c8ace2dSLorenzo Bianconi }
29211c8ace2dSLorenzo Bianconi
29221c8ace2dSLorenzo Bianconi err = pinctrl_enable(pinctrl->ctrl);
29231c8ace2dSLorenzo Bianconi if (err)
29241c8ace2dSLorenzo Bianconi return err;
29251c8ace2dSLorenzo Bianconi
29261c8ace2dSLorenzo Bianconi /* build gpio-chip */
29271c8ace2dSLorenzo Bianconi return airoha_pinctrl_add_gpiochip(pinctrl, pdev);
29281c8ace2dSLorenzo Bianconi }
29291c8ace2dSLorenzo Bianconi
29301c8ace2dSLorenzo Bianconi static const struct of_device_id airoha_pinctrl_of_match[] = {
29311c8ace2dSLorenzo Bianconi { .compatible = "airoha,en7581-pinctrl" },
29321c8ace2dSLorenzo Bianconi { /* sentinel */ }
29331c8ace2dSLorenzo Bianconi };
29341c8ace2dSLorenzo Bianconi MODULE_DEVICE_TABLE(of, airoha_pinctrl_of_match);
29351c8ace2dSLorenzo Bianconi
29361c8ace2dSLorenzo Bianconi static struct platform_driver airoha_pinctrl_driver = {
29371c8ace2dSLorenzo Bianconi .probe = airoha_pinctrl_probe,
29381c8ace2dSLorenzo Bianconi .driver = {
29391c8ace2dSLorenzo Bianconi .name = "pinctrl-airoha",
29401c8ace2dSLorenzo Bianconi .of_match_table = airoha_pinctrl_of_match,
29411c8ace2dSLorenzo Bianconi },
29421c8ace2dSLorenzo Bianconi };
29431c8ace2dSLorenzo Bianconi module_platform_driver(airoha_pinctrl_driver);
29441c8ace2dSLorenzo Bianconi
29451c8ace2dSLorenzo Bianconi MODULE_LICENSE("GPL");
29461c8ace2dSLorenzo Bianconi MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>");
29471c8ace2dSLorenzo Bianconi MODULE_AUTHOR("Benjamin Larsson <benjamin.larsson@genexis.eu>");
29481c8ace2dSLorenzo Bianconi MODULE_AUTHOR("Markus Gothe <markus.gothe@genexis.eu>");
29491c8ace2dSLorenzo Bianconi MODULE_DESCRIPTION("Pinctrl driver for Airoha SoC");
2950