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