xref: /linux/drivers/pinctrl/mediatek/pinctrl-airoha.c (revision a110f942672c8995dc1cacb5a44c6730856743aa)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Author: Lorenzo Bianconi <lorenzo@kernel.org>
4  * Author: Benjamin Larsson <benjamin.larsson@genexis.eu>
5  * Author: Markus Gothe <markus.gothe@genexis.eu>
6  */
7 
8 #include <dt-bindings/pinctrl/mt65xx.h>
9 #include <linux/bitfield.h>
10 #include <linux/bits.h>
11 #include <linux/cleanup.h>
12 #include <linux/gpio/driver.h>
13 #include <linux/interrupt.h>
14 #include <linux/io.h>
15 #include <linux/irq.h>
16 #include <linux/irqdomain.h>
17 #include <linux/mfd/syscon.h>
18 #include <linux/of.h>
19 #include <linux/of_irq.h>
20 #include <linux/of_platform.h>
21 #include <linux/pinctrl/consumer.h>
22 #include <linux/pinctrl/pinctrl.h>
23 #include <linux/pinctrl/pinconf.h>
24 #include <linux/pinctrl/pinconf-generic.h>
25 #include <linux/pinctrl/pinmux.h>
26 #include <linux/platform_device.h>
27 #include <linux/regmap.h>
28 
29 #include "../core.h"
30 #include "../pinconf.h"
31 #include "../pinmux.h"
32 
33 #define PINCTRL_PIN_GROUP(id, table)					\
34 	PINCTRL_PINGROUP(id, table##_pins, ARRAY_SIZE(table##_pins))
35 
36 #define PINCTRL_FUNC_DESC(id, table)					\
37 	{								\
38 		.desc = PINCTRL_PINFUNCTION(id, table##_groups,	\
39 					    ARRAY_SIZE(table##_groups)),\
40 		.groups = table##_func_group,				\
41 		.group_size = ARRAY_SIZE(table##_func_group),		\
42 	}
43 
44 #define PINCTRL_CONF_DESC(p, offset, mask)				\
45 	{								\
46 		.pin = p,						\
47 		.reg = { offset, mask },				\
48 	}
49 
50 /* MUX */
51 #define REG_GPIO_2ND_I2C_MODE			0x0214
52 #define GPIO_MDC_IO_MASTER_MODE_MODE		BIT(14)
53 #define GPIO_I2C_MASTER_MODE_MODE		BIT(13)
54 #define GPIO_I2S_MODE_MASK			BIT(12)
55 #define GPIO_I2C_SLAVE_MODE_MODE		BIT(11)
56 #define GPIO_LAN3_LED1_MODE_MASK		BIT(10)
57 #define GPIO_LAN3_LED0_MODE_MASK		BIT(9)
58 #define GPIO_LAN2_LED1_MODE_MASK		BIT(8)
59 #define GPIO_LAN2_LED0_MODE_MASK		BIT(7)
60 #define GPIO_LAN1_LED1_MODE_MASK		BIT(6)
61 #define GPIO_LAN1_LED0_MODE_MASK		BIT(5)
62 #define GPIO_LAN0_LED1_MODE_MASK		BIT(4)
63 #define GPIO_LAN0_LED0_MODE_MASK		BIT(3)
64 #define PON_TOD_1PPS_MODE_MASK			BIT(2)
65 #define GSW_TOD_1PPS_MODE_MASK			BIT(1)
66 #define GPIO_2ND_I2C_MODE_MASK			BIT(0)
67 
68 #define REG_GPIO_SPI_CS1_MODE			0x0218
69 #define GPIO_PCM_SPI_CS4_MODE_MASK		BIT(21)
70 #define GPIO_PCM_SPI_CS3_MODE_MASK		BIT(20)
71 #define GPIO_PCM_SPI_CS2_MODE_P156_MASK		BIT(19)
72 #define GPIO_PCM_SPI_CS2_MODE_P128_MASK		BIT(18)
73 #define AN7583_GPIO_PCM_SPI_CS2_MODE_MASK	BIT(18)
74 #define GPIO_PCM_SPI_CS1_MODE_MASK		BIT(17)
75 #define GPIO_PCM_SPI_MODE_MASK			BIT(16)
76 #define GPIO_PCM2_MODE_MASK			BIT(13)
77 #define GPIO_PCM1_MODE_MASK			BIT(12)
78 #define GPIO_PCM_INT_MODE_MASK			BIT(9)
79 #define GPIO_PCM_RESET_MODE_MASK		BIT(8)
80 #define GPIO_SPI_QUAD_MODE_MASK			BIT(4)
81 #define GPIO_SPI_CS4_MODE_MASK			BIT(3)
82 #define GPIO_SPI_CS3_MODE_MASK			BIT(2)
83 #define GPIO_SPI_CS2_MODE_MASK			BIT(1)
84 #define GPIO_SPI_CS1_MODE_MASK			BIT(0)
85 
86 #define REG_GPIO_PON_MODE			0x021c
87 #define GPIO_PARALLEL_NAND_MODE_MASK		BIT(14)
88 #define GPIO_SGMII_MDIO_MODE_MASK		BIT(13)
89 #define GPIO_PCIE_RESET2_MASK			BIT(12)
90 #define SIPO_RCLK_MODE_MASK			BIT(11)
91 #define GPIO_PCIE_RESET1_MASK			BIT(10)
92 #define GPIO_PCIE_RESET0_MASK			BIT(9)
93 #define GPIO_UART5_MODE_MASK			BIT(8)
94 #define GPIO_UART4_MODE_MASK			BIT(7)
95 #define GPIO_HSUART_CTS_RTS_MODE_MASK		BIT(6)
96 #define GPIO_HSUART_MODE_MASK			BIT(5)
97 #define GPIO_UART2_CTS_RTS_MODE_MASK		BIT(4)
98 #define GPIO_UART2_MODE_MASK			BIT(3)
99 #define GPIO_SIPO_MODE_MASK			BIT(2)
100 #define GPIO_EMMC_MODE_MASK			BIT(1)
101 #define GPIO_PON_MODE_MASK			BIT(0)
102 
103 #define REG_NPU_UART_EN				0x0224
104 #define JTAG_UDI_EN_MASK			BIT(4)
105 #define JTAG_DFD_EN_MASK			BIT(3)
106 
107 #define REG_FORCE_GPIO_EN			0x0228
108 #define FORCE_GPIO_EN(n)			BIT(n)
109 
110 /* LED MAP */
111 #define REG_LAN_LED0_MAPPING			0x027c
112 #define REG_LAN_LED1_MAPPING			0x0280
113 
114 #define LAN4_LED_MAPPING_MASK			GENMASK(18, 16)
115 #define LAN4_PHY_LED_MAP(_n)			FIELD_PREP_CONST(LAN4_LED_MAPPING_MASK, (_n))
116 
117 #define LAN3_LED_MAPPING_MASK			GENMASK(14, 12)
118 #define LAN3_PHY_LED_MAP(_n)			FIELD_PREP_CONST(LAN3_LED_MAPPING_MASK, (_n))
119 
120 #define LAN2_LED_MAPPING_MASK			GENMASK(10, 8)
121 #define LAN2_PHY_LED_MAP(_n)			FIELD_PREP_CONST(LAN2_LED_MAPPING_MASK, (_n))
122 
123 #define LAN1_LED_MAPPING_MASK			GENMASK(6, 4)
124 #define LAN1_PHY_LED_MAP(_n)			FIELD_PREP_CONST(LAN1_LED_MAPPING_MASK, (_n))
125 
126 #define LAN0_LED_MAPPING_MASK			GENMASK(2, 0)
127 #define LAN0_PHY_LED_MAP(_n)			FIELD_PREP_CONST(LAN0_LED_MAPPING_MASK, (_n))
128 
129 /* CONF */
130 #define REG_I2C_SDA_E2				0x001c
131 #define AN7583_I2C1_SCL_E2_MASK			BIT(16)
132 #define AN7583_I2C1_SDA_E2_MASK			BIT(15)
133 #define SPI_MISO_E2_MASK			BIT(14)
134 #define SPI_MOSI_E2_MASK			BIT(13)
135 #define SPI_CLK_E2_MASK				BIT(12)
136 #define SPI_CS0_E2_MASK				BIT(11)
137 #define PCIE2_RESET_E2_MASK			BIT(10)
138 #define PCIE1_RESET_E2_MASK			BIT(9)
139 #define PCIE0_RESET_E2_MASK			BIT(8)
140 #define AN7583_MDIO_0_E2_MASK			BIT(5)
141 #define AN7583_MDC_0_E2_MASK			BIT(4)
142 #define UART1_RXD_E2_MASK			BIT(3)
143 #define UART1_TXD_E2_MASK			BIT(2)
144 #define I2C_SCL_E2_MASK				BIT(1)
145 #define I2C_SDA_E2_MASK				BIT(0)
146 
147 #define REG_I2C_SDA_E4				0x0020
148 #define AN7583_I2C1_SCL_E4_MASK			BIT(16)
149 #define AN7583_I2C1_SDA_E4_MASK			BIT(15)
150 #define SPI_MISO_E4_MASK			BIT(14)
151 #define SPI_MOSI_E4_MASK			BIT(13)
152 #define SPI_CLK_E4_MASK				BIT(12)
153 #define SPI_CS0_E4_MASK				BIT(11)
154 #define PCIE2_RESET_E4_MASK			BIT(10)
155 #define PCIE1_RESET_E4_MASK			BIT(9)
156 #define PCIE0_RESET_E4_MASK			BIT(8)
157 #define AN7583_MDIO_0_E4_MASK			BIT(5)
158 #define AN7583_MDC_0_E4_MASK			BIT(4)
159 #define UART1_RXD_E4_MASK			BIT(3)
160 #define UART1_TXD_E4_MASK			BIT(2)
161 #define I2C_SCL_E4_MASK				BIT(1)
162 #define I2C_SDA_E4_MASK				BIT(0)
163 
164 #define REG_GPIO_L_E2				0x0024
165 #define REG_GPIO_L_E4				0x0028
166 #define REG_GPIO_H_E2				0x002c
167 #define REG_GPIO_H_E4				0x0030
168 
169 #define REG_I2C_SDA_PU				0x0044
170 #define AN7583_I2C1_SCL_PU_MASK			BIT(16)
171 #define AN7583_I2C1_SDA_PU_MASK			BIT(15)
172 #define SPI_MISO_PU_MASK			BIT(14)
173 #define SPI_MOSI_PU_MASK			BIT(13)
174 #define SPI_CLK_PU_MASK				BIT(12)
175 #define SPI_CS0_PU_MASK				BIT(11)
176 #define PCIE2_RESET_PU_MASK			BIT(10)
177 #define PCIE1_RESET_PU_MASK			BIT(9)
178 #define PCIE0_RESET_PU_MASK			BIT(8)
179 #define AN7583_MDIO_0_PU_MASK			BIT(5)
180 #define AN7583_MDC_0_PU_MASK			BIT(4)
181 #define UART1_RXD_PU_MASK			BIT(3)
182 #define UART1_TXD_PU_MASK			BIT(2)
183 #define I2C_SCL_PU_MASK				BIT(1)
184 #define I2C_SDA_PU_MASK				BIT(0)
185 
186 #define REG_I2C_SDA_PD				0x0048
187 #define AN7583_I2C1_SDA_PD_MASK			BIT(16)
188 #define AN7583_I2C1_SCL_PD_MASK			BIT(15)
189 #define SPI_MISO_PD_MASK			BIT(14)
190 #define SPI_MOSI_PD_MASK			BIT(13)
191 #define SPI_CLK_PD_MASK				BIT(12)
192 #define SPI_CS0_PD_MASK				BIT(11)
193 #define PCIE2_RESET_PD_MASK			BIT(10)
194 #define PCIE1_RESET_PD_MASK			BIT(9)
195 #define PCIE0_RESET_PD_MASK			BIT(8)
196 #define AN7583_MDIO_0_PD_MASK			BIT(5)
197 #define AN7583_MDC_0_PD_MASK			BIT(4)
198 #define UART1_RXD_PD_MASK			BIT(3)
199 #define UART1_TXD_PD_MASK			BIT(2)
200 #define I2C_SCL_PD_MASK				BIT(1)
201 #define I2C_SDA_PD_MASK				BIT(0)
202 
203 #define REG_GPIO_L_PU				0x004c
204 #define REG_GPIO_L_PD				0x0050
205 #define REG_GPIO_H_PU				0x0054
206 #define REG_GPIO_H_PD				0x0058
207 
208 #define REG_PCIE_RESET_OD			0x018c
209 #define PCIE2_RESET_OD_MASK			BIT(2)
210 #define PCIE1_RESET_OD_MASK			BIT(1)
211 #define PCIE0_RESET_OD_MASK			BIT(0)
212 
213 /* GPIOs */
214 #define REG_GPIO_CTRL				0x0000
215 #define REG_GPIO_DATA				0x0004
216 #define REG_GPIO_INT				0x0008
217 #define REG_GPIO_INT_EDGE			0x000c
218 #define REG_GPIO_INT_LEVEL			0x0010
219 #define REG_GPIO_OE				0x0014
220 #define REG_GPIO_CTRL1				0x0020
221 
222 /* PWM MODE CONF */
223 #define REG_GPIO_FLASH_MODE_CFG			0x0034
224 #define GPIO15_FLASH_MODE_CFG			BIT(15)
225 #define GPIO14_FLASH_MODE_CFG			BIT(14)
226 #define GPIO13_FLASH_MODE_CFG			BIT(13)
227 #define GPIO12_FLASH_MODE_CFG			BIT(12)
228 #define GPIO11_FLASH_MODE_CFG			BIT(11)
229 #define GPIO10_FLASH_MODE_CFG			BIT(10)
230 #define GPIO9_FLASH_MODE_CFG			BIT(9)
231 #define GPIO8_FLASH_MODE_CFG			BIT(8)
232 #define GPIO7_FLASH_MODE_CFG			BIT(7)
233 #define GPIO6_FLASH_MODE_CFG			BIT(6)
234 #define GPIO5_FLASH_MODE_CFG			BIT(5)
235 #define GPIO4_FLASH_MODE_CFG			BIT(4)
236 #define GPIO3_FLASH_MODE_CFG			BIT(3)
237 #define GPIO2_FLASH_MODE_CFG			BIT(2)
238 #define GPIO1_FLASH_MODE_CFG			BIT(1)
239 #define GPIO0_FLASH_MODE_CFG			BIT(0)
240 
241 #define REG_GPIO_CTRL2				0x0060
242 #define REG_GPIO_CTRL3				0x0064
243 
244 /* PWM MODE CONF EXT */
245 #define REG_GPIO_FLASH_MODE_CFG_EXT		0x0068
246 #define GPIO51_FLASH_MODE_CFG			BIT(31)
247 #define GPIO50_FLASH_MODE_CFG			BIT(30)
248 #define GPIO49_FLASH_MODE_CFG			BIT(29)
249 #define GPIO48_FLASH_MODE_CFG			BIT(28)
250 #define GPIO47_FLASH_MODE_CFG			BIT(27)
251 #define GPIO46_FLASH_MODE_CFG			BIT(26)
252 #define GPIO45_FLASH_MODE_CFG			BIT(25)
253 #define GPIO44_FLASH_MODE_CFG			BIT(24)
254 #define GPIO43_FLASH_MODE_CFG			BIT(23)
255 #define GPIO42_FLASH_MODE_CFG			BIT(22)
256 #define GPIO41_FLASH_MODE_CFG			BIT(21)
257 #define GPIO40_FLASH_MODE_CFG			BIT(20)
258 #define GPIO39_FLASH_MODE_CFG			BIT(19)
259 #define GPIO38_FLASH_MODE_CFG			BIT(18)
260 #define GPIO37_FLASH_MODE_CFG			BIT(17)
261 #define GPIO36_FLASH_MODE_CFG			BIT(16)
262 #define GPIO31_FLASH_MODE_CFG			BIT(15)
263 #define GPIO30_FLASH_MODE_CFG			BIT(14)
264 #define GPIO29_FLASH_MODE_CFG			BIT(13)
265 #define GPIO28_FLASH_MODE_CFG			BIT(12)
266 #define GPIO27_FLASH_MODE_CFG			BIT(11)
267 #define GPIO26_FLASH_MODE_CFG			BIT(10)
268 #define GPIO25_FLASH_MODE_CFG			BIT(9)
269 #define GPIO24_FLASH_MODE_CFG			BIT(8)
270 #define GPIO23_FLASH_MODE_CFG			BIT(7)
271 #define GPIO22_FLASH_MODE_CFG			BIT(6)
272 #define GPIO21_FLASH_MODE_CFG			BIT(5)
273 #define GPIO20_FLASH_MODE_CFG			BIT(4)
274 #define GPIO19_FLASH_MODE_CFG			BIT(3)
275 #define GPIO18_FLASH_MODE_CFG			BIT(2)
276 #define GPIO17_FLASH_MODE_CFG			BIT(1)
277 #define GPIO16_FLASH_MODE_CFG			BIT(0)
278 
279 #define REG_GPIO_DATA1				0x0070
280 #define REG_GPIO_OE1				0x0078
281 #define REG_GPIO_INT1				0x007c
282 #define REG_GPIO_INT_EDGE1			0x0080
283 #define REG_GPIO_INT_EDGE2			0x0084
284 #define REG_GPIO_INT_EDGE3			0x0088
285 #define REG_GPIO_INT_LEVEL1			0x008c
286 #define REG_GPIO_INT_LEVEL2			0x0090
287 #define REG_GPIO_INT_LEVEL3			0x0094
288 
289 #define AIROHA_NUM_PINS				64
290 #define AIROHA_PIN_BANK_SIZE			(AIROHA_NUM_PINS / 2)
291 #define AIROHA_REG_GPIOCTRL_NUM_PIN		(AIROHA_NUM_PINS / 4)
292 
293 static const u32 gpio_data_regs[] = {
294 	REG_GPIO_DATA,
295 	REG_GPIO_DATA1
296 };
297 
298 static const u32 gpio_out_regs[] = {
299 	REG_GPIO_OE,
300 	REG_GPIO_OE1
301 };
302 
303 static const u32 gpio_dir_regs[] = {
304 	REG_GPIO_CTRL,
305 	REG_GPIO_CTRL1,
306 	REG_GPIO_CTRL2,
307 	REG_GPIO_CTRL3
308 };
309 
310 static const u32 irq_status_regs[] = {
311 	REG_GPIO_INT,
312 	REG_GPIO_INT1
313 };
314 
315 static const u32 irq_level_regs[] = {
316 	REG_GPIO_INT_LEVEL,
317 	REG_GPIO_INT_LEVEL1,
318 	REG_GPIO_INT_LEVEL2,
319 	REG_GPIO_INT_LEVEL3
320 };
321 
322 static const u32 irq_edge_regs[] = {
323 	REG_GPIO_INT_EDGE,
324 	REG_GPIO_INT_EDGE1,
325 	REG_GPIO_INT_EDGE2,
326 	REG_GPIO_INT_EDGE3
327 };
328 
329 struct airoha_pinctrl_reg {
330 	u32 offset;
331 	u32 mask;
332 };
333 
334 enum airoha_pinctrl_mux_func {
335 	AIROHA_FUNC_MUX,
336 	AIROHA_FUNC_PWM_MUX,
337 	AIROHA_FUNC_PWM_EXT_MUX,
338 };
339 
340 struct airoha_pinctrl_func_group {
341 	const char *name;
342 	struct {
343 		enum airoha_pinctrl_mux_func mux;
344 		u32 offset;
345 		u32 mask;
346 		u32 val;
347 	} regmap[2];
348 	int regmap_size;
349 };
350 
351 struct airoha_pinctrl_func {
352 	const struct pinfunction desc;
353 	const struct airoha_pinctrl_func_group *groups;
354 	u8 group_size;
355 };
356 
357 struct airoha_pinctrl_conf {
358 	u32 pin;
359 	struct airoha_pinctrl_reg reg;
360 };
361 
362 struct airoha_pinctrl_gpiochip {
363 	struct gpio_chip chip;
364 
365 	/* gpio */
366 	const u32 *data;
367 	const u32 *dir;
368 	const u32 *out;
369 	/* irq */
370 	const u32 *status;
371 	const u32 *level;
372 	const u32 *edge;
373 
374 	u32 irq_type[AIROHA_NUM_PINS];
375 };
376 
377 struct airoha_pinctrl_confs_info {
378 	const struct airoha_pinctrl_conf *confs;
379 	unsigned int num_confs;
380 };
381 
382 enum airoha_pinctrl_confs_type {
383 	AIROHA_PINCTRL_CONFS_PULLUP,
384 	AIROHA_PINCTRL_CONFS_PULLDOWN,
385 	AIROHA_PINCTRL_CONFS_DRIVE_E2,
386 	AIROHA_PINCTRL_CONFS_DRIVE_E4,
387 	AIROHA_PINCTRL_CONFS_PCIE_RST_OD,
388 
389 	AIROHA_PINCTRL_CONFS_MAX,
390 };
391 
392 struct airoha_pinctrl {
393 	struct pinctrl_dev *ctrl;
394 
395 	struct pinctrl_desc desc;
396 	const struct pingroup *grps;
397 	const struct airoha_pinctrl_func *funcs;
398 	const struct airoha_pinctrl_confs_info *confs_info;
399 
400 	struct regmap *chip_scu;
401 	struct regmap *regmap;
402 
403 	struct airoha_pinctrl_gpiochip gpiochip;
404 };
405 
406 struct airoha_pinctrl_match_data {
407 	const struct pinctrl_pin_desc *pins;
408 	const unsigned int num_pins;
409 	const struct pingroup *grps;
410 	const unsigned int num_grps;
411 	const struct airoha_pinctrl_func *funcs;
412 	const unsigned int num_funcs;
413 	const struct airoha_pinctrl_confs_info confs_info[AIROHA_PINCTRL_CONFS_MAX];
414 };
415 
416 static struct pinctrl_pin_desc en7581_pinctrl_pins[] = {
417 	PINCTRL_PIN(0, "uart1_txd"),
418 	PINCTRL_PIN(1, "uart1_rxd"),
419 	PINCTRL_PIN(2, "i2c_scl"),
420 	PINCTRL_PIN(3, "i2c_sda"),
421 	PINCTRL_PIN(4, "spi_cs0"),
422 	PINCTRL_PIN(5, "spi_clk"),
423 	PINCTRL_PIN(6, "spi_mosi"),
424 	PINCTRL_PIN(7, "spi_miso"),
425 	PINCTRL_PIN(13, "gpio0"),
426 	PINCTRL_PIN(14, "gpio1"),
427 	PINCTRL_PIN(15, "gpio2"),
428 	PINCTRL_PIN(16, "gpio3"),
429 	PINCTRL_PIN(17, "gpio4"),
430 	PINCTRL_PIN(18, "gpio5"),
431 	PINCTRL_PIN(19, "gpio6"),
432 	PINCTRL_PIN(20, "gpio7"),
433 	PINCTRL_PIN(21, "gpio8"),
434 	PINCTRL_PIN(22, "gpio9"),
435 	PINCTRL_PIN(23, "gpio10"),
436 	PINCTRL_PIN(24, "gpio11"),
437 	PINCTRL_PIN(25, "gpio12"),
438 	PINCTRL_PIN(26, "gpio13"),
439 	PINCTRL_PIN(27, "gpio14"),
440 	PINCTRL_PIN(28, "gpio15"),
441 	PINCTRL_PIN(29, "gpio16"),
442 	PINCTRL_PIN(30, "gpio17"),
443 	PINCTRL_PIN(31, "gpio18"),
444 	PINCTRL_PIN(32, "gpio19"),
445 	PINCTRL_PIN(33, "gpio20"),
446 	PINCTRL_PIN(34, "gpio21"),
447 	PINCTRL_PIN(35, "gpio22"),
448 	PINCTRL_PIN(36, "gpio23"),
449 	PINCTRL_PIN(37, "gpio24"),
450 	PINCTRL_PIN(38, "gpio25"),
451 	PINCTRL_PIN(39, "gpio26"),
452 	PINCTRL_PIN(40, "gpio27"),
453 	PINCTRL_PIN(41, "gpio28"),
454 	PINCTRL_PIN(42, "gpio29"),
455 	PINCTRL_PIN(43, "gpio30"),
456 	PINCTRL_PIN(44, "gpio31"),
457 	PINCTRL_PIN(45, "gpio32"),
458 	PINCTRL_PIN(46, "gpio33"),
459 	PINCTRL_PIN(47, "gpio34"),
460 	PINCTRL_PIN(48, "gpio35"),
461 	PINCTRL_PIN(49, "gpio36"),
462 	PINCTRL_PIN(50, "gpio37"),
463 	PINCTRL_PIN(51, "gpio38"),
464 	PINCTRL_PIN(52, "gpio39"),
465 	PINCTRL_PIN(53, "gpio40"),
466 	PINCTRL_PIN(54, "gpio41"),
467 	PINCTRL_PIN(55, "gpio42"),
468 	PINCTRL_PIN(56, "gpio43"),
469 	PINCTRL_PIN(57, "gpio44"),
470 	PINCTRL_PIN(58, "gpio45"),
471 	PINCTRL_PIN(59, "gpio46"),
472 	PINCTRL_PIN(61, "pcie_reset0"),
473 	PINCTRL_PIN(62, "pcie_reset1"),
474 	PINCTRL_PIN(63, "pcie_reset2"),
475 };
476 
477 static const int en7581_pon_pins[] = { 49, 50, 51, 52, 53, 54 };
478 static const int en7581_pon_tod_1pps_pins[] = { 46 };
479 static const int en7581_gsw_tod_1pps_pins[] = { 46 };
480 static const int en7581_sipo_pins[] = { 16, 17 };
481 static const int en7581_sipo_rclk_pins[] = { 16, 17, 43 };
482 static const int en7581_mdio_pins[] = { 14, 15 };
483 static const int en7581_uart2_pins[] = { 48, 55 };
484 static const int en7581_uart2_cts_rts_pins[] = { 46, 47 };
485 static const int en7581_hsuart_pins[] = { 28, 29 };
486 static const int en7581_hsuart_cts_rts_pins[] = { 26, 27 };
487 static const int en7581_uart4_pins[] = { 38, 39 };
488 static const int en7581_uart5_pins[] = { 18, 19 };
489 static const int en7581_i2c0_pins[] = { 2, 3 };
490 static const int en7581_i2c1_pins[] = { 14, 15 };
491 static const int en7581_jtag_udi_pins[] = { 16, 17, 18, 19, 20 };
492 static const int en7581_jtag_dfd_pins[] = { 16, 17, 18, 19, 20 };
493 static const int en7581_i2s_pins[] = { 26, 27, 28, 29 };
494 static const int en7581_pcm1_pins[] = { 22, 23, 24, 25 };
495 static const int en7581_pcm2_pins[] = { 18, 19, 20, 21 };
496 static const int en7581_spi_quad_pins[] = { 32, 33 };
497 static const int en7581_spi_pins[] = { 4, 5, 6, 7 };
498 static const int en7581_spi_cs1_pins[] = { 34 };
499 static const int en7581_pcm_spi_pins[] = { 18, 19, 20, 21, 22, 23, 24, 25 };
500 static const int en7581_pcm_spi_int_pins[] = { 14 };
501 static const int en7581_pcm_spi_rst_pins[] = { 15 };
502 static const int en7581_pcm_spi_cs1_pins[] = { 43 };
503 static const int en7581_pcm_spi_cs2_pins[] = { 40 };
504 static const int en7581_pcm_spi_cs2_p128_pins[] = { 40 };
505 static const int en7581_pcm_spi_cs2_p156_pins[] = { 40 };
506 static const int en7581_pcm_spi_cs3_pins[] = { 41 };
507 static const int en7581_pcm_spi_cs4_pins[] = { 42 };
508 static const int en7581_emmc_pins[] = { 4, 5, 6, 30, 31, 32, 33, 34, 35, 36, 37 };
509 static const int en7581_pnand_pins[] = { 4, 5, 6, 7, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42 };
510 static const int en7581_gpio0_pins[] = { 13 };
511 static const int en7581_gpio1_pins[] = { 14 };
512 static const int en7581_gpio2_pins[] = { 15 };
513 static const int en7581_gpio3_pins[] = { 16 };
514 static const int en7581_gpio4_pins[] = { 17 };
515 static const int en7581_gpio5_pins[] = { 18 };
516 static const int en7581_gpio6_pins[] = { 19 };
517 static const int en7581_gpio7_pins[] = { 20 };
518 static const int en7581_gpio8_pins[] = { 21 };
519 static const int en7581_gpio9_pins[] = { 22 };
520 static const int en7581_gpio10_pins[] = { 23 };
521 static const int en7581_gpio11_pins[] = { 24 };
522 static const int en7581_gpio12_pins[] = { 25 };
523 static const int en7581_gpio13_pins[] = { 26 };
524 static const int en7581_gpio14_pins[] = { 27 };
525 static const int en7581_gpio15_pins[] = { 28 };
526 static const int en7581_gpio16_pins[] = { 29 };
527 static const int en7581_gpio17_pins[] = { 30 };
528 static const int en7581_gpio18_pins[] = { 31 };
529 static const int en7581_gpio19_pins[] = { 32 };
530 static const int en7581_gpio20_pins[] = { 33 };
531 static const int en7581_gpio21_pins[] = { 34 };
532 static const int en7581_gpio22_pins[] = { 35 };
533 static const int en7581_gpio23_pins[] = { 36 };
534 static const int en7581_gpio24_pins[] = { 37 };
535 static const int en7581_gpio25_pins[] = { 38 };
536 static const int en7581_gpio26_pins[] = { 39 };
537 static const int en7581_gpio27_pins[] = { 40 };
538 static const int en7581_gpio28_pins[] = { 41 };
539 static const int en7581_gpio29_pins[] = { 42 };
540 static const int en7581_gpio30_pins[] = { 43 };
541 static const int en7581_gpio31_pins[] = { 44 };
542 static const int en7581_gpio33_pins[] = { 46 };
543 static const int en7581_gpio34_pins[] = { 47 };
544 static const int en7581_gpio35_pins[] = { 48 };
545 static const int en7581_gpio36_pins[] = { 49 };
546 static const int en7581_gpio37_pins[] = { 50 };
547 static const int en7581_gpio38_pins[] = { 51 };
548 static const int en7581_gpio39_pins[] = { 52 };
549 static const int en7581_gpio40_pins[] = { 53 };
550 static const int en7581_gpio41_pins[] = { 54 };
551 static const int en7581_gpio42_pins[] = { 55 };
552 static const int en7581_gpio43_pins[] = { 56 };
553 static const int en7581_gpio44_pins[] = { 57 };
554 static const int en7581_gpio45_pins[] = { 58 };
555 static const int en7581_gpio46_pins[] = { 59 };
556 static const int en7581_pcie_reset0_pins[] = { 61 };
557 static const int en7581_pcie_reset1_pins[] = { 62 };
558 static const int en7581_pcie_reset2_pins[] = { 63 };
559 
560 static const struct pingroup en7581_pinctrl_groups[] = {
561 	PINCTRL_PIN_GROUP("pon", en7581_pon),
562 	PINCTRL_PIN_GROUP("pon_tod_1pps", en7581_pon_tod_1pps),
563 	PINCTRL_PIN_GROUP("gsw_tod_1pps", en7581_gsw_tod_1pps),
564 	PINCTRL_PIN_GROUP("sipo", en7581_sipo),
565 	PINCTRL_PIN_GROUP("sipo_rclk", en7581_sipo_rclk),
566 	PINCTRL_PIN_GROUP("mdio", en7581_mdio),
567 	PINCTRL_PIN_GROUP("uart2", en7581_uart2),
568 	PINCTRL_PIN_GROUP("uart2_cts_rts", en7581_uart2_cts_rts),
569 	PINCTRL_PIN_GROUP("hsuart", en7581_hsuart),
570 	PINCTRL_PIN_GROUP("hsuart_cts_rts", en7581_hsuart_cts_rts),
571 	PINCTRL_PIN_GROUP("uart4", en7581_uart4),
572 	PINCTRL_PIN_GROUP("uart5", en7581_uart5),
573 	PINCTRL_PIN_GROUP("i2c0", en7581_i2c0),
574 	PINCTRL_PIN_GROUP("i2c1", en7581_i2c1),
575 	PINCTRL_PIN_GROUP("jtag_udi", en7581_jtag_udi),
576 	PINCTRL_PIN_GROUP("jtag_dfd", en7581_jtag_dfd),
577 	PINCTRL_PIN_GROUP("i2s", en7581_i2s),
578 	PINCTRL_PIN_GROUP("pcm1", en7581_pcm1),
579 	PINCTRL_PIN_GROUP("pcm2", en7581_pcm2),
580 	PINCTRL_PIN_GROUP("spi", en7581_spi),
581 	PINCTRL_PIN_GROUP("spi_quad", en7581_spi_quad),
582 	PINCTRL_PIN_GROUP("spi_cs1", en7581_spi_cs1),
583 	PINCTRL_PIN_GROUP("pcm_spi", en7581_pcm_spi),
584 	PINCTRL_PIN_GROUP("pcm_spi_int", en7581_pcm_spi_int),
585 	PINCTRL_PIN_GROUP("pcm_spi_rst", en7581_pcm_spi_rst),
586 	PINCTRL_PIN_GROUP("pcm_spi_cs1", en7581_pcm_spi_cs1),
587 	PINCTRL_PIN_GROUP("pcm_spi_cs2_p128", en7581_pcm_spi_cs2_p128),
588 	PINCTRL_PIN_GROUP("pcm_spi_cs2_p156", en7581_pcm_spi_cs2_p156),
589 	PINCTRL_PIN_GROUP("pcm_spi_cs2", en7581_pcm_spi_cs2),
590 	PINCTRL_PIN_GROUP("pcm_spi_cs3", en7581_pcm_spi_cs3),
591 	PINCTRL_PIN_GROUP("pcm_spi_cs4", en7581_pcm_spi_cs4),
592 	PINCTRL_PIN_GROUP("emmc", en7581_emmc),
593 	PINCTRL_PIN_GROUP("pnand", en7581_pnand),
594 	PINCTRL_PIN_GROUP("gpio0", en7581_gpio0),
595 	PINCTRL_PIN_GROUP("gpio1", en7581_gpio1),
596 	PINCTRL_PIN_GROUP("gpio2", en7581_gpio2),
597 	PINCTRL_PIN_GROUP("gpio3", en7581_gpio3),
598 	PINCTRL_PIN_GROUP("gpio4", en7581_gpio4),
599 	PINCTRL_PIN_GROUP("gpio5", en7581_gpio5),
600 	PINCTRL_PIN_GROUP("gpio6", en7581_gpio6),
601 	PINCTRL_PIN_GROUP("gpio7", en7581_gpio7),
602 	PINCTRL_PIN_GROUP("gpio8", en7581_gpio8),
603 	PINCTRL_PIN_GROUP("gpio9", en7581_gpio9),
604 	PINCTRL_PIN_GROUP("gpio10", en7581_gpio10),
605 	PINCTRL_PIN_GROUP("gpio11", en7581_gpio11),
606 	PINCTRL_PIN_GROUP("gpio12", en7581_gpio12),
607 	PINCTRL_PIN_GROUP("gpio13", en7581_gpio13),
608 	PINCTRL_PIN_GROUP("gpio14", en7581_gpio14),
609 	PINCTRL_PIN_GROUP("gpio15", en7581_gpio15),
610 	PINCTRL_PIN_GROUP("gpio16", en7581_gpio16),
611 	PINCTRL_PIN_GROUP("gpio17", en7581_gpio17),
612 	PINCTRL_PIN_GROUP("gpio18", en7581_gpio18),
613 	PINCTRL_PIN_GROUP("gpio19", en7581_gpio19),
614 	PINCTRL_PIN_GROUP("gpio20", en7581_gpio20),
615 	PINCTRL_PIN_GROUP("gpio21", en7581_gpio21),
616 	PINCTRL_PIN_GROUP("gpio22", en7581_gpio22),
617 	PINCTRL_PIN_GROUP("gpio23", en7581_gpio23),
618 	PINCTRL_PIN_GROUP("gpio24", en7581_gpio24),
619 	PINCTRL_PIN_GROUP("gpio25", en7581_gpio25),
620 	PINCTRL_PIN_GROUP("gpio26", en7581_gpio26),
621 	PINCTRL_PIN_GROUP("gpio27", en7581_gpio27),
622 	PINCTRL_PIN_GROUP("gpio28", en7581_gpio28),
623 	PINCTRL_PIN_GROUP("gpio29", en7581_gpio29),
624 	PINCTRL_PIN_GROUP("gpio30", en7581_gpio30),
625 	PINCTRL_PIN_GROUP("gpio31", en7581_gpio31),
626 	PINCTRL_PIN_GROUP("gpio33", en7581_gpio33),
627 	PINCTRL_PIN_GROUP("gpio34", en7581_gpio34),
628 	PINCTRL_PIN_GROUP("gpio35", en7581_gpio35),
629 	PINCTRL_PIN_GROUP("gpio36", en7581_gpio36),
630 	PINCTRL_PIN_GROUP("gpio37", en7581_gpio37),
631 	PINCTRL_PIN_GROUP("gpio38", en7581_gpio38),
632 	PINCTRL_PIN_GROUP("gpio39", en7581_gpio39),
633 	PINCTRL_PIN_GROUP("gpio40", en7581_gpio40),
634 	PINCTRL_PIN_GROUP("gpio41", en7581_gpio41),
635 	PINCTRL_PIN_GROUP("gpio42", en7581_gpio42),
636 	PINCTRL_PIN_GROUP("gpio43", en7581_gpio43),
637 	PINCTRL_PIN_GROUP("gpio44", en7581_gpio44),
638 	PINCTRL_PIN_GROUP("gpio45", en7581_gpio45),
639 	PINCTRL_PIN_GROUP("gpio46", en7581_gpio46),
640 	PINCTRL_PIN_GROUP("pcie_reset0", en7581_pcie_reset0),
641 	PINCTRL_PIN_GROUP("pcie_reset1", en7581_pcie_reset1),
642 	PINCTRL_PIN_GROUP("pcie_reset2", en7581_pcie_reset2),
643 };
644 
645 static struct pinctrl_pin_desc an7583_pinctrl_pins[] = {
646 	PINCTRL_PIN(2, "gpio0"),
647 	PINCTRL_PIN(3, "gpio1"),
648 	PINCTRL_PIN(4, "gpio2"),
649 	PINCTRL_PIN(5, "gpio3"),
650 	PINCTRL_PIN(6, "gpio4"),
651 	PINCTRL_PIN(7, "gpio5"),
652 	PINCTRL_PIN(8, "gpio6"),
653 	PINCTRL_PIN(9, "gpio7"),
654 	PINCTRL_PIN(10, "gpio8"),
655 	PINCTRL_PIN(11, "gpio9"),
656 	PINCTRL_PIN(12, "gpio10"),
657 	PINCTRL_PIN(13, "gpio11"),
658 	PINCTRL_PIN(14, "gpio12"),
659 	PINCTRL_PIN(15, "gpio13"),
660 	PINCTRL_PIN(16, "gpio14"),
661 	PINCTRL_PIN(17, "gpio15"),
662 	PINCTRL_PIN(18, "gpio16"),
663 	PINCTRL_PIN(19, "gpio17"),
664 	PINCTRL_PIN(20, "gpio18"),
665 	PINCTRL_PIN(21, "gpio19"),
666 	PINCTRL_PIN(22, "gpio20"),
667 	PINCTRL_PIN(23, "gpio21"),
668 	PINCTRL_PIN(24, "gpio22"),
669 	PINCTRL_PIN(25, "gpio23"),
670 	PINCTRL_PIN(26, "gpio24"),
671 	PINCTRL_PIN(27, "gpio25"),
672 	PINCTRL_PIN(28, "gpio26"),
673 	PINCTRL_PIN(29, "gpio27"),
674 	PINCTRL_PIN(30, "gpio28"),
675 	PINCTRL_PIN(31, "gpio29"),
676 	PINCTRL_PIN(32, "gpio30"),
677 	PINCTRL_PIN(33, "gpio31"),
678 	PINCTRL_PIN(34, "gpio32"),
679 	PINCTRL_PIN(35, "gpio33"),
680 	PINCTRL_PIN(36, "gpio34"),
681 	PINCTRL_PIN(37, "gpio35"),
682 	PINCTRL_PIN(38, "gpio36"),
683 	PINCTRL_PIN(39, "gpio37"),
684 	PINCTRL_PIN(40, "gpio38"),
685 	PINCTRL_PIN(41, "i2c0_scl"),
686 	PINCTRL_PIN(42, "i2c0_sda"),
687 	PINCTRL_PIN(43, "i2c1_scl"),
688 	PINCTRL_PIN(44, "i2c1_sda"),
689 	PINCTRL_PIN(45, "spi_clk"),
690 	PINCTRL_PIN(46, "spi_cs"),
691 	PINCTRL_PIN(47, "spi_mosi"),
692 	PINCTRL_PIN(48, "spi_miso"),
693 	PINCTRL_PIN(49, "uart_txd"),
694 	PINCTRL_PIN(50, "uart_rxd"),
695 	PINCTRL_PIN(51, "pcie_reset0"),
696 	PINCTRL_PIN(52, "pcie_reset1"),
697 	PINCTRL_PIN(53, "mdc_0"),
698 	PINCTRL_PIN(54, "mdio_0"),
699 };
700 
701 static const int an7583_pon_pins[] = { 15, 16, 17, 18, 19, 20 };
702 static const int an7583_pon_tod_1pps_pins[] = { 32 };
703 static const int an7583_gsw_tod_1pps_pins[] = { 32 };
704 static const int an7583_sipo_pins[] = { 34, 35 };
705 static const int an7583_sipo_rclk_pins[] = { 34, 35, 33 };
706 static const int an7583_mdio_pins[] = { 43, 44 };
707 static const int an7583_uart2_pins[] = { 34, 35 };
708 static const int an7583_uart2_cts_rts_pins[] = { 32, 33 };
709 static const int an7583_hsuart_pins[] = { 30, 31 };
710 static const int an7583_hsuart_cts_rts_pins[] = { 28, 29 };
711 static const int an7583_npu_uart_pins[] = { 7, 8 };
712 static const int an7583_uart4_pins[] = { 7, 8 };
713 static const int an7583_uart5_pins[] = { 23, 24 };
714 static const int an7583_i2c0_pins[] = { 41, 42 };
715 static const int an7583_i2c1_pins[] = { 43, 44 };
716 static const int an7583_jtag_udi_pins[] = { 23, 24, 22, 25, 26 };
717 static const int an7583_jtag_dfd_pins[] = { 23, 24, 22, 25, 26 };
718 static const int an7583_pcm1_pins[] = { 10, 11, 12, 13, 14 };
719 static const int an7583_pcm2_pins[] = { 28, 29, 30, 31, 24 };
720 static const int an7583_spi_pins[] = { 28, 29, 30, 31 };
721 static const int an7583_spi_quad_pins[] = { 25, 26 };
722 static const int an7583_spi_cs1_pins[] = { 27 };
723 static const int an7583_pcm_spi_pins[] = { 28, 29, 30, 31, 10, 11, 12, 13 };
724 static const int an7583_pcm_spi_rst_pins[] = { 14 };
725 static const int an7583_pcm_spi_cs1_pins[] = { 24 };
726 static const int an7583_emmc_pins[] = { 7, 8, 9, 22, 23, 24, 25, 26, 45, 46, 47 };
727 static const int an7583_pnand_pins[] = { 7, 8, 9, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 45, 46, 47, 48 };
728 static const int an7583_gpio0_pins[] = { 2 };
729 static const int an7583_gpio1_pins[] = { 3 };
730 static const int an7583_gpio2_pins[] = { 4 };
731 static const int an7583_gpio3_pins[] = { 5 };
732 static const int an7583_gpio4_pins[] = { 6 };
733 static const int an7583_gpio5_pins[] = { 7 };
734 static const int an7583_gpio6_pins[] = { 8 };
735 static const int an7583_gpio7_pins[] = { 9 };
736 static const int an7583_gpio8_pins[] = { 10 };
737 static const int an7583_gpio9_pins[] = { 11 };
738 static const int an7583_gpio10_pins[] = { 12 };
739 static const int an7583_gpio11_pins[] = { 13 };
740 static const int an7583_gpio12_pins[] = { 14 };
741 static const int an7583_gpio13_pins[] = { 15 };
742 static const int an7583_gpio14_pins[] = { 16 };
743 static const int an7583_gpio15_pins[] = { 17 };
744 static const int an7583_gpio16_pins[] = { 18 };
745 static const int an7583_gpio17_pins[] = { 19 };
746 static const int an7583_gpio18_pins[] = { 20 };
747 static const int an7583_gpio19_pins[] = { 21 };
748 static const int an7583_gpio20_pins[] = { 22 };
749 static const int an7583_gpio21_pins[] = { 24 };
750 static const int an7583_gpio23_pins[] = { 25 };
751 static const int an7583_gpio24_pins[] = { 26 };
752 static const int an7583_gpio25_pins[] = { 27 };
753 static const int an7583_gpio26_pins[] = { 28 };
754 static const int an7583_gpio27_pins[] = { 29 };
755 static const int an7583_gpio28_pins[] = { 30 };
756 static const int an7583_gpio29_pins[] = { 31 };
757 static const int an7583_gpio30_pins[] = { 32 };
758 static const int an7583_gpio31_pins[] = { 33 };
759 static const int an7583_gpio33_pins[] = { 35 };
760 static const int an7583_gpio34_pins[] = { 36 };
761 static const int an7583_gpio35_pins[] = { 37 };
762 static const int an7583_gpio36_pins[] = { 38 };
763 static const int an7583_gpio37_pins[] = { 39 };
764 static const int an7583_gpio38_pins[] = { 40 };
765 static const int an7583_gpio39_pins[] = { 41 };
766 static const int an7583_gpio40_pins[] = { 42 };
767 static const int an7583_gpio41_pins[] = { 43 };
768 static const int an7583_gpio42_pins[] = { 44 };
769 static const int an7583_gpio43_pins[] = { 45 };
770 static const int an7583_gpio44_pins[] = { 46 };
771 static const int an7583_gpio45_pins[] = { 47 };
772 static const int an7583_gpio46_pins[] = { 48 };
773 static const int an7583_gpio47_pins[] = { 49 };
774 static const int an7583_gpio48_pins[] = { 50 };
775 static const int an7583_pcie_reset0_pins[] = { 51 };
776 static const int an7583_pcie_reset1_pins[] = { 52 };
777 
778 static const struct pingroup an7583_pinctrl_groups[] = {
779 	PINCTRL_PIN_GROUP("pon", an7583_pon),
780 	PINCTRL_PIN_GROUP("pon_tod_1pps", an7583_pon_tod_1pps),
781 	PINCTRL_PIN_GROUP("gsw_tod_1pps", an7583_gsw_tod_1pps),
782 	PINCTRL_PIN_GROUP("sipo", an7583_sipo),
783 	PINCTRL_PIN_GROUP("sipo_rclk", an7583_sipo_rclk),
784 	PINCTRL_PIN_GROUP("mdio", an7583_mdio),
785 	PINCTRL_PIN_GROUP("uart2", an7583_uart2),
786 	PINCTRL_PIN_GROUP("uart2_cts_rts", an7583_uart2_cts_rts),
787 	PINCTRL_PIN_GROUP("hsuart", an7583_hsuart),
788 	PINCTRL_PIN_GROUP("hsuart_cts_rts", an7583_hsuart_cts_rts),
789 	PINCTRL_PIN_GROUP("npu_uart", an7583_npu_uart),
790 	PINCTRL_PIN_GROUP("uart4", an7583_uart4),
791 	PINCTRL_PIN_GROUP("uart5", an7583_uart5),
792 	PINCTRL_PIN_GROUP("i2c0", an7583_i2c0),
793 	PINCTRL_PIN_GROUP("i2c1", an7583_i2c1),
794 	PINCTRL_PIN_GROUP("jtag_udi", an7583_jtag_udi),
795 	PINCTRL_PIN_GROUP("jtag_dfd", an7583_jtag_dfd),
796 	PINCTRL_PIN_GROUP("pcm1", an7583_pcm1),
797 	PINCTRL_PIN_GROUP("pcm2", an7583_pcm2),
798 	PINCTRL_PIN_GROUP("spi", an7583_spi),
799 	PINCTRL_PIN_GROUP("spi_quad", an7583_spi_quad),
800 	PINCTRL_PIN_GROUP("spi_cs1", an7583_spi_cs1),
801 	PINCTRL_PIN_GROUP("pcm_spi", an7583_pcm_spi),
802 	PINCTRL_PIN_GROUP("pcm_spi_rst", an7583_pcm_spi_rst),
803 	PINCTRL_PIN_GROUP("pcm_spi_cs1", an7583_pcm_spi_cs1),
804 	PINCTRL_PIN_GROUP("emmc", an7583_emmc),
805 	PINCTRL_PIN_GROUP("pnand", an7583_pnand),
806 	PINCTRL_PIN_GROUP("gpio0", an7583_gpio0),
807 	PINCTRL_PIN_GROUP("gpio1", an7583_gpio1),
808 	PINCTRL_PIN_GROUP("gpio2", an7583_gpio2),
809 	PINCTRL_PIN_GROUP("gpio3", an7583_gpio3),
810 	PINCTRL_PIN_GROUP("gpio4", an7583_gpio4),
811 	PINCTRL_PIN_GROUP("gpio5", an7583_gpio5),
812 	PINCTRL_PIN_GROUP("gpio6", an7583_gpio6),
813 	PINCTRL_PIN_GROUP("gpio7", an7583_gpio7),
814 	PINCTRL_PIN_GROUP("gpio8", an7583_gpio8),
815 	PINCTRL_PIN_GROUP("gpio9", an7583_gpio9),
816 	PINCTRL_PIN_GROUP("gpio10", an7583_gpio10),
817 	PINCTRL_PIN_GROUP("gpio11", an7583_gpio11),
818 	PINCTRL_PIN_GROUP("gpio12", an7583_gpio12),
819 	PINCTRL_PIN_GROUP("gpio13", an7583_gpio13),
820 	PINCTRL_PIN_GROUP("gpio14", an7583_gpio14),
821 	PINCTRL_PIN_GROUP("gpio15", an7583_gpio15),
822 	PINCTRL_PIN_GROUP("gpio16", an7583_gpio16),
823 	PINCTRL_PIN_GROUP("gpio17", an7583_gpio17),
824 	PINCTRL_PIN_GROUP("gpio18", an7583_gpio18),
825 	PINCTRL_PIN_GROUP("gpio19", an7583_gpio19),
826 	PINCTRL_PIN_GROUP("gpio20", an7583_gpio20),
827 	PINCTRL_PIN_GROUP("gpio21", an7583_gpio21),
828 	PINCTRL_PIN_GROUP("gpio23", an7583_gpio23),
829 	PINCTRL_PIN_GROUP("gpio24", an7583_gpio24),
830 	PINCTRL_PIN_GROUP("gpio25", an7583_gpio25),
831 	PINCTRL_PIN_GROUP("gpio26", an7583_gpio26),
832 	PINCTRL_PIN_GROUP("gpio27", an7583_gpio27),
833 	PINCTRL_PIN_GROUP("gpio28", an7583_gpio28),
834 	PINCTRL_PIN_GROUP("gpio29", an7583_gpio29),
835 	PINCTRL_PIN_GROUP("gpio30", an7583_gpio30),
836 	PINCTRL_PIN_GROUP("gpio31", an7583_gpio31),
837 	PINCTRL_PIN_GROUP("gpio33", an7583_gpio33),
838 	PINCTRL_PIN_GROUP("gpio34", an7583_gpio34),
839 	PINCTRL_PIN_GROUP("gpio35", an7583_gpio35),
840 	PINCTRL_PIN_GROUP("gpio36", an7583_gpio36),
841 	PINCTRL_PIN_GROUP("gpio37", an7583_gpio37),
842 	PINCTRL_PIN_GROUP("gpio38", an7583_gpio38),
843 	PINCTRL_PIN_GROUP("gpio39", an7583_gpio39),
844 	PINCTRL_PIN_GROUP("gpio40", an7583_gpio40),
845 	PINCTRL_PIN_GROUP("gpio41", an7583_gpio41),
846 	PINCTRL_PIN_GROUP("gpio42", an7583_gpio42),
847 	PINCTRL_PIN_GROUP("gpio43", an7583_gpio43),
848 	PINCTRL_PIN_GROUP("gpio44", an7583_gpio44),
849 	PINCTRL_PIN_GROUP("gpio45", an7583_gpio45),
850 	PINCTRL_PIN_GROUP("gpio46", an7583_gpio46),
851 	PINCTRL_PIN_GROUP("gpio47", an7583_gpio47),
852 	PINCTRL_PIN_GROUP("gpio48", an7583_gpio48),
853 	PINCTRL_PIN_GROUP("pcie_reset0", an7583_pcie_reset0),
854 	PINCTRL_PIN_GROUP("pcie_reset1", an7583_pcie_reset1),
855 };
856 
857 static const char *const pon_groups[] = { "pon" };
858 static const char *const tod_1pps_groups[] = { "pon_tod_1pps", "gsw_tod_1pps" };
859 static const char *const sipo_groups[] = { "sipo", "sipo_rclk" };
860 static const char *const mdio_groups[] = { "mdio" };
861 static const char *const an7583_mdio_groups[] = { "mdio" };
862 static const char *const uart_groups[] = { "uart2", "uart2_cts_rts", "hsuart",
863 					   "hsuart_cts_rts", "uart4",
864 					   "uart5" };
865 static const char *const i2c_groups[] = { "i2c1" };
866 static const char *const jtag_groups[] = { "jtag_udi", "jtag_dfd" };
867 static const char *const pcm_groups[] = { "pcm1", "pcm2" };
868 static const char *const spi_groups[] = { "spi_quad", "spi_cs1" };
869 static const char *const pcm_spi_groups[] = { "pcm_spi", "pcm_spi_int",
870 					      "pcm_spi_rst", "pcm_spi_cs1",
871 					      "pcm_spi_cs2_p156",
872 					      "pcm_spi_cs2_p128",
873 					      "pcm_spi_cs3", "pcm_spi_cs4" };
874 static const char *const an7583_pcm_spi_groups[] = { "pcm_spi", "pcm_spi_int",
875 						     "pcm_spi_rst", "pcm_spi_cs1",
876 						     "pcm_spi_cs2", "pcm_spi_cs3",
877 						     "pcm_spi_cs4" };
878 static const char *const i2s_groups[] = { "i2s" };
879 static const char *const emmc_groups[] = { "emmc" };
880 static const char *const pnand_groups[] = { "pnand" };
881 static const char *const pcie_reset_groups[] = { "pcie_reset0", "pcie_reset1",
882 						 "pcie_reset2" };
883 static const char *const an7583_pcie_reset_groups[] = { "pcie_reset0", "pcie_reset1" };
884 static const char *const pwm_groups[] = { "gpio0", "gpio1",
885 					  "gpio2", "gpio3",
886 					  "gpio4", "gpio5",
887 					  "gpio6", "gpio7",
888 					  "gpio8", "gpio9",
889 					  "gpio10", "gpio11",
890 					  "gpio12", "gpio13",
891 					  "gpio14", "gpio15",
892 					  "gpio16", "gpio17",
893 					  "gpio18", "gpio19",
894 					  "gpio20", "gpio21",
895 					  "gpio22", "gpio23",
896 					  "gpio24", "gpio25",
897 					  "gpio26", "gpio27",
898 					  "gpio28", "gpio29",
899 					  "gpio30", "gpio31",
900 					  "gpio36", "gpio37",
901 					  "gpio38", "gpio39",
902 					  "gpio40", "gpio41",
903 					  "gpio42", "gpio43",
904 					  "gpio44", "gpio45",
905 					  "gpio46", "gpio47" };
906 static const char *const phy1_led0_groups[] = { "gpio33", "gpio34",
907 						"gpio35", "gpio42" };
908 static const char *const phy2_led0_groups[] = { "gpio33", "gpio34",
909 						"gpio35", "gpio42" };
910 static const char *const phy3_led0_groups[] = { "gpio33", "gpio34",
911 						"gpio35", "gpio42" };
912 static const char *const phy4_led0_groups[] = { "gpio33", "gpio34",
913 						"gpio35", "gpio42" };
914 static const char *const phy1_led1_groups[] = { "gpio43", "gpio44",
915 						"gpio45", "gpio46" };
916 static const char *const phy2_led1_groups[] = { "gpio43", "gpio44",
917 						"gpio45", "gpio46" };
918 static const char *const phy3_led1_groups[] = { "gpio43", "gpio44",
919 						"gpio45", "gpio46" };
920 static const char *const phy4_led1_groups[] = { "gpio43", "gpio44",
921 						"gpio45", "gpio46" };
922 static const char *const an7583_phy1_led0_groups[] = { "gpio1", "gpio2",
923 							"gpio3", "gpio4" };
924 static const char *const an7583_phy2_led0_groups[] = { "gpio1", "gpio2",
925 							"gpio3", "gpio4" };
926 static const char *const an7583_phy3_led0_groups[] = { "gpio1", "gpio2",
927 							"gpio3", "gpio4" };
928 static const char *const an7583_phy4_led0_groups[] = { "gpio1", "gpio2",
929 							"gpio3", "gpio4" };
930 static const char *const an7583_phy1_led1_groups[] = { "gpio8", "gpio9",
931 							"gpio10", "gpio11" };
932 static const char *const an7583_phy2_led1_groups[] = { "gpio8", "gpio9",
933 							"gpio10", "gpio11" };
934 static const char *const an7583_phy3_led1_groups[] = { "gpio8", "gpio9",
935 							"gpio10", "gpio11" };
936 static const char *const an7583_phy4_led1_groups[] = { "gpio8", "gpio9",
937 							"gpio10", "gpio11" };
938 
939 static const struct airoha_pinctrl_func_group pon_func_group[] = {
940 	{
941 		.name = "pon",
942 		.regmap[0] = {
943 			AIROHA_FUNC_MUX,
944 			REG_GPIO_PON_MODE,
945 			GPIO_PON_MODE_MASK,
946 			GPIO_PON_MODE_MASK
947 		},
948 		.regmap_size = 1,
949 	},
950 };
951 
952 static const struct airoha_pinctrl_func_group tod_1pps_func_group[] = {
953 	{
954 		.name = "pon_tod_1pps",
955 		.regmap[0] = {
956 			AIROHA_FUNC_MUX,
957 			REG_GPIO_2ND_I2C_MODE,
958 			PON_TOD_1PPS_MODE_MASK,
959 			PON_TOD_1PPS_MODE_MASK
960 		},
961 		.regmap_size = 1,
962 	}, {
963 		.name = "gsw_tod_1pps",
964 		.regmap[0] = {
965 			AIROHA_FUNC_MUX,
966 			REG_GPIO_2ND_I2C_MODE,
967 			GSW_TOD_1PPS_MODE_MASK,
968 			GSW_TOD_1PPS_MODE_MASK
969 		},
970 		.regmap_size = 1,
971 	},
972 };
973 
974 static const struct airoha_pinctrl_func_group sipo_func_group[] = {
975 	{
976 		.name = "sipo",
977 		.regmap[0] = {
978 			AIROHA_FUNC_MUX,
979 			REG_GPIO_PON_MODE,
980 			GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK,
981 			GPIO_SIPO_MODE_MASK
982 		},
983 		.regmap_size = 1,
984 	}, {
985 		.name = "sipo_rclk",
986 		.regmap[0] = {
987 			AIROHA_FUNC_MUX,
988 			REG_GPIO_PON_MODE,
989 			GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK,
990 			GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK
991 		},
992 		.regmap_size = 1,
993 	},
994 };
995 
996 static const struct airoha_pinctrl_func_group mdio_func_group[] = {
997 	{
998 		.name = "mdio",
999 		.regmap[0] = {
1000 			AIROHA_FUNC_MUX,
1001 			REG_GPIO_2ND_I2C_MODE,
1002 			GPIO_MDC_IO_MASTER_MODE_MODE,
1003 			GPIO_MDC_IO_MASTER_MODE_MODE
1004 		},
1005 		.regmap[1] = {
1006 			AIROHA_FUNC_MUX,
1007 			REG_FORCE_GPIO_EN,
1008 			FORCE_GPIO_EN(1) | FORCE_GPIO_EN(2),
1009 			FORCE_GPIO_EN(1) | FORCE_GPIO_EN(2)
1010 		},
1011 		.regmap_size = 2,
1012 	},
1013 };
1014 
1015 static const struct airoha_pinctrl_func_group an7583_mdio_func_group[] = {
1016 	{
1017 		.name = "mdio",
1018 		.regmap[0] = {
1019 			AIROHA_FUNC_MUX,
1020 			REG_GPIO_PON_MODE,
1021 			GPIO_SGMII_MDIO_MODE_MASK,
1022 			GPIO_SGMII_MDIO_MODE_MASK
1023 		},
1024 		.regmap[1] = {
1025 			AIROHA_FUNC_MUX,
1026 			REG_GPIO_SPI_CS1_MODE,
1027 			GPIO_MDC_IO_MASTER_MODE_MODE,
1028 			GPIO_MDC_IO_MASTER_MODE_MODE
1029 		},
1030 		.regmap_size = 2,
1031 	},
1032 };
1033 
1034 static const struct airoha_pinctrl_func_group uart_func_group[] = {
1035 	{
1036 		.name = "uart2",
1037 		.regmap[0] = {
1038 			AIROHA_FUNC_MUX,
1039 			REG_GPIO_PON_MODE,
1040 			GPIO_UART2_MODE_MASK,
1041 			GPIO_UART2_MODE_MASK
1042 		},
1043 		.regmap_size = 1,
1044 	}, {
1045 		.name = "uart2_cts_rts",
1046 		.regmap[0] = {
1047 			AIROHA_FUNC_MUX,
1048 			REG_GPIO_PON_MODE,
1049 			GPIO_UART2_MODE_MASK | GPIO_UART2_CTS_RTS_MODE_MASK,
1050 			GPIO_UART2_MODE_MASK | GPIO_UART2_CTS_RTS_MODE_MASK
1051 		},
1052 		.regmap_size = 1,
1053 	}, {
1054 		.name = "hsuart",
1055 		.regmap[0] = {
1056 			AIROHA_FUNC_MUX,
1057 			REG_GPIO_PON_MODE,
1058 			GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK,
1059 			GPIO_HSUART_MODE_MASK
1060 		},
1061 		.regmap_size = 1,
1062 	},
1063 	{
1064 		.name = "hsuart_cts_rts",
1065 		.regmap[0] = {
1066 			AIROHA_FUNC_MUX,
1067 			REG_GPIO_PON_MODE,
1068 			GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK,
1069 			GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK
1070 		},
1071 		.regmap_size = 1,
1072 	}, {
1073 		.name = "uart4",
1074 		.regmap[0] = {
1075 			AIROHA_FUNC_MUX,
1076 			REG_GPIO_PON_MODE,
1077 			GPIO_UART4_MODE_MASK,
1078 			GPIO_UART4_MODE_MASK
1079 		},
1080 		.regmap_size = 1,
1081 	}, {
1082 		.name = "uart5",
1083 		.regmap[0] = {
1084 			AIROHA_FUNC_MUX,
1085 			REG_GPIO_PON_MODE,
1086 			GPIO_UART5_MODE_MASK,
1087 			GPIO_UART5_MODE_MASK
1088 		},
1089 		.regmap_size = 1,
1090 	},
1091 };
1092 
1093 static const struct airoha_pinctrl_func_group i2c_func_group[] = {
1094 	{
1095 		.name = "i2c1",
1096 		.regmap[0] = {
1097 			AIROHA_FUNC_MUX,
1098 			REG_GPIO_2ND_I2C_MODE,
1099 			GPIO_2ND_I2C_MODE_MASK,
1100 			GPIO_2ND_I2C_MODE_MASK
1101 		},
1102 		.regmap_size = 1,
1103 	},
1104 };
1105 
1106 static const struct airoha_pinctrl_func_group jtag_func_group[] = {
1107 	{
1108 		.name = "jtag_udi",
1109 		.regmap[0] = {
1110 			AIROHA_FUNC_MUX,
1111 			REG_NPU_UART_EN,
1112 			JTAG_UDI_EN_MASK,
1113 			JTAG_UDI_EN_MASK
1114 		},
1115 		.regmap_size = 1,
1116 	}, {
1117 		.name = "jtag_dfd",
1118 		.regmap[0] = {
1119 			AIROHA_FUNC_MUX,
1120 			REG_NPU_UART_EN,
1121 			JTAG_DFD_EN_MASK,
1122 			JTAG_DFD_EN_MASK
1123 		},
1124 		.regmap_size = 1,
1125 	},
1126 };
1127 
1128 static const struct airoha_pinctrl_func_group pcm_func_group[] = {
1129 	{
1130 		.name = "pcm1",
1131 		.regmap[0] = {
1132 			AIROHA_FUNC_MUX,
1133 			REG_GPIO_SPI_CS1_MODE,
1134 			GPIO_PCM1_MODE_MASK,
1135 			GPIO_PCM1_MODE_MASK
1136 		},
1137 		.regmap_size = 1,
1138 	}, {
1139 		.name = "pcm2",
1140 		.regmap[0] = {
1141 			AIROHA_FUNC_MUX,
1142 			REG_GPIO_SPI_CS1_MODE,
1143 			GPIO_PCM2_MODE_MASK,
1144 			GPIO_PCM2_MODE_MASK
1145 		},
1146 		.regmap_size = 1,
1147 	},
1148 };
1149 
1150 static const struct airoha_pinctrl_func_group spi_func_group[] = {
1151 	{
1152 		.name = "spi_quad",
1153 		.regmap[0] = {
1154 			AIROHA_FUNC_MUX,
1155 			REG_GPIO_SPI_CS1_MODE,
1156 			GPIO_SPI_QUAD_MODE_MASK,
1157 			GPIO_SPI_QUAD_MODE_MASK
1158 		},
1159 		.regmap_size = 1,
1160 	}, {
1161 		.name = "spi_cs1",
1162 		.regmap[0] = {
1163 			AIROHA_FUNC_MUX,
1164 			REG_GPIO_SPI_CS1_MODE,
1165 			GPIO_SPI_CS1_MODE_MASK,
1166 			GPIO_SPI_CS1_MODE_MASK
1167 		},
1168 		.regmap_size = 1,
1169 	}, {
1170 		.name = "spi_cs2",
1171 		.regmap[0] = {
1172 			AIROHA_FUNC_MUX,
1173 			REG_GPIO_SPI_CS1_MODE,
1174 			GPIO_SPI_CS2_MODE_MASK,
1175 			GPIO_SPI_CS2_MODE_MASK
1176 		},
1177 		.regmap_size = 1,
1178 	}, {
1179 		.name = "spi_cs3",
1180 		.regmap[0] = {
1181 			AIROHA_FUNC_MUX,
1182 			REG_GPIO_SPI_CS1_MODE,
1183 			GPIO_SPI_CS3_MODE_MASK,
1184 			GPIO_SPI_CS3_MODE_MASK
1185 		},
1186 		.regmap_size = 1,
1187 	}, {
1188 		.name = "spi_cs4",
1189 		.regmap[0] = {
1190 			AIROHA_FUNC_MUX,
1191 			REG_GPIO_SPI_CS1_MODE,
1192 			GPIO_SPI_CS4_MODE_MASK,
1193 			GPIO_SPI_CS4_MODE_MASK
1194 		},
1195 		.regmap_size = 1,
1196 	},
1197 };
1198 
1199 static const struct airoha_pinctrl_func_group pcm_spi_func_group[] = {
1200 	{
1201 		.name = "pcm_spi",
1202 		.regmap[0] = {
1203 			AIROHA_FUNC_MUX,
1204 			REG_GPIO_SPI_CS1_MODE,
1205 			GPIO_PCM_SPI_MODE_MASK,
1206 			GPIO_PCM_SPI_MODE_MASK
1207 		},
1208 		.regmap_size = 1,
1209 	}, {
1210 		.name = "pcm_spi_int",
1211 		.regmap[0] = {
1212 			AIROHA_FUNC_MUX,
1213 			REG_GPIO_SPI_CS1_MODE,
1214 			GPIO_PCM_INT_MODE_MASK,
1215 			GPIO_PCM_INT_MODE_MASK
1216 		},
1217 		.regmap_size = 1,
1218 	}, {
1219 		.name = "pcm_spi_rst",
1220 		.regmap[0] = {
1221 			AIROHA_FUNC_MUX,
1222 			REG_GPIO_SPI_CS1_MODE,
1223 			GPIO_PCM_RESET_MODE_MASK,
1224 			GPIO_PCM_RESET_MODE_MASK
1225 		},
1226 		.regmap_size = 1,
1227 	}, {
1228 		.name = "pcm_spi_cs1",
1229 		.regmap[0] = {
1230 			AIROHA_FUNC_MUX,
1231 			REG_GPIO_SPI_CS1_MODE,
1232 			GPIO_PCM_SPI_CS1_MODE_MASK,
1233 			GPIO_PCM_SPI_CS1_MODE_MASK
1234 		},
1235 		.regmap_size = 1,
1236 	}, {
1237 		.name = "pcm_spi_cs2_p128",
1238 		.regmap[0] = {
1239 			AIROHA_FUNC_MUX,
1240 			REG_GPIO_SPI_CS1_MODE,
1241 			GPIO_PCM_SPI_CS2_MODE_P128_MASK,
1242 			GPIO_PCM_SPI_CS2_MODE_P128_MASK
1243 		},
1244 		.regmap_size = 1,
1245 	}, {
1246 		.name = "pcm_spi_cs2_p156",
1247 		.regmap[0] = {
1248 			AIROHA_FUNC_MUX,
1249 			REG_GPIO_SPI_CS1_MODE,
1250 			GPIO_PCM_SPI_CS2_MODE_P156_MASK,
1251 			GPIO_PCM_SPI_CS2_MODE_P156_MASK
1252 		},
1253 		.regmap_size = 1,
1254 	}, {
1255 		.name = "pcm_spi_cs3",
1256 		.regmap[0] = {
1257 			AIROHA_FUNC_MUX,
1258 			REG_GPIO_SPI_CS1_MODE,
1259 			GPIO_PCM_SPI_CS3_MODE_MASK,
1260 			GPIO_PCM_SPI_CS3_MODE_MASK
1261 		},
1262 		.regmap_size = 1,
1263 	}, {
1264 		.name = "pcm_spi_cs4",
1265 		.regmap[0] = {
1266 			AIROHA_FUNC_MUX,
1267 			REG_GPIO_SPI_CS1_MODE,
1268 			GPIO_PCM_SPI_CS4_MODE_MASK,
1269 			GPIO_PCM_SPI_CS4_MODE_MASK
1270 		},
1271 		.regmap_size = 1,
1272 	},
1273 };
1274 
1275 static const struct airoha_pinctrl_func_group an7583_pcm_spi_func_group[] = {
1276 	{
1277 		.name = "pcm_spi",
1278 		.regmap[0] = {
1279 			AIROHA_FUNC_MUX,
1280 			REG_GPIO_SPI_CS1_MODE,
1281 			GPIO_PCM_SPI_MODE_MASK,
1282 			GPIO_PCM_SPI_MODE_MASK
1283 		},
1284 		.regmap_size = 1,
1285 	}, {
1286 		.name = "pcm_spi_int",
1287 		.regmap[0] = {
1288 			AIROHA_FUNC_MUX,
1289 			REG_GPIO_SPI_CS1_MODE,
1290 			GPIO_PCM_INT_MODE_MASK,
1291 			GPIO_PCM_INT_MODE_MASK
1292 		},
1293 		.regmap_size = 1,
1294 	}, {
1295 		.name = "pcm_spi_rst",
1296 		.regmap[0] = {
1297 			AIROHA_FUNC_MUX,
1298 			REG_GPIO_SPI_CS1_MODE,
1299 			GPIO_PCM_RESET_MODE_MASK,
1300 			GPIO_PCM_RESET_MODE_MASK
1301 		},
1302 		.regmap_size = 1,
1303 	}, {
1304 		.name = "pcm_spi_cs1",
1305 		.regmap[0] = {
1306 			AIROHA_FUNC_MUX,
1307 			REG_GPIO_SPI_CS1_MODE,
1308 			GPIO_PCM_SPI_CS1_MODE_MASK,
1309 			GPIO_PCM_SPI_CS1_MODE_MASK
1310 		},
1311 		.regmap_size = 1,
1312 	}, {
1313 		.name = "pcm_spi_cs2",
1314 		.regmap[0] = {
1315 			AIROHA_FUNC_MUX,
1316 			REG_GPIO_SPI_CS1_MODE,
1317 			AN7583_GPIO_PCM_SPI_CS2_MODE_MASK,
1318 			AN7583_GPIO_PCM_SPI_CS2_MODE_MASK
1319 		},
1320 		.regmap_size = 1,
1321 	}, {
1322 		.name = "pcm_spi_cs3",
1323 		.regmap[0] = {
1324 			AIROHA_FUNC_MUX,
1325 			REG_GPIO_SPI_CS1_MODE,
1326 			GPIO_PCM_SPI_CS3_MODE_MASK,
1327 			GPIO_PCM_SPI_CS3_MODE_MASK
1328 		},
1329 		.regmap_size = 1,
1330 	}, {
1331 		.name = "pcm_spi_cs4",
1332 		.regmap[0] = {
1333 			AIROHA_FUNC_MUX,
1334 			REG_GPIO_SPI_CS1_MODE,
1335 			GPIO_PCM_SPI_CS4_MODE_MASK,
1336 			GPIO_PCM_SPI_CS4_MODE_MASK
1337 		},
1338 		.regmap_size = 1,
1339 	},
1340 };
1341 
1342 static const struct airoha_pinctrl_func_group i2s_func_group[] = {
1343 	{
1344 		.name = "i2s",
1345 		.regmap[0] = {
1346 			AIROHA_FUNC_MUX,
1347 			REG_GPIO_2ND_I2C_MODE,
1348 			GPIO_I2S_MODE_MASK,
1349 			GPIO_I2S_MODE_MASK
1350 		},
1351 		.regmap_size = 1,
1352 	},
1353 };
1354 
1355 static const struct airoha_pinctrl_func_group emmc_func_group[] = {
1356 	{
1357 		.name = "emmc",
1358 		.regmap[0] = {
1359 			AIROHA_FUNC_MUX,
1360 			REG_GPIO_PON_MODE,
1361 			GPIO_EMMC_MODE_MASK,
1362 			GPIO_EMMC_MODE_MASK
1363 		},
1364 		.regmap_size = 1,
1365 	},
1366 };
1367 
1368 static const struct airoha_pinctrl_func_group pnand_func_group[] = {
1369 	{
1370 		.name = "pnand",
1371 		.regmap[0] = {
1372 			AIROHA_FUNC_MUX,
1373 			REG_GPIO_PON_MODE,
1374 			GPIO_PARALLEL_NAND_MODE_MASK,
1375 			GPIO_PARALLEL_NAND_MODE_MASK
1376 		},
1377 		.regmap_size = 1,
1378 	},
1379 };
1380 
1381 static const struct airoha_pinctrl_func_group pcie_reset_func_group[] = {
1382 	{
1383 		.name = "pcie_reset0",
1384 		.regmap[0] = {
1385 			AIROHA_FUNC_MUX,
1386 			REG_GPIO_PON_MODE,
1387 			GPIO_PCIE_RESET0_MASK,
1388 			GPIO_PCIE_RESET0_MASK
1389 		},
1390 		.regmap_size = 1,
1391 	}, {
1392 		.name = "pcie_reset1",
1393 		.regmap[0] = {
1394 			AIROHA_FUNC_MUX,
1395 			REG_GPIO_PON_MODE,
1396 			GPIO_PCIE_RESET1_MASK,
1397 			GPIO_PCIE_RESET1_MASK
1398 		},
1399 		.regmap_size = 1,
1400 	}, {
1401 		.name = "pcie_reset2",
1402 		.regmap[0] = {
1403 			AIROHA_FUNC_MUX,
1404 			REG_GPIO_PON_MODE,
1405 			GPIO_PCIE_RESET2_MASK,
1406 			GPIO_PCIE_RESET2_MASK
1407 		},
1408 		.regmap_size = 1,
1409 	},
1410 };
1411 
1412 static const struct airoha_pinctrl_func_group an7583_pcie_reset_func_group[] = {
1413 	{
1414 		.name = "pcie_reset0",
1415 		.regmap[0] = {
1416 			AIROHA_FUNC_MUX,
1417 			REG_GPIO_PON_MODE,
1418 			GPIO_PCIE_RESET0_MASK,
1419 			GPIO_PCIE_RESET0_MASK
1420 		},
1421 		.regmap_size = 1,
1422 	}, {
1423 		.name = "pcie_reset1",
1424 		.regmap[0] = {
1425 			AIROHA_FUNC_MUX,
1426 			REG_GPIO_PON_MODE,
1427 			GPIO_PCIE_RESET1_MASK,
1428 			GPIO_PCIE_RESET1_MASK
1429 		},
1430 		.regmap_size = 1,
1431 	},
1432 };
1433 
1434 /* PWM */
1435 #define AIROHA_PINCTRL_PWM(gpio, mux_val)		\
1436 	{						\
1437 		.name = (gpio),				\
1438 		.regmap[0] = {				\
1439 			AIROHA_FUNC_PWM_MUX,		\
1440 			REG_GPIO_FLASH_MODE_CFG,	\
1441 			(mux_val),			\
1442 			(mux_val)			\
1443 		},					\
1444 		.regmap_size = 1,			\
1445 	}						\
1446 
1447 #define AIROHA_PINCTRL_PWM_EXT(gpio, mux_val)		\
1448 	{						\
1449 		.name = (gpio),				\
1450 		.regmap[0] = {				\
1451 			AIROHA_FUNC_PWM_EXT_MUX,	\
1452 			REG_GPIO_FLASH_MODE_CFG_EXT,	\
1453 			(mux_val),			\
1454 			(mux_val)			\
1455 		},					\
1456 		.regmap_size = 1,			\
1457 	}						\
1458 
1459 static const struct airoha_pinctrl_func_group pwm_func_group[] = {
1460 	AIROHA_PINCTRL_PWM("gpio0", GPIO0_FLASH_MODE_CFG),
1461 	AIROHA_PINCTRL_PWM("gpio1", GPIO1_FLASH_MODE_CFG),
1462 	AIROHA_PINCTRL_PWM("gpio2", GPIO2_FLASH_MODE_CFG),
1463 	AIROHA_PINCTRL_PWM("gpio3", GPIO3_FLASH_MODE_CFG),
1464 	AIROHA_PINCTRL_PWM("gpio4", GPIO4_FLASH_MODE_CFG),
1465 	AIROHA_PINCTRL_PWM("gpio5", GPIO5_FLASH_MODE_CFG),
1466 	AIROHA_PINCTRL_PWM("gpio6", GPIO6_FLASH_MODE_CFG),
1467 	AIROHA_PINCTRL_PWM("gpio7", GPIO7_FLASH_MODE_CFG),
1468 	AIROHA_PINCTRL_PWM("gpio8", GPIO8_FLASH_MODE_CFG),
1469 	AIROHA_PINCTRL_PWM("gpio9", GPIO9_FLASH_MODE_CFG),
1470 	AIROHA_PINCTRL_PWM("gpio10", GPIO10_FLASH_MODE_CFG),
1471 	AIROHA_PINCTRL_PWM("gpio11", GPIO11_FLASH_MODE_CFG),
1472 	AIROHA_PINCTRL_PWM("gpio12", GPIO12_FLASH_MODE_CFG),
1473 	AIROHA_PINCTRL_PWM("gpio13", GPIO13_FLASH_MODE_CFG),
1474 	AIROHA_PINCTRL_PWM("gpio14", GPIO14_FLASH_MODE_CFG),
1475 	AIROHA_PINCTRL_PWM("gpio15", GPIO15_FLASH_MODE_CFG),
1476 	AIROHA_PINCTRL_PWM_EXT("gpio16", GPIO16_FLASH_MODE_CFG),
1477 	AIROHA_PINCTRL_PWM_EXT("gpio17", GPIO17_FLASH_MODE_CFG),
1478 	AIROHA_PINCTRL_PWM_EXT("gpio18", GPIO18_FLASH_MODE_CFG),
1479 	AIROHA_PINCTRL_PWM_EXT("gpio19", GPIO19_FLASH_MODE_CFG),
1480 	AIROHA_PINCTRL_PWM_EXT("gpio20", GPIO20_FLASH_MODE_CFG),
1481 	AIROHA_PINCTRL_PWM_EXT("gpio21", GPIO21_FLASH_MODE_CFG),
1482 	AIROHA_PINCTRL_PWM_EXT("gpio22", GPIO22_FLASH_MODE_CFG),
1483 	AIROHA_PINCTRL_PWM_EXT("gpio23", GPIO23_FLASH_MODE_CFG),
1484 	AIROHA_PINCTRL_PWM_EXT("gpio24", GPIO24_FLASH_MODE_CFG),
1485 	AIROHA_PINCTRL_PWM_EXT("gpio25", GPIO25_FLASH_MODE_CFG),
1486 	AIROHA_PINCTRL_PWM_EXT("gpio26", GPIO26_FLASH_MODE_CFG),
1487 	AIROHA_PINCTRL_PWM_EXT("gpio27", GPIO27_FLASH_MODE_CFG),
1488 	AIROHA_PINCTRL_PWM_EXT("gpio28", GPIO28_FLASH_MODE_CFG),
1489 	AIROHA_PINCTRL_PWM_EXT("gpio29", GPIO29_FLASH_MODE_CFG),
1490 	AIROHA_PINCTRL_PWM_EXT("gpio30", GPIO30_FLASH_MODE_CFG),
1491 	AIROHA_PINCTRL_PWM_EXT("gpio31", GPIO31_FLASH_MODE_CFG),
1492 	AIROHA_PINCTRL_PWM_EXT("gpio36", GPIO36_FLASH_MODE_CFG),
1493 	AIROHA_PINCTRL_PWM_EXT("gpio37", GPIO37_FLASH_MODE_CFG),
1494 	AIROHA_PINCTRL_PWM_EXT("gpio38", GPIO38_FLASH_MODE_CFG),
1495 	AIROHA_PINCTRL_PWM_EXT("gpio39", GPIO39_FLASH_MODE_CFG),
1496 	AIROHA_PINCTRL_PWM_EXT("gpio40", GPIO40_FLASH_MODE_CFG),
1497 	AIROHA_PINCTRL_PWM_EXT("gpio41", GPIO41_FLASH_MODE_CFG),
1498 	AIROHA_PINCTRL_PWM_EXT("gpio42", GPIO42_FLASH_MODE_CFG),
1499 	AIROHA_PINCTRL_PWM_EXT("gpio43", GPIO43_FLASH_MODE_CFG),
1500 	AIROHA_PINCTRL_PWM_EXT("gpio44", GPIO44_FLASH_MODE_CFG),
1501 	AIROHA_PINCTRL_PWM_EXT("gpio45", GPIO45_FLASH_MODE_CFG),
1502 	AIROHA_PINCTRL_PWM_EXT("gpio46", GPIO46_FLASH_MODE_CFG),
1503 	AIROHA_PINCTRL_PWM_EXT("gpio47", GPIO47_FLASH_MODE_CFG),
1504 };
1505 
1506 #define AIROHA_PINCTRL_PHY_LED0(gpio, mux_val, map_mask, map_val)	\
1507 	{								\
1508 		.name = (gpio),						\
1509 		.regmap[0] = {						\
1510 			AIROHA_FUNC_MUX,				\
1511 			REG_GPIO_2ND_I2C_MODE,				\
1512 			(mux_val),					\
1513 			(mux_val),					\
1514 		},							\
1515 		.regmap[1] = {						\
1516 			AIROHA_FUNC_MUX,				\
1517 			REG_LAN_LED0_MAPPING,				\
1518 			(map_mask),					\
1519 			(map_val),					\
1520 		},							\
1521 		.regmap_size = 2,					\
1522 	}
1523 
1524 #define AIROHA_PINCTRL_PHY_LED1(gpio, mux_val, map_mask, map_val)	\
1525 	{								\
1526 		.name = (gpio),						\
1527 		.regmap[0] = {						\
1528 			AIROHA_FUNC_MUX,				\
1529 			REG_GPIO_2ND_I2C_MODE,				\
1530 			(mux_val),					\
1531 			(mux_val),					\
1532 		},							\
1533 		.regmap[1] = {						\
1534 			AIROHA_FUNC_MUX,				\
1535 			REG_LAN_LED1_MAPPING,				\
1536 			(map_mask),					\
1537 			(map_val),					\
1538 		},							\
1539 		.regmap_size = 2,					\
1540 	}
1541 
1542 static const struct airoha_pinctrl_func_group phy1_led0_func_group[] = {
1543 	AIROHA_PINCTRL_PHY_LED0("gpio33", GPIO_LAN0_LED0_MODE_MASK,
1544 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(0)),
1545 	AIROHA_PINCTRL_PHY_LED0("gpio34", GPIO_LAN1_LED0_MODE_MASK,
1546 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(0)),
1547 	AIROHA_PINCTRL_PHY_LED0("gpio35", GPIO_LAN2_LED0_MODE_MASK,
1548 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(0)),
1549 	AIROHA_PINCTRL_PHY_LED0("gpio42", GPIO_LAN3_LED0_MODE_MASK,
1550 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(0)),
1551 };
1552 
1553 static const struct airoha_pinctrl_func_group phy2_led0_func_group[] = {
1554 	AIROHA_PINCTRL_PHY_LED0("gpio33", GPIO_LAN0_LED0_MODE_MASK,
1555 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(1)),
1556 	AIROHA_PINCTRL_PHY_LED0("gpio34", GPIO_LAN1_LED0_MODE_MASK,
1557 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(1)),
1558 	AIROHA_PINCTRL_PHY_LED0("gpio35", GPIO_LAN2_LED0_MODE_MASK,
1559 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(1)),
1560 	AIROHA_PINCTRL_PHY_LED0("gpio42", GPIO_LAN3_LED0_MODE_MASK,
1561 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(1)),
1562 };
1563 
1564 static const struct airoha_pinctrl_func_group phy3_led0_func_group[] = {
1565 	AIROHA_PINCTRL_PHY_LED0("gpio33", GPIO_LAN0_LED0_MODE_MASK,
1566 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)),
1567 	AIROHA_PINCTRL_PHY_LED0("gpio34", GPIO_LAN1_LED0_MODE_MASK,
1568 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)),
1569 	AIROHA_PINCTRL_PHY_LED0("gpio35", GPIO_LAN2_LED0_MODE_MASK,
1570 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)),
1571 	AIROHA_PINCTRL_PHY_LED0("gpio42", GPIO_LAN3_LED0_MODE_MASK,
1572 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)),
1573 };
1574 
1575 static const struct airoha_pinctrl_func_group phy4_led0_func_group[] = {
1576 	AIROHA_PINCTRL_PHY_LED0("gpio33", GPIO_LAN0_LED0_MODE_MASK,
1577 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(3)),
1578 	AIROHA_PINCTRL_PHY_LED0("gpio34", GPIO_LAN1_LED0_MODE_MASK,
1579 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(3)),
1580 	AIROHA_PINCTRL_PHY_LED0("gpio35", GPIO_LAN2_LED0_MODE_MASK,
1581 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(3)),
1582 	AIROHA_PINCTRL_PHY_LED0("gpio42", GPIO_LAN3_LED0_MODE_MASK,
1583 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(3)),
1584 };
1585 
1586 static const struct airoha_pinctrl_func_group phy1_led1_func_group[] = {
1587 	AIROHA_PINCTRL_PHY_LED1("gpio43", GPIO_LAN0_LED1_MODE_MASK,
1588 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(0)),
1589 	AIROHA_PINCTRL_PHY_LED1("gpio44", GPIO_LAN1_LED1_MODE_MASK,
1590 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(0)),
1591 	AIROHA_PINCTRL_PHY_LED1("gpio45", GPIO_LAN2_LED1_MODE_MASK,
1592 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(0)),
1593 	AIROHA_PINCTRL_PHY_LED1("gpio46", GPIO_LAN3_LED1_MODE_MASK,
1594 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(0)),
1595 };
1596 
1597 static const struct airoha_pinctrl_func_group phy2_led1_func_group[] = {
1598 	AIROHA_PINCTRL_PHY_LED1("gpio43", GPIO_LAN0_LED1_MODE_MASK,
1599 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(1)),
1600 	AIROHA_PINCTRL_PHY_LED1("gpio44", GPIO_LAN1_LED1_MODE_MASK,
1601 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(1)),
1602 	AIROHA_PINCTRL_PHY_LED1("gpio45", GPIO_LAN2_LED1_MODE_MASK,
1603 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(1)),
1604 	AIROHA_PINCTRL_PHY_LED1("gpio46", GPIO_LAN3_LED1_MODE_MASK,
1605 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(1)),
1606 };
1607 
1608 static const struct airoha_pinctrl_func_group phy3_led1_func_group[] = {
1609 	AIROHA_PINCTRL_PHY_LED1("gpio43", GPIO_LAN0_LED1_MODE_MASK,
1610 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)),
1611 	AIROHA_PINCTRL_PHY_LED1("gpio44", GPIO_LAN1_LED1_MODE_MASK,
1612 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)),
1613 	AIROHA_PINCTRL_PHY_LED1("gpio45", GPIO_LAN2_LED1_MODE_MASK,
1614 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)),
1615 	AIROHA_PINCTRL_PHY_LED1("gpio46", GPIO_LAN3_LED1_MODE_MASK,
1616 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)),
1617 };
1618 
1619 static const struct airoha_pinctrl_func_group phy4_led1_func_group[] = {
1620 	AIROHA_PINCTRL_PHY_LED1("gpio43", GPIO_LAN0_LED1_MODE_MASK,
1621 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)),
1622 	AIROHA_PINCTRL_PHY_LED1("gpio44", GPIO_LAN1_LED1_MODE_MASK,
1623 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)),
1624 	AIROHA_PINCTRL_PHY_LED1("gpio45", GPIO_LAN2_LED1_MODE_MASK,
1625 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)),
1626 	AIROHA_PINCTRL_PHY_LED1("gpio46", GPIO_LAN3_LED1_MODE_MASK,
1627 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)),
1628 };
1629 
1630 static const struct airoha_pinctrl_func_group an7583_phy1_led0_func_group[] = {
1631 	AIROHA_PINCTRL_PHY_LED0("gpio1", GPIO_LAN0_LED0_MODE_MASK,
1632 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(0)),
1633 	AIROHA_PINCTRL_PHY_LED0("gpio2", GPIO_LAN1_LED0_MODE_MASK,
1634 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(0)),
1635 	AIROHA_PINCTRL_PHY_LED0("gpio3", GPIO_LAN2_LED0_MODE_MASK,
1636 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(0)),
1637 	AIROHA_PINCTRL_PHY_LED0("gpio4", GPIO_LAN3_LED0_MODE_MASK,
1638 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(0)),
1639 };
1640 
1641 static const struct airoha_pinctrl_func_group an7583_phy2_led0_func_group[] = {
1642 	AIROHA_PINCTRL_PHY_LED0("gpio1", GPIO_LAN0_LED0_MODE_MASK,
1643 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(1)),
1644 	AIROHA_PINCTRL_PHY_LED0("gpio2", GPIO_LAN1_LED0_MODE_MASK,
1645 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(1)),
1646 	AIROHA_PINCTRL_PHY_LED0("gpio3", GPIO_LAN2_LED0_MODE_MASK,
1647 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(1)),
1648 	AIROHA_PINCTRL_PHY_LED0("gpio4", GPIO_LAN3_LED0_MODE_MASK,
1649 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(1)),
1650 };
1651 
1652 static const struct airoha_pinctrl_func_group an7583_phy3_led0_func_group[] = {
1653 	AIROHA_PINCTRL_PHY_LED0("gpio1", GPIO_LAN0_LED0_MODE_MASK,
1654 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)),
1655 	AIROHA_PINCTRL_PHY_LED0("gpio2", GPIO_LAN1_LED0_MODE_MASK,
1656 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)),
1657 	AIROHA_PINCTRL_PHY_LED0("gpio3", GPIO_LAN2_LED0_MODE_MASK,
1658 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)),
1659 	AIROHA_PINCTRL_PHY_LED0("gpio4", GPIO_LAN3_LED0_MODE_MASK,
1660 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)),
1661 };
1662 
1663 static const struct airoha_pinctrl_func_group an7583_phy4_led0_func_group[] = {
1664 	AIROHA_PINCTRL_PHY_LED0("gpio1", GPIO_LAN0_LED0_MODE_MASK,
1665 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(3)),
1666 	AIROHA_PINCTRL_PHY_LED0("gpio2", GPIO_LAN1_LED0_MODE_MASK,
1667 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(3)),
1668 	AIROHA_PINCTRL_PHY_LED0("gpio3", GPIO_LAN2_LED0_MODE_MASK,
1669 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(3)),
1670 	AIROHA_PINCTRL_PHY_LED0("gpio4", GPIO_LAN3_LED0_MODE_MASK,
1671 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(3)),
1672 };
1673 
1674 static const struct airoha_pinctrl_func_group an7583_phy1_led1_func_group[] = {
1675 	AIROHA_PINCTRL_PHY_LED1("gpio8", GPIO_LAN0_LED1_MODE_MASK,
1676 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(0)),
1677 	AIROHA_PINCTRL_PHY_LED1("gpio9", GPIO_LAN1_LED1_MODE_MASK,
1678 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(0)),
1679 	AIROHA_PINCTRL_PHY_LED1("gpio10", GPIO_LAN2_LED1_MODE_MASK,
1680 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(0)),
1681 	AIROHA_PINCTRL_PHY_LED1("gpio1", GPIO_LAN3_LED1_MODE_MASK,
1682 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(0)),
1683 };
1684 
1685 static const struct airoha_pinctrl_func_group an7583_phy2_led1_func_group[] = {
1686 	AIROHA_PINCTRL_PHY_LED1("gpio8", GPIO_LAN0_LED1_MODE_MASK,
1687 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(1)),
1688 	AIROHA_PINCTRL_PHY_LED1("gpio9", GPIO_LAN1_LED1_MODE_MASK,
1689 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(1)),
1690 	AIROHA_PINCTRL_PHY_LED1("gpio10", GPIO_LAN2_LED1_MODE_MASK,
1691 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(1)),
1692 	AIROHA_PINCTRL_PHY_LED1("gpio11", GPIO_LAN3_LED1_MODE_MASK,
1693 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(1)),
1694 };
1695 
1696 static const struct airoha_pinctrl_func_group an7583_phy3_led1_func_group[] = {
1697 	AIROHA_PINCTRL_PHY_LED1("gpio8", GPIO_LAN0_LED1_MODE_MASK,
1698 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)),
1699 	AIROHA_PINCTRL_PHY_LED1("gpio9", GPIO_LAN1_LED1_MODE_MASK,
1700 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)),
1701 	AIROHA_PINCTRL_PHY_LED1("gpio10", GPIO_LAN2_LED1_MODE_MASK,
1702 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)),
1703 	AIROHA_PINCTRL_PHY_LED1("gpio11", GPIO_LAN3_LED1_MODE_MASK,
1704 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)),
1705 };
1706 
1707 static const struct airoha_pinctrl_func_group an7583_phy4_led1_func_group[] = {
1708 	AIROHA_PINCTRL_PHY_LED1("gpio8", GPIO_LAN0_LED1_MODE_MASK,
1709 				LAN0_LED_MAPPING_MASK, LAN0_PHY_LED_MAP(2)),
1710 	AIROHA_PINCTRL_PHY_LED1("gpio9", GPIO_LAN1_LED1_MODE_MASK,
1711 				LAN1_LED_MAPPING_MASK, LAN1_PHY_LED_MAP(2)),
1712 	AIROHA_PINCTRL_PHY_LED1("gpio10", GPIO_LAN2_LED1_MODE_MASK,
1713 				LAN2_LED_MAPPING_MASK, LAN2_PHY_LED_MAP(2)),
1714 	AIROHA_PINCTRL_PHY_LED1("gpio11", GPIO_LAN3_LED1_MODE_MASK,
1715 				LAN3_LED_MAPPING_MASK, LAN3_PHY_LED_MAP(2)),
1716 };
1717 
1718 static const struct airoha_pinctrl_func en7581_pinctrl_funcs[] = {
1719 	PINCTRL_FUNC_DESC("pon", pon),
1720 	PINCTRL_FUNC_DESC("tod_1pps", tod_1pps),
1721 	PINCTRL_FUNC_DESC("sipo", sipo),
1722 	PINCTRL_FUNC_DESC("mdio", mdio),
1723 	PINCTRL_FUNC_DESC("uart", uart),
1724 	PINCTRL_FUNC_DESC("i2c", i2c),
1725 	PINCTRL_FUNC_DESC("jtag", jtag),
1726 	PINCTRL_FUNC_DESC("pcm", pcm),
1727 	PINCTRL_FUNC_DESC("spi", spi),
1728 	PINCTRL_FUNC_DESC("pcm_spi", pcm_spi),
1729 	PINCTRL_FUNC_DESC("i2s", i2s),
1730 	PINCTRL_FUNC_DESC("emmc", emmc),
1731 	PINCTRL_FUNC_DESC("pnand", pnand),
1732 	PINCTRL_FUNC_DESC("pcie_reset", pcie_reset),
1733 	PINCTRL_FUNC_DESC("pwm", pwm),
1734 	PINCTRL_FUNC_DESC("phy1_led0", phy1_led0),
1735 	PINCTRL_FUNC_DESC("phy2_led0", phy2_led0),
1736 	PINCTRL_FUNC_DESC("phy3_led0", phy3_led0),
1737 	PINCTRL_FUNC_DESC("phy4_led0", phy4_led0),
1738 	PINCTRL_FUNC_DESC("phy1_led1", phy1_led1),
1739 	PINCTRL_FUNC_DESC("phy2_led1", phy2_led1),
1740 	PINCTRL_FUNC_DESC("phy3_led1", phy3_led1),
1741 	PINCTRL_FUNC_DESC("phy4_led1", phy4_led1),
1742 };
1743 
1744 static const struct airoha_pinctrl_func an7583_pinctrl_funcs[] = {
1745 	PINCTRL_FUNC_DESC("pon", pon),
1746 	PINCTRL_FUNC_DESC("tod_1pps", tod_1pps),
1747 	PINCTRL_FUNC_DESC("sipo", sipo),
1748 	PINCTRL_FUNC_DESC("mdio", an7583_mdio),
1749 	PINCTRL_FUNC_DESC("uart", uart),
1750 	PINCTRL_FUNC_DESC("i2c", i2c),
1751 	PINCTRL_FUNC_DESC("jtag", jtag),
1752 	PINCTRL_FUNC_DESC("pcm", pcm),
1753 	PINCTRL_FUNC_DESC("spi", spi),
1754 	PINCTRL_FUNC_DESC("pcm_spi", an7583_pcm_spi),
1755 	PINCTRL_FUNC_DESC("emmc", emmc),
1756 	PINCTRL_FUNC_DESC("pnand", pnand),
1757 	PINCTRL_FUNC_DESC("pcie_reset", an7583_pcie_reset),
1758 	PINCTRL_FUNC_DESC("pwm", pwm),
1759 	PINCTRL_FUNC_DESC("phy1_led0", an7583_phy1_led0),
1760 	PINCTRL_FUNC_DESC("phy2_led0", an7583_phy2_led0),
1761 	PINCTRL_FUNC_DESC("phy3_led0", an7583_phy3_led0),
1762 	PINCTRL_FUNC_DESC("phy4_led0", an7583_phy4_led0),
1763 	PINCTRL_FUNC_DESC("phy1_led1", an7583_phy1_led1),
1764 	PINCTRL_FUNC_DESC("phy2_led1", an7583_phy2_led1),
1765 	PINCTRL_FUNC_DESC("phy3_led1", an7583_phy3_led1),
1766 	PINCTRL_FUNC_DESC("phy4_led1", an7583_phy4_led1),
1767 };
1768 
1769 static const struct airoha_pinctrl_conf en7581_pinctrl_pullup_conf[] = {
1770 	PINCTRL_CONF_DESC(0, REG_I2C_SDA_PU, UART1_TXD_PU_MASK),
1771 	PINCTRL_CONF_DESC(1, REG_I2C_SDA_PU, UART1_RXD_PU_MASK),
1772 	PINCTRL_CONF_DESC(2, REG_I2C_SDA_PU, I2C_SDA_PU_MASK),
1773 	PINCTRL_CONF_DESC(3, REG_I2C_SDA_PU, I2C_SCL_PU_MASK),
1774 	PINCTRL_CONF_DESC(4, REG_I2C_SDA_PU, SPI_CS0_PU_MASK),
1775 	PINCTRL_CONF_DESC(5, REG_I2C_SDA_PU, SPI_CLK_PU_MASK),
1776 	PINCTRL_CONF_DESC(6, REG_I2C_SDA_PU, SPI_MOSI_PU_MASK),
1777 	PINCTRL_CONF_DESC(7, REG_I2C_SDA_PU, SPI_MISO_PU_MASK),
1778 	PINCTRL_CONF_DESC(13, REG_GPIO_L_PU, BIT(0)),
1779 	PINCTRL_CONF_DESC(14, REG_GPIO_L_PU, BIT(1)),
1780 	PINCTRL_CONF_DESC(15, REG_GPIO_L_PU, BIT(2)),
1781 	PINCTRL_CONF_DESC(16, REG_GPIO_L_PU, BIT(3)),
1782 	PINCTRL_CONF_DESC(17, REG_GPIO_L_PU, BIT(4)),
1783 	PINCTRL_CONF_DESC(18, REG_GPIO_L_PU, BIT(5)),
1784 	PINCTRL_CONF_DESC(19, REG_GPIO_L_PU, BIT(6)),
1785 	PINCTRL_CONF_DESC(20, REG_GPIO_L_PU, BIT(7)),
1786 	PINCTRL_CONF_DESC(21, REG_GPIO_L_PU, BIT(8)),
1787 	PINCTRL_CONF_DESC(22, REG_GPIO_L_PU, BIT(9)),
1788 	PINCTRL_CONF_DESC(23, REG_GPIO_L_PU, BIT(10)),
1789 	PINCTRL_CONF_DESC(24, REG_GPIO_L_PU, BIT(11)),
1790 	PINCTRL_CONF_DESC(25, REG_GPIO_L_PU, BIT(12)),
1791 	PINCTRL_CONF_DESC(26, REG_GPIO_L_PU, BIT(13)),
1792 	PINCTRL_CONF_DESC(27, REG_GPIO_L_PU, BIT(14)),
1793 	PINCTRL_CONF_DESC(28, REG_GPIO_L_PU, BIT(15)),
1794 	PINCTRL_CONF_DESC(29, REG_GPIO_L_PU, BIT(16)),
1795 	PINCTRL_CONF_DESC(30, REG_GPIO_L_PU, BIT(17)),
1796 	PINCTRL_CONF_DESC(31, REG_GPIO_L_PU, BIT(18)),
1797 	PINCTRL_CONF_DESC(32, REG_GPIO_L_PU, BIT(18)),
1798 	PINCTRL_CONF_DESC(33, REG_GPIO_L_PU, BIT(20)),
1799 	PINCTRL_CONF_DESC(34, REG_GPIO_L_PU, BIT(21)),
1800 	PINCTRL_CONF_DESC(35, REG_GPIO_L_PU, BIT(22)),
1801 	PINCTRL_CONF_DESC(36, REG_GPIO_L_PU, BIT(23)),
1802 	PINCTRL_CONF_DESC(37, REG_GPIO_L_PU, BIT(24)),
1803 	PINCTRL_CONF_DESC(38, REG_GPIO_L_PU, BIT(25)),
1804 	PINCTRL_CONF_DESC(39, REG_GPIO_L_PU, BIT(26)),
1805 	PINCTRL_CONF_DESC(40, REG_GPIO_L_PU, BIT(27)),
1806 	PINCTRL_CONF_DESC(41, REG_GPIO_L_PU, BIT(28)),
1807 	PINCTRL_CONF_DESC(42, REG_GPIO_L_PU, BIT(29)),
1808 	PINCTRL_CONF_DESC(43, REG_GPIO_L_PU, BIT(30)),
1809 	PINCTRL_CONF_DESC(44, REG_GPIO_L_PU, BIT(31)),
1810 	PINCTRL_CONF_DESC(45, REG_GPIO_H_PU, BIT(0)),
1811 	PINCTRL_CONF_DESC(46, REG_GPIO_H_PU, BIT(1)),
1812 	PINCTRL_CONF_DESC(47, REG_GPIO_H_PU, BIT(2)),
1813 	PINCTRL_CONF_DESC(48, REG_GPIO_H_PU, BIT(3)),
1814 	PINCTRL_CONF_DESC(49, REG_GPIO_H_PU, BIT(4)),
1815 	PINCTRL_CONF_DESC(50, REG_GPIO_H_PU, BIT(5)),
1816 	PINCTRL_CONF_DESC(51, REG_GPIO_H_PU, BIT(6)),
1817 	PINCTRL_CONF_DESC(52, REG_GPIO_H_PU, BIT(7)),
1818 	PINCTRL_CONF_DESC(53, REG_GPIO_H_PU, BIT(8)),
1819 	PINCTRL_CONF_DESC(54, REG_GPIO_H_PU, BIT(9)),
1820 	PINCTRL_CONF_DESC(55, REG_GPIO_H_PU, BIT(10)),
1821 	PINCTRL_CONF_DESC(56, REG_GPIO_H_PU, BIT(11)),
1822 	PINCTRL_CONF_DESC(57, REG_GPIO_H_PU, BIT(12)),
1823 	PINCTRL_CONF_DESC(58, REG_GPIO_H_PU, BIT(13)),
1824 	PINCTRL_CONF_DESC(59, REG_GPIO_H_PU, BIT(14)),
1825 	PINCTRL_CONF_DESC(61, REG_I2C_SDA_PU, PCIE0_RESET_PU_MASK),
1826 	PINCTRL_CONF_DESC(62, REG_I2C_SDA_PU, PCIE1_RESET_PU_MASK),
1827 	PINCTRL_CONF_DESC(63, REG_I2C_SDA_PU, PCIE2_RESET_PU_MASK),
1828 };
1829 
1830 static const struct airoha_pinctrl_conf an7583_pinctrl_pullup_conf[] = {
1831 	PINCTRL_CONF_DESC(2, REG_GPIO_L_PU, BIT(0)),
1832 	PINCTRL_CONF_DESC(3, REG_GPIO_L_PU, BIT(1)),
1833 	PINCTRL_CONF_DESC(4, REG_GPIO_L_PU, BIT(2)),
1834 	PINCTRL_CONF_DESC(5, REG_GPIO_L_PU, BIT(3)),
1835 	PINCTRL_CONF_DESC(6, REG_GPIO_L_PU, BIT(4)),
1836 	PINCTRL_CONF_DESC(7, REG_GPIO_L_PU, BIT(5)),
1837 	PINCTRL_CONF_DESC(8, REG_GPIO_L_PU, BIT(6)),
1838 	PINCTRL_CONF_DESC(9, REG_GPIO_L_PU, BIT(7)),
1839 	PINCTRL_CONF_DESC(10, REG_GPIO_L_PU, BIT(8)),
1840 	PINCTRL_CONF_DESC(11, REG_GPIO_L_PU, BIT(9)),
1841 	PINCTRL_CONF_DESC(12, REG_GPIO_L_PU, BIT(10)),
1842 	PINCTRL_CONF_DESC(13, REG_GPIO_L_PU, BIT(11)),
1843 	PINCTRL_CONF_DESC(14, REG_GPIO_L_PU, BIT(12)),
1844 	PINCTRL_CONF_DESC(15, REG_GPIO_L_PU, BIT(13)),
1845 	PINCTRL_CONF_DESC(16, REG_GPIO_L_PU, BIT(14)),
1846 	PINCTRL_CONF_DESC(17, REG_GPIO_L_PU, BIT(15)),
1847 	PINCTRL_CONF_DESC(18, REG_GPIO_L_PU, BIT(16)),
1848 	PINCTRL_CONF_DESC(19, REG_GPIO_L_PU, BIT(17)),
1849 	PINCTRL_CONF_DESC(20, REG_GPIO_L_PU, BIT(18)),
1850 	PINCTRL_CONF_DESC(21, REG_GPIO_L_PU, BIT(18)),
1851 	PINCTRL_CONF_DESC(22, REG_GPIO_L_PU, BIT(20)),
1852 	PINCTRL_CONF_DESC(23, REG_GPIO_L_PU, BIT(21)),
1853 	PINCTRL_CONF_DESC(24, REG_GPIO_L_PU, BIT(22)),
1854 	PINCTRL_CONF_DESC(25, REG_GPIO_L_PU, BIT(23)),
1855 	PINCTRL_CONF_DESC(26, REG_GPIO_L_PU, BIT(24)),
1856 	PINCTRL_CONF_DESC(27, REG_GPIO_L_PU, BIT(25)),
1857 	PINCTRL_CONF_DESC(28, REG_GPIO_L_PU, BIT(26)),
1858 	PINCTRL_CONF_DESC(29, REG_GPIO_L_PU, BIT(27)),
1859 	PINCTRL_CONF_DESC(30, REG_GPIO_L_PU, BIT(28)),
1860 	PINCTRL_CONF_DESC(31, REG_GPIO_L_PU, BIT(29)),
1861 	PINCTRL_CONF_DESC(32, REG_GPIO_L_PU, BIT(30)),
1862 	PINCTRL_CONF_DESC(33, REG_GPIO_L_PU, BIT(31)),
1863 	PINCTRL_CONF_DESC(34, REG_GPIO_H_PU, BIT(0)),
1864 	PINCTRL_CONF_DESC(35, REG_GPIO_H_PU, BIT(1)),
1865 	PINCTRL_CONF_DESC(36, REG_GPIO_H_PU, BIT(2)),
1866 	PINCTRL_CONF_DESC(37, REG_GPIO_H_PU, BIT(3)),
1867 	PINCTRL_CONF_DESC(38, REG_GPIO_H_PU, BIT(4)),
1868 	PINCTRL_CONF_DESC(39, REG_GPIO_H_PU, BIT(5)),
1869 	PINCTRL_CONF_DESC(40, REG_GPIO_H_PU, BIT(6)),
1870 	PINCTRL_CONF_DESC(41, REG_I2C_SDA_PU, I2C_SCL_PU_MASK),
1871 	PINCTRL_CONF_DESC(42, REG_I2C_SDA_PU, I2C_SDA_PU_MASK),
1872 	PINCTRL_CONF_DESC(43, REG_I2C_SDA_PU, AN7583_I2C1_SCL_PU_MASK),
1873 	PINCTRL_CONF_DESC(44, REG_I2C_SDA_PU, AN7583_I2C1_SDA_PU_MASK),
1874 	PINCTRL_CONF_DESC(45, REG_I2C_SDA_PU, SPI_CLK_PU_MASK),
1875 	PINCTRL_CONF_DESC(46, REG_I2C_SDA_PU, SPI_CS0_PU_MASK),
1876 	PINCTRL_CONF_DESC(47, REG_I2C_SDA_PU, SPI_MOSI_PU_MASK),
1877 	PINCTRL_CONF_DESC(48, REG_I2C_SDA_PU, SPI_MISO_PU_MASK),
1878 	PINCTRL_CONF_DESC(49, REG_I2C_SDA_PU, UART1_TXD_PU_MASK),
1879 	PINCTRL_CONF_DESC(50, REG_I2C_SDA_PU, UART1_RXD_PU_MASK),
1880 	PINCTRL_CONF_DESC(51, REG_I2C_SDA_PU, PCIE0_RESET_PU_MASK),
1881 	PINCTRL_CONF_DESC(52, REG_I2C_SDA_PU, PCIE1_RESET_PU_MASK),
1882 	PINCTRL_CONF_DESC(53, REG_I2C_SDA_PU, AN7583_MDC_0_PU_MASK),
1883 	PINCTRL_CONF_DESC(54, REG_I2C_SDA_PU, AN7583_MDIO_0_PU_MASK),
1884 };
1885 
1886 static const struct airoha_pinctrl_conf en7581_pinctrl_pulldown_conf[] = {
1887 	PINCTRL_CONF_DESC(0, REG_I2C_SDA_PD, UART1_TXD_PD_MASK),
1888 	PINCTRL_CONF_DESC(1, REG_I2C_SDA_PD, UART1_RXD_PD_MASK),
1889 	PINCTRL_CONF_DESC(2, REG_I2C_SDA_PD, I2C_SDA_PD_MASK),
1890 	PINCTRL_CONF_DESC(3, REG_I2C_SDA_PD, I2C_SCL_PD_MASK),
1891 	PINCTRL_CONF_DESC(4, REG_I2C_SDA_PD, SPI_CS0_PD_MASK),
1892 	PINCTRL_CONF_DESC(5, REG_I2C_SDA_PD, SPI_CLK_PD_MASK),
1893 	PINCTRL_CONF_DESC(6, REG_I2C_SDA_PD, SPI_MOSI_PD_MASK),
1894 	PINCTRL_CONF_DESC(7, REG_I2C_SDA_PD, SPI_MISO_PD_MASK),
1895 	PINCTRL_CONF_DESC(13, REG_GPIO_L_PD, BIT(0)),
1896 	PINCTRL_CONF_DESC(14, REG_GPIO_L_PD, BIT(1)),
1897 	PINCTRL_CONF_DESC(15, REG_GPIO_L_PD, BIT(2)),
1898 	PINCTRL_CONF_DESC(16, REG_GPIO_L_PD, BIT(3)),
1899 	PINCTRL_CONF_DESC(17, REG_GPIO_L_PD, BIT(4)),
1900 	PINCTRL_CONF_DESC(18, REG_GPIO_L_PD, BIT(5)),
1901 	PINCTRL_CONF_DESC(19, REG_GPIO_L_PD, BIT(6)),
1902 	PINCTRL_CONF_DESC(20, REG_GPIO_L_PD, BIT(7)),
1903 	PINCTRL_CONF_DESC(21, REG_GPIO_L_PD, BIT(8)),
1904 	PINCTRL_CONF_DESC(22, REG_GPIO_L_PD, BIT(9)),
1905 	PINCTRL_CONF_DESC(23, REG_GPIO_L_PD, BIT(10)),
1906 	PINCTRL_CONF_DESC(24, REG_GPIO_L_PD, BIT(11)),
1907 	PINCTRL_CONF_DESC(25, REG_GPIO_L_PD, BIT(12)),
1908 	PINCTRL_CONF_DESC(26, REG_GPIO_L_PD, BIT(13)),
1909 	PINCTRL_CONF_DESC(27, REG_GPIO_L_PD, BIT(14)),
1910 	PINCTRL_CONF_DESC(28, REG_GPIO_L_PD, BIT(15)),
1911 	PINCTRL_CONF_DESC(29, REG_GPIO_L_PD, BIT(16)),
1912 	PINCTRL_CONF_DESC(30, REG_GPIO_L_PD, BIT(17)),
1913 	PINCTRL_CONF_DESC(31, REG_GPIO_L_PD, BIT(18)),
1914 	PINCTRL_CONF_DESC(32, REG_GPIO_L_PD, BIT(18)),
1915 	PINCTRL_CONF_DESC(33, REG_GPIO_L_PD, BIT(20)),
1916 	PINCTRL_CONF_DESC(34, REG_GPIO_L_PD, BIT(21)),
1917 	PINCTRL_CONF_DESC(35, REG_GPIO_L_PD, BIT(22)),
1918 	PINCTRL_CONF_DESC(36, REG_GPIO_L_PD, BIT(23)),
1919 	PINCTRL_CONF_DESC(37, REG_GPIO_L_PD, BIT(24)),
1920 	PINCTRL_CONF_DESC(38, REG_GPIO_L_PD, BIT(25)),
1921 	PINCTRL_CONF_DESC(39, REG_GPIO_L_PD, BIT(26)),
1922 	PINCTRL_CONF_DESC(40, REG_GPIO_L_PD, BIT(27)),
1923 	PINCTRL_CONF_DESC(41, REG_GPIO_L_PD, BIT(28)),
1924 	PINCTRL_CONF_DESC(42, REG_GPIO_L_PD, BIT(29)),
1925 	PINCTRL_CONF_DESC(43, REG_GPIO_L_PD, BIT(30)),
1926 	PINCTRL_CONF_DESC(44, REG_GPIO_L_PD, BIT(31)),
1927 	PINCTRL_CONF_DESC(45, REG_GPIO_H_PD, BIT(0)),
1928 	PINCTRL_CONF_DESC(46, REG_GPIO_H_PD, BIT(1)),
1929 	PINCTRL_CONF_DESC(47, REG_GPIO_H_PD, BIT(2)),
1930 	PINCTRL_CONF_DESC(48, REG_GPIO_H_PD, BIT(3)),
1931 	PINCTRL_CONF_DESC(49, REG_GPIO_H_PD, BIT(4)),
1932 	PINCTRL_CONF_DESC(50, REG_GPIO_H_PD, BIT(5)),
1933 	PINCTRL_CONF_DESC(51, REG_GPIO_H_PD, BIT(6)),
1934 	PINCTRL_CONF_DESC(52, REG_GPIO_H_PD, BIT(7)),
1935 	PINCTRL_CONF_DESC(53, REG_GPIO_H_PD, BIT(8)),
1936 	PINCTRL_CONF_DESC(54, REG_GPIO_H_PD, BIT(9)),
1937 	PINCTRL_CONF_DESC(55, REG_GPIO_H_PD, BIT(10)),
1938 	PINCTRL_CONF_DESC(56, REG_GPIO_H_PD, BIT(11)),
1939 	PINCTRL_CONF_DESC(57, REG_GPIO_H_PD, BIT(12)),
1940 	PINCTRL_CONF_DESC(58, REG_GPIO_H_PD, BIT(13)),
1941 	PINCTRL_CONF_DESC(59, REG_GPIO_H_PD, BIT(14)),
1942 	PINCTRL_CONF_DESC(61, REG_I2C_SDA_PD, PCIE0_RESET_PD_MASK),
1943 	PINCTRL_CONF_DESC(62, REG_I2C_SDA_PD, PCIE1_RESET_PD_MASK),
1944 	PINCTRL_CONF_DESC(63, REG_I2C_SDA_PD, PCIE2_RESET_PD_MASK),
1945 };
1946 
1947 static const struct airoha_pinctrl_conf an7583_pinctrl_pulldown_conf[] = {
1948 	PINCTRL_CONF_DESC(2, REG_GPIO_L_PD, BIT(0)),
1949 	PINCTRL_CONF_DESC(3, REG_GPIO_L_PD, BIT(1)),
1950 	PINCTRL_CONF_DESC(4, REG_GPIO_L_PD, BIT(2)),
1951 	PINCTRL_CONF_DESC(5, REG_GPIO_L_PD, BIT(3)),
1952 	PINCTRL_CONF_DESC(6, REG_GPIO_L_PD, BIT(4)),
1953 	PINCTRL_CONF_DESC(7, REG_GPIO_L_PD, BIT(5)),
1954 	PINCTRL_CONF_DESC(8, REG_GPIO_L_PD, BIT(6)),
1955 	PINCTRL_CONF_DESC(9, REG_GPIO_L_PD, BIT(7)),
1956 	PINCTRL_CONF_DESC(10, REG_GPIO_L_PD, BIT(8)),
1957 	PINCTRL_CONF_DESC(11, REG_GPIO_L_PD, BIT(9)),
1958 	PINCTRL_CONF_DESC(12, REG_GPIO_L_PD, BIT(10)),
1959 	PINCTRL_CONF_DESC(13, REG_GPIO_L_PD, BIT(11)),
1960 	PINCTRL_CONF_DESC(14, REG_GPIO_L_PD, BIT(12)),
1961 	PINCTRL_CONF_DESC(15, REG_GPIO_L_PD, BIT(13)),
1962 	PINCTRL_CONF_DESC(16, REG_GPIO_L_PD, BIT(14)),
1963 	PINCTRL_CONF_DESC(17, REG_GPIO_L_PD, BIT(15)),
1964 	PINCTRL_CONF_DESC(18, REG_GPIO_L_PD, BIT(16)),
1965 	PINCTRL_CONF_DESC(19, REG_GPIO_L_PD, BIT(17)),
1966 	PINCTRL_CONF_DESC(20, REG_GPIO_L_PD, BIT(18)),
1967 	PINCTRL_CONF_DESC(21, REG_GPIO_L_PD, BIT(18)),
1968 	PINCTRL_CONF_DESC(22, REG_GPIO_L_PD, BIT(20)),
1969 	PINCTRL_CONF_DESC(23, REG_GPIO_L_PD, BIT(21)),
1970 	PINCTRL_CONF_DESC(24, REG_GPIO_L_PD, BIT(22)),
1971 	PINCTRL_CONF_DESC(25, REG_GPIO_L_PD, BIT(23)),
1972 	PINCTRL_CONF_DESC(26, REG_GPIO_L_PD, BIT(24)),
1973 	PINCTRL_CONF_DESC(27, REG_GPIO_L_PD, BIT(25)),
1974 	PINCTRL_CONF_DESC(28, REG_GPIO_L_PD, BIT(26)),
1975 	PINCTRL_CONF_DESC(29, REG_GPIO_L_PD, BIT(27)),
1976 	PINCTRL_CONF_DESC(30, REG_GPIO_L_PD, BIT(28)),
1977 	PINCTRL_CONF_DESC(31, REG_GPIO_L_PD, BIT(29)),
1978 	PINCTRL_CONF_DESC(32, REG_GPIO_L_PD, BIT(30)),
1979 	PINCTRL_CONF_DESC(33, REG_GPIO_L_PD, BIT(31)),
1980 	PINCTRL_CONF_DESC(34, REG_GPIO_H_PD, BIT(0)),
1981 	PINCTRL_CONF_DESC(35, REG_GPIO_H_PD, BIT(1)),
1982 	PINCTRL_CONF_DESC(36, REG_GPIO_H_PD, BIT(2)),
1983 	PINCTRL_CONF_DESC(37, REG_GPIO_H_PD, BIT(3)),
1984 	PINCTRL_CONF_DESC(38, REG_GPIO_H_PD, BIT(4)),
1985 	PINCTRL_CONF_DESC(39, REG_GPIO_H_PD, BIT(5)),
1986 	PINCTRL_CONF_DESC(40, REG_GPIO_H_PD, BIT(6)),
1987 	PINCTRL_CONF_DESC(41, REG_I2C_SDA_PD, I2C_SCL_PD_MASK),
1988 	PINCTRL_CONF_DESC(42, REG_I2C_SDA_PD, I2C_SDA_PD_MASK),
1989 	PINCTRL_CONF_DESC(43, REG_I2C_SDA_PD, AN7583_I2C1_SCL_PD_MASK),
1990 	PINCTRL_CONF_DESC(44, REG_I2C_SDA_PD, AN7583_I2C1_SDA_PD_MASK),
1991 	PINCTRL_CONF_DESC(45, REG_I2C_SDA_PD, SPI_CLK_PD_MASK),
1992 	PINCTRL_CONF_DESC(46, REG_I2C_SDA_PD, SPI_CS0_PD_MASK),
1993 	PINCTRL_CONF_DESC(47, REG_I2C_SDA_PD, SPI_MOSI_PD_MASK),
1994 	PINCTRL_CONF_DESC(48, REG_I2C_SDA_PD, SPI_MISO_PD_MASK),
1995 	PINCTRL_CONF_DESC(49, REG_I2C_SDA_PD, UART1_TXD_PD_MASK),
1996 	PINCTRL_CONF_DESC(50, REG_I2C_SDA_PD, UART1_RXD_PD_MASK),
1997 	PINCTRL_CONF_DESC(51, REG_I2C_SDA_PD, PCIE0_RESET_PD_MASK),
1998 	PINCTRL_CONF_DESC(52, REG_I2C_SDA_PD, PCIE1_RESET_PD_MASK),
1999 	PINCTRL_CONF_DESC(53, REG_I2C_SDA_PD, AN7583_MDC_0_PD_MASK),
2000 	PINCTRL_CONF_DESC(54, REG_I2C_SDA_PD, AN7583_MDIO_0_PD_MASK),
2001 };
2002 
2003 static const struct airoha_pinctrl_conf en7581_pinctrl_drive_e2_conf[] = {
2004 	PINCTRL_CONF_DESC(0, REG_I2C_SDA_E2, UART1_TXD_E2_MASK),
2005 	PINCTRL_CONF_DESC(1, REG_I2C_SDA_E2, UART1_RXD_E2_MASK),
2006 	PINCTRL_CONF_DESC(2, REG_I2C_SDA_E2, I2C_SDA_E2_MASK),
2007 	PINCTRL_CONF_DESC(3, REG_I2C_SDA_E2, I2C_SCL_E2_MASK),
2008 	PINCTRL_CONF_DESC(4, REG_I2C_SDA_E2, SPI_CS0_E2_MASK),
2009 	PINCTRL_CONF_DESC(5, REG_I2C_SDA_E2, SPI_CLK_E2_MASK),
2010 	PINCTRL_CONF_DESC(6, REG_I2C_SDA_E2, SPI_MOSI_E2_MASK),
2011 	PINCTRL_CONF_DESC(7, REG_I2C_SDA_E2, SPI_MISO_E2_MASK),
2012 	PINCTRL_CONF_DESC(13, REG_GPIO_L_E2, BIT(0)),
2013 	PINCTRL_CONF_DESC(14, REG_GPIO_L_E2, BIT(1)),
2014 	PINCTRL_CONF_DESC(15, REG_GPIO_L_E2, BIT(2)),
2015 	PINCTRL_CONF_DESC(16, REG_GPIO_L_E2, BIT(3)),
2016 	PINCTRL_CONF_DESC(17, REG_GPIO_L_E2, BIT(4)),
2017 	PINCTRL_CONF_DESC(18, REG_GPIO_L_E2, BIT(5)),
2018 	PINCTRL_CONF_DESC(19, REG_GPIO_L_E2, BIT(6)),
2019 	PINCTRL_CONF_DESC(20, REG_GPIO_L_E2, BIT(7)),
2020 	PINCTRL_CONF_DESC(21, REG_GPIO_L_E2, BIT(8)),
2021 	PINCTRL_CONF_DESC(22, REG_GPIO_L_E2, BIT(9)),
2022 	PINCTRL_CONF_DESC(23, REG_GPIO_L_E2, BIT(10)),
2023 	PINCTRL_CONF_DESC(24, REG_GPIO_L_E2, BIT(11)),
2024 	PINCTRL_CONF_DESC(25, REG_GPIO_L_E2, BIT(12)),
2025 	PINCTRL_CONF_DESC(26, REG_GPIO_L_E2, BIT(13)),
2026 	PINCTRL_CONF_DESC(27, REG_GPIO_L_E2, BIT(14)),
2027 	PINCTRL_CONF_DESC(28, REG_GPIO_L_E2, BIT(15)),
2028 	PINCTRL_CONF_DESC(29, REG_GPIO_L_E2, BIT(16)),
2029 	PINCTRL_CONF_DESC(30, REG_GPIO_L_E2, BIT(17)),
2030 	PINCTRL_CONF_DESC(31, REG_GPIO_L_E2, BIT(18)),
2031 	PINCTRL_CONF_DESC(32, REG_GPIO_L_E2, BIT(18)),
2032 	PINCTRL_CONF_DESC(33, REG_GPIO_L_E2, BIT(20)),
2033 	PINCTRL_CONF_DESC(34, REG_GPIO_L_E2, BIT(21)),
2034 	PINCTRL_CONF_DESC(35, REG_GPIO_L_E2, BIT(22)),
2035 	PINCTRL_CONF_DESC(36, REG_GPIO_L_E2, BIT(23)),
2036 	PINCTRL_CONF_DESC(37, REG_GPIO_L_E2, BIT(24)),
2037 	PINCTRL_CONF_DESC(38, REG_GPIO_L_E2, BIT(25)),
2038 	PINCTRL_CONF_DESC(39, REG_GPIO_L_E2, BIT(26)),
2039 	PINCTRL_CONF_DESC(40, REG_GPIO_L_E2, BIT(27)),
2040 	PINCTRL_CONF_DESC(41, REG_GPIO_L_E2, BIT(28)),
2041 	PINCTRL_CONF_DESC(42, REG_GPIO_L_E2, BIT(29)),
2042 	PINCTRL_CONF_DESC(43, REG_GPIO_L_E2, BIT(30)),
2043 	PINCTRL_CONF_DESC(44, REG_GPIO_L_E2, BIT(31)),
2044 	PINCTRL_CONF_DESC(45, REG_GPIO_H_E2, BIT(0)),
2045 	PINCTRL_CONF_DESC(46, REG_GPIO_H_E2, BIT(1)),
2046 	PINCTRL_CONF_DESC(47, REG_GPIO_H_E2, BIT(2)),
2047 	PINCTRL_CONF_DESC(48, REG_GPIO_H_E2, BIT(3)),
2048 	PINCTRL_CONF_DESC(49, REG_GPIO_H_E2, BIT(4)),
2049 	PINCTRL_CONF_DESC(50, REG_GPIO_H_E2, BIT(5)),
2050 	PINCTRL_CONF_DESC(51, REG_GPIO_H_E2, BIT(6)),
2051 	PINCTRL_CONF_DESC(52, REG_GPIO_H_E2, BIT(7)),
2052 	PINCTRL_CONF_DESC(53, REG_GPIO_H_E2, BIT(8)),
2053 	PINCTRL_CONF_DESC(54, REG_GPIO_H_E2, BIT(9)),
2054 	PINCTRL_CONF_DESC(55, REG_GPIO_H_E2, BIT(10)),
2055 	PINCTRL_CONF_DESC(56, REG_GPIO_H_E2, BIT(11)),
2056 	PINCTRL_CONF_DESC(57, REG_GPIO_H_E2, BIT(12)),
2057 	PINCTRL_CONF_DESC(58, REG_GPIO_H_E2, BIT(13)),
2058 	PINCTRL_CONF_DESC(59, REG_GPIO_H_E2, BIT(14)),
2059 	PINCTRL_CONF_DESC(61, REG_I2C_SDA_E2, PCIE0_RESET_E2_MASK),
2060 	PINCTRL_CONF_DESC(62, REG_I2C_SDA_E2, PCIE1_RESET_E2_MASK),
2061 	PINCTRL_CONF_DESC(63, REG_I2C_SDA_E2, PCIE2_RESET_E2_MASK),
2062 };
2063 
2064 static const struct airoha_pinctrl_conf an7583_pinctrl_drive_e2_conf[] = {
2065 	PINCTRL_CONF_DESC(2, REG_GPIO_L_E2, BIT(0)),
2066 	PINCTRL_CONF_DESC(3, REG_GPIO_L_E2, BIT(1)),
2067 	PINCTRL_CONF_DESC(4, REG_GPIO_L_E2, BIT(2)),
2068 	PINCTRL_CONF_DESC(5, REG_GPIO_L_E2, BIT(3)),
2069 	PINCTRL_CONF_DESC(6, REG_GPIO_L_E2, BIT(4)),
2070 	PINCTRL_CONF_DESC(7, REG_GPIO_L_E2, BIT(5)),
2071 	PINCTRL_CONF_DESC(8, REG_GPIO_L_E2, BIT(6)),
2072 	PINCTRL_CONF_DESC(9, REG_GPIO_L_E2, BIT(7)),
2073 	PINCTRL_CONF_DESC(10, REG_GPIO_L_E2, BIT(8)),
2074 	PINCTRL_CONF_DESC(11, REG_GPIO_L_E2, BIT(9)),
2075 	PINCTRL_CONF_DESC(12, REG_GPIO_L_E2, BIT(10)),
2076 	PINCTRL_CONF_DESC(13, REG_GPIO_L_E2, BIT(11)),
2077 	PINCTRL_CONF_DESC(14, REG_GPIO_L_E2, BIT(12)),
2078 	PINCTRL_CONF_DESC(15, REG_GPIO_L_E2, BIT(13)),
2079 	PINCTRL_CONF_DESC(16, REG_GPIO_L_E2, BIT(14)),
2080 	PINCTRL_CONF_DESC(17, REG_GPIO_L_E2, BIT(15)),
2081 	PINCTRL_CONF_DESC(18, REG_GPIO_L_E2, BIT(16)),
2082 	PINCTRL_CONF_DESC(19, REG_GPIO_L_E2, BIT(17)),
2083 	PINCTRL_CONF_DESC(20, REG_GPIO_L_E2, BIT(18)),
2084 	PINCTRL_CONF_DESC(21, REG_GPIO_L_E2, BIT(18)),
2085 	PINCTRL_CONF_DESC(22, REG_GPIO_L_E2, BIT(20)),
2086 	PINCTRL_CONF_DESC(23, REG_GPIO_L_E2, BIT(21)),
2087 	PINCTRL_CONF_DESC(24, REG_GPIO_L_E2, BIT(22)),
2088 	PINCTRL_CONF_DESC(25, REG_GPIO_L_E2, BIT(23)),
2089 	PINCTRL_CONF_DESC(26, REG_GPIO_L_E2, BIT(24)),
2090 	PINCTRL_CONF_DESC(27, REG_GPIO_L_E2, BIT(25)),
2091 	PINCTRL_CONF_DESC(28, REG_GPIO_L_E2, BIT(26)),
2092 	PINCTRL_CONF_DESC(29, REG_GPIO_L_E2, BIT(27)),
2093 	PINCTRL_CONF_DESC(30, REG_GPIO_L_E2, BIT(28)),
2094 	PINCTRL_CONF_DESC(31, REG_GPIO_L_E2, BIT(29)),
2095 	PINCTRL_CONF_DESC(32, REG_GPIO_L_E2, BIT(30)),
2096 	PINCTRL_CONF_DESC(33, REG_GPIO_L_E2, BIT(31)),
2097 	PINCTRL_CONF_DESC(34, REG_GPIO_H_E2, BIT(0)),
2098 	PINCTRL_CONF_DESC(35, REG_GPIO_H_E2, BIT(1)),
2099 	PINCTRL_CONF_DESC(36, REG_GPIO_H_E2, BIT(2)),
2100 	PINCTRL_CONF_DESC(37, REG_GPIO_H_E2, BIT(3)),
2101 	PINCTRL_CONF_DESC(38, REG_GPIO_H_E2, BIT(4)),
2102 	PINCTRL_CONF_DESC(39, REG_GPIO_H_E2, BIT(5)),
2103 	PINCTRL_CONF_DESC(40, REG_GPIO_H_E2, BIT(6)),
2104 	PINCTRL_CONF_DESC(41, REG_I2C_SDA_E2, I2C_SCL_E2_MASK),
2105 	PINCTRL_CONF_DESC(42, REG_I2C_SDA_E2, I2C_SDA_E2_MASK),
2106 	PINCTRL_CONF_DESC(43, REG_I2C_SDA_E2, AN7583_I2C1_SCL_E2_MASK),
2107 	PINCTRL_CONF_DESC(44, REG_I2C_SDA_E2, AN7583_I2C1_SDA_E2_MASK),
2108 	PINCTRL_CONF_DESC(45, REG_I2C_SDA_E2, SPI_CLK_E2_MASK),
2109 	PINCTRL_CONF_DESC(46, REG_I2C_SDA_E2, SPI_CS0_E2_MASK),
2110 	PINCTRL_CONF_DESC(47, REG_I2C_SDA_E2, SPI_MOSI_E2_MASK),
2111 	PINCTRL_CONF_DESC(48, REG_I2C_SDA_E2, SPI_MISO_E2_MASK),
2112 	PINCTRL_CONF_DESC(49, REG_I2C_SDA_E2, UART1_TXD_E2_MASK),
2113 	PINCTRL_CONF_DESC(50, REG_I2C_SDA_E2, UART1_RXD_E2_MASK),
2114 	PINCTRL_CONF_DESC(51, REG_I2C_SDA_E2, PCIE0_RESET_E2_MASK),
2115 	PINCTRL_CONF_DESC(52, REG_I2C_SDA_E2, PCIE1_RESET_E2_MASK),
2116 	PINCTRL_CONF_DESC(53, REG_I2C_SDA_E2, AN7583_MDC_0_E2_MASK),
2117 	PINCTRL_CONF_DESC(54, REG_I2C_SDA_E2, AN7583_MDIO_0_E2_MASK),
2118 };
2119 
2120 static const struct airoha_pinctrl_conf en7581_pinctrl_drive_e4_conf[] = {
2121 	PINCTRL_CONF_DESC(0, REG_I2C_SDA_E4, UART1_TXD_E4_MASK),
2122 	PINCTRL_CONF_DESC(1, REG_I2C_SDA_E4, UART1_RXD_E4_MASK),
2123 	PINCTRL_CONF_DESC(2, REG_I2C_SDA_E4, I2C_SDA_E4_MASK),
2124 	PINCTRL_CONF_DESC(3, REG_I2C_SDA_E4, I2C_SCL_E4_MASK),
2125 	PINCTRL_CONF_DESC(4, REG_I2C_SDA_E4, SPI_CS0_E4_MASK),
2126 	PINCTRL_CONF_DESC(5, REG_I2C_SDA_E4, SPI_CLK_E4_MASK),
2127 	PINCTRL_CONF_DESC(6, REG_I2C_SDA_E4, SPI_MOSI_E4_MASK),
2128 	PINCTRL_CONF_DESC(7, REG_I2C_SDA_E4, SPI_MISO_E4_MASK),
2129 	PINCTRL_CONF_DESC(13, REG_GPIO_L_E4, BIT(0)),
2130 	PINCTRL_CONF_DESC(14, REG_GPIO_L_E4, BIT(1)),
2131 	PINCTRL_CONF_DESC(15, REG_GPIO_L_E4, BIT(2)),
2132 	PINCTRL_CONF_DESC(16, REG_GPIO_L_E4, BIT(3)),
2133 	PINCTRL_CONF_DESC(17, REG_GPIO_L_E4, BIT(4)),
2134 	PINCTRL_CONF_DESC(18, REG_GPIO_L_E4, BIT(5)),
2135 	PINCTRL_CONF_DESC(19, REG_GPIO_L_E4, BIT(6)),
2136 	PINCTRL_CONF_DESC(20, REG_GPIO_L_E4, BIT(7)),
2137 	PINCTRL_CONF_DESC(21, REG_GPIO_L_E4, BIT(8)),
2138 	PINCTRL_CONF_DESC(22, REG_GPIO_L_E4, BIT(9)),
2139 	PINCTRL_CONF_DESC(23, REG_GPIO_L_E4, BIT(10)),
2140 	PINCTRL_CONF_DESC(24, REG_GPIO_L_E4, BIT(11)),
2141 	PINCTRL_CONF_DESC(25, REG_GPIO_L_E4, BIT(12)),
2142 	PINCTRL_CONF_DESC(26, REG_GPIO_L_E4, BIT(13)),
2143 	PINCTRL_CONF_DESC(27, REG_GPIO_L_E4, BIT(14)),
2144 	PINCTRL_CONF_DESC(28, REG_GPIO_L_E4, BIT(15)),
2145 	PINCTRL_CONF_DESC(29, REG_GPIO_L_E4, BIT(16)),
2146 	PINCTRL_CONF_DESC(30, REG_GPIO_L_E4, BIT(17)),
2147 	PINCTRL_CONF_DESC(31, REG_GPIO_L_E4, BIT(18)),
2148 	PINCTRL_CONF_DESC(32, REG_GPIO_L_E4, BIT(18)),
2149 	PINCTRL_CONF_DESC(33, REG_GPIO_L_E4, BIT(20)),
2150 	PINCTRL_CONF_DESC(34, REG_GPIO_L_E4, BIT(21)),
2151 	PINCTRL_CONF_DESC(35, REG_GPIO_L_E4, BIT(22)),
2152 	PINCTRL_CONF_DESC(36, REG_GPIO_L_E4, BIT(23)),
2153 	PINCTRL_CONF_DESC(37, REG_GPIO_L_E4, BIT(24)),
2154 	PINCTRL_CONF_DESC(38, REG_GPIO_L_E4, BIT(25)),
2155 	PINCTRL_CONF_DESC(39, REG_GPIO_L_E4, BIT(26)),
2156 	PINCTRL_CONF_DESC(40, REG_GPIO_L_E4, BIT(27)),
2157 	PINCTRL_CONF_DESC(41, REG_GPIO_L_E4, BIT(28)),
2158 	PINCTRL_CONF_DESC(42, REG_GPIO_L_E4, BIT(29)),
2159 	PINCTRL_CONF_DESC(43, REG_GPIO_L_E4, BIT(30)),
2160 	PINCTRL_CONF_DESC(44, REG_GPIO_L_E4, BIT(31)),
2161 	PINCTRL_CONF_DESC(45, REG_GPIO_H_E4, BIT(0)),
2162 	PINCTRL_CONF_DESC(46, REG_GPIO_H_E4, BIT(1)),
2163 	PINCTRL_CONF_DESC(47, REG_GPIO_H_E4, BIT(2)),
2164 	PINCTRL_CONF_DESC(48, REG_GPIO_H_E4, BIT(3)),
2165 	PINCTRL_CONF_DESC(49, REG_GPIO_H_E4, BIT(4)),
2166 	PINCTRL_CONF_DESC(50, REG_GPIO_H_E4, BIT(5)),
2167 	PINCTRL_CONF_DESC(51, REG_GPIO_H_E4, BIT(6)),
2168 	PINCTRL_CONF_DESC(52, REG_GPIO_H_E4, BIT(7)),
2169 	PINCTRL_CONF_DESC(53, REG_GPIO_H_E4, BIT(8)),
2170 	PINCTRL_CONF_DESC(54, REG_GPIO_H_E4, BIT(9)),
2171 	PINCTRL_CONF_DESC(55, REG_GPIO_H_E4, BIT(10)),
2172 	PINCTRL_CONF_DESC(56, REG_GPIO_H_E4, BIT(11)),
2173 	PINCTRL_CONF_DESC(57, REG_GPIO_H_E4, BIT(12)),
2174 	PINCTRL_CONF_DESC(58, REG_GPIO_H_E4, BIT(13)),
2175 	PINCTRL_CONF_DESC(59, REG_GPIO_H_E4, BIT(14)),
2176 	PINCTRL_CONF_DESC(61, REG_I2C_SDA_E4, PCIE0_RESET_E4_MASK),
2177 	PINCTRL_CONF_DESC(62, REG_I2C_SDA_E4, PCIE1_RESET_E4_MASK),
2178 	PINCTRL_CONF_DESC(63, REG_I2C_SDA_E4, PCIE2_RESET_E4_MASK),
2179 };
2180 
2181 static const struct airoha_pinctrl_conf an7583_pinctrl_drive_e4_conf[] = {
2182 	PINCTRL_CONF_DESC(2, REG_GPIO_L_E4, BIT(0)),
2183 	PINCTRL_CONF_DESC(3, REG_GPIO_L_E4, BIT(1)),
2184 	PINCTRL_CONF_DESC(4, REG_GPIO_L_E4, BIT(2)),
2185 	PINCTRL_CONF_DESC(5, REG_GPIO_L_E4, BIT(3)),
2186 	PINCTRL_CONF_DESC(6, REG_GPIO_L_E4, BIT(4)),
2187 	PINCTRL_CONF_DESC(7, REG_GPIO_L_E4, BIT(5)),
2188 	PINCTRL_CONF_DESC(8, REG_GPIO_L_E4, BIT(6)),
2189 	PINCTRL_CONF_DESC(9, REG_GPIO_L_E4, BIT(7)),
2190 	PINCTRL_CONF_DESC(10, REG_GPIO_L_E4, BIT(8)),
2191 	PINCTRL_CONF_DESC(11, REG_GPIO_L_E4, BIT(9)),
2192 	PINCTRL_CONF_DESC(12, REG_GPIO_L_E4, BIT(10)),
2193 	PINCTRL_CONF_DESC(13, REG_GPIO_L_E4, BIT(11)),
2194 	PINCTRL_CONF_DESC(14, REG_GPIO_L_E4, BIT(12)),
2195 	PINCTRL_CONF_DESC(15, REG_GPIO_L_E4, BIT(13)),
2196 	PINCTRL_CONF_DESC(16, REG_GPIO_L_E4, BIT(14)),
2197 	PINCTRL_CONF_DESC(17, REG_GPIO_L_E4, BIT(15)),
2198 	PINCTRL_CONF_DESC(18, REG_GPIO_L_E4, BIT(16)),
2199 	PINCTRL_CONF_DESC(19, REG_GPIO_L_E4, BIT(17)),
2200 	PINCTRL_CONF_DESC(20, REG_GPIO_L_E4, BIT(18)),
2201 	PINCTRL_CONF_DESC(21, REG_GPIO_L_E4, BIT(18)),
2202 	PINCTRL_CONF_DESC(22, REG_GPIO_L_E4, BIT(20)),
2203 	PINCTRL_CONF_DESC(23, REG_GPIO_L_E4, BIT(21)),
2204 	PINCTRL_CONF_DESC(24, REG_GPIO_L_E4, BIT(22)),
2205 	PINCTRL_CONF_DESC(25, REG_GPIO_L_E4, BIT(23)),
2206 	PINCTRL_CONF_DESC(26, REG_GPIO_L_E4, BIT(24)),
2207 	PINCTRL_CONF_DESC(27, REG_GPIO_L_E4, BIT(25)),
2208 	PINCTRL_CONF_DESC(28, REG_GPIO_L_E4, BIT(26)),
2209 	PINCTRL_CONF_DESC(29, REG_GPIO_L_E4, BIT(27)),
2210 	PINCTRL_CONF_DESC(30, REG_GPIO_L_E4, BIT(28)),
2211 	PINCTRL_CONF_DESC(31, REG_GPIO_L_E4, BIT(29)),
2212 	PINCTRL_CONF_DESC(32, REG_GPIO_L_E4, BIT(30)),
2213 	PINCTRL_CONF_DESC(33, REG_GPIO_L_E4, BIT(31)),
2214 	PINCTRL_CONF_DESC(34, REG_GPIO_H_E4, BIT(0)),
2215 	PINCTRL_CONF_DESC(35, REG_GPIO_H_E4, BIT(1)),
2216 	PINCTRL_CONF_DESC(36, REG_GPIO_H_E4, BIT(2)),
2217 	PINCTRL_CONF_DESC(37, REG_GPIO_H_E4, BIT(3)),
2218 	PINCTRL_CONF_DESC(38, REG_GPIO_H_E4, BIT(4)),
2219 	PINCTRL_CONF_DESC(39, REG_GPIO_H_E4, BIT(5)),
2220 	PINCTRL_CONF_DESC(40, REG_GPIO_H_E4, BIT(6)),
2221 	PINCTRL_CONF_DESC(41, REG_I2C_SDA_E4, I2C_SCL_E4_MASK),
2222 	PINCTRL_CONF_DESC(42, REG_I2C_SDA_E4, I2C_SDA_E4_MASK),
2223 	PINCTRL_CONF_DESC(43, REG_I2C_SDA_E4, AN7583_I2C1_SCL_E4_MASK),
2224 	PINCTRL_CONF_DESC(44, REG_I2C_SDA_E4, AN7583_I2C1_SDA_E4_MASK),
2225 	PINCTRL_CONF_DESC(45, REG_I2C_SDA_E4, SPI_CLK_E4_MASK),
2226 	PINCTRL_CONF_DESC(46, REG_I2C_SDA_E4, SPI_CS0_E4_MASK),
2227 	PINCTRL_CONF_DESC(47, REG_I2C_SDA_E4, SPI_MOSI_E4_MASK),
2228 	PINCTRL_CONF_DESC(48, REG_I2C_SDA_E4, SPI_MISO_E4_MASK),
2229 	PINCTRL_CONF_DESC(49, REG_I2C_SDA_E4, UART1_TXD_E4_MASK),
2230 	PINCTRL_CONF_DESC(50, REG_I2C_SDA_E4, UART1_RXD_E4_MASK),
2231 	PINCTRL_CONF_DESC(51, REG_I2C_SDA_E4, PCIE0_RESET_E4_MASK),
2232 	PINCTRL_CONF_DESC(52, REG_I2C_SDA_E4, PCIE1_RESET_E4_MASK),
2233 	PINCTRL_CONF_DESC(53, REG_I2C_SDA_E4, AN7583_MDC_0_E4_MASK),
2234 	PINCTRL_CONF_DESC(54, REG_I2C_SDA_E4, AN7583_MDIO_0_E4_MASK),
2235 };
2236 
2237 static const struct airoha_pinctrl_conf en7581_pinctrl_pcie_rst_od_conf[] = {
2238 	PINCTRL_CONF_DESC(61, REG_PCIE_RESET_OD, PCIE0_RESET_OD_MASK),
2239 	PINCTRL_CONF_DESC(62, REG_PCIE_RESET_OD, PCIE1_RESET_OD_MASK),
2240 	PINCTRL_CONF_DESC(63, REG_PCIE_RESET_OD, PCIE2_RESET_OD_MASK),
2241 };
2242 
2243 static const struct airoha_pinctrl_conf an7583_pinctrl_pcie_rst_od_conf[] = {
2244 	PINCTRL_CONF_DESC(51, REG_PCIE_RESET_OD, PCIE0_RESET_OD_MASK),
2245 	PINCTRL_CONF_DESC(52, REG_PCIE_RESET_OD, PCIE1_RESET_OD_MASK),
2246 };
2247 
airoha_convert_pin_to_reg_offset(struct pinctrl_dev * pctrl_dev,struct pinctrl_gpio_range * range,int pin)2248 static int airoha_convert_pin_to_reg_offset(struct pinctrl_dev *pctrl_dev,
2249 					    struct pinctrl_gpio_range *range,
2250 					    int pin)
2251 {
2252 	if (!range)
2253 		range = pinctrl_find_gpio_range_from_pin_nolock(pctrl_dev,
2254 								pin);
2255 	if (!range)
2256 		return -EINVAL;
2257 
2258 	return pin - range->pin_base;
2259 }
2260 
2261 /* gpio callbacks */
airoha_gpio_set(struct gpio_chip * chip,unsigned int gpio,int value)2262 static int airoha_gpio_set(struct gpio_chip *chip, unsigned int gpio,
2263 			   int value)
2264 {
2265 	struct airoha_pinctrl *pinctrl = gpiochip_get_data(chip);
2266 	u32 offset = gpio % AIROHA_PIN_BANK_SIZE;
2267 	u8 index = gpio / AIROHA_PIN_BANK_SIZE;
2268 
2269 	return regmap_update_bits(pinctrl->regmap,
2270 				  pinctrl->gpiochip.data[index],
2271 				  BIT(offset), value ? BIT(offset) : 0);
2272 }
2273 
airoha_gpio_get(struct gpio_chip * chip,unsigned int gpio)2274 static int airoha_gpio_get(struct gpio_chip *chip, unsigned int gpio)
2275 {
2276 	struct airoha_pinctrl *pinctrl = gpiochip_get_data(chip);
2277 	u32 val, pin = gpio % AIROHA_PIN_BANK_SIZE;
2278 	u8 index = gpio / AIROHA_PIN_BANK_SIZE;
2279 	int err;
2280 
2281 	err = regmap_read(pinctrl->regmap,
2282 			  pinctrl->gpiochip.data[index], &val);
2283 
2284 	return err ? err : !!(val & BIT(pin));
2285 }
2286 
airoha_gpio_direction_output(struct gpio_chip * chip,unsigned int gpio,int value)2287 static int airoha_gpio_direction_output(struct gpio_chip *chip,
2288 					unsigned int gpio, int value)
2289 {
2290 	int err;
2291 
2292 	err = pinctrl_gpio_direction_output(chip, gpio);
2293 	if (err)
2294 		return err;
2295 
2296 	return airoha_gpio_set(chip, gpio, value);
2297 }
2298 
2299 /* irq callbacks */
airoha_irq_unmask(struct irq_data * data)2300 static void airoha_irq_unmask(struct irq_data *data)
2301 {
2302 	u8 offset = data->hwirq % AIROHA_REG_GPIOCTRL_NUM_PIN;
2303 	u8 index = data->hwirq / AIROHA_REG_GPIOCTRL_NUM_PIN;
2304 	u32 mask = GENMASK(2 * offset + 1, 2 * offset);
2305 	struct airoha_pinctrl_gpiochip *gpiochip;
2306 	struct airoha_pinctrl *pinctrl;
2307 	u32 val = BIT(2 * offset);
2308 
2309 	gpiochip = irq_data_get_irq_chip_data(data);
2310 	if (WARN_ON_ONCE(data->hwirq >= ARRAY_SIZE(gpiochip->irq_type)))
2311 		return;
2312 
2313 	pinctrl = container_of(gpiochip, struct airoha_pinctrl, gpiochip);
2314 	switch (gpiochip->irq_type[data->hwirq]) {
2315 	case IRQ_TYPE_LEVEL_LOW:
2316 		val = val << 1;
2317 		fallthrough;
2318 	case IRQ_TYPE_LEVEL_HIGH:
2319 		regmap_update_bits(pinctrl->regmap, gpiochip->level[index],
2320 				   mask, val);
2321 		break;
2322 	case IRQ_TYPE_EDGE_FALLING:
2323 		val = val << 1;
2324 		fallthrough;
2325 	case IRQ_TYPE_EDGE_RISING:
2326 		regmap_update_bits(pinctrl->regmap, gpiochip->edge[index],
2327 				   mask, val);
2328 		break;
2329 	case IRQ_TYPE_EDGE_BOTH:
2330 		regmap_set_bits(pinctrl->regmap, gpiochip->edge[index], mask);
2331 		break;
2332 	default:
2333 		break;
2334 	}
2335 }
2336 
airoha_irq_mask(struct irq_data * data)2337 static void airoha_irq_mask(struct irq_data *data)
2338 {
2339 	u8 offset = data->hwirq % AIROHA_REG_GPIOCTRL_NUM_PIN;
2340 	u8 index = data->hwirq / AIROHA_REG_GPIOCTRL_NUM_PIN;
2341 	u32 mask = GENMASK(2 * offset + 1, 2 * offset);
2342 	struct airoha_pinctrl_gpiochip *gpiochip;
2343 	struct airoha_pinctrl *pinctrl;
2344 
2345 	gpiochip = irq_data_get_irq_chip_data(data);
2346 	pinctrl = container_of(gpiochip, struct airoha_pinctrl, gpiochip);
2347 
2348 	regmap_clear_bits(pinctrl->regmap, gpiochip->level[index], mask);
2349 	regmap_clear_bits(pinctrl->regmap, gpiochip->edge[index], mask);
2350 }
2351 
airoha_irq_type(struct irq_data * data,unsigned int type)2352 static int airoha_irq_type(struct irq_data *data, unsigned int type)
2353 {
2354 	struct airoha_pinctrl_gpiochip *gpiochip;
2355 
2356 	gpiochip = irq_data_get_irq_chip_data(data);
2357 	if (data->hwirq >= ARRAY_SIZE(gpiochip->irq_type))
2358 		return -EINVAL;
2359 
2360 	if (type == IRQ_TYPE_PROBE) {
2361 		if (gpiochip->irq_type[data->hwirq])
2362 			return 0;
2363 
2364 		type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING;
2365 	}
2366 	gpiochip->irq_type[data->hwirq] = type & IRQ_TYPE_SENSE_MASK;
2367 
2368 	return 0;
2369 }
2370 
airoha_irq_handler(int irq,void * data)2371 static irqreturn_t airoha_irq_handler(int irq, void *data)
2372 {
2373 	struct airoha_pinctrl *pinctrl = data;
2374 	bool handled = false;
2375 	int i;
2376 
2377 	for (i = 0; i < ARRAY_SIZE(irq_status_regs); i++) {
2378 		struct gpio_irq_chip *girq = &pinctrl->gpiochip.chip.irq;
2379 		u32 regmap;
2380 		unsigned long status;
2381 		int irq;
2382 
2383 		if (regmap_read(pinctrl->regmap, pinctrl->gpiochip.status[i],
2384 				&regmap))
2385 			continue;
2386 
2387 		status = regmap;
2388 		for_each_set_bit(irq, &status, AIROHA_PIN_BANK_SIZE) {
2389 			u32 offset = irq + i * AIROHA_PIN_BANK_SIZE;
2390 
2391 			generic_handle_irq(irq_find_mapping(girq->domain,
2392 							    offset));
2393 			regmap_write(pinctrl->regmap,
2394 				     pinctrl->gpiochip.status[i], BIT(irq));
2395 		}
2396 		handled |= !!status;
2397 	}
2398 
2399 	return handled ? IRQ_HANDLED : IRQ_NONE;
2400 }
2401 
2402 static const struct irq_chip airoha_gpio_irq_chip = {
2403 	.name = "airoha-gpio-irq",
2404 	.irq_unmask = airoha_irq_unmask,
2405 	.irq_mask = airoha_irq_mask,
2406 	.irq_mask_ack = airoha_irq_mask,
2407 	.irq_set_type = airoha_irq_type,
2408 	.flags = IRQCHIP_SET_TYPE_MASKED | IRQCHIP_IMMUTABLE,
2409 };
2410 
airoha_pinctrl_add_gpiochip(struct airoha_pinctrl * pinctrl,struct platform_device * pdev)2411 static int airoha_pinctrl_add_gpiochip(struct airoha_pinctrl *pinctrl,
2412 					struct platform_device *pdev)
2413 {
2414 	struct airoha_pinctrl_gpiochip *chip = &pinctrl->gpiochip;
2415 	struct gpio_chip *gc = &chip->chip;
2416 	struct gpio_irq_chip *girq = &gc->irq;
2417 	struct device *dev = &pdev->dev;
2418 	int irq, err;
2419 
2420 	chip->data = gpio_data_regs;
2421 	chip->dir = gpio_dir_regs;
2422 	chip->out = gpio_out_regs;
2423 	chip->status = irq_status_regs;
2424 	chip->level = irq_level_regs;
2425 	chip->edge = irq_edge_regs;
2426 
2427 	gc->parent = dev;
2428 	gc->label = dev_name(dev);
2429 	gc->request = gpiochip_generic_request;
2430 	gc->free = gpiochip_generic_free;
2431 	gc->direction_input = pinctrl_gpio_direction_input;
2432 	gc->direction_output = airoha_gpio_direction_output;
2433 	gc->set = airoha_gpio_set;
2434 	gc->get = airoha_gpio_get;
2435 	gc->base = -1;
2436 	gc->ngpio = AIROHA_NUM_PINS;
2437 
2438 	girq->default_type = IRQ_TYPE_NONE;
2439 	girq->handler = handle_simple_irq;
2440 	gpio_irq_chip_set_chip(girq, &airoha_gpio_irq_chip);
2441 
2442 	irq = platform_get_irq(pdev, 0);
2443 	if (irq < 0)
2444 		return irq;
2445 
2446 	err = devm_request_irq(dev, irq, airoha_irq_handler, IRQF_SHARED,
2447 				dev_name(dev), pinctrl);
2448 	if (err) {
2449 		dev_err(dev, "error requesting irq %d: %d\n", irq, err);
2450 		return err;
2451 	}
2452 
2453 	return devm_gpiochip_add_data(dev, gc, pinctrl);
2454 }
2455 
2456 /* pinmux callbacks */
airoha_pinmux_set_mux(struct pinctrl_dev * pctrl_dev,unsigned int selector,unsigned int group)2457 static int airoha_pinmux_set_mux(struct pinctrl_dev *pctrl_dev,
2458 				 unsigned int selector,
2459 				 unsigned int group)
2460 {
2461 	struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
2462 	const struct airoha_pinctrl_func *func;
2463 	const struct function_desc *desc;
2464 	struct group_desc *grp;
2465 	int i;
2466 
2467 	desc = pinmux_generic_get_function(pctrl_dev, selector);
2468 	if (!desc)
2469 		return -EINVAL;
2470 
2471 	grp = pinctrl_generic_get_group(pctrl_dev, group);
2472 	if (!grp)
2473 		return -EINVAL;
2474 
2475 	dev_dbg(pctrl_dev->dev, "enable function %s group %s\n",
2476 		desc->func->name, grp->grp.name);
2477 
2478 	func = desc->data;
2479 	for (i = 0; i < func->group_size; i++) {
2480 		const struct airoha_pinctrl_func_group *group;
2481 		int j;
2482 
2483 		group = &func->groups[i];
2484 		if (strcmp(group->name, grp->grp.name))
2485 			continue;
2486 
2487 		for (j = 0; j < group->regmap_size; j++) {
2488 			switch (group->regmap[j].mux) {
2489 			case AIROHA_FUNC_PWM_EXT_MUX:
2490 			case AIROHA_FUNC_PWM_MUX:
2491 				regmap_update_bits(pinctrl->regmap,
2492 						   group->regmap[j].offset,
2493 						   group->regmap[j].mask,
2494 						   group->regmap[j].val);
2495 				break;
2496 			default:
2497 				regmap_update_bits(pinctrl->chip_scu,
2498 						   group->regmap[j].offset,
2499 						   group->regmap[j].mask,
2500 						   group->regmap[j].val);
2501 				break;
2502 			}
2503 		}
2504 		return 0;
2505 	}
2506 
2507 	return -EINVAL;
2508 }
2509 
airoha_pinmux_set_direction(struct pinctrl_dev * pctrl_dev,struct pinctrl_gpio_range * range,unsigned int p,bool input)2510 static int airoha_pinmux_set_direction(struct pinctrl_dev *pctrl_dev,
2511 					struct pinctrl_gpio_range *range,
2512 					unsigned int p, bool input)
2513 {
2514 	struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
2515 	u32 mask, index;
2516 	int err, pin;
2517 
2518 	pin = airoha_convert_pin_to_reg_offset(pctrl_dev, range, p);
2519 	if (pin < 0)
2520 		return pin;
2521 
2522 	/* set output enable */
2523 	mask = BIT(pin % AIROHA_PIN_BANK_SIZE);
2524 	index = pin / AIROHA_PIN_BANK_SIZE;
2525 	err = regmap_update_bits(pinctrl->regmap, pinctrl->gpiochip.out[index],
2526 				 mask, !input ? mask : 0);
2527 	if (err)
2528 		return err;
2529 
2530 	/* set direction */
2531 	mask = BIT(2 * (pin % AIROHA_REG_GPIOCTRL_NUM_PIN));
2532 	index = pin / AIROHA_REG_GPIOCTRL_NUM_PIN;
2533 	return regmap_update_bits(pinctrl->regmap,
2534 				  pinctrl->gpiochip.dir[index], mask,
2535 				  !input ? mask : 0);
2536 }
2537 
2538 static const struct pinmux_ops airoha_pmxops = {
2539 	.get_functions_count = pinmux_generic_get_function_count,
2540 	.get_function_name = pinmux_generic_get_function_name,
2541 	.get_function_groups = pinmux_generic_get_function_groups,
2542 	.gpio_set_direction = airoha_pinmux_set_direction,
2543 	.set_mux = airoha_pinmux_set_mux,
2544 	.strict = true,
2545 };
2546 
2547 /* pinconf callbacks */
2548 static const struct airoha_pinctrl_reg *
airoha_pinctrl_get_conf_reg(const struct airoha_pinctrl_conf * conf,int conf_size,int pin)2549 airoha_pinctrl_get_conf_reg(const struct airoha_pinctrl_conf *conf,
2550 			    int conf_size, int pin)
2551 {
2552 	int i;
2553 
2554 	for (i = 0; i < conf_size; i++) {
2555 		if (conf[i].pin == pin)
2556 			return &conf[i].reg;
2557 	}
2558 
2559 	return NULL;
2560 }
2561 
airoha_pinctrl_get_conf(struct airoha_pinctrl * pinctrl,enum airoha_pinctrl_confs_type conf_type,int pin,u32 * val)2562 static int airoha_pinctrl_get_conf(struct airoha_pinctrl *pinctrl,
2563 				   enum airoha_pinctrl_confs_type conf_type,
2564 				   int pin, u32 *val)
2565 {
2566 	const struct airoha_pinctrl_confs_info *confs_info;
2567 	const struct airoha_pinctrl_reg *reg;
2568 
2569 	confs_info = &pinctrl->confs_info[conf_type];
2570 
2571 	reg = airoha_pinctrl_get_conf_reg(confs_info->confs,
2572 					  confs_info->num_confs,
2573 					  pin);
2574 	if (!reg)
2575 		return -EINVAL;
2576 
2577 	if (regmap_read(pinctrl->chip_scu, reg->offset, val))
2578 		return -EINVAL;
2579 
2580 	*val = (*val & reg->mask) >> __ffs(reg->mask);
2581 
2582 	return 0;
2583 }
2584 
airoha_pinctrl_set_conf(struct airoha_pinctrl * pinctrl,enum airoha_pinctrl_confs_type conf_type,int pin,u32 val)2585 static int airoha_pinctrl_set_conf(struct airoha_pinctrl *pinctrl,
2586 				   enum airoha_pinctrl_confs_type conf_type,
2587 				   int pin, u32 val)
2588 {
2589 	const struct airoha_pinctrl_confs_info *confs_info;
2590 	const struct airoha_pinctrl_reg *reg = NULL;
2591 
2592 	confs_info = &pinctrl->confs_info[conf_type];
2593 
2594 	reg = airoha_pinctrl_get_conf_reg(confs_info->confs,
2595 					  confs_info->num_confs,
2596 					  pin);
2597 	if (!reg)
2598 		return -EINVAL;
2599 
2600 
2601 	if (regmap_update_bits(pinctrl->chip_scu, reg->offset, reg->mask,
2602 				val << __ffs(reg->mask)))
2603 		return -EINVAL;
2604 
2605 	return 0;
2606 }
2607 
2608 #define airoha_pinctrl_get_pullup_conf(pinctrl, pin, val)			\
2609 	airoha_pinctrl_get_conf((pinctrl), AIROHA_PINCTRL_CONFS_PULLUP,		\
2610 				(pin), (val))
2611 #define airoha_pinctrl_get_pulldown_conf(pinctrl, pin, val)			\
2612 	airoha_pinctrl_get_conf((pinctrl), AIROHA_PINCTRL_CONFS_PULLDOWN,	\
2613 				(pin), (val))
2614 #define airoha_pinctrl_get_drive_e2_conf(pinctrl, pin, val)			\
2615 	airoha_pinctrl_get_conf((pinctrl), AIROHA_PINCTRL_CONFS_DRIVE_E2,	\
2616 				(pin), (val))
2617 #define airoha_pinctrl_get_drive_e4_conf(pinctrl, pin, val)			\
2618 	airoha_pinctrl_get_conf((pinctrl), AIROHA_PINCTRL_CONFS_DRIVE_E4,	\
2619 				(pin), (val))
2620 #define airoha_pinctrl_get_pcie_rst_od_conf(pinctrl, pin, val)			\
2621 	airoha_pinctrl_get_conf((pinctrl), AIROHA_PINCTRL_CONFS_PCIE_RST_OD,	\
2622 				(pin), (val))
2623 #define airoha_pinctrl_set_pullup_conf(pinctrl, pin, val)			\
2624 	airoha_pinctrl_set_conf((pinctrl), AIROHA_PINCTRL_CONFS_PULLUP,		\
2625 				(pin), (val))
2626 #define airoha_pinctrl_set_pulldown_conf(pinctrl, pin, val)			\
2627 	airoha_pinctrl_set_conf((pinctrl), AIROHA_PINCTRL_CONFS_PULLDOWN,	\
2628 				(pin), (val))
2629 #define airoha_pinctrl_set_drive_e2_conf(pinctrl, pin, val)			\
2630 	airoha_pinctrl_set_conf((pinctrl), AIROHA_PINCTRL_CONFS_DRIVE_E2,	\
2631 				(pin), (val))
2632 #define airoha_pinctrl_set_drive_e4_conf(pinctrl, pin, val)			\
2633 	airoha_pinctrl_set_conf((pinctrl), AIROHA_PINCTRL_CONFS_DRIVE_E4,	\
2634 				(pin), (val))
2635 #define airoha_pinctrl_set_pcie_rst_od_conf(pinctrl, pin, val)			\
2636 	airoha_pinctrl_set_conf((pinctrl), AIROHA_PINCTRL_CONFS_PCIE_RST_OD,	\
2637 				(pin), (val))
2638 
airoha_pinconf_get_direction(struct pinctrl_dev * pctrl_dev,u32 p)2639 static int airoha_pinconf_get_direction(struct pinctrl_dev *pctrl_dev, u32 p)
2640 {
2641 	struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
2642 	u32 val, mask;
2643 	int err, pin;
2644 	u8 index;
2645 
2646 	pin = airoha_convert_pin_to_reg_offset(pctrl_dev, NULL, p);
2647 	if (pin < 0)
2648 		return pin;
2649 
2650 	index = pin / AIROHA_REG_GPIOCTRL_NUM_PIN;
2651 	err = regmap_read(pinctrl->regmap, pinctrl->gpiochip.dir[index], &val);
2652 	if (err)
2653 		return err;
2654 
2655 	mask = BIT(2 * (pin % AIROHA_REG_GPIOCTRL_NUM_PIN));
2656 	return val & mask ? PIN_CONFIG_OUTPUT_ENABLE : PIN_CONFIG_INPUT_ENABLE;
2657 }
2658 
airoha_pinconf_get(struct pinctrl_dev * pctrl_dev,unsigned int pin,unsigned long * config)2659 static int airoha_pinconf_get(struct pinctrl_dev *pctrl_dev,
2660 			      unsigned int pin, unsigned long *config)
2661 {
2662 	struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
2663 	enum pin_config_param param = pinconf_to_config_param(*config);
2664 	u32 arg;
2665 
2666 	switch (param) {
2667 	case PIN_CONFIG_BIAS_PULL_DOWN:
2668 	case PIN_CONFIG_BIAS_DISABLE:
2669 	case PIN_CONFIG_BIAS_PULL_UP: {
2670 		u32 pull_up, pull_down;
2671 
2672 		if (airoha_pinctrl_get_pullup_conf(pinctrl, pin, &pull_up) ||
2673 		    airoha_pinctrl_get_pulldown_conf(pinctrl, pin, &pull_down))
2674 			return -EINVAL;
2675 
2676 		if (param == PIN_CONFIG_BIAS_PULL_UP &&
2677 		    !(pull_up && !pull_down))
2678 			return -EINVAL;
2679 		else if (param == PIN_CONFIG_BIAS_PULL_DOWN &&
2680 			 !(pull_down && !pull_up))
2681 			return -EINVAL;
2682 		else if (pull_up || pull_down)
2683 			return -EINVAL;
2684 
2685 		arg = 1;
2686 		break;
2687 	}
2688 	case PIN_CONFIG_DRIVE_STRENGTH: {
2689 		u32 e2, e4;
2690 
2691 		if (airoha_pinctrl_get_drive_e2_conf(pinctrl, pin, &e2) ||
2692 		    airoha_pinctrl_get_drive_e4_conf(pinctrl, pin, &e4))
2693 			return -EINVAL;
2694 
2695 		arg = e4 << 1 | e2;
2696 		break;
2697 	}
2698 	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
2699 		if (airoha_pinctrl_get_pcie_rst_od_conf(pinctrl, pin, &arg))
2700 			return -EINVAL;
2701 		break;
2702 	case PIN_CONFIG_OUTPUT_ENABLE:
2703 	case PIN_CONFIG_INPUT_ENABLE:
2704 		arg = airoha_pinconf_get_direction(pctrl_dev, pin);
2705 		if (arg != param)
2706 			return -EINVAL;
2707 
2708 		arg = 1;
2709 		break;
2710 	default:
2711 		return -ENOTSUPP;
2712 	}
2713 
2714 	*config = pinconf_to_config_packed(param, arg);
2715 
2716 	return 0;
2717 }
2718 
airoha_pinconf_set_pin_value(struct pinctrl_dev * pctrl_dev,unsigned int p,bool value)2719 static int airoha_pinconf_set_pin_value(struct pinctrl_dev *pctrl_dev,
2720 					unsigned int p, bool value)
2721 {
2722 	struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
2723 	int pin;
2724 
2725 	pin = airoha_convert_pin_to_reg_offset(pctrl_dev, NULL, p);
2726 	if (pin < 0)
2727 		return pin;
2728 
2729 	return airoha_gpio_set(&pinctrl->gpiochip.chip, pin, value);
2730 }
2731 
airoha_pinconf_set(struct pinctrl_dev * pctrl_dev,unsigned int pin,unsigned long * configs,unsigned int num_configs)2732 static int airoha_pinconf_set(struct pinctrl_dev *pctrl_dev,
2733 			      unsigned int pin, unsigned long *configs,
2734 			      unsigned int num_configs)
2735 {
2736 	struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
2737 	int i;
2738 
2739 	for (i = 0; i < num_configs; i++) {
2740 		u32 param = pinconf_to_config_param(configs[i]);
2741 		u32 arg = pinconf_to_config_argument(configs[i]);
2742 
2743 		switch (param) {
2744 		case PIN_CONFIG_BIAS_DISABLE:
2745 			airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 0);
2746 			airoha_pinctrl_set_pullup_conf(pinctrl, pin, 0);
2747 			break;
2748 		case PIN_CONFIG_BIAS_PULL_UP:
2749 			airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 0);
2750 			airoha_pinctrl_set_pullup_conf(pinctrl, pin, 1);
2751 			break;
2752 		case PIN_CONFIG_BIAS_PULL_DOWN:
2753 			airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 1);
2754 			airoha_pinctrl_set_pullup_conf(pinctrl, pin, 0);
2755 			break;
2756 		case PIN_CONFIG_DRIVE_STRENGTH: {
2757 			u32 e2 = 0, e4 = 0;
2758 
2759 			switch (arg) {
2760 			case MTK_DRIVE_2mA:
2761 				break;
2762 			case MTK_DRIVE_4mA:
2763 				e2 = 1;
2764 				break;
2765 			case MTK_DRIVE_6mA:
2766 				e4 = 1;
2767 				break;
2768 			case MTK_DRIVE_8mA:
2769 				e2 = 1;
2770 				e4 = 1;
2771 				break;
2772 			default:
2773 				return -EINVAL;
2774 			}
2775 
2776 			airoha_pinctrl_set_drive_e2_conf(pinctrl, pin, e2);
2777 			airoha_pinctrl_set_drive_e4_conf(pinctrl, pin, e4);
2778 			break;
2779 		}
2780 		case PIN_CONFIG_DRIVE_OPEN_DRAIN:
2781 			airoha_pinctrl_set_pcie_rst_od_conf(pinctrl, pin, !!arg);
2782 			break;
2783 		case PIN_CONFIG_OUTPUT_ENABLE:
2784 		case PIN_CONFIG_INPUT_ENABLE:
2785 		case PIN_CONFIG_LEVEL: {
2786 			bool input = param == PIN_CONFIG_INPUT_ENABLE;
2787 			int err;
2788 
2789 			err = airoha_pinmux_set_direction(pctrl_dev, NULL, pin,
2790 							  input);
2791 			if (err)
2792 				return err;
2793 
2794 			if (param == PIN_CONFIG_LEVEL) {
2795 				err = airoha_pinconf_set_pin_value(pctrl_dev,
2796 								   pin, !!arg);
2797 				if (err)
2798 					return err;
2799 			}
2800 			break;
2801 		}
2802 		default:
2803 			return -ENOTSUPP;
2804 		}
2805 	}
2806 
2807 	return 0;
2808 }
2809 
airoha_pinconf_group_get(struct pinctrl_dev * pctrl_dev,unsigned int group,unsigned long * config)2810 static int airoha_pinconf_group_get(struct pinctrl_dev *pctrl_dev,
2811 				    unsigned int group, unsigned long *config)
2812 {
2813 	struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
2814 	u32 cur_config = 0;
2815 	int i;
2816 
2817 	for (i = 0; i < pinctrl->grps[group].npins; i++) {
2818 		if (airoha_pinconf_get(pctrl_dev,
2819 					pinctrl->grps[group].pins[i],
2820 					config))
2821 			return -ENOTSUPP;
2822 
2823 		if (i && cur_config != *config)
2824 			return -ENOTSUPP;
2825 
2826 		cur_config = *config;
2827 	}
2828 
2829 	return 0;
2830 }
2831 
airoha_pinconf_group_set(struct pinctrl_dev * pctrl_dev,unsigned int group,unsigned long * configs,unsigned int num_configs)2832 static int airoha_pinconf_group_set(struct pinctrl_dev *pctrl_dev,
2833 				    unsigned int group, unsigned long *configs,
2834 				    unsigned int num_configs)
2835 {
2836 	struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
2837 	int i;
2838 
2839 	for (i = 0; i < pinctrl->grps[group].npins; i++) {
2840 		int err;
2841 
2842 		err = airoha_pinconf_set(pctrl_dev,
2843 					 pinctrl->grps[group].pins[i],
2844 					 configs, num_configs);
2845 		if (err)
2846 			return err;
2847 	}
2848 
2849 	return 0;
2850 }
2851 
2852 static const struct pinconf_ops airoha_confops = {
2853 	.is_generic = true,
2854 	.pin_config_get = airoha_pinconf_get,
2855 	.pin_config_set = airoha_pinconf_set,
2856 	.pin_config_group_get = airoha_pinconf_group_get,
2857 	.pin_config_group_set = airoha_pinconf_group_set,
2858 	.pin_config_config_dbg_show = pinconf_generic_dump_config,
2859 };
2860 
2861 static const struct pinctrl_ops airoha_pctlops = {
2862 	.get_groups_count = pinctrl_generic_get_group_count,
2863 	.get_group_name = pinctrl_generic_get_group_name,
2864 	.get_group_pins = pinctrl_generic_get_group_pins,
2865 	.dt_node_to_map = pinconf_generic_dt_node_to_map_all,
2866 	.dt_free_map = pinconf_generic_dt_free_map,
2867 };
2868 
airoha_pinctrl_probe(struct platform_device * pdev)2869 static int airoha_pinctrl_probe(struct platform_device *pdev)
2870 {
2871 	const struct airoha_pinctrl_match_data *data;
2872 	struct device *dev = &pdev->dev;
2873 	struct airoha_pinctrl *pinctrl;
2874 	struct regmap *map;
2875 	int err, i;
2876 
2877 	data = device_get_match_data(dev);
2878 
2879 	pinctrl = devm_kzalloc(dev, sizeof(*pinctrl), GFP_KERNEL);
2880 	if (!pinctrl)
2881 		return -ENOMEM;
2882 
2883 	pinctrl->regmap = device_node_to_regmap(dev->parent->of_node);
2884 	if (IS_ERR(pinctrl->regmap))
2885 		return PTR_ERR(pinctrl->regmap);
2886 
2887 	map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu");
2888 	if (IS_ERR(map))
2889 		return PTR_ERR(map);
2890 
2891 	pinctrl->chip_scu = map;
2892 
2893 	/* Init pinctrl desc struct */
2894 	pinctrl->desc.name = KBUILD_MODNAME;
2895 	pinctrl->desc.owner = THIS_MODULE;
2896 	pinctrl->desc.pctlops = &airoha_pctlops;
2897 	pinctrl->desc.pmxops = &airoha_pmxops;
2898 	pinctrl->desc.confops = &airoha_confops;
2899 	pinctrl->desc.pins = data->pins;
2900 	pinctrl->desc.npins = data->num_pins;
2901 
2902 	err = devm_pinctrl_register_and_init(dev, &pinctrl->desc,
2903 					     pinctrl, &pinctrl->ctrl);
2904 	if (err)
2905 		return err;
2906 
2907 	/* build pin groups */
2908 	for (i = 0; i < data->num_grps; i++) {
2909 		const struct pingroup *grp = &data->grps[i];
2910 
2911 		err = pinctrl_generic_add_group(pinctrl->ctrl, grp->name,
2912 						grp->pins, grp->npins,
2913 						(void *)grp);
2914 		if (err < 0) {
2915 			dev_err(&pdev->dev, "Failed to register group %s\n",
2916 				grp->name);
2917 			return err;
2918 		}
2919 	}
2920 
2921 	/* build functions */
2922 	for (i = 0; i < data->num_funcs; i++) {
2923 		const struct airoha_pinctrl_func *func;
2924 
2925 		func = &data->funcs[i];
2926 		err = pinmux_generic_add_pinfunction(pinctrl->ctrl,
2927 						     &func->desc,
2928 						     (void *)func);
2929 		if (err < 0) {
2930 			dev_err(dev, "Failed to register function %s\n",
2931 				func->desc.name);
2932 			return err;
2933 		}
2934 	}
2935 
2936 	pinctrl->grps = data->grps;
2937 	pinctrl->funcs = data->funcs;
2938 	pinctrl->confs_info = data->confs_info;
2939 
2940 	err = pinctrl_enable(pinctrl->ctrl);
2941 	if (err)
2942 		return err;
2943 
2944 	/* build gpio-chip */
2945 	return airoha_pinctrl_add_gpiochip(pinctrl, pdev);
2946 }
2947 
2948 static const struct airoha_pinctrl_match_data en7581_pinctrl_match_data = {
2949 	.pins = en7581_pinctrl_pins,
2950 	.num_pins = ARRAY_SIZE(en7581_pinctrl_pins),
2951 	.grps = en7581_pinctrl_groups,
2952 	.num_grps = ARRAY_SIZE(en7581_pinctrl_groups),
2953 	.funcs = en7581_pinctrl_funcs,
2954 	.num_funcs = ARRAY_SIZE(en7581_pinctrl_funcs),
2955 	.confs_info = {
2956 		[AIROHA_PINCTRL_CONFS_PULLUP] = {
2957 			.confs = en7581_pinctrl_pullup_conf,
2958 			.num_confs = ARRAY_SIZE(en7581_pinctrl_pullup_conf),
2959 		},
2960 		[AIROHA_PINCTRL_CONFS_PULLDOWN] = {
2961 			.confs = en7581_pinctrl_pulldown_conf,
2962 			.num_confs = ARRAY_SIZE(en7581_pinctrl_pulldown_conf),
2963 		},
2964 		[AIROHA_PINCTRL_CONFS_DRIVE_E2] = {
2965 			.confs = en7581_pinctrl_drive_e2_conf,
2966 			.num_confs = ARRAY_SIZE(en7581_pinctrl_drive_e2_conf),
2967 		},
2968 		[AIROHA_PINCTRL_CONFS_DRIVE_E4] = {
2969 			.confs = en7581_pinctrl_drive_e4_conf,
2970 			.num_confs = ARRAY_SIZE(en7581_pinctrl_drive_e4_conf),
2971 		},
2972 		[AIROHA_PINCTRL_CONFS_PCIE_RST_OD] = {
2973 			.confs = en7581_pinctrl_pcie_rst_od_conf,
2974 			.num_confs = ARRAY_SIZE(en7581_pinctrl_pcie_rst_od_conf),
2975 		},
2976 	},
2977 };
2978 
2979 static const struct airoha_pinctrl_match_data an7583_pinctrl_match_data = {
2980 	.pins = an7583_pinctrl_pins,
2981 	.num_pins = ARRAY_SIZE(an7583_pinctrl_pins),
2982 	.grps = an7583_pinctrl_groups,
2983 	.num_grps = ARRAY_SIZE(an7583_pinctrl_groups),
2984 	.funcs = an7583_pinctrl_funcs,
2985 	.num_funcs = ARRAY_SIZE(an7583_pinctrl_funcs),
2986 	.confs_info = {
2987 		[AIROHA_PINCTRL_CONFS_PULLUP] = {
2988 			.confs = an7583_pinctrl_pullup_conf,
2989 			.num_confs = ARRAY_SIZE(an7583_pinctrl_pullup_conf),
2990 		},
2991 		[AIROHA_PINCTRL_CONFS_PULLDOWN] = {
2992 			.confs = an7583_pinctrl_pulldown_conf,
2993 			.num_confs = ARRAY_SIZE(an7583_pinctrl_pulldown_conf),
2994 		},
2995 		[AIROHA_PINCTRL_CONFS_DRIVE_E2] = {
2996 			.confs = an7583_pinctrl_drive_e2_conf,
2997 			.num_confs = ARRAY_SIZE(an7583_pinctrl_drive_e2_conf),
2998 		},
2999 		[AIROHA_PINCTRL_CONFS_DRIVE_E4] = {
3000 			.confs = an7583_pinctrl_drive_e4_conf,
3001 			.num_confs = ARRAY_SIZE(an7583_pinctrl_drive_e4_conf),
3002 		},
3003 		[AIROHA_PINCTRL_CONFS_PCIE_RST_OD] = {
3004 			.confs = an7583_pinctrl_pcie_rst_od_conf,
3005 			.num_confs = ARRAY_SIZE(an7583_pinctrl_pcie_rst_od_conf),
3006 		},
3007 	},
3008 };
3009 
3010 static const struct of_device_id airoha_pinctrl_of_match[] = {
3011 	{ .compatible = "airoha,en7581-pinctrl", .data = &en7581_pinctrl_match_data },
3012 	{ .compatible = "airoha,an7583-pinctrl", .data = &an7583_pinctrl_match_data },
3013 	{ /* sentinel */ }
3014 };
3015 MODULE_DEVICE_TABLE(of, airoha_pinctrl_of_match);
3016 
3017 static struct platform_driver airoha_pinctrl_driver = {
3018 	.probe = airoha_pinctrl_probe,
3019 	.driver = {
3020 		.name = "pinctrl-airoha",
3021 		.of_match_table = airoha_pinctrl_of_match,
3022 	},
3023 };
3024 module_platform_driver(airoha_pinctrl_driver);
3025 
3026 MODULE_LICENSE("GPL");
3027 MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>");
3028 MODULE_AUTHOR("Benjamin Larsson <benjamin.larsson@genexis.eu>");
3029 MODULE_AUTHOR("Markus Gothe <markus.gothe@genexis.eu>");
3030 MODULE_DESCRIPTION("Pinctrl driver for Airoha SoC");
3031