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