1 /*
2 * pinctrl pads, groups, functions for CSR SiRFatlasVII
3 *
4 * Copyright (c) 2011 - 2014 Cambridge Silicon Radio Limited, a CSR plc group
5 * company.
6 *
7 * Licensed under GPLv2 or later.
8 */
9
10 #include <linux/module.h>
11 #include <linux/platform_device.h>
12 #include <linux/io.h>
13 #include <linux/bitops.h>
14 #include <linux/irq.h>
15 #include <linux/slab.h>
16 #include <linux/clk.h>
17 #include <linux/of.h>
18 #include <linux/of_address.h>
19 #include <linux/of_device.h>
20 #include <linux/of_platform.h>
21 #include <linux/of_irq.h>
22 #include <linux/of_gpio.h>
23 #include <linux/pinctrl/machine.h>
24 #include <linux/pinctrl/pinconf.h>
25 #include <linux/pinctrl/pinctrl.h>
26 #include <linux/pinctrl/pinmux.h>
27 #include <linux/pinctrl/consumer.h>
28 #include <linux/pinctrl/pinconf-generic.h>
29 #include <linux/gpio.h>
30
31 /* Definition of Pad&Mux Properties */
32 #define N 0
33
34 /* The Bank contains input-disable regisgers */
35 #define BANK_DS 0
36
37 /* Clear Register offset */
38 #define CLR_REG(r) ((r) + 0x04)
39
40 /* Definition of multiple function select register */
41 #define FUNC_CLEAR_MASK 0x7
42 #define FUNC_GPIO 0
43 #define FUNC_ANALOGUE 0x8
44 #define ANA_CLEAR_MASK 0x1
45
46 /* The Atlas7's Pad Type List */
47 enum altas7_pad_type {
48 PAD_T_4WE_PD = 0, /* ZIO_PAD3V_4WE_PD */
49 PAD_T_4WE_PU, /* ZIO_PAD3V_4WE_PD */
50 PAD_T_16ST, /* ZIO_PAD3V_SDCLK_PD */
51 PAD_T_M31_0204_PD, /* PRDW0204SDGZ_M311311_PD */
52 PAD_T_M31_0204_PU, /* PRDW0204SDGZ_M311311_PU */
53 PAD_T_M31_0610_PD, /* PRUW0610SDGZ_M311311_PD */
54 PAD_T_M31_0610_PU, /* PRUW0610SDGZ_M311311_PU */
55 PAD_T_AD, /* PRDWUWHW08SCDG_HZ */
56 };
57
58 /* Raw value of Driver-Strength Bits */
59 #define DS3 BIT(3)
60 #define DS2 BIT(2)
61 #define DS1 BIT(1)
62 #define DS0 BIT(0)
63 #define DSZ 0
64
65 /* Drive-Strength Intermediate Values */
66 #define DS_NULL -1
67 #define DS_1BIT_IM_VAL DS0
68 #define DS_1BIT_MASK 0x1
69 #define DS_2BIT_IM_VAL (DS1 | DS0)
70 #define DS_2BIT_MASK 0x3
71 #define DS_4BIT_IM_VAL (DS3 | DS2 | DS1 | DS0)
72 #define DS_4BIT_MASK 0xf
73
74 /* The Drive-Strength of 4WE Pad DS1 0 CO */
75 #define DS_4WE_3 (DS1 | DS0) /* 1 1 3 */
76 #define DS_4WE_2 (DS1) /* 1 0 2 */
77 #define DS_4WE_1 (DS0) /* 0 1 1 */
78 #define DS_4WE_0 (DSZ) /* 0 0 0 */
79
80 /* The Drive-Strength of 16st Pad DS3 2 1 0 CO */
81 #define DS_16ST_15 (DS3 | DS2 | DS1 | DS0) /* 1 1 1 1 15 */
82 #define DS_16ST_14 (DS3 | DS2 | DS0) /* 1 1 0 1 13 */
83 #define DS_16ST_13 (DS3 | DS2 | DS1) /* 1 1 1 0 14 */
84 #define DS_16ST_12 (DS2 | DS1 | DS0) /* 0 1 1 1 7 */
85 #define DS_16ST_11 (DS2 | DS0) /* 0 1 0 1 5 */
86 #define DS_16ST_10 (DS3 | DS1 | DS0) /* 1 0 1 1 11 */
87 #define DS_16ST_9 (DS3 | DS0) /* 1 0 0 1 9 */
88 #define DS_16ST_8 (DS1 | DS0) /* 0 0 1 1 3 */
89 #define DS_16ST_7 (DS2 | DS1) /* 0 1 1 0 6 */
90 #define DS_16ST_6 (DS3 | DS2) /* 1 1 0 0 12 */
91 #define DS_16ST_5 (DS2) /* 0 1 0 0 4 */
92 #define DS_16ST_4 (DS3 | DS1) /* 1 0 1 0 10 */
93 #define DS_16ST_3 (DS1) /* 0 0 1 0 2 */
94 #define DS_16ST_2 (DS0) /* 0 0 0 1 1 */
95 #define DS_16ST_1 (DSZ) /* 0 0 0 0 0 */
96 #define DS_16ST_0 (DS3) /* 1 0 0 0 8 */
97
98 /* The Drive-Strength of M31 Pad DS0 CO */
99 #define DS_M31_0 (DSZ) /* 0 0 */
100 #define DS_M31_1 (DS0) /* 1 1 */
101
102 /* Raw values of Pull Option Bits */
103 #define PUN BIT(1)
104 #define PD BIT(0)
105 #define PE BIT(0)
106 #define PZ 0
107
108 /* Definition of Pull Types */
109 #define PULL_UP 0
110 #define HIGH_HYSTERESIS 1
111 #define HIGH_Z 2
112 #define PULL_DOWN 3
113 #define PULL_DISABLE 4
114 #define PULL_ENABLE 5
115 #define PULL_UNKNOWN -1
116
117 /* Pull Options for 4WE Pad PUN PD CO */
118 #define P4WE_PULL_MASK 0x3
119 #define P4WE_PULL_DOWN (PUN | PD) /* 1 1 3 */
120 #define P4WE_HIGH_Z (PUN) /* 1 0 2 */
121 #define P4WE_HIGH_HYSTERESIS (PD) /* 0 1 1 */
122 #define P4WE_PULL_UP (PZ) /* 0 0 0 */
123
124 /* Pull Options for 16ST Pad PUN PD CO */
125 #define P16ST_PULL_MASK 0x3
126 #define P16ST_PULL_DOWN (PUN | PD) /* 1 1 3 */
127 #define P16ST_HIGH_Z (PUN) /* 1 0 2 */
128 #define P16ST_PULL_UP (PZ) /* 0 0 0 */
129
130 /* Pull Options for M31 Pad PE */
131 #define PM31_PULL_MASK 0x1
132 #define PM31_PULL_ENABLED (PE) /* 1 */
133 #define PM31_PULL_DISABLED (PZ) /* 0 */
134
135 /* Pull Options for A/D Pad PUN PD CO */
136 #define PANGD_PULL_MASK 0x3
137 #define PANGD_PULL_DOWN (PUN | PD) /* 1 1 3 */
138 #define PANGD_HIGH_Z (PUN) /* 1 0 2 */
139 #define PANGD_PULL_UP (PZ) /* 0 0 0 */
140
141 /* Definition of Input Disable */
142 #define DI_MASK 0x1
143 #define DI_DISABLE 0x1
144 #define DI_ENABLE 0x0
145
146 /* Definition of Input Disable Value */
147 #define DIV_MASK 0x1
148 #define DIV_DISABLE 0x1
149 #define DIV_ENABLE 0x0
150
151 /* Number of Function input disable registers */
152 #define NUM_OF_IN_DISABLE_REG 0x2
153
154 /* Offset of Function input disable registers */
155 #define IN_DISABLE_0_REG_SET 0x0A00
156 #define IN_DISABLE_0_REG_CLR 0x0A04
157 #define IN_DISABLE_1_REG_SET 0x0A08
158 #define IN_DISABLE_1_REG_CLR 0x0A0C
159 #define IN_DISABLE_VAL_0_REG_SET 0x0A80
160 #define IN_DISABLE_VAL_0_REG_CLR 0x0A84
161 #define IN_DISABLE_VAL_1_REG_SET 0x0A88
162 #define IN_DISABLE_VAL_1_REG_CLR 0x0A8C
163
164 struct dt_params {
165 const char *property;
166 int value;
167 };
168
169 /**
170 * struct atlas7_pad_conf - Atlas7 Pad Configuration
171 * @id The ID of this Pad.
172 * @type: The type of this Pad.
173 * @mux_reg: The mux register offset.
174 * This register contains the mux.
175 * @pupd_reg: The pull-up/down register offset.
176 * @drvstr_reg: The drive-strength register offset.
177 * @ad_ctrl_reg: The Analogue/Digital Control register.
178 *
179 * @mux_bit: The start bit of mux register.
180 * @pupd_bit: The start bit of pull-up/down register.
181 * @drvstr_bit: The start bit of drive-strength register.
182 * @ad_ctrl_bit: The start bit of analogue/digital register.
183 */
184 struct atlas7_pad_config {
185 const u32 id;
186 u32 type;
187 u32 mux_reg;
188 u32 pupd_reg;
189 u32 drvstr_reg;
190 u32 ad_ctrl_reg;
191 /* bits in register */
192 u8 mux_bit;
193 u8 pupd_bit;
194 u8 drvstr_bit;
195 u8 ad_ctrl_bit;
196 };
197
198 #define PADCONF(pad, t, mr, pr, dsr, adr, mb, pb, dsb, adb) \
199 { \
200 .id = pad, \
201 .type = t, \
202 .mux_reg = mr, \
203 .pupd_reg = pr, \
204 .drvstr_reg = dsr, \
205 .ad_ctrl_reg = adr, \
206 .mux_bit = mb, \
207 .pupd_bit = pb, \
208 .drvstr_bit = dsb, \
209 .ad_ctrl_bit = adb, \
210 }
211
212 /**
213 * struct atlas7_pad_status - Atlas7 Pad status
214 */
215 struct atlas7_pad_status {
216 u8 func;
217 u8 pull;
218 u8 dstr;
219 u8 reserved;
220 };
221
222 /**
223 * struct atlas7_pad_mux - Atlas7 mux
224 * @bank: The bank of this pad's registers on.
225 * @pin : The ID of this Pad.
226 * @func: The mux func on this Pad.
227 * @dinput_reg: The Input-Disable register offset.
228 * @dinput_bit: The start bit of Input-Disable register.
229 * @dinput_val_reg: The Input-Disable-value register offset.
230 * This register is used to set the value of this pad
231 * if this pad was disabled.
232 * @dinput_val_bit: The start bit of Input-Disable Value register.
233 */
234 struct atlas7_pad_mux {
235 u32 bank;
236 u32 pin;
237 u32 func;
238 u32 dinput_reg;
239 u32 dinput_bit;
240 u32 dinput_val_reg;
241 u32 dinput_val_bit;
242 };
243
244 #define MUX(b, pad, f, dr, db, dvr, dvb) \
245 { \
246 .bank = b, \
247 .pin = pad, \
248 .func = f, \
249 .dinput_reg = dr, \
250 .dinput_bit = db, \
251 .dinput_val_reg = dvr, \
252 .dinput_val_bit = dvb, \
253 }
254
255 struct atlas7_grp_mux {
256 unsigned int group;
257 unsigned int pad_mux_count;
258 const struct atlas7_pad_mux *pad_mux_list;
259 };
260
261 /**
262 * struct sirfsoc_pin_group - describes a SiRFprimaII pin group
263 * @name: the name of this specific pin group
264 * @pins: an array of discrete physical pins used in this group, taken
265 * from the driver-local pin enumeration space
266 * @num_pins: the number of pins in this group array, i.e. the number of
267 * elements in .pins so we can iterate over that array
268 */
269 struct atlas7_pin_group {
270 const char *name;
271 const unsigned int *pins;
272 const unsigned num_pins;
273 };
274
275 #define GROUP(n, p) \
276 { \
277 .name = n, \
278 .pins = p, \
279 .num_pins = ARRAY_SIZE(p), \
280 }
281
282 struct atlas7_pmx_func {
283 const char *name;
284 const char * const *groups;
285 const unsigned num_groups;
286 const struct atlas7_grp_mux *grpmux;
287 };
288
289 #define FUNCTION(n, g, m) \
290 { \
291 .name = n, \
292 .groups = g, \
293 .num_groups = ARRAY_SIZE(g), \
294 .grpmux = m, \
295 }
296
297 struct atlas7_pinctrl_data {
298 struct pinctrl_pin_desc *pads;
299 int pads_cnt;
300 struct atlas7_pin_group *grps;
301 int grps_cnt;
302 struct atlas7_pmx_func *funcs;
303 int funcs_cnt;
304 struct atlas7_pad_config *confs;
305 int confs_cnt;
306 };
307
308 /* Platform info of atlas7 pinctrl */
309 #define ATLAS7_PINCTRL_REG_BANKS 2
310 #define ATLAS7_PINCTRL_BANK_0_PINS 18
311 #define ATLAS7_PINCTRL_BANK_1_PINS 141
312 #define ATLAS7_PINCTRL_TOTAL_PINS \
313 (ATLAS7_PINCTRL_BANK_0_PINS + ATLAS7_PINCTRL_BANK_1_PINS)
314
315 /**
316 * Atlas7 GPIO Chip
317 */
318
319 #define NGPIO_OF_BANK 32
320 #define GPIO_TO_BANK(gpio) ((gpio) / NGPIO_OF_BANK)
321
322 /* Registers of GPIO Controllers */
323 #define ATLAS7_GPIO_BASE(g, b) ((g)->reg + 0x100 * (b))
324 #define ATLAS7_GPIO_CTRL(b, i) ((b)->base + 4 * (i))
325 #define ATLAS7_GPIO_INT_STATUS(b) ((b)->base + 0x8C)
326
327 /* Definition bits of GPIO Control Registers */
328 #define ATLAS7_GPIO_CTL_INTR_LOW_MASK BIT(0)
329 #define ATLAS7_GPIO_CTL_INTR_HIGH_MASK BIT(1)
330 #define ATLAS7_GPIO_CTL_INTR_TYPE_MASK BIT(2)
331 #define ATLAS7_GPIO_CTL_INTR_EN_MASK BIT(3)
332 #define ATLAS7_GPIO_CTL_INTR_STATUS_MASK BIT(4)
333 #define ATLAS7_GPIO_CTL_OUT_EN_MASK BIT(5)
334 #define ATLAS7_GPIO_CTL_DATAOUT_MASK BIT(6)
335 #define ATLAS7_GPIO_CTL_DATAIN_MASK BIT(7)
336
337 struct atlas7_gpio_bank {
338 struct pinctrl_dev *pctldev;
339 int id;
340 int irq;
341 void __iomem *base;
342 unsigned int gpio_offset;
343 unsigned int ngpio;
344 const unsigned int *gpio_pins;
345 u32 sleep_data[NGPIO_OF_BANK];
346 };
347
348 struct atlas7_gpio_chip {
349 const char *name;
350 void __iomem *reg;
351 struct clk *clk;
352 int nbank;
353 spinlock_t lock;
354 struct gpio_chip chip;
355 struct atlas7_gpio_bank banks[0];
356 };
357
to_atlas7_gpio(struct gpio_chip * gc)358 static inline struct atlas7_gpio_chip *to_atlas7_gpio(struct gpio_chip *gc)
359 {
360 return container_of(gc, struct atlas7_gpio_chip, chip);
361 }
362
363 /**
364 * @dev: a pointer back to containing device
365 * @virtbase: the offset to the controller in virtual memory
366 */
367 struct atlas7_pmx {
368 struct device *dev;
369 struct pinctrl_dev *pctl;
370 struct pinctrl_desc pctl_desc;
371 struct atlas7_pinctrl_data *pctl_data;
372 void __iomem *regs[ATLAS7_PINCTRL_REG_BANKS];
373 u32 status_ds[NUM_OF_IN_DISABLE_REG];
374 u32 status_dsv[NUM_OF_IN_DISABLE_REG];
375 struct atlas7_pad_status sleep_data[ATLAS7_PINCTRL_TOTAL_PINS];
376 };
377
378 /*
379 * Pad list for the pinmux subsystem
380 * refer to A7DA IO Summary - CS-314158-DD-4E.xls
381 */
382
383 /*Pads in IOC RTC & TOP */
384 static const struct pinctrl_pin_desc atlas7_ioc_pads[] = {
385 /* RTC PADs */
386 PINCTRL_PIN(0, "rtc_gpio_0"),
387 PINCTRL_PIN(1, "rtc_gpio_1"),
388 PINCTRL_PIN(2, "rtc_gpio_2"),
389 PINCTRL_PIN(3, "rtc_gpio_3"),
390 PINCTRL_PIN(4, "low_bat_ind_b"),
391 PINCTRL_PIN(5, "on_key_b"),
392 PINCTRL_PIN(6, "ext_on"),
393 PINCTRL_PIN(7, "mem_on"),
394 PINCTRL_PIN(8, "core_on"),
395 PINCTRL_PIN(9, "io_on"),
396 PINCTRL_PIN(10, "can0_tx"),
397 PINCTRL_PIN(11, "can0_rx"),
398 PINCTRL_PIN(12, "spi0_clk"),
399 PINCTRL_PIN(13, "spi0_cs_b"),
400 PINCTRL_PIN(14, "spi0_io_0"),
401 PINCTRL_PIN(15, "spi0_io_1"),
402 PINCTRL_PIN(16, "spi0_io_2"),
403 PINCTRL_PIN(17, "spi0_io_3"),
404
405 /* TOP PADs */
406 PINCTRL_PIN(18, "spi1_en"),
407 PINCTRL_PIN(19, "spi1_clk"),
408 PINCTRL_PIN(20, "spi1_din"),
409 PINCTRL_PIN(21, "spi1_dout"),
410 PINCTRL_PIN(22, "trg_spi_clk"),
411 PINCTRL_PIN(23, "trg_spi_di"),
412 PINCTRL_PIN(24, "trg_spi_do"),
413 PINCTRL_PIN(25, "trg_spi_cs_b"),
414 PINCTRL_PIN(26, "trg_acq_d1"),
415 PINCTRL_PIN(27, "trg_irq_b"),
416 PINCTRL_PIN(28, "trg_acq_d0"),
417 PINCTRL_PIN(29, "trg_acq_clk"),
418 PINCTRL_PIN(30, "trg_shutdown_b_out"),
419 PINCTRL_PIN(31, "sdio2_clk"),
420 PINCTRL_PIN(32, "sdio2_cmd"),
421 PINCTRL_PIN(33, "sdio2_dat_0"),
422 PINCTRL_PIN(34, "sdio2_dat_1"),
423 PINCTRL_PIN(35, "sdio2_dat_2"),
424 PINCTRL_PIN(36, "sdio2_dat_3"),
425 PINCTRL_PIN(37, "df_ad_7"),
426 PINCTRL_PIN(38, "df_ad_6"),
427 PINCTRL_PIN(39, "df_ad_5"),
428 PINCTRL_PIN(40, "df_ad_4"),
429 PINCTRL_PIN(41, "df_ad_3"),
430 PINCTRL_PIN(42, "df_ad_2"),
431 PINCTRL_PIN(43, "df_ad_1"),
432 PINCTRL_PIN(44, "df_ad_0"),
433 PINCTRL_PIN(45, "df_dqs"),
434 PINCTRL_PIN(46, "df_cle"),
435 PINCTRL_PIN(47, "df_ale"),
436 PINCTRL_PIN(48, "df_we_b"),
437 PINCTRL_PIN(49, "df_re_b"),
438 PINCTRL_PIN(50, "df_ry_by"),
439 PINCTRL_PIN(51, "df_cs_b_1"),
440 PINCTRL_PIN(52, "df_cs_b_0"),
441 PINCTRL_PIN(53, "l_pclk"),
442 PINCTRL_PIN(54, "l_lck"),
443 PINCTRL_PIN(55, "l_fck"),
444 PINCTRL_PIN(56, "l_de"),
445 PINCTRL_PIN(57, "ldd_0"),
446 PINCTRL_PIN(58, "ldd_1"),
447 PINCTRL_PIN(59, "ldd_2"),
448 PINCTRL_PIN(60, "ldd_3"),
449 PINCTRL_PIN(61, "ldd_4"),
450 PINCTRL_PIN(62, "ldd_5"),
451 PINCTRL_PIN(63, "ldd_6"),
452 PINCTRL_PIN(64, "ldd_7"),
453 PINCTRL_PIN(65, "ldd_8"),
454 PINCTRL_PIN(66, "ldd_9"),
455 PINCTRL_PIN(67, "ldd_10"),
456 PINCTRL_PIN(68, "ldd_11"),
457 PINCTRL_PIN(69, "ldd_12"),
458 PINCTRL_PIN(70, "ldd_13"),
459 PINCTRL_PIN(71, "ldd_14"),
460 PINCTRL_PIN(72, "ldd_15"),
461 PINCTRL_PIN(73, "lcd_gpio_20"),
462 PINCTRL_PIN(74, "vip_0"),
463 PINCTRL_PIN(75, "vip_1"),
464 PINCTRL_PIN(76, "vip_2"),
465 PINCTRL_PIN(77, "vip_3"),
466 PINCTRL_PIN(78, "vip_4"),
467 PINCTRL_PIN(79, "vip_5"),
468 PINCTRL_PIN(80, "vip_6"),
469 PINCTRL_PIN(81, "vip_7"),
470 PINCTRL_PIN(82, "vip_pxclk"),
471 PINCTRL_PIN(83, "vip_hsync"),
472 PINCTRL_PIN(84, "vip_vsync"),
473 PINCTRL_PIN(85, "sdio3_clk"),
474 PINCTRL_PIN(86, "sdio3_cmd"),
475 PINCTRL_PIN(87, "sdio3_dat_0"),
476 PINCTRL_PIN(88, "sdio3_dat_1"),
477 PINCTRL_PIN(89, "sdio3_dat_2"),
478 PINCTRL_PIN(90, "sdio3_dat_3"),
479 PINCTRL_PIN(91, "sdio5_clk"),
480 PINCTRL_PIN(92, "sdio5_cmd"),
481 PINCTRL_PIN(93, "sdio5_dat_0"),
482 PINCTRL_PIN(94, "sdio5_dat_1"),
483 PINCTRL_PIN(95, "sdio5_dat_2"),
484 PINCTRL_PIN(96, "sdio5_dat_3"),
485 PINCTRL_PIN(97, "rgmii_txd_0"),
486 PINCTRL_PIN(98, "rgmii_txd_1"),
487 PINCTRL_PIN(99, "rgmii_txd_2"),
488 PINCTRL_PIN(100, "rgmii_txd_3"),
489 PINCTRL_PIN(101, "rgmii_txclk"),
490 PINCTRL_PIN(102, "rgmii_tx_ctl"),
491 PINCTRL_PIN(103, "rgmii_rxd_0"),
492 PINCTRL_PIN(104, "rgmii_rxd_1"),
493 PINCTRL_PIN(105, "rgmii_rxd_2"),
494 PINCTRL_PIN(106, "rgmii_rxd_3"),
495 PINCTRL_PIN(107, "rgmii_rx_clk"),
496 PINCTRL_PIN(108, "rgmii_rxc_ctl"),
497 PINCTRL_PIN(109, "rgmii_mdio"),
498 PINCTRL_PIN(110, "rgmii_mdc"),
499 PINCTRL_PIN(111, "rgmii_intr_n"),
500 PINCTRL_PIN(112, "i2s_mclk"),
501 PINCTRL_PIN(113, "i2s_bclk"),
502 PINCTRL_PIN(114, "i2s_ws"),
503 PINCTRL_PIN(115, "i2s_dout0"),
504 PINCTRL_PIN(116, "i2s_dout1"),
505 PINCTRL_PIN(117, "i2s_dout2"),
506 PINCTRL_PIN(118, "i2s_din"),
507 PINCTRL_PIN(119, "gpio_0"),
508 PINCTRL_PIN(120, "gpio_1"),
509 PINCTRL_PIN(121, "gpio_2"),
510 PINCTRL_PIN(122, "gpio_3"),
511 PINCTRL_PIN(123, "gpio_4"),
512 PINCTRL_PIN(124, "gpio_5"),
513 PINCTRL_PIN(125, "gpio_6"),
514 PINCTRL_PIN(126, "gpio_7"),
515 PINCTRL_PIN(127, "sda_0"),
516 PINCTRL_PIN(128, "scl_0"),
517 PINCTRL_PIN(129, "coex_pio_0"),
518 PINCTRL_PIN(130, "coex_pio_1"),
519 PINCTRL_PIN(131, "coex_pio_2"),
520 PINCTRL_PIN(132, "coex_pio_3"),
521 PINCTRL_PIN(133, "uart0_tx"),
522 PINCTRL_PIN(134, "uart0_rx"),
523 PINCTRL_PIN(135, "uart1_tx"),
524 PINCTRL_PIN(136, "uart1_rx"),
525 PINCTRL_PIN(137, "uart3_tx"),
526 PINCTRL_PIN(138, "uart3_rx"),
527 PINCTRL_PIN(139, "uart4_tx"),
528 PINCTRL_PIN(140, "uart4_rx"),
529 PINCTRL_PIN(141, "usp0_clk"),
530 PINCTRL_PIN(142, "usp0_tx"),
531 PINCTRL_PIN(143, "usp0_rx"),
532 PINCTRL_PIN(144, "usp0_fs"),
533 PINCTRL_PIN(145, "usp1_clk"),
534 PINCTRL_PIN(146, "usp1_tx"),
535 PINCTRL_PIN(147, "usp1_rx"),
536 PINCTRL_PIN(148, "usp1_fs"),
537 PINCTRL_PIN(149, "lvds_tx0d4p"),
538 PINCTRL_PIN(150, "lvds_tx0d4n"),
539 PINCTRL_PIN(151, "lvds_tx0d3p"),
540 PINCTRL_PIN(152, "lvds_tx0d3n"),
541 PINCTRL_PIN(153, "lvds_tx0d2p"),
542 PINCTRL_PIN(154, "lvds_tx0d2n"),
543 PINCTRL_PIN(155, "lvds_tx0d1p"),
544 PINCTRL_PIN(156, "lvds_tx0d1n"),
545 PINCTRL_PIN(157, "lvds_tx0d0p"),
546 PINCTRL_PIN(158, "lvds_tx0d0n"),
547 PINCTRL_PIN(159, "jtag_tdo"),
548 PINCTRL_PIN(160, "jtag_tms"),
549 PINCTRL_PIN(161, "jtag_tck"),
550 PINCTRL_PIN(162, "jtag_tdi"),
551 PINCTRL_PIN(163, "jtag_trstn"),
552 };
553
554 struct atlas7_pad_config atlas7_ioc_pad_confs[] = {
555 /* The Configuration of IOC_RTC Pads */
556 PADCONF(0, 3, 0x0, 0x100, 0x200, -1, 0, 0, 0, 0),
557 PADCONF(1, 3, 0x0, 0x100, 0x200, -1, 4, 2, 2, 0),
558 PADCONF(2, 3, 0x0, 0x100, 0x200, -1, 8, 4, 4, 0),
559 PADCONF(3, 5, 0x0, 0x100, 0x200, -1, 12, 6, 6, 0),
560 PADCONF(4, 4, 0x0, 0x100, 0x200, -1, 16, 8, 8, 0),
561 PADCONF(5, 4, 0x0, 0x100, 0x200, -1, 20, 10, 10, 0),
562 PADCONF(6, 3, 0x0, 0x100, 0x200, -1, 24, 12, 12, 0),
563 PADCONF(7, 3, 0x0, 0x100, 0x200, -1, 28, 14, 14, 0),
564 PADCONF(8, 3, 0x8, 0x100, 0x200, -1, 0, 16, 16, 0),
565 PADCONF(9, 3, 0x8, 0x100, 0x200, -1, 4, 18, 18, 0),
566 PADCONF(10, 4, 0x8, 0x100, 0x200, -1, 8, 20, 20, 0),
567 PADCONF(11, 4, 0x8, 0x100, 0x200, -1, 12, 22, 22, 0),
568 PADCONF(12, 5, 0x8, 0x100, 0x200, -1, 16, 24, 24, 0),
569 PADCONF(13, 6, 0x8, 0x100, 0x200, -1, 20, 26, 26, 0),
570 PADCONF(14, 5, 0x8, 0x100, 0x200, -1, 24, 28, 28, 0),
571 PADCONF(15, 5, 0x8, 0x100, 0x200, -1, 28, 30, 30, 0),
572 PADCONF(16, 5, 0x10, 0x108, 0x208, -1, 0, 0, 0, 0),
573 PADCONF(17, 5, 0x10, 0x108, 0x208, -1, 4, 2, 2, 0),
574 /* The Configuration of IOC_TOP Pads */
575 PADCONF(18, 5, 0x80, 0x180, 0x300, -1, 0, 0, 0, 0),
576 PADCONF(19, 5, 0x80, 0x180, 0x300, -1, 4, 2, 2, 0),
577 PADCONF(20, 5, 0x80, 0x180, 0x300, -1, 8, 4, 4, 0),
578 PADCONF(21, 5, 0x80, 0x180, 0x300, -1, 12, 6, 6, 0),
579 PADCONF(22, 5, 0x88, 0x188, 0x308, -1, 0, 0, 0, 0),
580 PADCONF(23, 5, 0x88, 0x188, 0x308, -1, 4, 2, 2, 0),
581 PADCONF(24, 5, 0x88, 0x188, 0x308, -1, 8, 4, 4, 0),
582 PADCONF(25, 6, 0x88, 0x188, 0x308, -1, 12, 6, 6, 0),
583 PADCONF(26, 5, 0x88, 0x188, 0x308, -1, 16, 8, 8, 0),
584 PADCONF(27, 6, 0x88, 0x188, 0x308, -1, 20, 10, 10, 0),
585 PADCONF(28, 5, 0x88, 0x188, 0x308, -1, 24, 12, 12, 0),
586 PADCONF(29, 5, 0x88, 0x188, 0x308, -1, 28, 14, 14, 0),
587 PADCONF(30, 5, 0x90, 0x188, 0x308, -1, 0, 16, 16, 0),
588 PADCONF(31, 2, 0x98, 0x190, 0x310, -1, 0, 0, 0, 0),
589 PADCONF(32, 1, 0x98, 0x190, 0x310, -1, 4, 2, 4, 0),
590 PADCONF(33, 1, 0x98, 0x190, 0x310, -1, 8, 4, 6, 0),
591 PADCONF(34, 1, 0x98, 0x190, 0x310, -1, 12, 6, 8, 0),
592 PADCONF(35, 1, 0x98, 0x190, 0x310, -1, 16, 8, 10, 0),
593 PADCONF(36, 1, 0x98, 0x190, 0x310, -1, 20, 10, 12, 0),
594 PADCONF(37, 1, 0xa0, 0x198, 0x318, -1, 0, 0, 0, 0),
595 PADCONF(38, 1, 0xa0, 0x198, 0x318, -1, 4, 2, 2, 0),
596 PADCONF(39, 1, 0xa0, 0x198, 0x318, -1, 8, 4, 4, 0),
597 PADCONF(40, 1, 0xa0, 0x198, 0x318, -1, 12, 6, 6, 0),
598 PADCONF(41, 1, 0xa0, 0x198, 0x318, -1, 16, 8, 8, 0),
599 PADCONF(42, 1, 0xa0, 0x198, 0x318, -1, 20, 10, 10, 0),
600 PADCONF(43, 1, 0xa0, 0x198, 0x318, -1, 24, 12, 12, 0),
601 PADCONF(44, 1, 0xa0, 0x198, 0x318, -1, 28, 14, 14, 0),
602 PADCONF(45, 0, 0xa8, 0x198, 0x318, -1, 0, 16, 16, 0),
603 PADCONF(46, 0, 0xa8, 0x198, 0x318, -1, 4, 18, 18, 0),
604 PADCONF(47, 1, 0xa8, 0x198, 0x318, -1, 8, 20, 20, 0),
605 PADCONF(48, 1, 0xa8, 0x198, 0x318, -1, 12, 22, 22, 0),
606 PADCONF(49, 1, 0xa8, 0x198, 0x318, -1, 16, 24, 24, 0),
607 PADCONF(50, 1, 0xa8, 0x198, 0x318, -1, 20, 26, 26, 0),
608 PADCONF(51, 1, 0xa8, 0x198, 0x318, -1, 24, 28, 28, 0),
609 PADCONF(52, 1, 0xa8, 0x198, 0x318, -1, 28, 30, 30, 0),
610 PADCONF(53, 0, 0xb0, 0x1a0, 0x320, -1, 0, 0, 0, 0),
611 PADCONF(54, 0, 0xb0, 0x1a0, 0x320, -1, 4, 2, 2, 0),
612 PADCONF(55, 0, 0xb0, 0x1a0, 0x320, -1, 8, 4, 4, 0),
613 PADCONF(56, 0, 0xb0, 0x1a0, 0x320, -1, 12, 6, 6, 0),
614 PADCONF(57, 0, 0xb0, 0x1a0, 0x320, -1, 16, 8, 8, 0),
615 PADCONF(58, 0, 0xb0, 0x1a0, 0x320, -1, 20, 10, 10, 0),
616 PADCONF(59, 0, 0xb0, 0x1a0, 0x320, -1, 24, 12, 12, 0),
617 PADCONF(60, 0, 0xb0, 0x1a0, 0x320, -1, 28, 14, 14, 0),
618 PADCONF(61, 0, 0xb8, 0x1a0, 0x320, -1, 0, 16, 16, 0),
619 PADCONF(62, 0, 0xb8, 0x1a0, 0x320, -1, 4, 18, 18, 0),
620 PADCONF(63, 0, 0xb8, 0x1a0, 0x320, -1, 8, 20, 20, 0),
621 PADCONF(64, 0, 0xb8, 0x1a0, 0x320, -1, 12, 22, 22, 0),
622 PADCONF(65, 0, 0xb8, 0x1a0, 0x320, -1, 16, 24, 24, 0),
623 PADCONF(66, 0, 0xb8, 0x1a0, 0x320, -1, 20, 26, 26, 0),
624 PADCONF(67, 0, 0xb8, 0x1a0, 0x320, -1, 24, 28, 28, 0),
625 PADCONF(68, 0, 0xb8, 0x1a0, 0x320, -1, 28, 30, 30, 0),
626 PADCONF(69, 0, 0xc0, 0x1a8, 0x328, -1, 0, 0, 0, 0),
627 PADCONF(70, 0, 0xc0, 0x1a8, 0x328, -1, 4, 2, 2, 0),
628 PADCONF(71, 0, 0xc0, 0x1a8, 0x328, -1, 8, 4, 4, 0),
629 PADCONF(72, 0, 0xc0, 0x1a8, 0x328, -1, 12, 6, 6, 0),
630 PADCONF(73, 0, 0xc0, 0x1a8, 0x328, -1, 16, 8, 8, 0),
631 PADCONF(74, 0, 0xc8, 0x1b0, 0x330, -1, 0, 0, 0, 0),
632 PADCONF(75, 0, 0xc8, 0x1b0, 0x330, -1, 4, 2, 2, 0),
633 PADCONF(76, 0, 0xc8, 0x1b0, 0x330, -1, 8, 4, 4, 0),
634 PADCONF(77, 0, 0xc8, 0x1b0, 0x330, -1, 12, 6, 6, 0),
635 PADCONF(78, 0, 0xc8, 0x1b0, 0x330, -1, 16, 8, 8, 0),
636 PADCONF(79, 0, 0xc8, 0x1b0, 0x330, -1, 20, 10, 10, 0),
637 PADCONF(80, 0, 0xc8, 0x1b0, 0x330, -1, 24, 12, 12, 0),
638 PADCONF(81, 0, 0xc8, 0x1b0, 0x330, -1, 28, 14, 14, 0),
639 PADCONF(82, 0, 0xd0, 0x1b0, 0x330, -1, 0, 16, 16, 0),
640 PADCONF(83, 0, 0xd0, 0x1b0, 0x330, -1, 4, 18, 18, 0),
641 PADCONF(84, 0, 0xd0, 0x1b0, 0x330, -1, 8, 20, 20, 0),
642 PADCONF(85, 2, 0xd8, 0x1b8, 0x338, -1, 0, 0, 0, 0),
643 PADCONF(86, 1, 0xd8, 0x1b8, 0x338, -1, 4, 4, 4, 0),
644 PADCONF(87, 1, 0xd8, 0x1b8, 0x338, -1, 8, 6, 6, 0),
645 PADCONF(88, 1, 0xd8, 0x1b8, 0x338, -1, 12, 8, 8, 0),
646 PADCONF(89, 1, 0xd8, 0x1b8, 0x338, -1, 16, 10, 10, 0),
647 PADCONF(90, 1, 0xd8, 0x1b8, 0x338, -1, 20, 12, 12, 0),
648 PADCONF(91, 2, 0xe0, 0x1c0, 0x340, -1, 0, 0, 0, 0),
649 PADCONF(92, 1, 0xe0, 0x1c0, 0x340, -1, 4, 4, 4, 0),
650 PADCONF(93, 1, 0xe0, 0x1c0, 0x340, -1, 8, 6, 6, 0),
651 PADCONF(94, 1, 0xe0, 0x1c0, 0x340, -1, 12, 8, 8, 0),
652 PADCONF(95, 1, 0xe0, 0x1c0, 0x340, -1, 16, 10, 10, 0),
653 PADCONF(96, 1, 0xe0, 0x1c0, 0x340, -1, 20, 12, 12, 0),
654 PADCONF(97, 0, 0xe8, 0x1c8, 0x348, -1, 0, 0, 0, 0),
655 PADCONF(98, 0, 0xe8, 0x1c8, 0x348, -1, 4, 2, 2, 0),
656 PADCONF(99, 0, 0xe8, 0x1c8, 0x348, -1, 8, 4, 4, 0),
657 PADCONF(100, 0, 0xe8, 0x1c8, 0x348, -1, 12, 6, 6, 0),
658 PADCONF(101, 2, 0xe8, 0x1c8, 0x348, -1, 16, 8, 8, 0),
659 PADCONF(102, 0, 0xe8, 0x1c8, 0x348, -1, 20, 12, 12, 0),
660 PADCONF(103, 0, 0xe8, 0x1c8, 0x348, -1, 24, 14, 14, 0),
661 PADCONF(104, 0, 0xe8, 0x1c8, 0x348, -1, 28, 16, 16, 0),
662 PADCONF(105, 0, 0xf0, 0x1c8, 0x348, -1, 0, 18, 18, 0),
663 PADCONF(106, 0, 0xf0, 0x1c8, 0x348, -1, 4, 20, 20, 0),
664 PADCONF(107, 0, 0xf0, 0x1c8, 0x348, -1, 8, 22, 22, 0),
665 PADCONF(108, 0, 0xf0, 0x1c8, 0x348, -1, 12, 24, 24, 0),
666 PADCONF(109, 1, 0xf0, 0x1c8, 0x348, -1, 16, 26, 26, 0),
667 PADCONF(110, 0, 0xf0, 0x1c8, 0x348, -1, 20, 28, 28, 0),
668 PADCONF(111, 1, 0xf0, 0x1c8, 0x348, -1, 24, 30, 30, 0),
669 PADCONF(112, 5, 0xf8, 0x200, 0x350, -1, 0, 0, 0, 0),
670 PADCONF(113, 5, 0xf8, 0x200, 0x350, -1, 4, 2, 2, 0),
671 PADCONF(114, 5, 0xf8, 0x200, 0x350, -1, 8, 4, 4, 0),
672 PADCONF(115, 5, 0xf8, 0x200, 0x350, -1, 12, 6, 6, 0),
673 PADCONF(116, 5, 0xf8, 0x200, 0x350, -1, 16, 8, 8, 0),
674 PADCONF(117, 5, 0xf8, 0x200, 0x350, -1, 20, 10, 10, 0),
675 PADCONF(118, 5, 0xf8, 0x200, 0x350, -1, 24, 12, 12, 0),
676 PADCONF(119, 5, 0x100, 0x250, 0x358, -1, 0, 0, 0, 0),
677 PADCONF(120, 5, 0x100, 0x250, 0x358, -1, 4, 2, 2, 0),
678 PADCONF(121, 5, 0x100, 0x250, 0x358, -1, 8, 4, 4, 0),
679 PADCONF(122, 5, 0x100, 0x250, 0x358, -1, 12, 6, 6, 0),
680 PADCONF(123, 6, 0x100, 0x250, 0x358, -1, 16, 8, 8, 0),
681 PADCONF(124, 6, 0x100, 0x250, 0x358, -1, 20, 10, 10, 0),
682 PADCONF(125, 6, 0x100, 0x250, 0x358, -1, 24, 12, 12, 0),
683 PADCONF(126, 6, 0x100, 0x250, 0x358, -1, 28, 14, 14, 0),
684 PADCONF(127, 6, 0x108, 0x250, 0x358, -1, 16, 24, 24, 0),
685 PADCONF(128, 6, 0x108, 0x250, 0x358, -1, 20, 26, 26, 0),
686 PADCONF(129, 0, 0x110, 0x258, 0x360, -1, 0, 0, 0, 0),
687 PADCONF(130, 0, 0x110, 0x258, 0x360, -1, 4, 2, 2, 0),
688 PADCONF(131, 0, 0x110, 0x258, 0x360, -1, 8, 4, 4, 0),
689 PADCONF(132, 0, 0x110, 0x258, 0x360, -1, 12, 6, 6, 0),
690 PADCONF(133, 6, 0x118, 0x260, 0x368, -1, 0, 0, 0, 0),
691 PADCONF(134, 6, 0x118, 0x260, 0x368, -1, 4, 2, 2, 0),
692 PADCONF(135, 6, 0x118, 0x260, 0x368, -1, 16, 8, 8, 0),
693 PADCONF(136, 6, 0x118, 0x260, 0x368, -1, 20, 10, 10, 0),
694 PADCONF(137, 6, 0x118, 0x260, 0x368, -1, 24, 12, 12, 0),
695 PADCONF(138, 6, 0x118, 0x260, 0x368, -1, 28, 14, 14, 0),
696 PADCONF(139, 6, 0x120, 0x260, 0x368, -1, 0, 16, 16, 0),
697 PADCONF(140, 6, 0x120, 0x260, 0x368, -1, 4, 18, 18, 0),
698 PADCONF(141, 5, 0x128, 0x268, 0x378, -1, 0, 0, 0, 0),
699 PADCONF(142, 5, 0x128, 0x268, 0x378, -1, 4, 2, 2, 0),
700 PADCONF(143, 5, 0x128, 0x268, 0x378, -1, 8, 4, 4, 0),
701 PADCONF(144, 5, 0x128, 0x268, 0x378, -1, 12, 6, 6, 0),
702 PADCONF(145, 5, 0x128, 0x268, 0x378, -1, 16, 8, 8, 0),
703 PADCONF(146, 5, 0x128, 0x268, 0x378, -1, 20, 10, 10, 0),
704 PADCONF(147, 5, 0x128, 0x268, 0x378, -1, 24, 12, 12, 0),
705 PADCONF(148, 5, 0x128, 0x268, 0x378, -1, 28, 14, 14, 0),
706 PADCONF(149, 7, 0x130, 0x270, -1, 0x480, 0, 0, 0, 0),
707 PADCONF(150, 7, 0x130, 0x270, -1, 0x480, 4, 2, 0, 1),
708 PADCONF(151, 7, 0x130, 0x270, -1, 0x480, 8, 4, 0, 2),
709 PADCONF(152, 7, 0x130, 0x270, -1, 0x480, 12, 6, 0, 3),
710 PADCONF(153, 7, 0x130, 0x270, -1, 0x480, 16, 8, 0, 4),
711 PADCONF(154, 7, 0x130, 0x270, -1, 0x480, 20, 10, 0, 5),
712 PADCONF(155, 7, 0x130, 0x270, -1, 0x480, 24, 12, 0, 6),
713 PADCONF(156, 7, 0x130, 0x270, -1, 0x480, 28, 14, 0, 7),
714 PADCONF(157, 7, 0x138, 0x278, -1, 0x480, 0, 0, 0, 8),
715 PADCONF(158, 7, 0x138, 0x278, -1, 0x480, 4, 2, 0, 9),
716 PADCONF(159, 5, 0x140, 0x280, 0x380, -1, 0, 0, 0, 0),
717 PADCONF(160, 6, 0x140, 0x280, 0x380, -1, 4, 2, 2, 0),
718 PADCONF(161, 5, 0x140, 0x280, 0x380, -1, 8, 4, 4, 0),
719 PADCONF(162, 6, 0x140, 0x280, 0x380, -1, 12, 6, 6, 0),
720 PADCONF(163, 6, 0x140, 0x280, 0x380, -1, 16, 8, 8, 0),
721 };
722
723 /* pin list of each pin group */
724 static const unsigned int gnss_gpio_pins[] = { 119, 120, 121, 122, 123, 124,
725 125, 126, 127, 128, 22, 23, 24, 25, 26, 27, 28, 29, 30, };
726 static const unsigned int lcd_vip_gpio_pins[] = { 74, 75, 76, 77, 78, 79, 80,
727 81, 82, 83, 84, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
728 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, };
729 static const unsigned int sdio_i2s_gpio_pins[] = { 31, 32, 33, 34, 35, 36,
730 85, 86, 87, 88, 89, 90, 129, 130, 131, 132, 91, 92, 93, 94,
731 95, 96, 112, 113, 114, 115, 116, 117, 118, };
732 static const unsigned int sp_rgmii_gpio_pins[] = { 97, 98, 99, 100, 101, 102,
733 103, 104, 105, 106, 107, 108, 109, 110, 111, 18, 19, 20, 21,
734 141, 142, 143, 144, 145, 146, 147, 148, };
735 static const unsigned int lvds_gpio_pins[] = { 157, 158, 155, 156, 153, 154,
736 151, 152, 149, 150, };
737 static const unsigned int jtag_uart_nand_gpio_pins[] = { 44, 43, 42, 41, 40,
738 39, 38, 37, 46, 47, 48, 49, 50, 52, 51, 45, 133, 134, 135,
739 136, 137, 138, 139, 140, 159, 160, 161, 162, 163, };
740 static const unsigned int rtc_gpio_pins[] = { 0, 1, 2, 3, 4, 10, 11, 12, 13,
741 14, 15, 16, 17, 9, };
742 static const unsigned int audio_ac97_pins[] = { 113, 118, 115, 114, };
743 static const unsigned int audio_digmic_pins0[] = { 51, };
744 static const unsigned int audio_digmic_pins1[] = { 122, };
745 static const unsigned int audio_digmic_pins2[] = { 161, };
746 static const unsigned int audio_func_dbg_pins[] = { 141, 144, 44, 43, 42, 41,
747 40, 39, 38, 37, 74, 75, 76, 77, 78, 79, 81, 113, 114, 118,
748 115, 49, 50, 142, 143, 80, };
749 static const unsigned int audio_i2s_pins[] = { 118, 115, 116, 117, 112, 113,
750 114, };
751 static const unsigned int audio_i2s_2ch_pins[] = { 118, 115, 112, 113, 114, };
752 static const unsigned int audio_i2s_extclk_pins[] = { 112, };
753 static const unsigned int audio_spdif_out_pins0[] = { 112, };
754 static const unsigned int audio_spdif_out_pins1[] = { 116, };
755 static const unsigned int audio_spdif_out_pins2[] = { 142, };
756 static const unsigned int audio_uart0_basic_pins[] = { 143, 142, 141, 144, };
757 static const unsigned int audio_uart0_urfs_pins0[] = { 117, };
758 static const unsigned int audio_uart0_urfs_pins1[] = { 139, };
759 static const unsigned int audio_uart0_urfs_pins2[] = { 163, };
760 static const unsigned int audio_uart0_urfs_pins3[] = { 162, };
761 static const unsigned int audio_uart1_basic_pins[] = { 147, 146, 145, 148, };
762 static const unsigned int audio_uart1_urfs_pins0[] = { 117, };
763 static const unsigned int audio_uart1_urfs_pins1[] = { 140, };
764 static const unsigned int audio_uart1_urfs_pins2[] = { 163, };
765 static const unsigned int audio_uart2_urfs_pins0[] = { 139, };
766 static const unsigned int audio_uart2_urfs_pins1[] = { 163, };
767 static const unsigned int audio_uart2_urfs_pins2[] = { 96, };
768 static const unsigned int audio_uart2_urxd_pins0[] = { 20, };
769 static const unsigned int audio_uart2_urxd_pins1[] = { 109, };
770 static const unsigned int audio_uart2_urxd_pins2[] = { 93, };
771 static const unsigned int audio_uart2_usclk_pins0[] = { 19, };
772 static const unsigned int audio_uart2_usclk_pins1[] = { 101, };
773 static const unsigned int audio_uart2_usclk_pins2[] = { 91, };
774 static const unsigned int audio_uart2_utfs_pins0[] = { 18, };
775 static const unsigned int audio_uart2_utfs_pins1[] = { 111, };
776 static const unsigned int audio_uart2_utfs_pins2[] = { 94, };
777 static const unsigned int audio_uart2_utxd_pins0[] = { 21, };
778 static const unsigned int audio_uart2_utxd_pins1[] = { 110, };
779 static const unsigned int audio_uart2_utxd_pins2[] = { 92, };
780 static const unsigned int c_can_trnsvr_en_pins0[] = { 2, };
781 static const unsigned int c_can_trnsvr_en_pins1[] = { 0, };
782 static const unsigned int c_can_trnsvr_intr_pins[] = { 1, };
783 static const unsigned int c_can_trnsvr_stb_n_pins[] = { 3, };
784 static const unsigned int c0_can_rxd_trnsv0_pins[] = { 11, };
785 static const unsigned int c0_can_rxd_trnsv1_pins[] = { 2, };
786 static const unsigned int c0_can_txd_trnsv0_pins[] = { 10, };
787 static const unsigned int c0_can_txd_trnsv1_pins[] = { 3, };
788 static const unsigned int c1_can_rxd_pins0[] = { 138, };
789 static const unsigned int c1_can_rxd_pins1[] = { 147, };
790 static const unsigned int c1_can_rxd_pins2[] = { 2, };
791 static const unsigned int c1_can_rxd_pins3[] = { 162, };
792 static const unsigned int c1_can_txd_pins0[] = { 137, };
793 static const unsigned int c1_can_txd_pins1[] = { 146, };
794 static const unsigned int c1_can_txd_pins2[] = { 3, };
795 static const unsigned int c1_can_txd_pins3[] = { 161, };
796 static const unsigned int ca_audio_lpc_pins[] = { 62, 63, 64, 65, 66, 67, 68,
797 69, 70, 71, };
798 static const unsigned int ca_bt_lpc_pins[] = { 85, 86, 87, 88, 89, 90, };
799 static const unsigned int ca_coex_pins[] = { 129, 130, 131, 132, };
800 static const unsigned int ca_curator_lpc_pins[] = { 57, 58, 59, 60, };
801 static const unsigned int ca_pcm_debug_pins[] = { 91, 93, 94, 92, };
802 static const unsigned int ca_pio_pins[] = { 121, 122, 125, 126, 38, 37, 47,
803 49, 50, 54, 55, 56, };
804 static const unsigned int ca_sdio_debug_pins[] = { 40, 39, 44, 43, 42, 41, };
805 static const unsigned int ca_spi_pins[] = { 82, 79, 80, 81, };
806 static const unsigned int ca_trb_pins[] = { 91, 93, 94, 95, 96, 78, 74, 75,
807 76, 77, };
808 static const unsigned int ca_uart_debug_pins[] = { 136, 135, 134, 133, };
809 static const unsigned int clkc_pins0[] = { 30, 47, };
810 static const unsigned int clkc_pins1[] = { 78, 54, };
811 static const unsigned int gn_gnss_i2c_pins[] = { 128, 127, };
812 static const unsigned int gn_gnss_uart_nopause_pins[] = { 134, 133, };
813 static const unsigned int gn_gnss_uart_pins[] = { 134, 133, 136, 135, };
814 static const unsigned int gn_trg_spi_pins0[] = { 22, 25, 23, 24, };
815 static const unsigned int gn_trg_spi_pins1[] = { 82, 79, 80, 81, };
816 static const unsigned int cvbs_dbg_pins[] = { 54, 53, 82, 74, 75, 76, 77, 78,
817 79, 80, 81, 83, 84, 73, 55, 56, };
818 static const unsigned int cvbs_dbg_test_pins0[] = { 57, };
819 static const unsigned int cvbs_dbg_test_pins1[] = { 58, };
820 static const unsigned int cvbs_dbg_test_pins2[] = { 59, };
821 static const unsigned int cvbs_dbg_test_pins3[] = { 60, };
822 static const unsigned int cvbs_dbg_test_pins4[] = { 61, };
823 static const unsigned int cvbs_dbg_test_pins5[] = { 62, };
824 static const unsigned int cvbs_dbg_test_pins6[] = { 63, };
825 static const unsigned int cvbs_dbg_test_pins7[] = { 64, };
826 static const unsigned int cvbs_dbg_test_pins8[] = { 65, };
827 static const unsigned int cvbs_dbg_test_pins9[] = { 66, };
828 static const unsigned int cvbs_dbg_test_pins10[] = { 67, };
829 static const unsigned int cvbs_dbg_test_pins11[] = { 68, };
830 static const unsigned int cvbs_dbg_test_pins12[] = { 69, };
831 static const unsigned int cvbs_dbg_test_pins13[] = { 70, };
832 static const unsigned int cvbs_dbg_test_pins14[] = { 71, };
833 static const unsigned int cvbs_dbg_test_pins15[] = { 72, };
834 static const unsigned int gn_gnss_power_pins[] = { 123, 124, 121, 122, 125,
835 120, };
836 static const unsigned int gn_gnss_sw_status_pins[] = { 57, 58, 59, 60, 61,
837 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 53, 55, 56, 54, };
838 static const unsigned int gn_gnss_eclk_pins[] = { 113, };
839 static const unsigned int gn_gnss_irq1_pins0[] = { 112, };
840 static const unsigned int gn_gnss_irq2_pins0[] = { 118, };
841 static const unsigned int gn_gnss_tm_pins[] = { 115, };
842 static const unsigned int gn_gnss_tsync_pins[] = { 114, };
843 static const unsigned int gn_io_gnsssys_sw_cfg_pins[] = { 44, 43, 42, 41, 40,
844 39, 38, 37, 49, 50, 91, 92, 93, 94, 95, 96, };
845 static const unsigned int gn_trg_pins0[] = { 29, 28, 26, 27, };
846 static const unsigned int gn_trg_pins1[] = { 77, 76, 74, 75, };
847 static const unsigned int gn_trg_shutdown_pins0[] = { 30, };
848 static const unsigned int gn_trg_shutdown_pins1[] = { 83, };
849 static const unsigned int gn_trg_shutdown_pins2[] = { 117, };
850 static const unsigned int gn_trg_shutdown_pins3[] = { 123, };
851 static const unsigned int i2c0_pins[] = { 128, 127, };
852 static const unsigned int i2c1_pins[] = { 126, 125, };
853 static const unsigned int i2s0_pins[] = { 91, 93, 94, 92, };
854 static const unsigned int i2s1_basic_pins[] = { 95, 96, };
855 static const unsigned int i2s1_rxd0_pins0[] = { 61, };
856 static const unsigned int i2s1_rxd0_pins1[] = { 131, };
857 static const unsigned int i2s1_rxd0_pins2[] = { 129, };
858 static const unsigned int i2s1_rxd0_pins3[] = { 117, };
859 static const unsigned int i2s1_rxd0_pins4[] = { 83, };
860 static const unsigned int i2s1_rxd1_pins0[] = { 72, };
861 static const unsigned int i2s1_rxd1_pins1[] = { 132, };
862 static const unsigned int i2s1_rxd1_pins2[] = { 130, };
863 static const unsigned int i2s1_rxd1_pins3[] = { 118, };
864 static const unsigned int i2s1_rxd1_pins4[] = { 84, };
865 static const unsigned int jtag_jt_dbg_nsrst_pins[] = { 125, };
866 static const unsigned int jtag_ntrst_pins0[] = { 4, };
867 static const unsigned int jtag_ntrst_pins1[] = { 163, };
868 static const unsigned int jtag_swdiotms_pins0[] = { 2, };
869 static const unsigned int jtag_swdiotms_pins1[] = { 160, };
870 static const unsigned int jtag_tck_pins0[] = { 0, };
871 static const unsigned int jtag_tck_pins1[] = { 161, };
872 static const unsigned int jtag_tdi_pins0[] = { 1, };
873 static const unsigned int jtag_tdi_pins1[] = { 162, };
874 static const unsigned int jtag_tdo_pins0[] = { 3, };
875 static const unsigned int jtag_tdo_pins1[] = { 159, };
876 static const unsigned int ks_kas_spi_pins0[] = { 141, 144, 143, 142, };
877 static const unsigned int ld_ldd_pins[] = { 57, 58, 59, 60, 61, 62, 63, 64,
878 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 76, 77, 78, 79, 80,
879 81, 56, 53, };
880 static const unsigned int ld_ldd_16bit_pins[] = { 57, 58, 59, 60, 61, 62, 63,
881 64, 65, 66, 67, 68, 69, 70, 71, 72, 56, 53, };
882 static const unsigned int ld_ldd_fck_pins[] = { 55, };
883 static const unsigned int ld_ldd_lck_pins[] = { 54, };
884 static const unsigned int lr_lcdrom_pins[] = { 73, 54, 57, 58, 59, 60, 61,
885 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 56, 53, 55, };
886 static const unsigned int lvds_analog_pins[] = { 149, 150, 151, 152, 153, 154,
887 155, 156, 157, 158, };
888 static const unsigned int nd_df_pins[] = { 44, 43, 42, 41, 40, 39, 38, 37,
889 47, 46, 52, 51, 45, 49, 50, 48, 124, };
890 static const unsigned int nd_df_nowp_pins[] = { 44, 43, 42, 41, 40, 39, 38,
891 37, 47, 46, 52, 51, 45, 49, 50, 48, };
892 static const unsigned int ps_pins[] = { 120, 119, 121, };
893 static const unsigned int pwc_core_on_pins[] = { 8, };
894 static const unsigned int pwc_ext_on_pins[] = { 6, };
895 static const unsigned int pwc_gpio3_clk_pins[] = { 3, };
896 static const unsigned int pwc_io_on_pins[] = { 9, };
897 static const unsigned int pwc_lowbatt_b_pins0[] = { 4, };
898 static const unsigned int pwc_mem_on_pins[] = { 7, };
899 static const unsigned int pwc_on_key_b_pins0[] = { 5, };
900 static const unsigned int pwc_wakeup_src0_pins[] = { 0, };
901 static const unsigned int pwc_wakeup_src1_pins[] = { 1, };
902 static const unsigned int pwc_wakeup_src2_pins[] = { 2, };
903 static const unsigned int pwc_wakeup_src3_pins[] = { 3, };
904 static const unsigned int pw_cko0_pins0[] = { 123, };
905 static const unsigned int pw_cko0_pins1[] = { 101, };
906 static const unsigned int pw_cko0_pins2[] = { 82, };
907 static const unsigned int pw_cko0_pins3[] = { 162, };
908 static const unsigned int pw_cko1_pins0[] = { 124, };
909 static const unsigned int pw_cko1_pins1[] = { 110, };
910 static const unsigned int pw_cko1_pins2[] = { 163, };
911 static const unsigned int pw_i2s01_clk_pins0[] = { 125, };
912 static const unsigned int pw_i2s01_clk_pins1[] = { 117, };
913 static const unsigned int pw_i2s01_clk_pins2[] = { 132, };
914 static const unsigned int pw_pwm0_pins0[] = { 119, };
915 static const unsigned int pw_pwm0_pins1[] = { 159, };
916 static const unsigned int pw_pwm1_pins0[] = { 120, };
917 static const unsigned int pw_pwm1_pins1[] = { 160, };
918 static const unsigned int pw_pwm1_pins2[] = { 131, };
919 static const unsigned int pw_pwm2_pins0[] = { 121, };
920 static const unsigned int pw_pwm2_pins1[] = { 98, };
921 static const unsigned int pw_pwm2_pins2[] = { 161, };
922 static const unsigned int pw_pwm3_pins0[] = { 122, };
923 static const unsigned int pw_pwm3_pins1[] = { 73, };
924 static const unsigned int pw_pwm_cpu_vol_pins0[] = { 121, };
925 static const unsigned int pw_pwm_cpu_vol_pins1[] = { 98, };
926 static const unsigned int pw_pwm_cpu_vol_pins2[] = { 161, };
927 static const unsigned int pw_backlight_pins0[] = { 122, };
928 static const unsigned int pw_backlight_pins1[] = { 73, };
929 static const unsigned int rg_eth_mac_pins[] = { 108, 103, 104, 105, 106, 107,
930 102, 97, 98, 99, 100, 101, };
931 static const unsigned int rg_gmac_phy_intr_n_pins[] = { 111, };
932 static const unsigned int rg_rgmii_mac_pins[] = { 109, 110, };
933 static const unsigned int rg_rgmii_phy_ref_clk_pins0[] = { 111, };
934 static const unsigned int rg_rgmii_phy_ref_clk_pins1[] = { 53, };
935 static const unsigned int sd0_pins[] = { 46, 47, 44, 43, 42, 41, 40, 39, 38,
936 37, };
937 static const unsigned int sd0_4bit_pins[] = { 46, 47, 44, 43, 42, 41, };
938 static const unsigned int sd1_pins[] = { 48, 49, 44, 43, 42, 41, 40, 39, 38,
939 37, };
940 static const unsigned int sd1_4bit_pins0[] = { 48, 49, 44, 43, 42, 41, };
941 static const unsigned int sd1_4bit_pins1[] = { 48, 49, 40, 39, 38, 37, };
942 static const unsigned int sd2_basic_pins[] = { 31, 32, 33, 34, 35, 36, };
943 static const unsigned int sd2_cdb_pins0[] = { 124, };
944 static const unsigned int sd2_cdb_pins1[] = { 161, };
945 static const unsigned int sd2_wpb_pins0[] = { 123, };
946 static const unsigned int sd2_wpb_pins1[] = { 163, };
947 static const unsigned int sd3_pins[] = { 85, 86, 87, 88, 89, 90, };
948 static const unsigned int sd5_pins[] = { 91, 92, 93, 94, 95, 96, };
949 static const unsigned int sd6_pins0[] = { 79, 78, 74, 75, 76, 77, };
950 static const unsigned int sd6_pins1[] = { 101, 99, 100, 110, 109, 111, };
951 static const unsigned int sp0_ext_ldo_on_pins[] = { 4, };
952 static const unsigned int sp0_qspi_pins[] = { 12, 13, 14, 15, 16, 17, };
953 static const unsigned int sp1_spi_pins[] = { 19, 20, 21, 18, };
954 static const unsigned int tpiu_trace_pins[] = { 53, 56, 57, 58, 59, 60, 61,
955 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, };
956 static const unsigned int uart0_pins[] = { 121, 120, 134, 133, };
957 static const unsigned int uart0_nopause_pins[] = { 134, 133, };
958 static const unsigned int uart1_pins[] = { 136, 135, };
959 static const unsigned int uart2_cts_pins0[] = { 132, };
960 static const unsigned int uart2_cts_pins1[] = { 162, };
961 static const unsigned int uart2_rts_pins0[] = { 131, };
962 static const unsigned int uart2_rts_pins1[] = { 161, };
963 static const unsigned int uart2_rxd_pins0[] = { 11, };
964 static const unsigned int uart2_rxd_pins1[] = { 160, };
965 static const unsigned int uart2_rxd_pins2[] = { 130, };
966 static const unsigned int uart2_txd_pins0[] = { 10, };
967 static const unsigned int uart2_txd_pins1[] = { 159, };
968 static const unsigned int uart2_txd_pins2[] = { 129, };
969 static const unsigned int uart3_cts_pins0[] = { 125, };
970 static const unsigned int uart3_cts_pins1[] = { 111, };
971 static const unsigned int uart3_cts_pins2[] = { 140, };
972 static const unsigned int uart3_rts_pins0[] = { 126, };
973 static const unsigned int uart3_rts_pins1[] = { 109, };
974 static const unsigned int uart3_rts_pins2[] = { 139, };
975 static const unsigned int uart3_rxd_pins0[] = { 138, };
976 static const unsigned int uart3_rxd_pins1[] = { 84, };
977 static const unsigned int uart3_rxd_pins2[] = { 162, };
978 static const unsigned int uart3_txd_pins0[] = { 137, };
979 static const unsigned int uart3_txd_pins1[] = { 83, };
980 static const unsigned int uart3_txd_pins2[] = { 161, };
981 static const unsigned int uart4_basic_pins[] = { 140, 139, };
982 static const unsigned int uart4_cts_pins0[] = { 122, };
983 static const unsigned int uart4_cts_pins1[] = { 100, };
984 static const unsigned int uart4_cts_pins2[] = { 117, };
985 static const unsigned int uart4_rts_pins0[] = { 123, };
986 static const unsigned int uart4_rts_pins1[] = { 99, };
987 static const unsigned int uart4_rts_pins2[] = { 116, };
988 static const unsigned int usb0_drvvbus_pins0[] = { 51, };
989 static const unsigned int usb0_drvvbus_pins1[] = { 162, };
990 static const unsigned int usb1_drvvbus_pins0[] = { 134, };
991 static const unsigned int usb1_drvvbus_pins1[] = { 163, };
992 static const unsigned int visbus_dout_pins[] = { 57, 58, 59, 60, 61, 62, 63,
993 64, 65, 66, 67, 68, 69, 70, 71, 72, 53, 54, 55, 56, 85, 86,
994 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, };
995 static const unsigned int vi_vip1_pins[] = { 74, 75, 76, 77, 78, 79, 80, 81,
996 82, 83, 84, 103, 104, 105, 106, 107, 102, 97, 98, };
997 static const unsigned int vi_vip1_ext_pins[] = { 74, 75, 76, 77, 78, 79, 80,
998 81, 82, 83, 84, 108, 103, 104, 105, 106, 107, 102, 97, 98,
999 99, 100, };
1000 static const unsigned int vi_vip1_low8bit_pins[] = { 74, 75, 76, 77, 78, 79,
1001 80, 81, };
1002 static const unsigned int vi_vip1_high8bit_pins[] = { 82, 83, 84, 108, 103,
1003 104, 105, 106, };
1004
1005 /* definition of pin group table */
1006 struct atlas7_pin_group altas7_pin_groups[] = {
1007 GROUP("gnss_gpio_grp", gnss_gpio_pins),
1008 GROUP("lcd_vip_gpio_grp", lcd_vip_gpio_pins),
1009 GROUP("sdio_i2s_gpio_grp", sdio_i2s_gpio_pins),
1010 GROUP("sp_rgmii_gpio_grp", sp_rgmii_gpio_pins),
1011 GROUP("lvds_gpio_grp", lvds_gpio_pins),
1012 GROUP("jtag_uart_nand_gpio_grp", jtag_uart_nand_gpio_pins),
1013 GROUP("rtc_gpio_grp", rtc_gpio_pins),
1014 GROUP("audio_ac97_grp", audio_ac97_pins),
1015 GROUP("audio_digmic_grp0", audio_digmic_pins0),
1016 GROUP("audio_digmic_grp1", audio_digmic_pins1),
1017 GROUP("audio_digmic_grp2", audio_digmic_pins2),
1018 GROUP("audio_func_dbg_grp", audio_func_dbg_pins),
1019 GROUP("audio_i2s_grp", audio_i2s_pins),
1020 GROUP("audio_i2s_2ch_grp", audio_i2s_2ch_pins),
1021 GROUP("audio_i2s_extclk_grp", audio_i2s_extclk_pins),
1022 GROUP("audio_spdif_out_grp0", audio_spdif_out_pins0),
1023 GROUP("audio_spdif_out_grp1", audio_spdif_out_pins1),
1024 GROUP("audio_spdif_out_grp2", audio_spdif_out_pins2),
1025 GROUP("audio_uart0_basic_grp", audio_uart0_basic_pins),
1026 GROUP("audio_uart0_urfs_grp0", audio_uart0_urfs_pins0),
1027 GROUP("audio_uart0_urfs_grp1", audio_uart0_urfs_pins1),
1028 GROUP("audio_uart0_urfs_grp2", audio_uart0_urfs_pins2),
1029 GROUP("audio_uart0_urfs_grp3", audio_uart0_urfs_pins3),
1030 GROUP("audio_uart1_basic_grp", audio_uart1_basic_pins),
1031 GROUP("audio_uart1_urfs_grp0", audio_uart1_urfs_pins0),
1032 GROUP("audio_uart1_urfs_grp1", audio_uart1_urfs_pins1),
1033 GROUP("audio_uart1_urfs_grp2", audio_uart1_urfs_pins2),
1034 GROUP("audio_uart2_urfs_grp0", audio_uart2_urfs_pins0),
1035 GROUP("audio_uart2_urfs_grp1", audio_uart2_urfs_pins1),
1036 GROUP("audio_uart2_urfs_grp2", audio_uart2_urfs_pins2),
1037 GROUP("audio_uart2_urxd_grp0", audio_uart2_urxd_pins0),
1038 GROUP("audio_uart2_urxd_grp1", audio_uart2_urxd_pins1),
1039 GROUP("audio_uart2_urxd_grp2", audio_uart2_urxd_pins2),
1040 GROUP("audio_uart2_usclk_grp0", audio_uart2_usclk_pins0),
1041 GROUP("audio_uart2_usclk_grp1", audio_uart2_usclk_pins1),
1042 GROUP("audio_uart2_usclk_grp2", audio_uart2_usclk_pins2),
1043 GROUP("audio_uart2_utfs_grp0", audio_uart2_utfs_pins0),
1044 GROUP("audio_uart2_utfs_grp1", audio_uart2_utfs_pins1),
1045 GROUP("audio_uart2_utfs_grp2", audio_uart2_utfs_pins2),
1046 GROUP("audio_uart2_utxd_grp0", audio_uart2_utxd_pins0),
1047 GROUP("audio_uart2_utxd_grp1", audio_uart2_utxd_pins1),
1048 GROUP("audio_uart2_utxd_grp2", audio_uart2_utxd_pins2),
1049 GROUP("c_can_trnsvr_en_grp0", c_can_trnsvr_en_pins0),
1050 GROUP("c_can_trnsvr_en_grp1", c_can_trnsvr_en_pins1),
1051 GROUP("c_can_trnsvr_intr_grp", c_can_trnsvr_intr_pins),
1052 GROUP("c_can_trnsvr_stb_n_grp", c_can_trnsvr_stb_n_pins),
1053 GROUP("c0_can_rxd_trnsv0_grp", c0_can_rxd_trnsv0_pins),
1054 GROUP("c0_can_rxd_trnsv1_grp", c0_can_rxd_trnsv1_pins),
1055 GROUP("c0_can_txd_trnsv0_grp", c0_can_txd_trnsv0_pins),
1056 GROUP("c0_can_txd_trnsv1_grp", c0_can_txd_trnsv1_pins),
1057 GROUP("c1_can_rxd_grp0", c1_can_rxd_pins0),
1058 GROUP("c1_can_rxd_grp1", c1_can_rxd_pins1),
1059 GROUP("c1_can_rxd_grp2", c1_can_rxd_pins2),
1060 GROUP("c1_can_rxd_grp3", c1_can_rxd_pins3),
1061 GROUP("c1_can_txd_grp0", c1_can_txd_pins0),
1062 GROUP("c1_can_txd_grp1", c1_can_txd_pins1),
1063 GROUP("c1_can_txd_grp2", c1_can_txd_pins2),
1064 GROUP("c1_can_txd_grp3", c1_can_txd_pins3),
1065 GROUP("ca_audio_lpc_grp", ca_audio_lpc_pins),
1066 GROUP("ca_bt_lpc_grp", ca_bt_lpc_pins),
1067 GROUP("ca_coex_grp", ca_coex_pins),
1068 GROUP("ca_curator_lpc_grp", ca_curator_lpc_pins),
1069 GROUP("ca_pcm_debug_grp", ca_pcm_debug_pins),
1070 GROUP("ca_pio_grp", ca_pio_pins),
1071 GROUP("ca_sdio_debug_grp", ca_sdio_debug_pins),
1072 GROUP("ca_spi_grp", ca_spi_pins),
1073 GROUP("ca_trb_grp", ca_trb_pins),
1074 GROUP("ca_uart_debug_grp", ca_uart_debug_pins),
1075 GROUP("clkc_grp0", clkc_pins0),
1076 GROUP("clkc_grp1", clkc_pins1),
1077 GROUP("gn_gnss_i2c_grp", gn_gnss_i2c_pins),
1078 GROUP("gn_gnss_uart_nopause_grp", gn_gnss_uart_nopause_pins),
1079 GROUP("gn_gnss_uart_grp", gn_gnss_uart_pins),
1080 GROUP("gn_trg_spi_grp0", gn_trg_spi_pins0),
1081 GROUP("gn_trg_spi_grp1", gn_trg_spi_pins1),
1082 GROUP("cvbs_dbg_grp", cvbs_dbg_pins),
1083 GROUP("cvbs_dbg_test_grp0", cvbs_dbg_test_pins0),
1084 GROUP("cvbs_dbg_test_grp1", cvbs_dbg_test_pins1),
1085 GROUP("cvbs_dbg_test_grp2", cvbs_dbg_test_pins2),
1086 GROUP("cvbs_dbg_test_grp3", cvbs_dbg_test_pins3),
1087 GROUP("cvbs_dbg_test_grp4", cvbs_dbg_test_pins4),
1088 GROUP("cvbs_dbg_test_grp5", cvbs_dbg_test_pins5),
1089 GROUP("cvbs_dbg_test_grp6", cvbs_dbg_test_pins6),
1090 GROUP("cvbs_dbg_test_grp7", cvbs_dbg_test_pins7),
1091 GROUP("cvbs_dbg_test_grp8", cvbs_dbg_test_pins8),
1092 GROUP("cvbs_dbg_test_grp9", cvbs_dbg_test_pins9),
1093 GROUP("cvbs_dbg_test_grp10", cvbs_dbg_test_pins10),
1094 GROUP("cvbs_dbg_test_grp11", cvbs_dbg_test_pins11),
1095 GROUP("cvbs_dbg_test_grp12", cvbs_dbg_test_pins12),
1096 GROUP("cvbs_dbg_test_grp13", cvbs_dbg_test_pins13),
1097 GROUP("cvbs_dbg_test_grp14", cvbs_dbg_test_pins14),
1098 GROUP("cvbs_dbg_test_grp15", cvbs_dbg_test_pins15),
1099 GROUP("gn_gnss_power_grp", gn_gnss_power_pins),
1100 GROUP("gn_gnss_sw_status_grp", gn_gnss_sw_status_pins),
1101 GROUP("gn_gnss_eclk_grp", gn_gnss_eclk_pins),
1102 GROUP("gn_gnss_irq1_grp0", gn_gnss_irq1_pins0),
1103 GROUP("gn_gnss_irq2_grp0", gn_gnss_irq2_pins0),
1104 GROUP("gn_gnss_tm_grp", gn_gnss_tm_pins),
1105 GROUP("gn_gnss_tsync_grp", gn_gnss_tsync_pins),
1106 GROUP("gn_io_gnsssys_sw_cfg_grp", gn_io_gnsssys_sw_cfg_pins),
1107 GROUP("gn_trg_grp0", gn_trg_pins0),
1108 GROUP("gn_trg_grp1", gn_trg_pins1),
1109 GROUP("gn_trg_shutdown_grp0", gn_trg_shutdown_pins0),
1110 GROUP("gn_trg_shutdown_grp1", gn_trg_shutdown_pins1),
1111 GROUP("gn_trg_shutdown_grp2", gn_trg_shutdown_pins2),
1112 GROUP("gn_trg_shutdown_grp3", gn_trg_shutdown_pins3),
1113 GROUP("i2c0_grp", i2c0_pins),
1114 GROUP("i2c1_grp", i2c1_pins),
1115 GROUP("i2s0_grp", i2s0_pins),
1116 GROUP("i2s1_basic_grp", i2s1_basic_pins),
1117 GROUP("i2s1_rxd0_grp0", i2s1_rxd0_pins0),
1118 GROUP("i2s1_rxd0_grp1", i2s1_rxd0_pins1),
1119 GROUP("i2s1_rxd0_grp2", i2s1_rxd0_pins2),
1120 GROUP("i2s1_rxd0_grp3", i2s1_rxd0_pins3),
1121 GROUP("i2s1_rxd0_grp4", i2s1_rxd0_pins4),
1122 GROUP("i2s1_rxd1_grp0", i2s1_rxd1_pins0),
1123 GROUP("i2s1_rxd1_grp1", i2s1_rxd1_pins1),
1124 GROUP("i2s1_rxd1_grp2", i2s1_rxd1_pins2),
1125 GROUP("i2s1_rxd1_grp3", i2s1_rxd1_pins3),
1126 GROUP("i2s1_rxd1_grp4", i2s1_rxd1_pins4),
1127 GROUP("jtag_jt_dbg_nsrst_grp", jtag_jt_dbg_nsrst_pins),
1128 GROUP("jtag_ntrst_grp0", jtag_ntrst_pins0),
1129 GROUP("jtag_ntrst_grp1", jtag_ntrst_pins1),
1130 GROUP("jtag_swdiotms_grp0", jtag_swdiotms_pins0),
1131 GROUP("jtag_swdiotms_grp1", jtag_swdiotms_pins1),
1132 GROUP("jtag_tck_grp0", jtag_tck_pins0),
1133 GROUP("jtag_tck_grp1", jtag_tck_pins1),
1134 GROUP("jtag_tdi_grp0", jtag_tdi_pins0),
1135 GROUP("jtag_tdi_grp1", jtag_tdi_pins1),
1136 GROUP("jtag_tdo_grp0", jtag_tdo_pins0),
1137 GROUP("jtag_tdo_grp1", jtag_tdo_pins1),
1138 GROUP("ks_kas_spi_grp0", ks_kas_spi_pins0),
1139 GROUP("ld_ldd_grp", ld_ldd_pins),
1140 GROUP("ld_ldd_16bit_grp", ld_ldd_16bit_pins),
1141 GROUP("ld_ldd_fck_grp", ld_ldd_fck_pins),
1142 GROUP("ld_ldd_lck_grp", ld_ldd_lck_pins),
1143 GROUP("lr_lcdrom_grp", lr_lcdrom_pins),
1144 GROUP("lvds_analog_grp", lvds_analog_pins),
1145 GROUP("nd_df_grp", nd_df_pins),
1146 GROUP("nd_df_nowp_grp", nd_df_nowp_pins),
1147 GROUP("ps_grp", ps_pins),
1148 GROUP("pwc_core_on_grp", pwc_core_on_pins),
1149 GROUP("pwc_ext_on_grp", pwc_ext_on_pins),
1150 GROUP("pwc_gpio3_clk_grp", pwc_gpio3_clk_pins),
1151 GROUP("pwc_io_on_grp", pwc_io_on_pins),
1152 GROUP("pwc_lowbatt_b_grp0", pwc_lowbatt_b_pins0),
1153 GROUP("pwc_mem_on_grp", pwc_mem_on_pins),
1154 GROUP("pwc_on_key_b_grp0", pwc_on_key_b_pins0),
1155 GROUP("pwc_wakeup_src0_grp", pwc_wakeup_src0_pins),
1156 GROUP("pwc_wakeup_src1_grp", pwc_wakeup_src1_pins),
1157 GROUP("pwc_wakeup_src2_grp", pwc_wakeup_src2_pins),
1158 GROUP("pwc_wakeup_src3_grp", pwc_wakeup_src3_pins),
1159 GROUP("pw_cko0_grp0", pw_cko0_pins0),
1160 GROUP("pw_cko0_grp1", pw_cko0_pins1),
1161 GROUP("pw_cko0_grp2", pw_cko0_pins2),
1162 GROUP("pw_cko0_grp3", pw_cko0_pins3),
1163 GROUP("pw_cko1_grp0", pw_cko1_pins0),
1164 GROUP("pw_cko1_grp1", pw_cko1_pins1),
1165 GROUP("pw_cko1_grp2", pw_cko1_pins2),
1166 GROUP("pw_i2s01_clk_grp0", pw_i2s01_clk_pins0),
1167 GROUP("pw_i2s01_clk_grp1", pw_i2s01_clk_pins1),
1168 GROUP("pw_i2s01_clk_grp2", pw_i2s01_clk_pins2),
1169 GROUP("pw_pwm0_grp0", pw_pwm0_pins0),
1170 GROUP("pw_pwm0_grp1", pw_pwm0_pins1),
1171 GROUP("pw_pwm1_grp0", pw_pwm1_pins0),
1172 GROUP("pw_pwm1_grp1", pw_pwm1_pins1),
1173 GROUP("pw_pwm1_grp2", pw_pwm1_pins2),
1174 GROUP("pw_pwm2_grp0", pw_pwm2_pins0),
1175 GROUP("pw_pwm2_grp1", pw_pwm2_pins1),
1176 GROUP("pw_pwm2_grp2", pw_pwm2_pins2),
1177 GROUP("pw_pwm3_grp0", pw_pwm3_pins0),
1178 GROUP("pw_pwm3_grp1", pw_pwm3_pins1),
1179 GROUP("pw_pwm_cpu_vol_grp0", pw_pwm_cpu_vol_pins0),
1180 GROUP("pw_pwm_cpu_vol_grp1", pw_pwm_cpu_vol_pins1),
1181 GROUP("pw_pwm_cpu_vol_grp2", pw_pwm_cpu_vol_pins2),
1182 GROUP("pw_backlight_grp0", pw_backlight_pins0),
1183 GROUP("pw_backlight_grp1", pw_backlight_pins1),
1184 GROUP("rg_eth_mac_grp", rg_eth_mac_pins),
1185 GROUP("rg_gmac_phy_intr_n_grp", rg_gmac_phy_intr_n_pins),
1186 GROUP("rg_rgmii_mac_grp", rg_rgmii_mac_pins),
1187 GROUP("rg_rgmii_phy_ref_clk_grp0", rg_rgmii_phy_ref_clk_pins0),
1188 GROUP("rg_rgmii_phy_ref_clk_grp1", rg_rgmii_phy_ref_clk_pins1),
1189 GROUP("sd0_grp", sd0_pins),
1190 GROUP("sd0_4bit_grp", sd0_4bit_pins),
1191 GROUP("sd1_grp", sd1_pins),
1192 GROUP("sd1_4bit_grp0", sd1_4bit_pins0),
1193 GROUP("sd1_4bit_grp1", sd1_4bit_pins1),
1194 GROUP("sd2_basic_grp", sd2_basic_pins),
1195 GROUP("sd2_cdb_grp0", sd2_cdb_pins0),
1196 GROUP("sd2_cdb_grp1", sd2_cdb_pins1),
1197 GROUP("sd2_wpb_grp0", sd2_wpb_pins0),
1198 GROUP("sd2_wpb_grp1", sd2_wpb_pins1),
1199 GROUP("sd3_grp", sd3_pins),
1200 GROUP("sd5_grp", sd5_pins),
1201 GROUP("sd6_grp0", sd6_pins0),
1202 GROUP("sd6_grp1", sd6_pins1),
1203 GROUP("sp0_ext_ldo_on_grp", sp0_ext_ldo_on_pins),
1204 GROUP("sp0_qspi_grp", sp0_qspi_pins),
1205 GROUP("sp1_spi_grp", sp1_spi_pins),
1206 GROUP("tpiu_trace_grp", tpiu_trace_pins),
1207 GROUP("uart0_grp", uart0_pins),
1208 GROUP("uart0_nopause_grp", uart0_nopause_pins),
1209 GROUP("uart1_grp", uart1_pins),
1210 GROUP("uart2_cts_grp0", uart2_cts_pins0),
1211 GROUP("uart2_cts_grp1", uart2_cts_pins1),
1212 GROUP("uart2_rts_grp0", uart2_rts_pins0),
1213 GROUP("uart2_rts_grp1", uart2_rts_pins1),
1214 GROUP("uart2_rxd_grp0", uart2_rxd_pins0),
1215 GROUP("uart2_rxd_grp1", uart2_rxd_pins1),
1216 GROUP("uart2_rxd_grp2", uart2_rxd_pins2),
1217 GROUP("uart2_txd_grp0", uart2_txd_pins0),
1218 GROUP("uart2_txd_grp1", uart2_txd_pins1),
1219 GROUP("uart2_txd_grp2", uart2_txd_pins2),
1220 GROUP("uart3_cts_grp0", uart3_cts_pins0),
1221 GROUP("uart3_cts_grp1", uart3_cts_pins1),
1222 GROUP("uart3_cts_grp2", uart3_cts_pins2),
1223 GROUP("uart3_rts_grp0", uart3_rts_pins0),
1224 GROUP("uart3_rts_grp1", uart3_rts_pins1),
1225 GROUP("uart3_rts_grp2", uart3_rts_pins2),
1226 GROUP("uart3_rxd_grp0", uart3_rxd_pins0),
1227 GROUP("uart3_rxd_grp1", uart3_rxd_pins1),
1228 GROUP("uart3_rxd_grp2", uart3_rxd_pins2),
1229 GROUP("uart3_txd_grp0", uart3_txd_pins0),
1230 GROUP("uart3_txd_grp1", uart3_txd_pins1),
1231 GROUP("uart3_txd_grp2", uart3_txd_pins2),
1232 GROUP("uart4_basic_grp", uart4_basic_pins),
1233 GROUP("uart4_cts_grp0", uart4_cts_pins0),
1234 GROUP("uart4_cts_grp1", uart4_cts_pins1),
1235 GROUP("uart4_cts_grp2", uart4_cts_pins2),
1236 GROUP("uart4_rts_grp0", uart4_rts_pins0),
1237 GROUP("uart4_rts_grp1", uart4_rts_pins1),
1238 GROUP("uart4_rts_grp2", uart4_rts_pins2),
1239 GROUP("usb0_drvvbus_grp0", usb0_drvvbus_pins0),
1240 GROUP("usb0_drvvbus_grp1", usb0_drvvbus_pins1),
1241 GROUP("usb1_drvvbus_grp0", usb1_drvvbus_pins0),
1242 GROUP("usb1_drvvbus_grp1", usb1_drvvbus_pins1),
1243 GROUP("visbus_dout_grp", visbus_dout_pins),
1244 GROUP("vi_vip1_grp", vi_vip1_pins),
1245 GROUP("vi_vip1_ext_grp", vi_vip1_ext_pins),
1246 GROUP("vi_vip1_low8bit_grp", vi_vip1_low8bit_pins),
1247 GROUP("vi_vip1_high8bit_grp", vi_vip1_high8bit_pins),
1248 };
1249
1250 /* How many groups that a function can use */
1251 static const char * const gnss_gpio_grp[] = { "gnss_gpio_grp", };
1252 static const char * const lcd_vip_gpio_grp[] = { "lcd_vip_gpio_grp", };
1253 static const char * const sdio_i2s_gpio_grp[] = { "sdio_i2s_gpio_grp", };
1254 static const char * const sp_rgmii_gpio_grp[] = { "sp_rgmii_gpio_grp", };
1255 static const char * const lvds_gpio_grp[] = { "lvds_gpio_grp", };
1256 static const char * const jtag_uart_nand_gpio_grp[] = {
1257 "jtag_uart_nand_gpio_grp", };
1258 static const char * const rtc_gpio_grp[] = { "rtc_gpio_grp", };
1259 static const char * const audio_ac97_grp[] = { "audio_ac97_grp", };
1260 static const char * const audio_digmic_grp0[] = { "audio_digmic_grp0", };
1261 static const char * const audio_digmic_grp1[] = { "audio_digmic_grp1", };
1262 static const char * const audio_digmic_grp2[] = { "audio_digmic_grp2", };
1263 static const char * const audio_func_dbg_grp[] = { "audio_func_dbg_grp", };
1264 static const char * const audio_i2s_grp[] = { "audio_i2s_grp", };
1265 static const char * const audio_i2s_2ch_grp[] = { "audio_i2s_2ch_grp", };
1266 static const char * const audio_i2s_extclk_grp[] = { "audio_i2s_extclk_grp", };
1267 static const char * const audio_spdif_out_grp0[] = { "audio_spdif_out_grp0", };
1268 static const char * const audio_spdif_out_grp1[] = { "audio_spdif_out_grp1", };
1269 static const char * const audio_spdif_out_grp2[] = { "audio_spdif_out_grp2", };
1270 static const char * const audio_uart0_basic_grp[] = {
1271 "audio_uart0_basic_grp", };
1272 static const char * const audio_uart0_urfs_grp0[] = {
1273 "audio_uart0_urfs_grp0", };
1274 static const char * const audio_uart0_urfs_grp1[] = {
1275 "audio_uart0_urfs_grp1", };
1276 static const char * const audio_uart0_urfs_grp2[] = {
1277 "audio_uart0_urfs_grp2", };
1278 static const char * const audio_uart0_urfs_grp3[] = {
1279 "audio_uart0_urfs_grp3", };
1280 static const char * const audio_uart1_basic_grp[] = {
1281 "audio_uart1_basic_grp", };
1282 static const char * const audio_uart1_urfs_grp0[] = {
1283 "audio_uart1_urfs_grp0", };
1284 static const char * const audio_uart1_urfs_grp1[] = {
1285 "audio_uart1_urfs_grp1", };
1286 static const char * const audio_uart1_urfs_grp2[] = {
1287 "audio_uart1_urfs_grp2", };
1288 static const char * const audio_uart2_urfs_grp0[] = {
1289 "audio_uart2_urfs_grp0", };
1290 static const char * const audio_uart2_urfs_grp1[] = {
1291 "audio_uart2_urfs_grp1", };
1292 static const char * const audio_uart2_urfs_grp2[] = {
1293 "audio_uart2_urfs_grp2", };
1294 static const char * const audio_uart2_urxd_grp0[] = {
1295 "audio_uart2_urxd_grp0", };
1296 static const char * const audio_uart2_urxd_grp1[] = {
1297 "audio_uart2_urxd_grp1", };
1298 static const char * const audio_uart2_urxd_grp2[] = {
1299 "audio_uart2_urxd_grp2", };
1300 static const char * const audio_uart2_usclk_grp0[] = {
1301 "audio_uart2_usclk_grp0", };
1302 static const char * const audio_uart2_usclk_grp1[] = {
1303 "audio_uart2_usclk_grp1", };
1304 static const char * const audio_uart2_usclk_grp2[] = {
1305 "audio_uart2_usclk_grp2", };
1306 static const char * const audio_uart2_utfs_grp0[] = {
1307 "audio_uart2_utfs_grp0", };
1308 static const char * const audio_uart2_utfs_grp1[] = {
1309 "audio_uart2_utfs_grp1", };
1310 static const char * const audio_uart2_utfs_grp2[] = {
1311 "audio_uart2_utfs_grp2", };
1312 static const char * const audio_uart2_utxd_grp0[] = {
1313 "audio_uart2_utxd_grp0", };
1314 static const char * const audio_uart2_utxd_grp1[] = {
1315 "audio_uart2_utxd_grp1", };
1316 static const char * const audio_uart2_utxd_grp2[] = {
1317 "audio_uart2_utxd_grp2", };
1318 static const char * const c_can_trnsvr_en_grp0[] = { "c_can_trnsvr_en_grp0", };
1319 static const char * const c_can_trnsvr_en_grp1[] = { "c_can_trnsvr_en_grp1", };
1320 static const char * const c_can_trnsvr_intr_grp[] = {
1321 "c_can_trnsvr_intr_grp", };
1322 static const char * const c_can_trnsvr_stb_n_grp[] = {
1323 "c_can_trnsvr_stb_n_grp", };
1324 static const char * const c0_can_rxd_trnsv0_grp[] = {
1325 "c0_can_rxd_trnsv0_grp", };
1326 static const char * const c0_can_rxd_trnsv1_grp[] = {
1327 "c0_can_rxd_trnsv1_grp", };
1328 static const char * const c0_can_txd_trnsv0_grp[] = {
1329 "c0_can_txd_trnsv0_grp", };
1330 static const char * const c0_can_txd_trnsv1_grp[] = {
1331 "c0_can_txd_trnsv1_grp", };
1332 static const char * const c1_can_rxd_grp0[] = { "c1_can_rxd_grp0", };
1333 static const char * const c1_can_rxd_grp1[] = { "c1_can_rxd_grp1", };
1334 static const char * const c1_can_rxd_grp2[] = { "c1_can_rxd_grp2", };
1335 static const char * const c1_can_rxd_grp3[] = { "c1_can_rxd_grp3", };
1336 static const char * const c1_can_txd_grp0[] = { "c1_can_txd_grp0", };
1337 static const char * const c1_can_txd_grp1[] = { "c1_can_txd_grp1", };
1338 static const char * const c1_can_txd_grp2[] = { "c1_can_txd_grp2", };
1339 static const char * const c1_can_txd_grp3[] = { "c1_can_txd_grp3", };
1340 static const char * const ca_audio_lpc_grp[] = { "ca_audio_lpc_grp", };
1341 static const char * const ca_bt_lpc_grp[] = { "ca_bt_lpc_grp", };
1342 static const char * const ca_coex_grp[] = { "ca_coex_grp", };
1343 static const char * const ca_curator_lpc_grp[] = { "ca_curator_lpc_grp", };
1344 static const char * const ca_pcm_debug_grp[] = { "ca_pcm_debug_grp", };
1345 static const char * const ca_pio_grp[] = { "ca_pio_grp", };
1346 static const char * const ca_sdio_debug_grp[] = { "ca_sdio_debug_grp", };
1347 static const char * const ca_spi_grp[] = { "ca_spi_grp", };
1348 static const char * const ca_trb_grp[] = { "ca_trb_grp", };
1349 static const char * const ca_uart_debug_grp[] = { "ca_uart_debug_grp", };
1350 static const char * const clkc_grp0[] = { "clkc_grp0", };
1351 static const char * const clkc_grp1[] = { "clkc_grp1", };
1352 static const char * const gn_gnss_i2c_grp[] = { "gn_gnss_i2c_grp", };
1353 static const char * const gn_gnss_uart_nopause_grp[] = {
1354 "gn_gnss_uart_nopause_grp", };
1355 static const char * const gn_gnss_uart_grp[] = { "gn_gnss_uart_grp", };
1356 static const char * const gn_trg_spi_grp0[] = { "gn_trg_spi_grp0", };
1357 static const char * const gn_trg_spi_grp1[] = { "gn_trg_spi_grp1", };
1358 static const char * const cvbs_dbg_grp[] = { "cvbs_dbg_grp", };
1359 static const char * const cvbs_dbg_test_grp0[] = { "cvbs_dbg_test_grp0", };
1360 static const char * const cvbs_dbg_test_grp1[] = { "cvbs_dbg_test_grp1", };
1361 static const char * const cvbs_dbg_test_grp2[] = { "cvbs_dbg_test_grp2", };
1362 static const char * const cvbs_dbg_test_grp3[] = { "cvbs_dbg_test_grp3", };
1363 static const char * const cvbs_dbg_test_grp4[] = { "cvbs_dbg_test_grp4", };
1364 static const char * const cvbs_dbg_test_grp5[] = { "cvbs_dbg_test_grp5", };
1365 static const char * const cvbs_dbg_test_grp6[] = { "cvbs_dbg_test_grp6", };
1366 static const char * const cvbs_dbg_test_grp7[] = { "cvbs_dbg_test_grp7", };
1367 static const char * const cvbs_dbg_test_grp8[] = { "cvbs_dbg_test_grp8", };
1368 static const char * const cvbs_dbg_test_grp9[] = { "cvbs_dbg_test_grp9", };
1369 static const char * const cvbs_dbg_test_grp10[] = { "cvbs_dbg_test_grp10", };
1370 static const char * const cvbs_dbg_test_grp11[] = { "cvbs_dbg_test_grp11", };
1371 static const char * const cvbs_dbg_test_grp12[] = { "cvbs_dbg_test_grp12", };
1372 static const char * const cvbs_dbg_test_grp13[] = { "cvbs_dbg_test_grp13", };
1373 static const char * const cvbs_dbg_test_grp14[] = { "cvbs_dbg_test_grp14", };
1374 static const char * const cvbs_dbg_test_grp15[] = { "cvbs_dbg_test_grp15", };
1375 static const char * const gn_gnss_power_grp[] = { "gn_gnss_power_grp", };
1376 static const char * const gn_gnss_sw_status_grp[] = {
1377 "gn_gnss_sw_status_grp", };
1378 static const char * const gn_gnss_eclk_grp[] = { "gn_gnss_eclk_grp", };
1379 static const char * const gn_gnss_irq1_grp0[] = { "gn_gnss_irq1_grp0", };
1380 static const char * const gn_gnss_irq2_grp0[] = { "gn_gnss_irq2_grp0", };
1381 static const char * const gn_gnss_tm_grp[] = { "gn_gnss_tm_grp", };
1382 static const char * const gn_gnss_tsync_grp[] = { "gn_gnss_tsync_grp", };
1383 static const char * const gn_io_gnsssys_sw_cfg_grp[] = {
1384 "gn_io_gnsssys_sw_cfg_grp", };
1385 static const char * const gn_trg_grp0[] = { "gn_trg_grp0", };
1386 static const char * const gn_trg_grp1[] = { "gn_trg_grp1", };
1387 static const char * const gn_trg_shutdown_grp0[] = { "gn_trg_shutdown_grp0", };
1388 static const char * const gn_trg_shutdown_grp1[] = { "gn_trg_shutdown_grp1", };
1389 static const char * const gn_trg_shutdown_grp2[] = { "gn_trg_shutdown_grp2", };
1390 static const char * const gn_trg_shutdown_grp3[] = { "gn_trg_shutdown_grp3", };
1391 static const char * const i2c0_grp[] = { "i2c0_grp", };
1392 static const char * const i2c1_grp[] = { "i2c1_grp", };
1393 static const char * const i2s0_grp[] = { "i2s0_grp", };
1394 static const char * const i2s1_basic_grp[] = { "i2s1_basic_grp", };
1395 static const char * const i2s1_rxd0_grp0[] = { "i2s1_rxd0_grp0", };
1396 static const char * const i2s1_rxd0_grp1[] = { "i2s1_rxd0_grp1", };
1397 static const char * const i2s1_rxd0_grp2[] = { "i2s1_rxd0_grp2", };
1398 static const char * const i2s1_rxd0_grp3[] = { "i2s1_rxd0_grp3", };
1399 static const char * const i2s1_rxd0_grp4[] = { "i2s1_rxd0_grp4", };
1400 static const char * const i2s1_rxd1_grp0[] = { "i2s1_rxd1_grp0", };
1401 static const char * const i2s1_rxd1_grp1[] = { "i2s1_rxd1_grp1", };
1402 static const char * const i2s1_rxd1_grp2[] = { "i2s1_rxd1_grp2", };
1403 static const char * const i2s1_rxd1_grp3[] = { "i2s1_rxd1_grp3", };
1404 static const char * const i2s1_rxd1_grp4[] = { "i2s1_rxd1_grp4", };
1405 static const char * const jtag_jt_dbg_nsrst_grp[] = {
1406 "jtag_jt_dbg_nsrst_grp", };
1407 static const char * const jtag_ntrst_grp0[] = { "jtag_ntrst_grp0", };
1408 static const char * const jtag_ntrst_grp1[] = { "jtag_ntrst_grp1", };
1409 static const char * const jtag_swdiotms_grp0[] = { "jtag_swdiotms_grp0", };
1410 static const char * const jtag_swdiotms_grp1[] = { "jtag_swdiotms_grp1", };
1411 static const char * const jtag_tck_grp0[] = { "jtag_tck_grp0", };
1412 static const char * const jtag_tck_grp1[] = { "jtag_tck_grp1", };
1413 static const char * const jtag_tdi_grp0[] = { "jtag_tdi_grp0", };
1414 static const char * const jtag_tdi_grp1[] = { "jtag_tdi_grp1", };
1415 static const char * const jtag_tdo_grp0[] = { "jtag_tdo_grp0", };
1416 static const char * const jtag_tdo_grp1[] = { "jtag_tdo_grp1", };
1417 static const char * const ks_kas_spi_grp0[] = { "ks_kas_spi_grp0", };
1418 static const char * const ld_ldd_grp[] = { "ld_ldd_grp", };
1419 static const char * const ld_ldd_16bit_grp[] = { "ld_ldd_16bit_grp", };
1420 static const char * const ld_ldd_fck_grp[] = { "ld_ldd_fck_grp", };
1421 static const char * const ld_ldd_lck_grp[] = { "ld_ldd_lck_grp", };
1422 static const char * const lr_lcdrom_grp[] = { "lr_lcdrom_grp", };
1423 static const char * const lvds_analog_grp[] = { "lvds_analog_grp", };
1424 static const char * const nd_df_grp[] = { "nd_df_grp", };
1425 static const char * const nd_df_nowp_grp[] = { "nd_df_nowp_grp", };
1426 static const char * const ps_grp[] = { "ps_grp", };
1427 static const char * const pwc_core_on_grp[] = { "pwc_core_on_grp", };
1428 static const char * const pwc_ext_on_grp[] = { "pwc_ext_on_grp", };
1429 static const char * const pwc_gpio3_clk_grp[] = { "pwc_gpio3_clk_grp", };
1430 static const char * const pwc_io_on_grp[] = { "pwc_io_on_grp", };
1431 static const char * const pwc_lowbatt_b_grp0[] = { "pwc_lowbatt_b_grp0", };
1432 static const char * const pwc_mem_on_grp[] = { "pwc_mem_on_grp", };
1433 static const char * const pwc_on_key_b_grp0[] = { "pwc_on_key_b_grp0", };
1434 static const char * const pwc_wakeup_src0_grp[] = { "pwc_wakeup_src0_grp", };
1435 static const char * const pwc_wakeup_src1_grp[] = { "pwc_wakeup_src1_grp", };
1436 static const char * const pwc_wakeup_src2_grp[] = { "pwc_wakeup_src2_grp", };
1437 static const char * const pwc_wakeup_src3_grp[] = { "pwc_wakeup_src3_grp", };
1438 static const char * const pw_cko0_grp0[] = { "pw_cko0_grp0", };
1439 static const char * const pw_cko0_grp1[] = { "pw_cko0_grp1", };
1440 static const char * const pw_cko0_grp2[] = { "pw_cko0_grp2", };
1441 static const char * const pw_cko0_grp3[] = { "pw_cko0_grp3", };
1442 static const char * const pw_cko1_grp0[] = { "pw_cko1_grp0", };
1443 static const char * const pw_cko1_grp1[] = { "pw_cko1_grp1", };
1444 static const char * const pw_cko1_grp2[] = { "pw_cko1_grp2", };
1445 static const char * const pw_i2s01_clk_grp0[] = { "pw_i2s01_clk_grp0", };
1446 static const char * const pw_i2s01_clk_grp1[] = { "pw_i2s01_clk_grp1", };
1447 static const char * const pw_i2s01_clk_grp2[] = { "pw_i2s01_clk_grp2", };
1448 static const char * const pw_pwm0_grp0[] = { "pw_pwm0_grp0", };
1449 static const char * const pw_pwm0_grp1[] = { "pw_pwm0_grp1", };
1450 static const char * const pw_pwm1_grp0[] = { "pw_pwm1_grp0", };
1451 static const char * const pw_pwm1_grp1[] = { "pw_pwm1_grp1", };
1452 static const char * const pw_pwm1_grp2[] = { "pw_pwm1_grp2", };
1453 static const char * const pw_pwm2_grp0[] = { "pw_pwm2_grp0", };
1454 static const char * const pw_pwm2_grp1[] = { "pw_pwm2_grp1", };
1455 static const char * const pw_pwm2_grp2[] = { "pw_pwm2_grp2", };
1456 static const char * const pw_pwm3_grp0[] = { "pw_pwm3_grp0", };
1457 static const char * const pw_pwm3_grp1[] = { "pw_pwm3_grp1", };
1458 static const char * const pw_pwm_cpu_vol_grp0[] = { "pw_pwm_cpu_vol_grp0", };
1459 static const char * const pw_pwm_cpu_vol_grp1[] = { "pw_pwm_cpu_vol_grp1", };
1460 static const char * const pw_pwm_cpu_vol_grp2[] = { "pw_pwm_cpu_vol_grp2", };
1461 static const char * const pw_backlight_grp0[] = { "pw_backlight_grp0", };
1462 static const char * const pw_backlight_grp1[] = { "pw_backlight_grp1", };
1463 static const char * const rg_eth_mac_grp[] = { "rg_eth_mac_grp", };
1464 static const char * const rg_gmac_phy_intr_n_grp[] = {
1465 "rg_gmac_phy_intr_n_grp", };
1466 static const char * const rg_rgmii_mac_grp[] = { "rg_rgmii_mac_grp", };
1467 static const char * const rg_rgmii_phy_ref_clk_grp0[] = {
1468 "rg_rgmii_phy_ref_clk_grp0", };
1469 static const char * const rg_rgmii_phy_ref_clk_grp1[] = {
1470 "rg_rgmii_phy_ref_clk_grp1", };
1471 static const char * const sd0_grp[] = { "sd0_grp", };
1472 static const char * const sd0_4bit_grp[] = { "sd0_4bit_grp", };
1473 static const char * const sd1_grp[] = { "sd1_grp", };
1474 static const char * const sd1_4bit_grp0[] = { "sd1_4bit_grp0", };
1475 static const char * const sd1_4bit_grp1[] = { "sd1_4bit_grp1", };
1476 static const char * const sd2_basic_grp[] = { "sd2_basic_grp", };
1477 static const char * const sd2_cdb_grp0[] = { "sd2_cdb_grp0", };
1478 static const char * const sd2_cdb_grp1[] = { "sd2_cdb_grp1", };
1479 static const char * const sd2_wpb_grp0[] = { "sd2_wpb_grp0", };
1480 static const char * const sd2_wpb_grp1[] = { "sd2_wpb_grp1", };
1481 static const char * const sd3_grp[] = { "sd3_grp", };
1482 static const char * const sd5_grp[] = { "sd5_grp", };
1483 static const char * const sd6_grp0[] = { "sd6_grp0", };
1484 static const char * const sd6_grp1[] = { "sd6_grp1", };
1485 static const char * const sp0_ext_ldo_on_grp[] = { "sp0_ext_ldo_on_grp", };
1486 static const char * const sp0_qspi_grp[] = { "sp0_qspi_grp", };
1487 static const char * const sp1_spi_grp[] = { "sp1_spi_grp", };
1488 static const char * const tpiu_trace_grp[] = { "tpiu_trace_grp", };
1489 static const char * const uart0_grp[] = { "uart0_grp", };
1490 static const char * const uart0_nopause_grp[] = { "uart0_nopause_grp", };
1491 static const char * const uart1_grp[] = { "uart1_grp", };
1492 static const char * const uart2_cts_grp0[] = { "uart2_cts_grp0", };
1493 static const char * const uart2_cts_grp1[] = { "uart2_cts_grp1", };
1494 static const char * const uart2_rts_grp0[] = { "uart2_rts_grp0", };
1495 static const char * const uart2_rts_grp1[] = { "uart2_rts_grp1", };
1496 static const char * const uart2_rxd_grp0[] = { "uart2_rxd_grp0", };
1497 static const char * const uart2_rxd_grp1[] = { "uart2_rxd_grp1", };
1498 static const char * const uart2_rxd_grp2[] = { "uart2_rxd_grp2", };
1499 static const char * const uart2_txd_grp0[] = { "uart2_txd_grp0", };
1500 static const char * const uart2_txd_grp1[] = { "uart2_txd_grp1", };
1501 static const char * const uart2_txd_grp2[] = { "uart2_txd_grp2", };
1502 static const char * const uart3_cts_grp0[] = { "uart3_cts_grp0", };
1503 static const char * const uart3_cts_grp1[] = { "uart3_cts_grp1", };
1504 static const char * const uart3_cts_grp2[] = { "uart3_cts_grp2", };
1505 static const char * const uart3_rts_grp0[] = { "uart3_rts_grp0", };
1506 static const char * const uart3_rts_grp1[] = { "uart3_rts_grp1", };
1507 static const char * const uart3_rts_grp2[] = { "uart3_rts_grp2", };
1508 static const char * const uart3_rxd_grp0[] = { "uart3_rxd_grp0", };
1509 static const char * const uart3_rxd_grp1[] = { "uart3_rxd_grp1", };
1510 static const char * const uart3_rxd_grp2[] = { "uart3_rxd_grp2", };
1511 static const char * const uart3_txd_grp0[] = { "uart3_txd_grp0", };
1512 static const char * const uart3_txd_grp1[] = { "uart3_txd_grp1", };
1513 static const char * const uart3_txd_grp2[] = { "uart3_txd_grp2", };
1514 static const char * const uart4_basic_grp[] = { "uart4_basic_grp", };
1515 static const char * const uart4_cts_grp0[] = { "uart4_cts_grp0", };
1516 static const char * const uart4_cts_grp1[] = { "uart4_cts_grp1", };
1517 static const char * const uart4_cts_grp2[] = { "uart4_cts_grp2", };
1518 static const char * const uart4_rts_grp0[] = { "uart4_rts_grp0", };
1519 static const char * const uart4_rts_grp1[] = { "uart4_rts_grp1", };
1520 static const char * const uart4_rts_grp2[] = { "uart4_rts_grp2", };
1521 static const char * const usb0_drvvbus_grp0[] = { "usb0_drvvbus_grp0", };
1522 static const char * const usb0_drvvbus_grp1[] = { "usb0_drvvbus_grp1", };
1523 static const char * const usb1_drvvbus_grp0[] = { "usb1_drvvbus_grp0", };
1524 static const char * const usb1_drvvbus_grp1[] = { "usb1_drvvbus_grp1", };
1525 static const char * const visbus_dout_grp[] = { "visbus_dout_grp", };
1526 static const char * const vi_vip1_grp[] = { "vi_vip1_grp", };
1527 static const char * const vi_vip1_ext_grp[] = { "vi_vip1_ext_grp", };
1528 static const char * const vi_vip1_low8bit_grp[] = { "vi_vip1_low8bit_grp", };
1529 static const char * const vi_vip1_high8bit_grp[] = { "vi_vip1_high8bit_grp", };
1530
1531 static struct atlas7_pad_mux gnss_gpio_grp_pad_mux[] = {
1532 MUX(1, 119, 0, N, N, N, N),
1533 MUX(1, 120, 0, N, N, N, N),
1534 MUX(1, 121, 0, N, N, N, N),
1535 MUX(1, 122, 0, N, N, N, N),
1536 MUX(1, 123, 0, N, N, N, N),
1537 MUX(1, 124, 0, N, N, N, N),
1538 MUX(1, 125, 0, N, N, N, N),
1539 MUX(1, 126, 0, N, N, N, N),
1540 MUX(1, 127, 0, N, N, N, N),
1541 MUX(1, 128, 0, N, N, N, N),
1542 MUX(1, 22, 0, N, N, N, N),
1543 MUX(1, 23, 0, N, N, N, N),
1544 MUX(1, 24, 0, N, N, N, N),
1545 MUX(1, 25, 0, N, N, N, N),
1546 MUX(1, 26, 0, N, N, N, N),
1547 MUX(1, 27, 0, N, N, N, N),
1548 MUX(1, 28, 0, N, N, N, N),
1549 MUX(1, 29, 0, N, N, N, N),
1550 MUX(1, 30, 0, N, N, N, N),
1551 };
1552
1553 static struct atlas7_grp_mux gnss_gpio_grp_mux = {
1554 .pad_mux_count = ARRAY_SIZE(gnss_gpio_grp_pad_mux),
1555 .pad_mux_list = gnss_gpio_grp_pad_mux,
1556 };
1557
1558 static struct atlas7_pad_mux lcd_vip_gpio_grp_pad_mux[] = {
1559 MUX(1, 74, 0, N, N, N, N),
1560 MUX(1, 75, 0, N, N, N, N),
1561 MUX(1, 76, 0, N, N, N, N),
1562 MUX(1, 77, 0, N, N, N, N),
1563 MUX(1, 78, 0, N, N, N, N),
1564 MUX(1, 79, 0, N, N, N, N),
1565 MUX(1, 80, 0, N, N, N, N),
1566 MUX(1, 81, 0, N, N, N, N),
1567 MUX(1, 82, 0, N, N, N, N),
1568 MUX(1, 83, 0, N, N, N, N),
1569 MUX(1, 84, 0, N, N, N, N),
1570 MUX(1, 53, 0, N, N, N, N),
1571 MUX(1, 54, 0, N, N, N, N),
1572 MUX(1, 55, 0, N, N, N, N),
1573 MUX(1, 56, 0, N, N, N, N),
1574 MUX(1, 57, 0, N, N, N, N),
1575 MUX(1, 58, 0, N, N, N, N),
1576 MUX(1, 59, 0, N, N, N, N),
1577 MUX(1, 60, 0, N, N, N, N),
1578 MUX(1, 61, 0, N, N, N, N),
1579 MUX(1, 62, 0, N, N, N, N),
1580 MUX(1, 63, 0, N, N, N, N),
1581 MUX(1, 64, 0, N, N, N, N),
1582 MUX(1, 65, 0, N, N, N, N),
1583 MUX(1, 66, 0, N, N, N, N),
1584 MUX(1, 67, 0, N, N, N, N),
1585 MUX(1, 68, 0, N, N, N, N),
1586 MUX(1, 69, 0, N, N, N, N),
1587 MUX(1, 70, 0, N, N, N, N),
1588 MUX(1, 71, 0, N, N, N, N),
1589 MUX(1, 72, 0, N, N, N, N),
1590 MUX(1, 73, 0, N, N, N, N),
1591 };
1592
1593 static struct atlas7_grp_mux lcd_vip_gpio_grp_mux = {
1594 .pad_mux_count = ARRAY_SIZE(lcd_vip_gpio_grp_pad_mux),
1595 .pad_mux_list = lcd_vip_gpio_grp_pad_mux,
1596 };
1597
1598 static struct atlas7_pad_mux sdio_i2s_gpio_grp_pad_mux[] = {
1599 MUX(1, 31, 0, N, N, N, N),
1600 MUX(1, 32, 0, N, N, N, N),
1601 MUX(1, 33, 0, N, N, N, N),
1602 MUX(1, 34, 0, N, N, N, N),
1603 MUX(1, 35, 0, N, N, N, N),
1604 MUX(1, 36, 0, N, N, N, N),
1605 MUX(1, 85, 0, N, N, N, N),
1606 MUX(1, 86, 0, N, N, N, N),
1607 MUX(1, 87, 0, N, N, N, N),
1608 MUX(1, 88, 0, N, N, N, N),
1609 MUX(1, 89, 0, N, N, N, N),
1610 MUX(1, 90, 0, N, N, N, N),
1611 MUX(1, 129, 0, N, N, N, N),
1612 MUX(1, 130, 0, N, N, N, N),
1613 MUX(1, 131, 0, N, N, N, N),
1614 MUX(1, 132, 0, N, N, N, N),
1615 MUX(1, 91, 0, N, N, N, N),
1616 MUX(1, 92, 0, N, N, N, N),
1617 MUX(1, 93, 0, N, N, N, N),
1618 MUX(1, 94, 0, N, N, N, N),
1619 MUX(1, 95, 0, N, N, N, N),
1620 MUX(1, 96, 0, N, N, N, N),
1621 MUX(1, 112, 0, N, N, N, N),
1622 MUX(1, 113, 0, N, N, N, N),
1623 MUX(1, 114, 0, N, N, N, N),
1624 MUX(1, 115, 0, N, N, N, N),
1625 MUX(1, 116, 0, N, N, N, N),
1626 MUX(1, 117, 0, N, N, N, N),
1627 MUX(1, 118, 0, N, N, N, N),
1628 };
1629
1630 static struct atlas7_grp_mux sdio_i2s_gpio_grp_mux = {
1631 .pad_mux_count = ARRAY_SIZE(sdio_i2s_gpio_grp_pad_mux),
1632 .pad_mux_list = sdio_i2s_gpio_grp_pad_mux,
1633 };
1634
1635 static struct atlas7_pad_mux sp_rgmii_gpio_grp_pad_mux[] = {
1636 MUX(1, 97, 0, N, N, N, N),
1637 MUX(1, 98, 0, N, N, N, N),
1638 MUX(1, 99, 0, N, N, N, N),
1639 MUX(1, 100, 0, N, N, N, N),
1640 MUX(1, 101, 0, N, N, N, N),
1641 MUX(1, 102, 0, N, N, N, N),
1642 MUX(1, 103, 0, N, N, N, N),
1643 MUX(1, 104, 0, N, N, N, N),
1644 MUX(1, 105, 0, N, N, N, N),
1645 MUX(1, 106, 0, N, N, N, N),
1646 MUX(1, 107, 0, N, N, N, N),
1647 MUX(1, 108, 0, N, N, N, N),
1648 MUX(1, 109, 0, N, N, N, N),
1649 MUX(1, 110, 0, N, N, N, N),
1650 MUX(1, 111, 0, N, N, N, N),
1651 MUX(1, 18, 0, N, N, N, N),
1652 MUX(1, 19, 0, N, N, N, N),
1653 MUX(1, 20, 0, N, N, N, N),
1654 MUX(1, 21, 0, N, N, N, N),
1655 MUX(1, 141, 0, N, N, N, N),
1656 MUX(1, 142, 0, N, N, N, N),
1657 MUX(1, 143, 0, N, N, N, N),
1658 MUX(1, 144, 0, N, N, N, N),
1659 MUX(1, 145, 0, N, N, N, N),
1660 MUX(1, 146, 0, N, N, N, N),
1661 MUX(1, 147, 0, N, N, N, N),
1662 MUX(1, 148, 0, N, N, N, N),
1663 };
1664
1665 static struct atlas7_grp_mux sp_rgmii_gpio_grp_mux = {
1666 .pad_mux_count = ARRAY_SIZE(sp_rgmii_gpio_grp_pad_mux),
1667 .pad_mux_list = sp_rgmii_gpio_grp_pad_mux,
1668 };
1669
1670 static struct atlas7_pad_mux lvds_gpio_grp_pad_mux[] = {
1671 MUX(1, 157, 0, N, N, N, N),
1672 MUX(1, 158, 0, N, N, N, N),
1673 MUX(1, 155, 0, N, N, N, N),
1674 MUX(1, 156, 0, N, N, N, N),
1675 MUX(1, 153, 0, N, N, N, N),
1676 MUX(1, 154, 0, N, N, N, N),
1677 MUX(1, 151, 0, N, N, N, N),
1678 MUX(1, 152, 0, N, N, N, N),
1679 MUX(1, 149, 0, N, N, N, N),
1680 MUX(1, 150, 0, N, N, N, N),
1681 };
1682
1683 static struct atlas7_grp_mux lvds_gpio_grp_mux = {
1684 .pad_mux_count = ARRAY_SIZE(lvds_gpio_grp_pad_mux),
1685 .pad_mux_list = lvds_gpio_grp_pad_mux,
1686 };
1687
1688 static struct atlas7_pad_mux jtag_uart_nand_gpio_grp_pad_mux[] = {
1689 MUX(1, 44, 0, N, N, N, N),
1690 MUX(1, 43, 0, N, N, N, N),
1691 MUX(1, 42, 0, N, N, N, N),
1692 MUX(1, 41, 0, N, N, N, N),
1693 MUX(1, 40, 0, N, N, N, N),
1694 MUX(1, 39, 0, N, N, N, N),
1695 MUX(1, 38, 0, N, N, N, N),
1696 MUX(1, 37, 0, N, N, N, N),
1697 MUX(1, 46, 0, N, N, N, N),
1698 MUX(1, 47, 0, N, N, N, N),
1699 MUX(1, 48, 0, N, N, N, N),
1700 MUX(1, 49, 0, N, N, N, N),
1701 MUX(1, 50, 0, N, N, N, N),
1702 MUX(1, 52, 0, N, N, N, N),
1703 MUX(1, 51, 0, N, N, N, N),
1704 MUX(1, 45, 0, N, N, N, N),
1705 MUX(1, 133, 0, N, N, N, N),
1706 MUX(1, 134, 0, N, N, N, N),
1707 MUX(1, 135, 0, N, N, N, N),
1708 MUX(1, 136, 0, N, N, N, N),
1709 MUX(1, 137, 0, N, N, N, N),
1710 MUX(1, 138, 0, N, N, N, N),
1711 MUX(1, 139, 0, N, N, N, N),
1712 MUX(1, 140, 0, N, N, N, N),
1713 MUX(1, 159, 0, N, N, N, N),
1714 MUX(1, 160, 0, N, N, N, N),
1715 MUX(1, 161, 0, N, N, N, N),
1716 MUX(1, 162, 0, N, N, N, N),
1717 MUX(1, 163, 0, N, N, N, N),
1718 };
1719
1720 static struct atlas7_grp_mux jtag_uart_nand_gpio_grp_mux = {
1721 .pad_mux_count = ARRAY_SIZE(jtag_uart_nand_gpio_grp_pad_mux),
1722 .pad_mux_list = jtag_uart_nand_gpio_grp_pad_mux,
1723 };
1724
1725 static struct atlas7_pad_mux rtc_gpio_grp_pad_mux[] = {
1726 MUX(0, 0, 0, N, N, N, N),
1727 MUX(0, 1, 0, N, N, N, N),
1728 MUX(0, 2, 0, N, N, N, N),
1729 MUX(0, 3, 0, N, N, N, N),
1730 MUX(0, 4, 0, N, N, N, N),
1731 MUX(0, 10, 0, N, N, N, N),
1732 MUX(0, 11, 0, N, N, N, N),
1733 MUX(0, 12, 0, N, N, N, N),
1734 MUX(0, 13, 0, N, N, N, N),
1735 MUX(0, 14, 0, N, N, N, N),
1736 MUX(0, 15, 0, N, N, N, N),
1737 MUX(0, 16, 0, N, N, N, N),
1738 MUX(0, 17, 0, N, N, N, N),
1739 MUX(0, 9, 0, N, N, N, N),
1740 };
1741
1742 static struct atlas7_grp_mux rtc_gpio_grp_mux = {
1743 .pad_mux_count = ARRAY_SIZE(rtc_gpio_grp_pad_mux),
1744 .pad_mux_list = rtc_gpio_grp_pad_mux,
1745 };
1746
1747 static struct atlas7_pad_mux audio_ac97_grp_pad_mux[] = {
1748 MUX(1, 113, 2, N, N, N, N),
1749 MUX(1, 118, 2, N, N, N, N),
1750 MUX(1, 115, 2, N, N, N, N),
1751 MUX(1, 114, 2, N, N, N, N),
1752 };
1753
1754 static struct atlas7_grp_mux audio_ac97_grp_mux = {
1755 .pad_mux_count = ARRAY_SIZE(audio_ac97_grp_pad_mux),
1756 .pad_mux_list = audio_ac97_grp_pad_mux,
1757 };
1758
1759 static struct atlas7_pad_mux audio_digmic_grp0_pad_mux[] = {
1760 MUX(1, 51, 3, 0xa10, 20, 0xa90, 20),
1761 };
1762
1763 static struct atlas7_grp_mux audio_digmic_grp0_mux = {
1764 .pad_mux_count = ARRAY_SIZE(audio_digmic_grp0_pad_mux),
1765 .pad_mux_list = audio_digmic_grp0_pad_mux,
1766 };
1767
1768 static struct atlas7_pad_mux audio_digmic_grp1_pad_mux[] = {
1769 MUX(1, 122, 5, 0xa10, 20, 0xa90, 20),
1770 };
1771
1772 static struct atlas7_grp_mux audio_digmic_grp1_mux = {
1773 .pad_mux_count = ARRAY_SIZE(audio_digmic_grp1_pad_mux),
1774 .pad_mux_list = audio_digmic_grp1_pad_mux,
1775 };
1776
1777 static struct atlas7_pad_mux audio_digmic_grp2_pad_mux[] = {
1778 MUX(1, 161, 7, 0xa10, 20, 0xa90, 20),
1779 };
1780
1781 static struct atlas7_grp_mux audio_digmic_grp2_mux = {
1782 .pad_mux_count = ARRAY_SIZE(audio_digmic_grp2_pad_mux),
1783 .pad_mux_list = audio_digmic_grp2_pad_mux,
1784 };
1785
1786 static struct atlas7_pad_mux audio_func_dbg_grp_pad_mux[] = {
1787 MUX(1, 141, 4, N, N, N, N),
1788 MUX(1, 144, 4, N, N, N, N),
1789 MUX(1, 44, 6, N, N, N, N),
1790 MUX(1, 43, 6, N, N, N, N),
1791 MUX(1, 42, 6, N, N, N, N),
1792 MUX(1, 41, 6, N, N, N, N),
1793 MUX(1, 40, 6, N, N, N, N),
1794 MUX(1, 39, 6, N, N, N, N),
1795 MUX(1, 38, 6, N, N, N, N),
1796 MUX(1, 37, 6, N, N, N, N),
1797 MUX(1, 74, 6, N, N, N, N),
1798 MUX(1, 75, 6, N, N, N, N),
1799 MUX(1, 76, 6, N, N, N, N),
1800 MUX(1, 77, 6, N, N, N, N),
1801 MUX(1, 78, 6, N, N, N, N),
1802 MUX(1, 79, 6, N, N, N, N),
1803 MUX(1, 81, 6, N, N, N, N),
1804 MUX(1, 113, 6, N, N, N, N),
1805 MUX(1, 114, 6, N, N, N, N),
1806 MUX(1, 118, 6, N, N, N, N),
1807 MUX(1, 115, 6, N, N, N, N),
1808 MUX(1, 49, 6, N, N, N, N),
1809 MUX(1, 50, 6, N, N, N, N),
1810 MUX(1, 142, 4, N, N, N, N),
1811 MUX(1, 143, 4, N, N, N, N),
1812 MUX(1, 80, 6, N, N, N, N),
1813 };
1814
1815 static struct atlas7_grp_mux audio_func_dbg_grp_mux = {
1816 .pad_mux_count = ARRAY_SIZE(audio_func_dbg_grp_pad_mux),
1817 .pad_mux_list = audio_func_dbg_grp_pad_mux,
1818 };
1819
1820 static struct atlas7_pad_mux audio_i2s_grp_pad_mux[] = {
1821 MUX(1, 118, 1, N, N, N, N),
1822 MUX(1, 115, 1, N, N, N, N),
1823 MUX(1, 116, 1, N, N, N, N),
1824 MUX(1, 117, 1, N, N, N, N),
1825 MUX(1, 112, 1, N, N, N, N),
1826 MUX(1, 113, 1, N, N, N, N),
1827 MUX(1, 114, 1, N, N, N, N),
1828 };
1829
1830 static struct atlas7_grp_mux audio_i2s_grp_mux = {
1831 .pad_mux_count = ARRAY_SIZE(audio_i2s_grp_pad_mux),
1832 .pad_mux_list = audio_i2s_grp_pad_mux,
1833 };
1834
1835 static struct atlas7_pad_mux audio_i2s_2ch_grp_pad_mux[] = {
1836 MUX(1, 118, 1, N, N, N, N),
1837 MUX(1, 115, 1, N, N, N, N),
1838 MUX(1, 112, 1, N, N, N, N),
1839 MUX(1, 113, 1, N, N, N, N),
1840 MUX(1, 114, 1, N, N, N, N),
1841 };
1842
1843 static struct atlas7_grp_mux audio_i2s_2ch_grp_mux = {
1844 .pad_mux_count = ARRAY_SIZE(audio_i2s_2ch_grp_pad_mux),
1845 .pad_mux_list = audio_i2s_2ch_grp_pad_mux,
1846 };
1847
1848 static struct atlas7_pad_mux audio_i2s_extclk_grp_pad_mux[] = {
1849 MUX(1, 112, 2, N, N, N, N),
1850 };
1851
1852 static struct atlas7_grp_mux audio_i2s_extclk_grp_mux = {
1853 .pad_mux_count = ARRAY_SIZE(audio_i2s_extclk_grp_pad_mux),
1854 .pad_mux_list = audio_i2s_extclk_grp_pad_mux,
1855 };
1856
1857 static struct atlas7_pad_mux audio_spdif_out_grp0_pad_mux[] = {
1858 MUX(1, 112, 3, N, N, N, N),
1859 };
1860
1861 static struct atlas7_grp_mux audio_spdif_out_grp0_mux = {
1862 .pad_mux_count = ARRAY_SIZE(audio_spdif_out_grp0_pad_mux),
1863 .pad_mux_list = audio_spdif_out_grp0_pad_mux,
1864 };
1865
1866 static struct atlas7_pad_mux audio_spdif_out_grp1_pad_mux[] = {
1867 MUX(1, 116, 3, N, N, N, N),
1868 };
1869
1870 static struct atlas7_grp_mux audio_spdif_out_grp1_mux = {
1871 .pad_mux_count = ARRAY_SIZE(audio_spdif_out_grp1_pad_mux),
1872 .pad_mux_list = audio_spdif_out_grp1_pad_mux,
1873 };
1874
1875 static struct atlas7_pad_mux audio_spdif_out_grp2_pad_mux[] = {
1876 MUX(1, 142, 3, N, N, N, N),
1877 };
1878
1879 static struct atlas7_grp_mux audio_spdif_out_grp2_mux = {
1880 .pad_mux_count = ARRAY_SIZE(audio_spdif_out_grp2_pad_mux),
1881 .pad_mux_list = audio_spdif_out_grp2_pad_mux,
1882 };
1883
1884 static struct atlas7_pad_mux audio_uart0_basic_grp_pad_mux[] = {
1885 MUX(1, 143, 1, N, N, N, N),
1886 MUX(1, 142, 1, N, N, N, N),
1887 MUX(1, 141, 1, N, N, N, N),
1888 MUX(1, 144, 1, N, N, N, N),
1889 };
1890
1891 static struct atlas7_grp_mux audio_uart0_basic_grp_mux = {
1892 .pad_mux_count = ARRAY_SIZE(audio_uart0_basic_grp_pad_mux),
1893 .pad_mux_list = audio_uart0_basic_grp_pad_mux,
1894 };
1895
1896 static struct atlas7_pad_mux audio_uart0_urfs_grp0_pad_mux[] = {
1897 MUX(1, 117, 5, 0xa10, 28, 0xa90, 28),
1898 };
1899
1900 static struct atlas7_grp_mux audio_uart0_urfs_grp0_mux = {
1901 .pad_mux_count = ARRAY_SIZE(audio_uart0_urfs_grp0_pad_mux),
1902 .pad_mux_list = audio_uart0_urfs_grp0_pad_mux,
1903 };
1904
1905 static struct atlas7_pad_mux audio_uart0_urfs_grp1_pad_mux[] = {
1906 MUX(1, 139, 3, 0xa10, 28, 0xa90, 28),
1907 };
1908
1909 static struct atlas7_grp_mux audio_uart0_urfs_grp1_mux = {
1910 .pad_mux_count = ARRAY_SIZE(audio_uart0_urfs_grp1_pad_mux),
1911 .pad_mux_list = audio_uart0_urfs_grp1_pad_mux,
1912 };
1913
1914 static struct atlas7_pad_mux audio_uart0_urfs_grp2_pad_mux[] = {
1915 MUX(1, 163, 3, 0xa10, 28, 0xa90, 28),
1916 };
1917
1918 static struct atlas7_grp_mux audio_uart0_urfs_grp2_mux = {
1919 .pad_mux_count = ARRAY_SIZE(audio_uart0_urfs_grp2_pad_mux),
1920 .pad_mux_list = audio_uart0_urfs_grp2_pad_mux,
1921 };
1922
1923 static struct atlas7_pad_mux audio_uart0_urfs_grp3_pad_mux[] = {
1924 MUX(1, 162, 6, 0xa10, 28, 0xa90, 28),
1925 };
1926
1927 static struct atlas7_grp_mux audio_uart0_urfs_grp3_mux = {
1928 .pad_mux_count = ARRAY_SIZE(audio_uart0_urfs_grp3_pad_mux),
1929 .pad_mux_list = audio_uart0_urfs_grp3_pad_mux,
1930 };
1931
1932 static struct atlas7_pad_mux audio_uart1_basic_grp_pad_mux[] = {
1933 MUX(1, 147, 1, 0xa10, 24, 0xa90, 24),
1934 MUX(1, 146, 1, 0xa10, 25, 0xa90, 25),
1935 MUX(1, 145, 1, 0xa10, 23, 0xa90, 23),
1936 MUX(1, 148, 1, 0xa10, 22, 0xa90, 22),
1937 };
1938
1939 static struct atlas7_grp_mux audio_uart1_basic_grp_mux = {
1940 .pad_mux_count = ARRAY_SIZE(audio_uart1_basic_grp_pad_mux),
1941 .pad_mux_list = audio_uart1_basic_grp_pad_mux,
1942 };
1943
1944 static struct atlas7_pad_mux audio_uart1_urfs_grp0_pad_mux[] = {
1945 MUX(1, 117, 6, 0xa10, 29, 0xa90, 29),
1946 };
1947
1948 static struct atlas7_grp_mux audio_uart1_urfs_grp0_mux = {
1949 .pad_mux_count = ARRAY_SIZE(audio_uart1_urfs_grp0_pad_mux),
1950 .pad_mux_list = audio_uart1_urfs_grp0_pad_mux,
1951 };
1952
1953 static struct atlas7_pad_mux audio_uart1_urfs_grp1_pad_mux[] = {
1954 MUX(1, 140, 3, 0xa10, 29, 0xa90, 29),
1955 };
1956
1957 static struct atlas7_grp_mux audio_uart1_urfs_grp1_mux = {
1958 .pad_mux_count = ARRAY_SIZE(audio_uart1_urfs_grp1_pad_mux),
1959 .pad_mux_list = audio_uart1_urfs_grp1_pad_mux,
1960 };
1961
1962 static struct atlas7_pad_mux audio_uart1_urfs_grp2_pad_mux[] = {
1963 MUX(1, 163, 4, 0xa10, 29, 0xa90, 29),
1964 };
1965
1966 static struct atlas7_grp_mux audio_uart1_urfs_grp2_mux = {
1967 .pad_mux_count = ARRAY_SIZE(audio_uart1_urfs_grp2_pad_mux),
1968 .pad_mux_list = audio_uart1_urfs_grp2_pad_mux,
1969 };
1970
1971 static struct atlas7_pad_mux audio_uart2_urfs_grp0_pad_mux[] = {
1972 MUX(1, 139, 4, 0xa10, 30, 0xa90, 30),
1973 };
1974
1975 static struct atlas7_grp_mux audio_uart2_urfs_grp0_mux = {
1976 .pad_mux_count = ARRAY_SIZE(audio_uart2_urfs_grp0_pad_mux),
1977 .pad_mux_list = audio_uart2_urfs_grp0_pad_mux,
1978 };
1979
1980 static struct atlas7_pad_mux audio_uart2_urfs_grp1_pad_mux[] = {
1981 MUX(1, 163, 6, 0xa10, 30, 0xa90, 30),
1982 };
1983
1984 static struct atlas7_grp_mux audio_uart2_urfs_grp1_mux = {
1985 .pad_mux_count = ARRAY_SIZE(audio_uart2_urfs_grp1_pad_mux),
1986 .pad_mux_list = audio_uart2_urfs_grp1_pad_mux,
1987 };
1988
1989 static struct atlas7_pad_mux audio_uart2_urfs_grp2_pad_mux[] = {
1990 MUX(1, 96, 3, 0xa10, 30, 0xa90, 30),
1991 };
1992
1993 static struct atlas7_grp_mux audio_uart2_urfs_grp2_mux = {
1994 .pad_mux_count = ARRAY_SIZE(audio_uart2_urfs_grp2_pad_mux),
1995 .pad_mux_list = audio_uart2_urfs_grp2_pad_mux,
1996 };
1997
1998 static struct atlas7_pad_mux audio_uart2_urxd_grp0_pad_mux[] = {
1999 MUX(1, 20, 2, 0xa00, 24, 0xa80, 24),
2000 };
2001
2002 static struct atlas7_grp_mux audio_uart2_urxd_grp0_mux = {
2003 .pad_mux_count = ARRAY_SIZE(audio_uart2_urxd_grp0_pad_mux),
2004 .pad_mux_list = audio_uart2_urxd_grp0_pad_mux,
2005 };
2006
2007 static struct atlas7_pad_mux audio_uart2_urxd_grp1_pad_mux[] = {
2008 MUX(1, 109, 2, 0xa00, 24, 0xa80, 24),
2009 };
2010
2011 static struct atlas7_grp_mux audio_uart2_urxd_grp1_mux = {
2012 .pad_mux_count = ARRAY_SIZE(audio_uart2_urxd_grp1_pad_mux),
2013 .pad_mux_list = audio_uart2_urxd_grp1_pad_mux,
2014 };
2015
2016 static struct atlas7_pad_mux audio_uart2_urxd_grp2_pad_mux[] = {
2017 MUX(1, 93, 3, 0xa00, 24, 0xa80, 24),
2018 };
2019
2020 static struct atlas7_grp_mux audio_uart2_urxd_grp2_mux = {
2021 .pad_mux_count = ARRAY_SIZE(audio_uart2_urxd_grp2_pad_mux),
2022 .pad_mux_list = audio_uart2_urxd_grp2_pad_mux,
2023 };
2024
2025 static struct atlas7_pad_mux audio_uart2_usclk_grp0_pad_mux[] = {
2026 MUX(1, 19, 2, 0xa00, 23, 0xa80, 23),
2027 };
2028
2029 static struct atlas7_grp_mux audio_uart2_usclk_grp0_mux = {
2030 .pad_mux_count = ARRAY_SIZE(audio_uart2_usclk_grp0_pad_mux),
2031 .pad_mux_list = audio_uart2_usclk_grp0_pad_mux,
2032 };
2033
2034 static struct atlas7_pad_mux audio_uart2_usclk_grp1_pad_mux[] = {
2035 MUX(1, 101, 2, 0xa00, 23, 0xa80, 23),
2036 };
2037
2038 static struct atlas7_grp_mux audio_uart2_usclk_grp1_mux = {
2039 .pad_mux_count = ARRAY_SIZE(audio_uart2_usclk_grp1_pad_mux),
2040 .pad_mux_list = audio_uart2_usclk_grp1_pad_mux,
2041 };
2042
2043 static struct atlas7_pad_mux audio_uart2_usclk_grp2_pad_mux[] = {
2044 MUX(1, 91, 3, 0xa00, 23, 0xa80, 23),
2045 };
2046
2047 static struct atlas7_grp_mux audio_uart2_usclk_grp2_mux = {
2048 .pad_mux_count = ARRAY_SIZE(audio_uart2_usclk_grp2_pad_mux),
2049 .pad_mux_list = audio_uart2_usclk_grp2_pad_mux,
2050 };
2051
2052 static struct atlas7_pad_mux audio_uart2_utfs_grp0_pad_mux[] = {
2053 MUX(1, 18, 2, 0xa00, 22, 0xa80, 22),
2054 };
2055
2056 static struct atlas7_grp_mux audio_uart2_utfs_grp0_mux = {
2057 .pad_mux_count = ARRAY_SIZE(audio_uart2_utfs_grp0_pad_mux),
2058 .pad_mux_list = audio_uart2_utfs_grp0_pad_mux,
2059 };
2060
2061 static struct atlas7_pad_mux audio_uart2_utfs_grp1_pad_mux[] = {
2062 MUX(1, 111, 2, 0xa00, 22, 0xa80, 22),
2063 };
2064
2065 static struct atlas7_grp_mux audio_uart2_utfs_grp1_mux = {
2066 .pad_mux_count = ARRAY_SIZE(audio_uart2_utfs_grp1_pad_mux),
2067 .pad_mux_list = audio_uart2_utfs_grp1_pad_mux,
2068 };
2069
2070 static struct atlas7_pad_mux audio_uart2_utfs_grp2_pad_mux[] = {
2071 MUX(1, 94, 3, 0xa00, 22, 0xa80, 22),
2072 };
2073
2074 static struct atlas7_grp_mux audio_uart2_utfs_grp2_mux = {
2075 .pad_mux_count = ARRAY_SIZE(audio_uart2_utfs_grp2_pad_mux),
2076 .pad_mux_list = audio_uart2_utfs_grp2_pad_mux,
2077 };
2078
2079 static struct atlas7_pad_mux audio_uart2_utxd_grp0_pad_mux[] = {
2080 MUX(1, 21, 2, 0xa00, 25, 0xa80, 25),
2081 };
2082
2083 static struct atlas7_grp_mux audio_uart2_utxd_grp0_mux = {
2084 .pad_mux_count = ARRAY_SIZE(audio_uart2_utxd_grp0_pad_mux),
2085 .pad_mux_list = audio_uart2_utxd_grp0_pad_mux,
2086 };
2087
2088 static struct atlas7_pad_mux audio_uart2_utxd_grp1_pad_mux[] = {
2089 MUX(1, 110, 2, 0xa00, 25, 0xa80, 25),
2090 };
2091
2092 static struct atlas7_grp_mux audio_uart2_utxd_grp1_mux = {
2093 .pad_mux_count = ARRAY_SIZE(audio_uart2_utxd_grp1_pad_mux),
2094 .pad_mux_list = audio_uart2_utxd_grp1_pad_mux,
2095 };
2096
2097 static struct atlas7_pad_mux audio_uart2_utxd_grp2_pad_mux[] = {
2098 MUX(1, 92, 3, 0xa00, 25, 0xa80, 25),
2099 };
2100
2101 static struct atlas7_grp_mux audio_uart2_utxd_grp2_mux = {
2102 .pad_mux_count = ARRAY_SIZE(audio_uart2_utxd_grp2_pad_mux),
2103 .pad_mux_list = audio_uart2_utxd_grp2_pad_mux,
2104 };
2105
2106 static struct atlas7_pad_mux c_can_trnsvr_en_grp0_pad_mux[] = {
2107 MUX(0, 2, 6, N, N, N, N),
2108 };
2109
2110 static struct atlas7_grp_mux c_can_trnsvr_en_grp0_mux = {
2111 .pad_mux_count = ARRAY_SIZE(c_can_trnsvr_en_grp0_pad_mux),
2112 .pad_mux_list = c_can_trnsvr_en_grp0_pad_mux,
2113 };
2114
2115 static struct atlas7_pad_mux c_can_trnsvr_en_grp1_pad_mux[] = {
2116 MUX(0, 0, 2, N, N, N, N),
2117 };
2118
2119 static struct atlas7_grp_mux c_can_trnsvr_en_grp1_mux = {
2120 .pad_mux_count = ARRAY_SIZE(c_can_trnsvr_en_grp1_pad_mux),
2121 .pad_mux_list = c_can_trnsvr_en_grp1_pad_mux,
2122 };
2123
2124 static struct atlas7_pad_mux c_can_trnsvr_intr_grp_pad_mux[] = {
2125 MUX(0, 1, 2, N, N, N, N),
2126 };
2127
2128 static struct atlas7_grp_mux c_can_trnsvr_intr_grp_mux = {
2129 .pad_mux_count = ARRAY_SIZE(c_can_trnsvr_intr_grp_pad_mux),
2130 .pad_mux_list = c_can_trnsvr_intr_grp_pad_mux,
2131 };
2132
2133 static struct atlas7_pad_mux c_can_trnsvr_stb_n_grp_pad_mux[] = {
2134 MUX(0, 3, 6, N, N, N, N),
2135 };
2136
2137 static struct atlas7_grp_mux c_can_trnsvr_stb_n_grp_mux = {
2138 .pad_mux_count = ARRAY_SIZE(c_can_trnsvr_stb_n_grp_pad_mux),
2139 .pad_mux_list = c_can_trnsvr_stb_n_grp_pad_mux,
2140 };
2141
2142 static struct atlas7_pad_mux c0_can_rxd_trnsv0_grp_pad_mux[] = {
2143 MUX(0, 11, 1, 0xa08, 9, 0xa88, 9),
2144 };
2145
2146 static struct atlas7_grp_mux c0_can_rxd_trnsv0_grp_mux = {
2147 .pad_mux_count = ARRAY_SIZE(c0_can_rxd_trnsv0_grp_pad_mux),
2148 .pad_mux_list = c0_can_rxd_trnsv0_grp_pad_mux,
2149 };
2150
2151 static struct atlas7_pad_mux c0_can_rxd_trnsv1_grp_pad_mux[] = {
2152 MUX(0, 2, 5, 0xa10, 9, 0xa90, 9),
2153 };
2154
2155 static struct atlas7_grp_mux c0_can_rxd_trnsv1_grp_mux = {
2156 .pad_mux_count = ARRAY_SIZE(c0_can_rxd_trnsv1_grp_pad_mux),
2157 .pad_mux_list = c0_can_rxd_trnsv1_grp_pad_mux,
2158 };
2159
2160 static struct atlas7_pad_mux c0_can_txd_trnsv0_grp_pad_mux[] = {
2161 MUX(0, 10, 1, N, N, N, N),
2162 };
2163
2164 static struct atlas7_grp_mux c0_can_txd_trnsv0_grp_mux = {
2165 .pad_mux_count = ARRAY_SIZE(c0_can_txd_trnsv0_grp_pad_mux),
2166 .pad_mux_list = c0_can_txd_trnsv0_grp_pad_mux,
2167 };
2168
2169 static struct atlas7_pad_mux c0_can_txd_trnsv1_grp_pad_mux[] = {
2170 MUX(0, 3, 5, N, N, N, N),
2171 };
2172
2173 static struct atlas7_grp_mux c0_can_txd_trnsv1_grp_mux = {
2174 .pad_mux_count = ARRAY_SIZE(c0_can_txd_trnsv1_grp_pad_mux),
2175 .pad_mux_list = c0_can_txd_trnsv1_grp_pad_mux,
2176 };
2177
2178 static struct atlas7_pad_mux c1_can_rxd_grp0_pad_mux[] = {
2179 MUX(1, 138, 2, 0xa00, 4, 0xa80, 4),
2180 };
2181
2182 static struct atlas7_grp_mux c1_can_rxd_grp0_mux = {
2183 .pad_mux_count = ARRAY_SIZE(c1_can_rxd_grp0_pad_mux),
2184 .pad_mux_list = c1_can_rxd_grp0_pad_mux,
2185 };
2186
2187 static struct atlas7_pad_mux c1_can_rxd_grp1_pad_mux[] = {
2188 MUX(1, 147, 2, 0xa00, 4, 0xa80, 4),
2189 };
2190
2191 static struct atlas7_grp_mux c1_can_rxd_grp1_mux = {
2192 .pad_mux_count = ARRAY_SIZE(c1_can_rxd_grp1_pad_mux),
2193 .pad_mux_list = c1_can_rxd_grp1_pad_mux,
2194 };
2195
2196 static struct atlas7_pad_mux c1_can_rxd_grp2_pad_mux[] = {
2197 MUX(0, 2, 2, 0xa00, 4, 0xa80, 4),
2198 };
2199
2200 static struct atlas7_grp_mux c1_can_rxd_grp2_mux = {
2201 .pad_mux_count = ARRAY_SIZE(c1_can_rxd_grp2_pad_mux),
2202 .pad_mux_list = c1_can_rxd_grp2_pad_mux,
2203 };
2204
2205 static struct atlas7_pad_mux c1_can_rxd_grp3_pad_mux[] = {
2206 MUX(1, 162, 4, 0xa00, 4, 0xa80, 4),
2207 };
2208
2209 static struct atlas7_grp_mux c1_can_rxd_grp3_mux = {
2210 .pad_mux_count = ARRAY_SIZE(c1_can_rxd_grp3_pad_mux),
2211 .pad_mux_list = c1_can_rxd_grp3_pad_mux,
2212 };
2213
2214 static struct atlas7_pad_mux c1_can_txd_grp0_pad_mux[] = {
2215 MUX(1, 137, 2, N, N, N, N),
2216 };
2217
2218 static struct atlas7_grp_mux c1_can_txd_grp0_mux = {
2219 .pad_mux_count = ARRAY_SIZE(c1_can_txd_grp0_pad_mux),
2220 .pad_mux_list = c1_can_txd_grp0_pad_mux,
2221 };
2222
2223 static struct atlas7_pad_mux c1_can_txd_grp1_pad_mux[] = {
2224 MUX(1, 146, 2, N, N, N, N),
2225 };
2226
2227 static struct atlas7_grp_mux c1_can_txd_grp1_mux = {
2228 .pad_mux_count = ARRAY_SIZE(c1_can_txd_grp1_pad_mux),
2229 .pad_mux_list = c1_can_txd_grp1_pad_mux,
2230 };
2231
2232 static struct atlas7_pad_mux c1_can_txd_grp2_pad_mux[] = {
2233 MUX(0, 3, 2, N, N, N, N),
2234 };
2235
2236 static struct atlas7_grp_mux c1_can_txd_grp2_mux = {
2237 .pad_mux_count = ARRAY_SIZE(c1_can_txd_grp2_pad_mux),
2238 .pad_mux_list = c1_can_txd_grp2_pad_mux,
2239 };
2240
2241 static struct atlas7_pad_mux c1_can_txd_grp3_pad_mux[] = {
2242 MUX(1, 161, 4, N, N, N, N),
2243 };
2244
2245 static struct atlas7_grp_mux c1_can_txd_grp3_mux = {
2246 .pad_mux_count = ARRAY_SIZE(c1_can_txd_grp3_pad_mux),
2247 .pad_mux_list = c1_can_txd_grp3_pad_mux,
2248 };
2249
2250 static struct atlas7_pad_mux ca_audio_lpc_grp_pad_mux[] = {
2251 MUX(1, 62, 4, N, N, N, N),
2252 MUX(1, 63, 4, N, N, N, N),
2253 MUX(1, 64, 4, N, N, N, N),
2254 MUX(1, 65, 4, N, N, N, N),
2255 MUX(1, 66, 4, N, N, N, N),
2256 MUX(1, 67, 4, N, N, N, N),
2257 MUX(1, 68, 4, N, N, N, N),
2258 MUX(1, 69, 4, N, N, N, N),
2259 MUX(1, 70, 4, N, N, N, N),
2260 MUX(1, 71, 4, N, N, N, N),
2261 };
2262
2263 static struct atlas7_grp_mux ca_audio_lpc_grp_mux = {
2264 .pad_mux_count = ARRAY_SIZE(ca_audio_lpc_grp_pad_mux),
2265 .pad_mux_list = ca_audio_lpc_grp_pad_mux,
2266 };
2267
2268 static struct atlas7_pad_mux ca_bt_lpc_grp_pad_mux[] = {
2269 MUX(1, 85, 5, N, N, N, N),
2270 MUX(1, 86, 5, N, N, N, N),
2271 MUX(1, 87, 5, N, N, N, N),
2272 MUX(1, 88, 5, N, N, N, N),
2273 MUX(1, 89, 5, N, N, N, N),
2274 MUX(1, 90, 5, N, N, N, N),
2275 };
2276
2277 static struct atlas7_grp_mux ca_bt_lpc_grp_mux = {
2278 .pad_mux_count = ARRAY_SIZE(ca_bt_lpc_grp_pad_mux),
2279 .pad_mux_list = ca_bt_lpc_grp_pad_mux,
2280 };
2281
2282 static struct atlas7_pad_mux ca_coex_grp_pad_mux[] = {
2283 MUX(1, 129, 1, N, N, N, N),
2284 MUX(1, 130, 1, N, N, N, N),
2285 MUX(1, 131, 1, N, N, N, N),
2286 MUX(1, 132, 1, N, N, N, N),
2287 };
2288
2289 static struct atlas7_grp_mux ca_coex_grp_mux = {
2290 .pad_mux_count = ARRAY_SIZE(ca_coex_grp_pad_mux),
2291 .pad_mux_list = ca_coex_grp_pad_mux,
2292 };
2293
2294 static struct atlas7_pad_mux ca_curator_lpc_grp_pad_mux[] = {
2295 MUX(1, 57, 4, N, N, N, N),
2296 MUX(1, 58, 4, N, N, N, N),
2297 MUX(1, 59, 4, N, N, N, N),
2298 MUX(1, 60, 4, N, N, N, N),
2299 };
2300
2301 static struct atlas7_grp_mux ca_curator_lpc_grp_mux = {
2302 .pad_mux_count = ARRAY_SIZE(ca_curator_lpc_grp_pad_mux),
2303 .pad_mux_list = ca_curator_lpc_grp_pad_mux,
2304 };
2305
2306 static struct atlas7_pad_mux ca_pcm_debug_grp_pad_mux[] = {
2307 MUX(1, 91, 5, N, N, N, N),
2308 MUX(1, 93, 5, N, N, N, N),
2309 MUX(1, 94, 5, N, N, N, N),
2310 MUX(1, 92, 5, N, N, N, N),
2311 };
2312
2313 static struct atlas7_grp_mux ca_pcm_debug_grp_mux = {
2314 .pad_mux_count = ARRAY_SIZE(ca_pcm_debug_grp_pad_mux),
2315 .pad_mux_list = ca_pcm_debug_grp_pad_mux,
2316 };
2317
2318 static struct atlas7_pad_mux ca_pio_grp_pad_mux[] = {
2319 MUX(1, 121, 2, N, N, N, N),
2320 MUX(1, 122, 2, N, N, N, N),
2321 MUX(1, 125, 6, N, N, N, N),
2322 MUX(1, 126, 6, N, N, N, N),
2323 MUX(1, 38, 5, N, N, N, N),
2324 MUX(1, 37, 5, N, N, N, N),
2325 MUX(1, 47, 5, N, N, N, N),
2326 MUX(1, 49, 5, N, N, N, N),
2327 MUX(1, 50, 5, N, N, N, N),
2328 MUX(1, 54, 4, N, N, N, N),
2329 MUX(1, 55, 4, N, N, N, N),
2330 MUX(1, 56, 4, N, N, N, N),
2331 };
2332
2333 static struct atlas7_grp_mux ca_pio_grp_mux = {
2334 .pad_mux_count = ARRAY_SIZE(ca_pio_grp_pad_mux),
2335 .pad_mux_list = ca_pio_grp_pad_mux,
2336 };
2337
2338 static struct atlas7_pad_mux ca_sdio_debug_grp_pad_mux[] = {
2339 MUX(1, 40, 5, N, N, N, N),
2340 MUX(1, 39, 5, N, N, N, N),
2341 MUX(1, 44, 5, N, N, N, N),
2342 MUX(1, 43, 5, N, N, N, N),
2343 MUX(1, 42, 5, N, N, N, N),
2344 MUX(1, 41, 5, N, N, N, N),
2345 };
2346
2347 static struct atlas7_grp_mux ca_sdio_debug_grp_mux = {
2348 .pad_mux_count = ARRAY_SIZE(ca_sdio_debug_grp_pad_mux),
2349 .pad_mux_list = ca_sdio_debug_grp_pad_mux,
2350 };
2351
2352 static struct atlas7_pad_mux ca_spi_grp_pad_mux[] = {
2353 MUX(1, 82, 5, N, N, N, N),
2354 MUX(1, 79, 5, 0xa08, 6, 0xa88, 6),
2355 MUX(1, 80, 5, N, N, N, N),
2356 MUX(1, 81, 5, N, N, N, N),
2357 };
2358
2359 static struct atlas7_grp_mux ca_spi_grp_mux = {
2360 .pad_mux_count = ARRAY_SIZE(ca_spi_grp_pad_mux),
2361 .pad_mux_list = ca_spi_grp_pad_mux,
2362 };
2363
2364 static struct atlas7_pad_mux ca_trb_grp_pad_mux[] = {
2365 MUX(1, 91, 4, N, N, N, N),
2366 MUX(1, 93, 4, N, N, N, N),
2367 MUX(1, 94, 4, N, N, N, N),
2368 MUX(1, 95, 4, N, N, N, N),
2369 MUX(1, 96, 4, N, N, N, N),
2370 MUX(1, 78, 5, N, N, N, N),
2371 MUX(1, 74, 5, N, N, N, N),
2372 MUX(1, 75, 5, N, N, N, N),
2373 MUX(1, 76, 5, N, N, N, N),
2374 MUX(1, 77, 5, N, N, N, N),
2375 };
2376
2377 static struct atlas7_grp_mux ca_trb_grp_mux = {
2378 .pad_mux_count = ARRAY_SIZE(ca_trb_grp_pad_mux),
2379 .pad_mux_list = ca_trb_grp_pad_mux,
2380 };
2381
2382 static struct atlas7_pad_mux ca_uart_debug_grp_pad_mux[] = {
2383 MUX(1, 136, 3, N, N, N, N),
2384 MUX(1, 135, 3, N, N, N, N),
2385 MUX(1, 134, 3, N, N, N, N),
2386 MUX(1, 133, 3, N, N, N, N),
2387 };
2388
2389 static struct atlas7_grp_mux ca_uart_debug_grp_mux = {
2390 .pad_mux_count = ARRAY_SIZE(ca_uart_debug_grp_pad_mux),
2391 .pad_mux_list = ca_uart_debug_grp_pad_mux,
2392 };
2393
2394 static struct atlas7_pad_mux clkc_grp0_pad_mux[] = {
2395 MUX(1, 30, 2, 0xa08, 14, 0xa88, 14),
2396 MUX(1, 47, 6, N, N, N, N),
2397 };
2398
2399 static struct atlas7_grp_mux clkc_grp0_mux = {
2400 .pad_mux_count = ARRAY_SIZE(clkc_grp0_pad_mux),
2401 .pad_mux_list = clkc_grp0_pad_mux,
2402 };
2403
2404 static struct atlas7_pad_mux clkc_grp1_pad_mux[] = {
2405 MUX(1, 78, 3, 0xa08, 14, 0xa88, 14),
2406 MUX(1, 54, 5, N, N, N, N),
2407 };
2408
2409 static struct atlas7_grp_mux clkc_grp1_mux = {
2410 .pad_mux_count = ARRAY_SIZE(clkc_grp1_pad_mux),
2411 .pad_mux_list = clkc_grp1_pad_mux,
2412 };
2413
2414 static struct atlas7_pad_mux gn_gnss_i2c_grp_pad_mux[] = {
2415 MUX(1, 128, 2, N, N, N, N),
2416 MUX(1, 127, 2, N, N, N, N),
2417 };
2418
2419 static struct atlas7_grp_mux gn_gnss_i2c_grp_mux = {
2420 .pad_mux_count = ARRAY_SIZE(gn_gnss_i2c_grp_pad_mux),
2421 .pad_mux_list = gn_gnss_i2c_grp_pad_mux,
2422 };
2423
2424 static struct atlas7_pad_mux gn_gnss_uart_nopause_grp_pad_mux[] = {
2425 MUX(1, 134, 4, N, N, N, N),
2426 MUX(1, 133, 4, N, N, N, N),
2427 };
2428
2429 static struct atlas7_grp_mux gn_gnss_uart_nopause_grp_mux = {
2430 .pad_mux_count = ARRAY_SIZE(gn_gnss_uart_nopause_grp_pad_mux),
2431 .pad_mux_list = gn_gnss_uart_nopause_grp_pad_mux,
2432 };
2433
2434 static struct atlas7_pad_mux gn_gnss_uart_grp_pad_mux[] = {
2435 MUX(1, 134, 4, N, N, N, N),
2436 MUX(1, 133, 4, N, N, N, N),
2437 MUX(1, 136, 4, N, N, N, N),
2438 MUX(1, 135, 4, N, N, N, N),
2439 };
2440
2441 static struct atlas7_grp_mux gn_gnss_uart_grp_mux = {
2442 .pad_mux_count = ARRAY_SIZE(gn_gnss_uart_grp_pad_mux),
2443 .pad_mux_list = gn_gnss_uart_grp_pad_mux,
2444 };
2445
2446 static struct atlas7_pad_mux gn_trg_spi_grp0_pad_mux[] = {
2447 MUX(1, 22, 1, N, N, N, N),
2448 MUX(1, 25, 1, N, N, N, N),
2449 MUX(1, 23, 1, 0xa00, 10, 0xa80, 10),
2450 MUX(1, 24, 1, N, N, N, N),
2451 };
2452
2453 static struct atlas7_grp_mux gn_trg_spi_grp0_mux = {
2454 .pad_mux_count = ARRAY_SIZE(gn_trg_spi_grp0_pad_mux),
2455 .pad_mux_list = gn_trg_spi_grp0_pad_mux,
2456 };
2457
2458 static struct atlas7_pad_mux gn_trg_spi_grp1_pad_mux[] = {
2459 MUX(1, 82, 3, N, N, N, N),
2460 MUX(1, 79, 3, N, N, N, N),
2461 MUX(1, 80, 3, 0xa00, 10, 0xa80, 10),
2462 MUX(1, 81, 3, N, N, N, N),
2463 };
2464
2465 static struct atlas7_grp_mux gn_trg_spi_grp1_mux = {
2466 .pad_mux_count = ARRAY_SIZE(gn_trg_spi_grp1_pad_mux),
2467 .pad_mux_list = gn_trg_spi_grp1_pad_mux,
2468 };
2469
2470 static struct atlas7_pad_mux cvbs_dbg_grp_pad_mux[] = {
2471 MUX(1, 54, 3, N, N, N, N),
2472 MUX(1, 53, 3, N, N, N, N),
2473 MUX(1, 82, 7, N, N, N, N),
2474 MUX(1, 74, 7, N, N, N, N),
2475 MUX(1, 75, 7, N, N, N, N),
2476 MUX(1, 76, 7, N, N, N, N),
2477 MUX(1, 77, 7, N, N, N, N),
2478 MUX(1, 78, 7, N, N, N, N),
2479 MUX(1, 79, 7, N, N, N, N),
2480 MUX(1, 80, 7, N, N, N, N),
2481 MUX(1, 81, 7, N, N, N, N),
2482 MUX(1, 83, 7, N, N, N, N),
2483 MUX(1, 84, 7, N, N, N, N),
2484 MUX(1, 73, 3, N, N, N, N),
2485 MUX(1, 55, 3, N, N, N, N),
2486 MUX(1, 56, 3, N, N, N, N),
2487 };
2488
2489 static struct atlas7_grp_mux cvbs_dbg_grp_mux = {
2490 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_grp_pad_mux),
2491 .pad_mux_list = cvbs_dbg_grp_pad_mux,
2492 };
2493
2494 static struct atlas7_pad_mux cvbs_dbg_test_grp0_pad_mux[] = {
2495 MUX(1, 57, 3, N, N, N, N),
2496 };
2497
2498 static struct atlas7_grp_mux cvbs_dbg_test_grp0_mux = {
2499 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp0_pad_mux),
2500 .pad_mux_list = cvbs_dbg_test_grp0_pad_mux,
2501 };
2502
2503 static struct atlas7_pad_mux cvbs_dbg_test_grp1_pad_mux[] = {
2504 MUX(1, 58, 3, N, N, N, N),
2505 };
2506
2507 static struct atlas7_grp_mux cvbs_dbg_test_grp1_mux = {
2508 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp1_pad_mux),
2509 .pad_mux_list = cvbs_dbg_test_grp1_pad_mux,
2510 };
2511
2512 static struct atlas7_pad_mux cvbs_dbg_test_grp2_pad_mux[] = {
2513 MUX(1, 59, 3, N, N, N, N),
2514 };
2515
2516 static struct atlas7_grp_mux cvbs_dbg_test_grp2_mux = {
2517 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp2_pad_mux),
2518 .pad_mux_list = cvbs_dbg_test_grp2_pad_mux,
2519 };
2520
2521 static struct atlas7_pad_mux cvbs_dbg_test_grp3_pad_mux[] = {
2522 MUX(1, 60, 3, N, N, N, N),
2523 };
2524
2525 static struct atlas7_grp_mux cvbs_dbg_test_grp3_mux = {
2526 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp3_pad_mux),
2527 .pad_mux_list = cvbs_dbg_test_grp3_pad_mux,
2528 };
2529
2530 static struct atlas7_pad_mux cvbs_dbg_test_grp4_pad_mux[] = {
2531 MUX(1, 61, 3, N, N, N, N),
2532 };
2533
2534 static struct atlas7_grp_mux cvbs_dbg_test_grp4_mux = {
2535 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp4_pad_mux),
2536 .pad_mux_list = cvbs_dbg_test_grp4_pad_mux,
2537 };
2538
2539 static struct atlas7_pad_mux cvbs_dbg_test_grp5_pad_mux[] = {
2540 MUX(1, 62, 3, N, N, N, N),
2541 };
2542
2543 static struct atlas7_grp_mux cvbs_dbg_test_grp5_mux = {
2544 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp5_pad_mux),
2545 .pad_mux_list = cvbs_dbg_test_grp5_pad_mux,
2546 };
2547
2548 static struct atlas7_pad_mux cvbs_dbg_test_grp6_pad_mux[] = {
2549 MUX(1, 63, 3, N, N, N, N),
2550 };
2551
2552 static struct atlas7_grp_mux cvbs_dbg_test_grp6_mux = {
2553 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp6_pad_mux),
2554 .pad_mux_list = cvbs_dbg_test_grp6_pad_mux,
2555 };
2556
2557 static struct atlas7_pad_mux cvbs_dbg_test_grp7_pad_mux[] = {
2558 MUX(1, 64, 3, N, N, N, N),
2559 };
2560
2561 static struct atlas7_grp_mux cvbs_dbg_test_grp7_mux = {
2562 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp7_pad_mux),
2563 .pad_mux_list = cvbs_dbg_test_grp7_pad_mux,
2564 };
2565
2566 static struct atlas7_pad_mux cvbs_dbg_test_grp8_pad_mux[] = {
2567 MUX(1, 65, 3, N, N, N, N),
2568 };
2569
2570 static struct atlas7_grp_mux cvbs_dbg_test_grp8_mux = {
2571 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp8_pad_mux),
2572 .pad_mux_list = cvbs_dbg_test_grp8_pad_mux,
2573 };
2574
2575 static struct atlas7_pad_mux cvbs_dbg_test_grp9_pad_mux[] = {
2576 MUX(1, 66, 3, N, N, N, N),
2577 };
2578
2579 static struct atlas7_grp_mux cvbs_dbg_test_grp9_mux = {
2580 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp9_pad_mux),
2581 .pad_mux_list = cvbs_dbg_test_grp9_pad_mux,
2582 };
2583
2584 static struct atlas7_pad_mux cvbs_dbg_test_grp10_pad_mux[] = {
2585 MUX(1, 67, 3, N, N, N, N),
2586 };
2587
2588 static struct atlas7_grp_mux cvbs_dbg_test_grp10_mux = {
2589 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp10_pad_mux),
2590 .pad_mux_list = cvbs_dbg_test_grp10_pad_mux,
2591 };
2592
2593 static struct atlas7_pad_mux cvbs_dbg_test_grp11_pad_mux[] = {
2594 MUX(1, 68, 3, N, N, N, N),
2595 };
2596
2597 static struct atlas7_grp_mux cvbs_dbg_test_grp11_mux = {
2598 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp11_pad_mux),
2599 .pad_mux_list = cvbs_dbg_test_grp11_pad_mux,
2600 };
2601
2602 static struct atlas7_pad_mux cvbs_dbg_test_grp12_pad_mux[] = {
2603 MUX(1, 69, 3, N, N, N, N),
2604 };
2605
2606 static struct atlas7_grp_mux cvbs_dbg_test_grp12_mux = {
2607 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp12_pad_mux),
2608 .pad_mux_list = cvbs_dbg_test_grp12_pad_mux,
2609 };
2610
2611 static struct atlas7_pad_mux cvbs_dbg_test_grp13_pad_mux[] = {
2612 MUX(1, 70, 3, N, N, N, N),
2613 };
2614
2615 static struct atlas7_grp_mux cvbs_dbg_test_grp13_mux = {
2616 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp13_pad_mux),
2617 .pad_mux_list = cvbs_dbg_test_grp13_pad_mux,
2618 };
2619
2620 static struct atlas7_pad_mux cvbs_dbg_test_grp14_pad_mux[] = {
2621 MUX(1, 71, 3, N, N, N, N),
2622 };
2623
2624 static struct atlas7_grp_mux cvbs_dbg_test_grp14_mux = {
2625 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp14_pad_mux),
2626 .pad_mux_list = cvbs_dbg_test_grp14_pad_mux,
2627 };
2628
2629 static struct atlas7_pad_mux cvbs_dbg_test_grp15_pad_mux[] = {
2630 MUX(1, 72, 3, N, N, N, N),
2631 };
2632
2633 static struct atlas7_grp_mux cvbs_dbg_test_grp15_mux = {
2634 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp15_pad_mux),
2635 .pad_mux_list = cvbs_dbg_test_grp15_pad_mux,
2636 };
2637
2638 static struct atlas7_pad_mux gn_gnss_power_grp_pad_mux[] = {
2639 MUX(1, 123, 7, N, N, N, N),
2640 MUX(1, 124, 7, N, N, N, N),
2641 MUX(1, 121, 7, N, N, N, N),
2642 MUX(1, 122, 7, N, N, N, N),
2643 MUX(1, 125, 7, N, N, N, N),
2644 MUX(1, 120, 7, N, N, N, N),
2645 };
2646
2647 static struct atlas7_grp_mux gn_gnss_power_grp_mux = {
2648 .pad_mux_count = ARRAY_SIZE(gn_gnss_power_grp_pad_mux),
2649 .pad_mux_list = gn_gnss_power_grp_pad_mux,
2650 };
2651
2652 static struct atlas7_pad_mux gn_gnss_sw_status_grp_pad_mux[] = {
2653 MUX(1, 57, 7, N, N, N, N),
2654 MUX(1, 58, 7, N, N, N, N),
2655 MUX(1, 59, 7, N, N, N, N),
2656 MUX(1, 60, 7, N, N, N, N),
2657 MUX(1, 61, 7, N, N, N, N),
2658 MUX(1, 62, 7, N, N, N, N),
2659 MUX(1, 63, 7, N, N, N, N),
2660 MUX(1, 64, 7, N, N, N, N),
2661 MUX(1, 65, 7, N, N, N, N),
2662 MUX(1, 66, 7, N, N, N, N),
2663 MUX(1, 67, 7, N, N, N, N),
2664 MUX(1, 68, 7, N, N, N, N),
2665 MUX(1, 69, 7, N, N, N, N),
2666 MUX(1, 70, 7, N, N, N, N),
2667 MUX(1, 71, 7, N, N, N, N),
2668 MUX(1, 72, 7, N, N, N, N),
2669 MUX(1, 53, 7, N, N, N, N),
2670 MUX(1, 55, 7, N, N, N, N),
2671 MUX(1, 56, 7, 0xa08, 12, 0xa88, 12),
2672 MUX(1, 54, 7, N, N, N, N),
2673 };
2674
2675 static struct atlas7_grp_mux gn_gnss_sw_status_grp_mux = {
2676 .pad_mux_count = ARRAY_SIZE(gn_gnss_sw_status_grp_pad_mux),
2677 .pad_mux_list = gn_gnss_sw_status_grp_pad_mux,
2678 };
2679
2680 static struct atlas7_pad_mux gn_gnss_eclk_grp_pad_mux[] = {
2681 MUX(1, 113, 4, N, N, N, N),
2682 };
2683
2684 static struct atlas7_grp_mux gn_gnss_eclk_grp_mux = {
2685 .pad_mux_count = ARRAY_SIZE(gn_gnss_eclk_grp_pad_mux),
2686 .pad_mux_list = gn_gnss_eclk_grp_pad_mux,
2687 };
2688
2689 static struct atlas7_pad_mux gn_gnss_irq1_grp0_pad_mux[] = {
2690 MUX(1, 112, 4, 0xa08, 10, 0xa88, 10),
2691 };
2692
2693 static struct atlas7_grp_mux gn_gnss_irq1_grp0_mux = {
2694 .pad_mux_count = ARRAY_SIZE(gn_gnss_irq1_grp0_pad_mux),
2695 .pad_mux_list = gn_gnss_irq1_grp0_pad_mux,
2696 };
2697
2698 static struct atlas7_pad_mux gn_gnss_irq2_grp0_pad_mux[] = {
2699 MUX(1, 118, 4, 0xa08, 11, 0xa88, 11),
2700 };
2701
2702 static struct atlas7_grp_mux gn_gnss_irq2_grp0_mux = {
2703 .pad_mux_count = ARRAY_SIZE(gn_gnss_irq2_grp0_pad_mux),
2704 .pad_mux_list = gn_gnss_irq2_grp0_pad_mux,
2705 };
2706
2707 static struct atlas7_pad_mux gn_gnss_tm_grp_pad_mux[] = {
2708 MUX(1, 115, 4, N, N, N, N),
2709 };
2710
2711 static struct atlas7_grp_mux gn_gnss_tm_grp_mux = {
2712 .pad_mux_count = ARRAY_SIZE(gn_gnss_tm_grp_pad_mux),
2713 .pad_mux_list = gn_gnss_tm_grp_pad_mux,
2714 };
2715
2716 static struct atlas7_pad_mux gn_gnss_tsync_grp_pad_mux[] = {
2717 MUX(1, 114, 4, N, N, N, N),
2718 };
2719
2720 static struct atlas7_grp_mux gn_gnss_tsync_grp_mux = {
2721 .pad_mux_count = ARRAY_SIZE(gn_gnss_tsync_grp_pad_mux),
2722 .pad_mux_list = gn_gnss_tsync_grp_pad_mux,
2723 };
2724
2725 static struct atlas7_pad_mux gn_io_gnsssys_sw_cfg_grp_pad_mux[] = {
2726 MUX(1, 44, 7, N, N, N, N),
2727 MUX(1, 43, 7, N, N, N, N),
2728 MUX(1, 42, 7, N, N, N, N),
2729 MUX(1, 41, 7, N, N, N, N),
2730 MUX(1, 40, 7, N, N, N, N),
2731 MUX(1, 39, 7, N, N, N, N),
2732 MUX(1, 38, 7, N, N, N, N),
2733 MUX(1, 37, 7, N, N, N, N),
2734 MUX(1, 49, 7, N, N, N, N),
2735 MUX(1, 50, 7, N, N, N, N),
2736 MUX(1, 91, 7, N, N, N, N),
2737 MUX(1, 92, 7, N, N, N, N),
2738 MUX(1, 93, 7, N, N, N, N),
2739 MUX(1, 94, 7, N, N, N, N),
2740 MUX(1, 95, 7, N, N, N, N),
2741 MUX(1, 96, 7, N, N, N, N),
2742 };
2743
2744 static struct atlas7_grp_mux gn_io_gnsssys_sw_cfg_grp_mux = {
2745 .pad_mux_count = ARRAY_SIZE(gn_io_gnsssys_sw_cfg_grp_pad_mux),
2746 .pad_mux_list = gn_io_gnsssys_sw_cfg_grp_pad_mux,
2747 };
2748
2749 static struct atlas7_pad_mux gn_trg_grp0_pad_mux[] = {
2750 MUX(1, 29, 1, 0xa00, 6, 0xa80, 6),
2751 MUX(1, 28, 1, 0xa00, 7, 0xa80, 7),
2752 MUX(1, 26, 1, 0xa00, 8, 0xa80, 8),
2753 MUX(1, 27, 1, 0xa00, 9, 0xa80, 9),
2754 };
2755
2756 static struct atlas7_grp_mux gn_trg_grp0_mux = {
2757 .pad_mux_count = ARRAY_SIZE(gn_trg_grp0_pad_mux),
2758 .pad_mux_list = gn_trg_grp0_pad_mux,
2759 };
2760
2761 static struct atlas7_pad_mux gn_trg_grp1_pad_mux[] = {
2762 MUX(1, 77, 3, 0xa00, 6, 0xa80, 6),
2763 MUX(1, 76, 3, 0xa00, 7, 0xa80, 7),
2764 MUX(1, 74, 3, 0xa00, 8, 0xa80, 8),
2765 MUX(1, 75, 3, 0xa00, 9, 0xa80, 9),
2766 };
2767
2768 static struct atlas7_grp_mux gn_trg_grp1_mux = {
2769 .pad_mux_count = ARRAY_SIZE(gn_trg_grp1_pad_mux),
2770 .pad_mux_list = gn_trg_grp1_pad_mux,
2771 };
2772
2773 static struct atlas7_pad_mux gn_trg_shutdown_grp0_pad_mux[] = {
2774 MUX(1, 30, 1, N, N, N, N),
2775 };
2776
2777 static struct atlas7_grp_mux gn_trg_shutdown_grp0_mux = {
2778 .pad_mux_count = ARRAY_SIZE(gn_trg_shutdown_grp0_pad_mux),
2779 .pad_mux_list = gn_trg_shutdown_grp0_pad_mux,
2780 };
2781
2782 static struct atlas7_pad_mux gn_trg_shutdown_grp1_pad_mux[] = {
2783 MUX(1, 83, 3, N, N, N, N),
2784 };
2785
2786 static struct atlas7_grp_mux gn_trg_shutdown_grp1_mux = {
2787 .pad_mux_count = ARRAY_SIZE(gn_trg_shutdown_grp1_pad_mux),
2788 .pad_mux_list = gn_trg_shutdown_grp1_pad_mux,
2789 };
2790
2791 static struct atlas7_pad_mux gn_trg_shutdown_grp2_pad_mux[] = {
2792 MUX(1, 117, 4, N, N, N, N),
2793 };
2794
2795 static struct atlas7_grp_mux gn_trg_shutdown_grp2_mux = {
2796 .pad_mux_count = ARRAY_SIZE(gn_trg_shutdown_grp2_pad_mux),
2797 .pad_mux_list = gn_trg_shutdown_grp2_pad_mux,
2798 };
2799
2800 static struct atlas7_pad_mux gn_trg_shutdown_grp3_pad_mux[] = {
2801 MUX(1, 123, 5, N, N, N, N),
2802 };
2803
2804 static struct atlas7_grp_mux gn_trg_shutdown_grp3_mux = {
2805 .pad_mux_count = ARRAY_SIZE(gn_trg_shutdown_grp3_pad_mux),
2806 .pad_mux_list = gn_trg_shutdown_grp3_pad_mux,
2807 };
2808
2809 static struct atlas7_pad_mux i2c0_grp_pad_mux[] = {
2810 MUX(1, 128, 1, N, N, N, N),
2811 MUX(1, 127, 1, N, N, N, N),
2812 };
2813
2814 static struct atlas7_grp_mux i2c0_grp_mux = {
2815 .pad_mux_count = ARRAY_SIZE(i2c0_grp_pad_mux),
2816 .pad_mux_list = i2c0_grp_pad_mux,
2817 };
2818
2819 static struct atlas7_pad_mux i2c1_grp_pad_mux[] = {
2820 MUX(1, 126, 4, N, N, N, N),
2821 MUX(1, 125, 4, N, N, N, N),
2822 };
2823
2824 static struct atlas7_grp_mux i2c1_grp_mux = {
2825 .pad_mux_count = ARRAY_SIZE(i2c1_grp_pad_mux),
2826 .pad_mux_list = i2c1_grp_pad_mux,
2827 };
2828
2829 static struct atlas7_pad_mux i2s0_grp_pad_mux[] = {
2830 MUX(1, 91, 2, 0xa10, 12, 0xa90, 12),
2831 MUX(1, 93, 2, 0xa10, 13, 0xa90, 13),
2832 MUX(1, 94, 2, 0xa10, 14, 0xa90, 14),
2833 MUX(1, 92, 2, 0xa10, 15, 0xa90, 15),
2834 };
2835
2836 static struct atlas7_grp_mux i2s0_grp_mux = {
2837 .pad_mux_count = ARRAY_SIZE(i2s0_grp_pad_mux),
2838 .pad_mux_list = i2s0_grp_pad_mux,
2839 };
2840
2841 static struct atlas7_pad_mux i2s1_basic_grp_pad_mux[] = {
2842 MUX(1, 95, 2, 0xa10, 16, 0xa90, 16),
2843 MUX(1, 96, 2, 0xa10, 19, 0xa90, 19),
2844 };
2845
2846 static struct atlas7_grp_mux i2s1_basic_grp_mux = {
2847 .pad_mux_count = ARRAY_SIZE(i2s1_basic_grp_pad_mux),
2848 .pad_mux_list = i2s1_basic_grp_pad_mux,
2849 };
2850
2851 static struct atlas7_pad_mux i2s1_rxd0_grp0_pad_mux[] = {
2852 MUX(1, 61, 4, 0xa10, 17, 0xa90, 17),
2853 };
2854
2855 static struct atlas7_grp_mux i2s1_rxd0_grp0_mux = {
2856 .pad_mux_count = ARRAY_SIZE(i2s1_rxd0_grp0_pad_mux),
2857 .pad_mux_list = i2s1_rxd0_grp0_pad_mux,
2858 };
2859
2860 static struct atlas7_pad_mux i2s1_rxd0_grp1_pad_mux[] = {
2861 MUX(1, 131, 4, 0xa10, 17, 0xa90, 17),
2862 };
2863
2864 static struct atlas7_grp_mux i2s1_rxd0_grp1_mux = {
2865 .pad_mux_count = ARRAY_SIZE(i2s1_rxd0_grp1_pad_mux),
2866 .pad_mux_list = i2s1_rxd0_grp1_pad_mux,
2867 };
2868
2869 static struct atlas7_pad_mux i2s1_rxd0_grp2_pad_mux[] = {
2870 MUX(1, 129, 2, 0xa10, 17, 0xa90, 17),
2871 };
2872
2873 static struct atlas7_grp_mux i2s1_rxd0_grp2_mux = {
2874 .pad_mux_count = ARRAY_SIZE(i2s1_rxd0_grp2_pad_mux),
2875 .pad_mux_list = i2s1_rxd0_grp2_pad_mux,
2876 };
2877
2878 static struct atlas7_pad_mux i2s1_rxd0_grp3_pad_mux[] = {
2879 MUX(1, 117, 7, 0xa10, 17, 0xa90, 17),
2880 };
2881
2882 static struct atlas7_grp_mux i2s1_rxd0_grp3_mux = {
2883 .pad_mux_count = ARRAY_SIZE(i2s1_rxd0_grp3_pad_mux),
2884 .pad_mux_list = i2s1_rxd0_grp3_pad_mux,
2885 };
2886
2887 static struct atlas7_pad_mux i2s1_rxd0_grp4_pad_mux[] = {
2888 MUX(1, 83, 4, 0xa10, 17, 0xa90, 17),
2889 };
2890
2891 static struct atlas7_grp_mux i2s1_rxd0_grp4_mux = {
2892 .pad_mux_count = ARRAY_SIZE(i2s1_rxd0_grp4_pad_mux),
2893 .pad_mux_list = i2s1_rxd0_grp4_pad_mux,
2894 };
2895
2896 static struct atlas7_pad_mux i2s1_rxd1_grp0_pad_mux[] = {
2897 MUX(1, 72, 4, 0xa10, 18, 0xa90, 18),
2898 };
2899
2900 static struct atlas7_grp_mux i2s1_rxd1_grp0_mux = {
2901 .pad_mux_count = ARRAY_SIZE(i2s1_rxd1_grp0_pad_mux),
2902 .pad_mux_list = i2s1_rxd1_grp0_pad_mux,
2903 };
2904
2905 static struct atlas7_pad_mux i2s1_rxd1_grp1_pad_mux[] = {
2906 MUX(1, 132, 4, 0xa10, 18, 0xa90, 18),
2907 };
2908
2909 static struct atlas7_grp_mux i2s1_rxd1_grp1_mux = {
2910 .pad_mux_count = ARRAY_SIZE(i2s1_rxd1_grp1_pad_mux),
2911 .pad_mux_list = i2s1_rxd1_grp1_pad_mux,
2912 };
2913
2914 static struct atlas7_pad_mux i2s1_rxd1_grp2_pad_mux[] = {
2915 MUX(1, 130, 2, 0xa10, 18, 0xa90, 18),
2916 };
2917
2918 static struct atlas7_grp_mux i2s1_rxd1_grp2_mux = {
2919 .pad_mux_count = ARRAY_SIZE(i2s1_rxd1_grp2_pad_mux),
2920 .pad_mux_list = i2s1_rxd1_grp2_pad_mux,
2921 };
2922
2923 static struct atlas7_pad_mux i2s1_rxd1_grp3_pad_mux[] = {
2924 MUX(1, 118, 7, 0xa10, 18, 0xa90, 18),
2925 };
2926
2927 static struct atlas7_grp_mux i2s1_rxd1_grp3_mux = {
2928 .pad_mux_count = ARRAY_SIZE(i2s1_rxd1_grp3_pad_mux),
2929 .pad_mux_list = i2s1_rxd1_grp3_pad_mux,
2930 };
2931
2932 static struct atlas7_pad_mux i2s1_rxd1_grp4_pad_mux[] = {
2933 MUX(1, 84, 4, 0xa10, 18, 0xa90, 18),
2934 };
2935
2936 static struct atlas7_grp_mux i2s1_rxd1_grp4_mux = {
2937 .pad_mux_count = ARRAY_SIZE(i2s1_rxd1_grp4_pad_mux),
2938 .pad_mux_list = i2s1_rxd1_grp4_pad_mux,
2939 };
2940
2941 static struct atlas7_pad_mux jtag_jt_dbg_nsrst_grp_pad_mux[] = {
2942 MUX(1, 125, 5, 0xa08, 2, 0xa88, 2),
2943 };
2944
2945 static struct atlas7_grp_mux jtag_jt_dbg_nsrst_grp_mux = {
2946 .pad_mux_count = ARRAY_SIZE(jtag_jt_dbg_nsrst_grp_pad_mux),
2947 .pad_mux_list = jtag_jt_dbg_nsrst_grp_pad_mux,
2948 };
2949
2950 static struct atlas7_pad_mux jtag_ntrst_grp0_pad_mux[] = {
2951 MUX(0, 4, 3, 0xa08, 3, 0xa88, 3),
2952 };
2953
2954 static struct atlas7_grp_mux jtag_ntrst_grp0_mux = {
2955 .pad_mux_count = ARRAY_SIZE(jtag_ntrst_grp0_pad_mux),
2956 .pad_mux_list = jtag_ntrst_grp0_pad_mux,
2957 };
2958
2959 static struct atlas7_pad_mux jtag_ntrst_grp1_pad_mux[] = {
2960 MUX(1, 163, 1, 0xa08, 3, 0xa88, 3),
2961 };
2962
2963 static struct atlas7_grp_mux jtag_ntrst_grp1_mux = {
2964 .pad_mux_count = ARRAY_SIZE(jtag_ntrst_grp1_pad_mux),
2965 .pad_mux_list = jtag_ntrst_grp1_pad_mux,
2966 };
2967
2968 static struct atlas7_pad_mux jtag_swdiotms_grp0_pad_mux[] = {
2969 MUX(0, 2, 3, 0xa10, 10, 0xa90, 10),
2970 };
2971
2972 static struct atlas7_grp_mux jtag_swdiotms_grp0_mux = {
2973 .pad_mux_count = ARRAY_SIZE(jtag_swdiotms_grp0_pad_mux),
2974 .pad_mux_list = jtag_swdiotms_grp0_pad_mux,
2975 };
2976
2977 static struct atlas7_pad_mux jtag_swdiotms_grp1_pad_mux[] = {
2978 MUX(1, 160, 1, 0xa10, 10, 0xa90, 10),
2979 };
2980
2981 static struct atlas7_grp_mux jtag_swdiotms_grp1_mux = {
2982 .pad_mux_count = ARRAY_SIZE(jtag_swdiotms_grp1_pad_mux),
2983 .pad_mux_list = jtag_swdiotms_grp1_pad_mux,
2984 };
2985
2986 static struct atlas7_pad_mux jtag_tck_grp0_pad_mux[] = {
2987 MUX(0, 0, 3, 0xa10, 11, 0xa90, 11),
2988 };
2989
2990 static struct atlas7_grp_mux jtag_tck_grp0_mux = {
2991 .pad_mux_count = ARRAY_SIZE(jtag_tck_grp0_pad_mux),
2992 .pad_mux_list = jtag_tck_grp0_pad_mux,
2993 };
2994
2995 static struct atlas7_pad_mux jtag_tck_grp1_pad_mux[] = {
2996 MUX(1, 161, 1, 0xa10, 11, 0xa90, 11),
2997 };
2998
2999 static struct atlas7_grp_mux jtag_tck_grp1_mux = {
3000 .pad_mux_count = ARRAY_SIZE(jtag_tck_grp1_pad_mux),
3001 .pad_mux_list = jtag_tck_grp1_pad_mux,
3002 };
3003
3004 static struct atlas7_pad_mux jtag_tdi_grp0_pad_mux[] = {
3005 MUX(0, 1, 3, 0xa10, 31, 0xa90, 31),
3006 };
3007
3008 static struct atlas7_grp_mux jtag_tdi_grp0_mux = {
3009 .pad_mux_count = ARRAY_SIZE(jtag_tdi_grp0_pad_mux),
3010 .pad_mux_list = jtag_tdi_grp0_pad_mux,
3011 };
3012
3013 static struct atlas7_pad_mux jtag_tdi_grp1_pad_mux[] = {
3014 MUX(1, 162, 1, 0xa10, 31, 0xa90, 31),
3015 };
3016
3017 static struct atlas7_grp_mux jtag_tdi_grp1_mux = {
3018 .pad_mux_count = ARRAY_SIZE(jtag_tdi_grp1_pad_mux),
3019 .pad_mux_list = jtag_tdi_grp1_pad_mux,
3020 };
3021
3022 static struct atlas7_pad_mux jtag_tdo_grp0_pad_mux[] = {
3023 MUX(0, 3, 3, N, N, N, N),
3024 };
3025
3026 static struct atlas7_grp_mux jtag_tdo_grp0_mux = {
3027 .pad_mux_count = ARRAY_SIZE(jtag_tdo_grp0_pad_mux),
3028 .pad_mux_list = jtag_tdo_grp0_pad_mux,
3029 };
3030
3031 static struct atlas7_pad_mux jtag_tdo_grp1_pad_mux[] = {
3032 MUX(1, 159, 1, N, N, N, N),
3033 };
3034
3035 static struct atlas7_grp_mux jtag_tdo_grp1_mux = {
3036 .pad_mux_count = ARRAY_SIZE(jtag_tdo_grp1_pad_mux),
3037 .pad_mux_list = jtag_tdo_grp1_pad_mux,
3038 };
3039
3040 static struct atlas7_pad_mux ks_kas_spi_grp0_pad_mux[] = {
3041 MUX(1, 141, 2, N, N, N, N),
3042 MUX(1, 144, 2, 0xa08, 8, 0xa88, 8),
3043 MUX(1, 143, 2, N, N, N, N),
3044 MUX(1, 142, 2, N, N, N, N),
3045 };
3046
3047 static struct atlas7_grp_mux ks_kas_spi_grp0_mux = {
3048 .pad_mux_count = ARRAY_SIZE(ks_kas_spi_grp0_pad_mux),
3049 .pad_mux_list = ks_kas_spi_grp0_pad_mux,
3050 };
3051
3052 static struct atlas7_pad_mux ld_ldd_grp_pad_mux[] = {
3053 MUX(1, 57, 1, N, N, N, N),
3054 MUX(1, 58, 1, N, N, N, N),
3055 MUX(1, 59, 1, N, N, N, N),
3056 MUX(1, 60, 1, N, N, N, N),
3057 MUX(1, 61, 1, N, N, N, N),
3058 MUX(1, 62, 1, N, N, N, N),
3059 MUX(1, 63, 1, N, N, N, N),
3060 MUX(1, 64, 1, N, N, N, N),
3061 MUX(1, 65, 1, N, N, N, N),
3062 MUX(1, 66, 1, N, N, N, N),
3063 MUX(1, 67, 1, N, N, N, N),
3064 MUX(1, 68, 1, N, N, N, N),
3065 MUX(1, 69, 1, N, N, N, N),
3066 MUX(1, 70, 1, N, N, N, N),
3067 MUX(1, 71, 1, N, N, N, N),
3068 MUX(1, 72, 1, N, N, N, N),
3069 MUX(1, 74, 2, N, N, N, N),
3070 MUX(1, 75, 2, N, N, N, N),
3071 MUX(1, 76, 2, N, N, N, N),
3072 MUX(1, 77, 2, N, N, N, N),
3073 MUX(1, 78, 2, N, N, N, N),
3074 MUX(1, 79, 2, N, N, N, N),
3075 MUX(1, 80, 2, N, N, N, N),
3076 MUX(1, 81, 2, N, N, N, N),
3077 MUX(1, 56, 1, N, N, N, N),
3078 MUX(1, 53, 1, N, N, N, N),
3079 };
3080
3081 static struct atlas7_grp_mux ld_ldd_grp_mux = {
3082 .pad_mux_count = ARRAY_SIZE(ld_ldd_grp_pad_mux),
3083 .pad_mux_list = ld_ldd_grp_pad_mux,
3084 };
3085
3086 static struct atlas7_pad_mux ld_ldd_16bit_grp_pad_mux[] = {
3087 MUX(1, 57, 1, N, N, N, N),
3088 MUX(1, 58, 1, N, N, N, N),
3089 MUX(1, 59, 1, N, N, N, N),
3090 MUX(1, 60, 1, N, N, N, N),
3091 MUX(1, 61, 1, N, N, N, N),
3092 MUX(1, 62, 1, N, N, N, N),
3093 MUX(1, 63, 1, N, N, N, N),
3094 MUX(1, 64, 1, N, N, N, N),
3095 MUX(1, 65, 1, N, N, N, N),
3096 MUX(1, 66, 1, N, N, N, N),
3097 MUX(1, 67, 1, N, N, N, N),
3098 MUX(1, 68, 1, N, N, N, N),
3099 MUX(1, 69, 1, N, N, N, N),
3100 MUX(1, 70, 1, N, N, N, N),
3101 MUX(1, 71, 1, N, N, N, N),
3102 MUX(1, 72, 1, N, N, N, N),
3103 MUX(1, 56, 1, N, N, N, N),
3104 MUX(1, 53, 1, N, N, N, N),
3105 };
3106
3107 static struct atlas7_grp_mux ld_ldd_16bit_grp_mux = {
3108 .pad_mux_count = ARRAY_SIZE(ld_ldd_16bit_grp_pad_mux),
3109 .pad_mux_list = ld_ldd_16bit_grp_pad_mux,
3110 };
3111
3112 static struct atlas7_pad_mux ld_ldd_fck_grp_pad_mux[] = {
3113 MUX(1, 55, 1, N, N, N, N),
3114 };
3115
3116 static struct atlas7_grp_mux ld_ldd_fck_grp_mux = {
3117 .pad_mux_count = ARRAY_SIZE(ld_ldd_fck_grp_pad_mux),
3118 .pad_mux_list = ld_ldd_fck_grp_pad_mux,
3119 };
3120
3121 static struct atlas7_pad_mux ld_ldd_lck_grp_pad_mux[] = {
3122 MUX(1, 54, 1, N, N, N, N),
3123 };
3124
3125 static struct atlas7_grp_mux ld_ldd_lck_grp_mux = {
3126 .pad_mux_count = ARRAY_SIZE(ld_ldd_lck_grp_pad_mux),
3127 .pad_mux_list = ld_ldd_lck_grp_pad_mux,
3128 };
3129
3130 static struct atlas7_pad_mux lr_lcdrom_grp_pad_mux[] = {
3131 MUX(1, 73, 2, N, N, N, N),
3132 MUX(1, 54, 2, N, N, N, N),
3133 MUX(1, 57, 2, N, N, N, N),
3134 MUX(1, 58, 2, N, N, N, N),
3135 MUX(1, 59, 2, N, N, N, N),
3136 MUX(1, 60, 2, N, N, N, N),
3137 MUX(1, 61, 2, N, N, N, N),
3138 MUX(1, 62, 2, N, N, N, N),
3139 MUX(1, 63, 2, N, N, N, N),
3140 MUX(1, 64, 2, N, N, N, N),
3141 MUX(1, 65, 2, N, N, N, N),
3142 MUX(1, 66, 2, N, N, N, N),
3143 MUX(1, 67, 2, N, N, N, N),
3144 MUX(1, 68, 2, N, N, N, N),
3145 MUX(1, 69, 2, N, N, N, N),
3146 MUX(1, 70, 2, N, N, N, N),
3147 MUX(1, 71, 2, N, N, N, N),
3148 MUX(1, 72, 2, N, N, N, N),
3149 MUX(1, 56, 2, N, N, N, N),
3150 MUX(1, 53, 2, N, N, N, N),
3151 MUX(1, 55, 2, N, N, N, N),
3152 };
3153
3154 static struct atlas7_grp_mux lr_lcdrom_grp_mux = {
3155 .pad_mux_count = ARRAY_SIZE(lr_lcdrom_grp_pad_mux),
3156 .pad_mux_list = lr_lcdrom_grp_pad_mux,
3157 };
3158
3159 static struct atlas7_pad_mux lvds_analog_grp_pad_mux[] = {
3160 MUX(1, 149, 8, N, N, N, N),
3161 MUX(1, 150, 8, N, N, N, N),
3162 MUX(1, 151, 8, N, N, N, N),
3163 MUX(1, 152, 8, N, N, N, N),
3164 MUX(1, 153, 8, N, N, N, N),
3165 MUX(1, 154, 8, N, N, N, N),
3166 MUX(1, 155, 8, N, N, N, N),
3167 MUX(1, 156, 8, N, N, N, N),
3168 MUX(1, 157, 8, N, N, N, N),
3169 MUX(1, 158, 8, N, N, N, N),
3170 };
3171
3172 static struct atlas7_grp_mux lvds_analog_grp_mux = {
3173 .pad_mux_count = ARRAY_SIZE(lvds_analog_grp_pad_mux),
3174 .pad_mux_list = lvds_analog_grp_pad_mux,
3175 };
3176
3177 static struct atlas7_pad_mux nd_df_grp_pad_mux[] = {
3178 MUX(1, 44, 1, N, N, N, N),
3179 MUX(1, 43, 1, N, N, N, N),
3180 MUX(1, 42, 1, N, N, N, N),
3181 MUX(1, 41, 1, N, N, N, N),
3182 MUX(1, 40, 1, N, N, N, N),
3183 MUX(1, 39, 1, N, N, N, N),
3184 MUX(1, 38, 1, N, N, N, N),
3185 MUX(1, 37, 1, N, N, N, N),
3186 MUX(1, 47, 1, N, N, N, N),
3187 MUX(1, 46, 1, N, N, N, N),
3188 MUX(1, 52, 1, N, N, N, N),
3189 MUX(1, 51, 1, N, N, N, N),
3190 MUX(1, 45, 1, N, N, N, N),
3191 MUX(1, 49, 1, N, N, N, N),
3192 MUX(1, 50, 1, N, N, N, N),
3193 MUX(1, 48, 1, N, N, N, N),
3194 MUX(1, 124, 4, N, N, N, N),
3195 };
3196
3197 static struct atlas7_grp_mux nd_df_grp_mux = {
3198 .pad_mux_count = ARRAY_SIZE(nd_df_grp_pad_mux),
3199 .pad_mux_list = nd_df_grp_pad_mux,
3200 };
3201
3202 static struct atlas7_pad_mux nd_df_nowp_grp_pad_mux[] = {
3203 MUX(1, 44, 1, N, N, N, N),
3204 MUX(1, 43, 1, N, N, N, N),
3205 MUX(1, 42, 1, N, N, N, N),
3206 MUX(1, 41, 1, N, N, N, N),
3207 MUX(1, 40, 1, N, N, N, N),
3208 MUX(1, 39, 1, N, N, N, N),
3209 MUX(1, 38, 1, N, N, N, N),
3210 MUX(1, 37, 1, N, N, N, N),
3211 MUX(1, 47, 1, N, N, N, N),
3212 MUX(1, 46, 1, N, N, N, N),
3213 MUX(1, 52, 1, N, N, N, N),
3214 MUX(1, 51, 1, N, N, N, N),
3215 MUX(1, 45, 1, N, N, N, N),
3216 MUX(1, 49, 1, N, N, N, N),
3217 MUX(1, 50, 1, N, N, N, N),
3218 MUX(1, 48, 1, N, N, N, N),
3219 };
3220
3221 static struct atlas7_grp_mux nd_df_nowp_grp_mux = {
3222 .pad_mux_count = ARRAY_SIZE(nd_df_nowp_grp_pad_mux),
3223 .pad_mux_list = nd_df_nowp_grp_pad_mux,
3224 };
3225
3226 static struct atlas7_pad_mux ps_grp_pad_mux[] = {
3227 MUX(1, 120, 2, N, N, N, N),
3228 MUX(1, 119, 2, N, N, N, N),
3229 MUX(1, 121, 5, N, N, N, N),
3230 };
3231
3232 static struct atlas7_grp_mux ps_grp_mux = {
3233 .pad_mux_count = ARRAY_SIZE(ps_grp_pad_mux),
3234 .pad_mux_list = ps_grp_pad_mux,
3235 };
3236
3237 static struct atlas7_pad_mux pwc_core_on_grp_pad_mux[] = {
3238 MUX(0, 8, 1, N, N, N, N),
3239 };
3240
3241 static struct atlas7_grp_mux pwc_core_on_grp_mux = {
3242 .pad_mux_count = ARRAY_SIZE(pwc_core_on_grp_pad_mux),
3243 .pad_mux_list = pwc_core_on_grp_pad_mux,
3244 };
3245
3246 static struct atlas7_pad_mux pwc_ext_on_grp_pad_mux[] = {
3247 MUX(0, 6, 1, N, N, N, N),
3248 };
3249
3250 static struct atlas7_grp_mux pwc_ext_on_grp_mux = {
3251 .pad_mux_count = ARRAY_SIZE(pwc_ext_on_grp_pad_mux),
3252 .pad_mux_list = pwc_ext_on_grp_pad_mux,
3253 };
3254
3255 static struct atlas7_pad_mux pwc_gpio3_clk_grp_pad_mux[] = {
3256 MUX(0, 3, 4, N, N, N, N),
3257 };
3258
3259 static struct atlas7_grp_mux pwc_gpio3_clk_grp_mux = {
3260 .pad_mux_count = ARRAY_SIZE(pwc_gpio3_clk_grp_pad_mux),
3261 .pad_mux_list = pwc_gpio3_clk_grp_pad_mux,
3262 };
3263
3264 static struct atlas7_pad_mux pwc_io_on_grp_pad_mux[] = {
3265 MUX(0, 9, 1, N, N, N, N),
3266 };
3267
3268 static struct atlas7_grp_mux pwc_io_on_grp_mux = {
3269 .pad_mux_count = ARRAY_SIZE(pwc_io_on_grp_pad_mux),
3270 .pad_mux_list = pwc_io_on_grp_pad_mux,
3271 };
3272
3273 static struct atlas7_pad_mux pwc_lowbatt_b_grp0_pad_mux[] = {
3274 MUX(0, 4, 1, 0xa08, 4, 0xa88, 4),
3275 };
3276
3277 static struct atlas7_grp_mux pwc_lowbatt_b_grp0_mux = {
3278 .pad_mux_count = ARRAY_SIZE(pwc_lowbatt_b_grp0_pad_mux),
3279 .pad_mux_list = pwc_lowbatt_b_grp0_pad_mux,
3280 };
3281
3282 static struct atlas7_pad_mux pwc_mem_on_grp_pad_mux[] = {
3283 MUX(0, 7, 1, N, N, N, N),
3284 };
3285
3286 static struct atlas7_grp_mux pwc_mem_on_grp_mux = {
3287 .pad_mux_count = ARRAY_SIZE(pwc_mem_on_grp_pad_mux),
3288 .pad_mux_list = pwc_mem_on_grp_pad_mux,
3289 };
3290
3291 static struct atlas7_pad_mux pwc_on_key_b_grp0_pad_mux[] = {
3292 MUX(0, 5, 1, 0xa08, 5, 0xa88, 5),
3293 };
3294
3295 static struct atlas7_grp_mux pwc_on_key_b_grp0_mux = {
3296 .pad_mux_count = ARRAY_SIZE(pwc_on_key_b_grp0_pad_mux),
3297 .pad_mux_list = pwc_on_key_b_grp0_pad_mux,
3298 };
3299
3300 static struct atlas7_pad_mux pwc_wakeup_src0_grp_pad_mux[] = {
3301 MUX(0, 0, 1, N, N, N, N),
3302 };
3303
3304 static struct atlas7_grp_mux pwc_wakeup_src0_grp_mux = {
3305 .pad_mux_count = ARRAY_SIZE(pwc_wakeup_src0_grp_pad_mux),
3306 .pad_mux_list = pwc_wakeup_src0_grp_pad_mux,
3307 };
3308
3309 static struct atlas7_pad_mux pwc_wakeup_src1_grp_pad_mux[] = {
3310 MUX(0, 1, 1, N, N, N, N),
3311 };
3312
3313 static struct atlas7_grp_mux pwc_wakeup_src1_grp_mux = {
3314 .pad_mux_count = ARRAY_SIZE(pwc_wakeup_src1_grp_pad_mux),
3315 .pad_mux_list = pwc_wakeup_src1_grp_pad_mux,
3316 };
3317
3318 static struct atlas7_pad_mux pwc_wakeup_src2_grp_pad_mux[] = {
3319 MUX(0, 2, 1, N, N, N, N),
3320 };
3321
3322 static struct atlas7_grp_mux pwc_wakeup_src2_grp_mux = {
3323 .pad_mux_count = ARRAY_SIZE(pwc_wakeup_src2_grp_pad_mux),
3324 .pad_mux_list = pwc_wakeup_src2_grp_pad_mux,
3325 };
3326
3327 static struct atlas7_pad_mux pwc_wakeup_src3_grp_pad_mux[] = {
3328 MUX(0, 3, 1, N, N, N, N),
3329 };
3330
3331 static struct atlas7_grp_mux pwc_wakeup_src3_grp_mux = {
3332 .pad_mux_count = ARRAY_SIZE(pwc_wakeup_src3_grp_pad_mux),
3333 .pad_mux_list = pwc_wakeup_src3_grp_pad_mux,
3334 };
3335
3336 static struct atlas7_pad_mux pw_cko0_grp0_pad_mux[] = {
3337 MUX(1, 123, 3, N, N, N, N),
3338 };
3339
3340 static struct atlas7_grp_mux pw_cko0_grp0_mux = {
3341 .pad_mux_count = ARRAY_SIZE(pw_cko0_grp0_pad_mux),
3342 .pad_mux_list = pw_cko0_grp0_pad_mux,
3343 };
3344
3345 static struct atlas7_pad_mux pw_cko0_grp1_pad_mux[] = {
3346 MUX(1, 101, 4, N, N, N, N),
3347 };
3348
3349 static struct atlas7_grp_mux pw_cko0_grp1_mux = {
3350 .pad_mux_count = ARRAY_SIZE(pw_cko0_grp1_pad_mux),
3351 .pad_mux_list = pw_cko0_grp1_pad_mux,
3352 };
3353
3354 static struct atlas7_pad_mux pw_cko0_grp2_pad_mux[] = {
3355 MUX(1, 82, 2, N, N, N, N),
3356 };
3357
3358 static struct atlas7_grp_mux pw_cko0_grp2_mux = {
3359 .pad_mux_count = ARRAY_SIZE(pw_cko0_grp2_pad_mux),
3360 .pad_mux_list = pw_cko0_grp2_pad_mux,
3361 };
3362
3363 static struct atlas7_pad_mux pw_cko0_grp3_pad_mux[] = {
3364 MUX(1, 162, 5, N, N, N, N),
3365 };
3366
3367 static struct atlas7_grp_mux pw_cko0_grp3_mux = {
3368 .pad_mux_count = ARRAY_SIZE(pw_cko0_grp3_pad_mux),
3369 .pad_mux_list = pw_cko0_grp3_pad_mux,
3370 };
3371
3372 static struct atlas7_pad_mux pw_cko1_grp0_pad_mux[] = {
3373 MUX(1, 124, 3, N, N, N, N),
3374 };
3375
3376 static struct atlas7_grp_mux pw_cko1_grp0_mux = {
3377 .pad_mux_count = ARRAY_SIZE(pw_cko1_grp0_pad_mux),
3378 .pad_mux_list = pw_cko1_grp0_pad_mux,
3379 };
3380
3381 static struct atlas7_pad_mux pw_cko1_grp1_pad_mux[] = {
3382 MUX(1, 110, 4, N, N, N, N),
3383 };
3384
3385 static struct atlas7_grp_mux pw_cko1_grp1_mux = {
3386 .pad_mux_count = ARRAY_SIZE(pw_cko1_grp1_pad_mux),
3387 .pad_mux_list = pw_cko1_grp1_pad_mux,
3388 };
3389
3390 static struct atlas7_pad_mux pw_cko1_grp2_pad_mux[] = {
3391 MUX(1, 163, 5, N, N, N, N),
3392 };
3393
3394 static struct atlas7_grp_mux pw_cko1_grp2_mux = {
3395 .pad_mux_count = ARRAY_SIZE(pw_cko1_grp2_pad_mux),
3396 .pad_mux_list = pw_cko1_grp2_pad_mux,
3397 };
3398
3399 static struct atlas7_pad_mux pw_i2s01_clk_grp0_pad_mux[] = {
3400 MUX(1, 125, 3, N, N, N, N),
3401 };
3402
3403 static struct atlas7_grp_mux pw_i2s01_clk_grp0_mux = {
3404 .pad_mux_count = ARRAY_SIZE(pw_i2s01_clk_grp0_pad_mux),
3405 .pad_mux_list = pw_i2s01_clk_grp0_pad_mux,
3406 };
3407
3408 static struct atlas7_pad_mux pw_i2s01_clk_grp1_pad_mux[] = {
3409 MUX(1, 117, 3, N, N, N, N),
3410 };
3411
3412 static struct atlas7_grp_mux pw_i2s01_clk_grp1_mux = {
3413 .pad_mux_count = ARRAY_SIZE(pw_i2s01_clk_grp1_pad_mux),
3414 .pad_mux_list = pw_i2s01_clk_grp1_pad_mux,
3415 };
3416
3417 static struct atlas7_pad_mux pw_i2s01_clk_grp2_pad_mux[] = {
3418 MUX(1, 132, 2, N, N, N, N),
3419 };
3420
3421 static struct atlas7_grp_mux pw_i2s01_clk_grp2_mux = {
3422 .pad_mux_count = ARRAY_SIZE(pw_i2s01_clk_grp2_pad_mux),
3423 .pad_mux_list = pw_i2s01_clk_grp2_pad_mux,
3424 };
3425
3426 static struct atlas7_pad_mux pw_pwm0_grp0_pad_mux[] = {
3427 MUX(1, 119, 3, N, N, N, N),
3428 };
3429
3430 static struct atlas7_grp_mux pw_pwm0_grp0_mux = {
3431 .pad_mux_count = ARRAY_SIZE(pw_pwm0_grp0_pad_mux),
3432 .pad_mux_list = pw_pwm0_grp0_pad_mux,
3433 };
3434
3435 static struct atlas7_pad_mux pw_pwm0_grp1_pad_mux[] = {
3436 MUX(1, 159, 5, N, N, N, N),
3437 };
3438
3439 static struct atlas7_grp_mux pw_pwm0_grp1_mux = {
3440 .pad_mux_count = ARRAY_SIZE(pw_pwm0_grp1_pad_mux),
3441 .pad_mux_list = pw_pwm0_grp1_pad_mux,
3442 };
3443
3444 static struct atlas7_pad_mux pw_pwm1_grp0_pad_mux[] = {
3445 MUX(1, 120, 3, N, N, N, N),
3446 };
3447
3448 static struct atlas7_grp_mux pw_pwm1_grp0_mux = {
3449 .pad_mux_count = ARRAY_SIZE(pw_pwm1_grp0_pad_mux),
3450 .pad_mux_list = pw_pwm1_grp0_pad_mux,
3451 };
3452
3453 static struct atlas7_pad_mux pw_pwm1_grp1_pad_mux[] = {
3454 MUX(1, 160, 5, N, N, N, N),
3455 };
3456
3457 static struct atlas7_grp_mux pw_pwm1_grp1_mux = {
3458 .pad_mux_count = ARRAY_SIZE(pw_pwm1_grp1_pad_mux),
3459 .pad_mux_list = pw_pwm1_grp1_pad_mux,
3460 };
3461
3462 static struct atlas7_pad_mux pw_pwm1_grp2_pad_mux[] = {
3463 MUX(1, 131, 2, N, N, N, N),
3464 };
3465
3466 static struct atlas7_grp_mux pw_pwm1_grp2_mux = {
3467 .pad_mux_count = ARRAY_SIZE(pw_pwm1_grp2_pad_mux),
3468 .pad_mux_list = pw_pwm1_grp2_pad_mux,
3469 };
3470
3471 static struct atlas7_pad_mux pw_pwm2_grp0_pad_mux[] = {
3472 MUX(1, 121, 3, N, N, N, N),
3473 };
3474
3475 static struct atlas7_grp_mux pw_pwm2_grp0_mux = {
3476 .pad_mux_count = ARRAY_SIZE(pw_pwm2_grp0_pad_mux),
3477 .pad_mux_list = pw_pwm2_grp0_pad_mux,
3478 };
3479
3480 static struct atlas7_pad_mux pw_pwm2_grp1_pad_mux[] = {
3481 MUX(1, 98, 3, N, N, N, N),
3482 };
3483
3484 static struct atlas7_grp_mux pw_pwm2_grp1_mux = {
3485 .pad_mux_count = ARRAY_SIZE(pw_pwm2_grp1_pad_mux),
3486 .pad_mux_list = pw_pwm2_grp1_pad_mux,
3487 };
3488
3489 static struct atlas7_pad_mux pw_pwm2_grp2_pad_mux[] = {
3490 MUX(1, 161, 5, N, N, N, N),
3491 };
3492
3493 static struct atlas7_grp_mux pw_pwm2_grp2_mux = {
3494 .pad_mux_count = ARRAY_SIZE(pw_pwm2_grp2_pad_mux),
3495 .pad_mux_list = pw_pwm2_grp2_pad_mux,
3496 };
3497
3498 static struct atlas7_pad_mux pw_pwm3_grp0_pad_mux[] = {
3499 MUX(1, 122, 3, N, N, N, N),
3500 };
3501
3502 static struct atlas7_grp_mux pw_pwm3_grp0_mux = {
3503 .pad_mux_count = ARRAY_SIZE(pw_pwm3_grp0_pad_mux),
3504 .pad_mux_list = pw_pwm3_grp0_pad_mux,
3505 };
3506
3507 static struct atlas7_pad_mux pw_pwm3_grp1_pad_mux[] = {
3508 MUX(1, 73, 4, N, N, N, N),
3509 };
3510
3511 static struct atlas7_grp_mux pw_pwm3_grp1_mux = {
3512 .pad_mux_count = ARRAY_SIZE(pw_pwm3_grp1_pad_mux),
3513 .pad_mux_list = pw_pwm3_grp1_pad_mux,
3514 };
3515
3516 static struct atlas7_pad_mux pw_pwm_cpu_vol_grp0_pad_mux[] = {
3517 MUX(1, 121, 3, N, N, N, N),
3518 };
3519
3520 static struct atlas7_grp_mux pw_pwm_cpu_vol_grp0_mux = {
3521 .pad_mux_count = ARRAY_SIZE(pw_pwm_cpu_vol_grp0_pad_mux),
3522 .pad_mux_list = pw_pwm_cpu_vol_grp0_pad_mux,
3523 };
3524
3525 static struct atlas7_pad_mux pw_pwm_cpu_vol_grp1_pad_mux[] = {
3526 MUX(1, 98, 3, N, N, N, N),
3527 };
3528
3529 static struct atlas7_grp_mux pw_pwm_cpu_vol_grp1_mux = {
3530 .pad_mux_count = ARRAY_SIZE(pw_pwm_cpu_vol_grp1_pad_mux),
3531 .pad_mux_list = pw_pwm_cpu_vol_grp1_pad_mux,
3532 };
3533
3534 static struct atlas7_pad_mux pw_pwm_cpu_vol_grp2_pad_mux[] = {
3535 MUX(1, 161, 5, N, N, N, N),
3536 };
3537
3538 static struct atlas7_grp_mux pw_pwm_cpu_vol_grp2_mux = {
3539 .pad_mux_count = ARRAY_SIZE(pw_pwm_cpu_vol_grp2_pad_mux),
3540 .pad_mux_list = pw_pwm_cpu_vol_grp2_pad_mux,
3541 };
3542
3543 static struct atlas7_pad_mux pw_backlight_grp0_pad_mux[] = {
3544 MUX(1, 122, 3, N, N, N, N),
3545 };
3546
3547 static struct atlas7_grp_mux pw_backlight_grp0_mux = {
3548 .pad_mux_count = ARRAY_SIZE(pw_backlight_grp0_pad_mux),
3549 .pad_mux_list = pw_backlight_grp0_pad_mux,
3550 };
3551
3552 static struct atlas7_pad_mux pw_backlight_grp1_pad_mux[] = {
3553 MUX(1, 73, 4, N, N, N, N),
3554 };
3555
3556 static struct atlas7_grp_mux pw_backlight_grp1_mux = {
3557 .pad_mux_count = ARRAY_SIZE(pw_backlight_grp1_pad_mux),
3558 .pad_mux_list = pw_backlight_grp1_pad_mux,
3559 };
3560
3561 static struct atlas7_pad_mux rg_eth_mac_grp_pad_mux[] = {
3562 MUX(1, 108, 1, N, N, N, N),
3563 MUX(1, 103, 1, N, N, N, N),
3564 MUX(1, 104, 1, N, N, N, N),
3565 MUX(1, 105, 1, N, N, N, N),
3566 MUX(1, 106, 1, N, N, N, N),
3567 MUX(1, 107, 1, N, N, N, N),
3568 MUX(1, 102, 1, N, N, N, N),
3569 MUX(1, 97, 1, N, N, N, N),
3570 MUX(1, 98, 1, N, N, N, N),
3571 MUX(1, 99, 1, N, N, N, N),
3572 MUX(1, 100, 1, N, N, N, N),
3573 MUX(1, 101, 1, N, N, N, N),
3574 };
3575
3576 static struct atlas7_grp_mux rg_eth_mac_grp_mux = {
3577 .pad_mux_count = ARRAY_SIZE(rg_eth_mac_grp_pad_mux),
3578 .pad_mux_list = rg_eth_mac_grp_pad_mux,
3579 };
3580
3581 static struct atlas7_pad_mux rg_gmac_phy_intr_n_grp_pad_mux[] = {
3582 MUX(1, 111, 1, 0xa08, 13, 0xa88, 13),
3583 };
3584
3585 static struct atlas7_grp_mux rg_gmac_phy_intr_n_grp_mux = {
3586 .pad_mux_count = ARRAY_SIZE(rg_gmac_phy_intr_n_grp_pad_mux),
3587 .pad_mux_list = rg_gmac_phy_intr_n_grp_pad_mux,
3588 };
3589
3590 static struct atlas7_pad_mux rg_rgmii_mac_grp_pad_mux[] = {
3591 MUX(1, 109, 1, N, N, N, N),
3592 MUX(1, 110, 1, N, N, N, N),
3593 };
3594
3595 static struct atlas7_grp_mux rg_rgmii_mac_grp_mux = {
3596 .pad_mux_count = ARRAY_SIZE(rg_rgmii_mac_grp_pad_mux),
3597 .pad_mux_list = rg_rgmii_mac_grp_pad_mux,
3598 };
3599
3600 static struct atlas7_pad_mux rg_rgmii_phy_ref_clk_grp0_pad_mux[] = {
3601 MUX(1, 111, 5, N, N, N, N),
3602 };
3603
3604 static struct atlas7_grp_mux rg_rgmii_phy_ref_clk_grp0_mux = {
3605 .pad_mux_count = ARRAY_SIZE(rg_rgmii_phy_ref_clk_grp0_pad_mux),
3606 .pad_mux_list = rg_rgmii_phy_ref_clk_grp0_pad_mux,
3607 };
3608
3609 static struct atlas7_pad_mux rg_rgmii_phy_ref_clk_grp1_pad_mux[] = {
3610 MUX(1, 53, 4, N, N, N, N),
3611 };
3612
3613 static struct atlas7_grp_mux rg_rgmii_phy_ref_clk_grp1_mux = {
3614 .pad_mux_count = ARRAY_SIZE(rg_rgmii_phy_ref_clk_grp1_pad_mux),
3615 .pad_mux_list = rg_rgmii_phy_ref_clk_grp1_pad_mux,
3616 };
3617
3618 static struct atlas7_pad_mux sd0_grp_pad_mux[] = {
3619 MUX(1, 46, 2, N, N, N, N),
3620 MUX(1, 47, 2, N, N, N, N),
3621 MUX(1, 44, 2, N, N, N, N),
3622 MUX(1, 43, 2, N, N, N, N),
3623 MUX(1, 42, 2, N, N, N, N),
3624 MUX(1, 41, 2, N, N, N, N),
3625 MUX(1, 40, 2, N, N, N, N),
3626 MUX(1, 39, 2, N, N, N, N),
3627 MUX(1, 38, 2, N, N, N, N),
3628 MUX(1, 37, 2, N, N, N, N),
3629 };
3630
3631 static struct atlas7_grp_mux sd0_grp_mux = {
3632 .pad_mux_count = ARRAY_SIZE(sd0_grp_pad_mux),
3633 .pad_mux_list = sd0_grp_pad_mux,
3634 };
3635
3636 static struct atlas7_pad_mux sd0_4bit_grp_pad_mux[] = {
3637 MUX(1, 46, 2, N, N, N, N),
3638 MUX(1, 47, 2, N, N, N, N),
3639 MUX(1, 44, 2, N, N, N, N),
3640 MUX(1, 43, 2, N, N, N, N),
3641 MUX(1, 42, 2, N, N, N, N),
3642 MUX(1, 41, 2, N, N, N, N),
3643 };
3644
3645 static struct atlas7_grp_mux sd0_4bit_grp_mux = {
3646 .pad_mux_count = ARRAY_SIZE(sd0_4bit_grp_pad_mux),
3647 .pad_mux_list = sd0_4bit_grp_pad_mux,
3648 };
3649
3650 static struct atlas7_pad_mux sd1_grp_pad_mux[] = {
3651 MUX(1, 48, 3, N, N, N, N),
3652 MUX(1, 49, 3, N, N, N, N),
3653 MUX(1, 44, 3, 0xa00, 0, 0xa80, 0),
3654 MUX(1, 43, 3, 0xa00, 1, 0xa80, 1),
3655 MUX(1, 42, 3, 0xa00, 2, 0xa80, 2),
3656 MUX(1, 41, 3, 0xa00, 3, 0xa80, 3),
3657 MUX(1, 40, 3, N, N, N, N),
3658 MUX(1, 39, 3, N, N, N, N),
3659 MUX(1, 38, 3, N, N, N, N),
3660 MUX(1, 37, 3, N, N, N, N),
3661 };
3662
3663 static struct atlas7_grp_mux sd1_grp_mux = {
3664 .pad_mux_count = ARRAY_SIZE(sd1_grp_pad_mux),
3665 .pad_mux_list = sd1_grp_pad_mux,
3666 };
3667
3668 static struct atlas7_pad_mux sd1_4bit_grp0_pad_mux[] = {
3669 MUX(1, 48, 3, N, N, N, N),
3670 MUX(1, 49, 3, N, N, N, N),
3671 MUX(1, 44, 3, 0xa00, 0, 0xa80, 0),
3672 MUX(1, 43, 3, 0xa00, 1, 0xa80, 1),
3673 MUX(1, 42, 3, 0xa00, 2, 0xa80, 2),
3674 MUX(1, 41, 3, 0xa00, 3, 0xa80, 3),
3675 };
3676
3677 static struct atlas7_grp_mux sd1_4bit_grp0_mux = {
3678 .pad_mux_count = ARRAY_SIZE(sd1_4bit_grp0_pad_mux),
3679 .pad_mux_list = sd1_4bit_grp0_pad_mux,
3680 };
3681
3682 static struct atlas7_pad_mux sd1_4bit_grp1_pad_mux[] = {
3683 MUX(1, 48, 3, N, N, N, N),
3684 MUX(1, 49, 3, N, N, N, N),
3685 MUX(1, 40, 4, 0xa00, 0, 0xa80, 0),
3686 MUX(1, 39, 4, 0xa00, 1, 0xa80, 1),
3687 MUX(1, 38, 4, 0xa00, 2, 0xa80, 2),
3688 MUX(1, 37, 4, 0xa00, 3, 0xa80, 3),
3689 };
3690
3691 static struct atlas7_grp_mux sd1_4bit_grp1_mux = {
3692 .pad_mux_count = ARRAY_SIZE(sd1_4bit_grp1_pad_mux),
3693 .pad_mux_list = sd1_4bit_grp1_pad_mux,
3694 };
3695
3696 static struct atlas7_pad_mux sd2_basic_grp_pad_mux[] = {
3697 MUX(1, 31, 1, N, N, N, N),
3698 MUX(1, 32, 1, N, N, N, N),
3699 MUX(1, 33, 1, N, N, N, N),
3700 MUX(1, 34, 1, N, N, N, N),
3701 MUX(1, 35, 1, N, N, N, N),
3702 MUX(1, 36, 1, N, N, N, N),
3703 };
3704
3705 static struct atlas7_grp_mux sd2_basic_grp_mux = {
3706 .pad_mux_count = ARRAY_SIZE(sd2_basic_grp_pad_mux),
3707 .pad_mux_list = sd2_basic_grp_pad_mux,
3708 };
3709
3710 static struct atlas7_pad_mux sd2_cdb_grp0_pad_mux[] = {
3711 MUX(1, 124, 2, 0xa08, 7, 0xa88, 7),
3712 };
3713
3714 static struct atlas7_grp_mux sd2_cdb_grp0_mux = {
3715 .pad_mux_count = ARRAY_SIZE(sd2_cdb_grp0_pad_mux),
3716 .pad_mux_list = sd2_cdb_grp0_pad_mux,
3717 };
3718
3719 static struct atlas7_pad_mux sd2_cdb_grp1_pad_mux[] = {
3720 MUX(1, 161, 6, 0xa08, 7, 0xa88, 7),
3721 };
3722
3723 static struct atlas7_grp_mux sd2_cdb_grp1_mux = {
3724 .pad_mux_count = ARRAY_SIZE(sd2_cdb_grp1_pad_mux),
3725 .pad_mux_list = sd2_cdb_grp1_pad_mux,
3726 };
3727
3728 static struct atlas7_pad_mux sd2_wpb_grp0_pad_mux[] = {
3729 MUX(1, 123, 2, 0xa10, 6, 0xa90, 6),
3730 };
3731
3732 static struct atlas7_grp_mux sd2_wpb_grp0_mux = {
3733 .pad_mux_count = ARRAY_SIZE(sd2_wpb_grp0_pad_mux),
3734 .pad_mux_list = sd2_wpb_grp0_pad_mux,
3735 };
3736
3737 static struct atlas7_pad_mux sd2_wpb_grp1_pad_mux[] = {
3738 MUX(1, 163, 7, 0xa10, 6, 0xa90, 6),
3739 };
3740
3741 static struct atlas7_grp_mux sd2_wpb_grp1_mux = {
3742 .pad_mux_count = ARRAY_SIZE(sd2_wpb_grp1_pad_mux),
3743 .pad_mux_list = sd2_wpb_grp1_pad_mux,
3744 };
3745
3746 static struct atlas7_pad_mux sd3_grp_pad_mux[] = {
3747 MUX(1, 85, 1, N, N, N, N),
3748 MUX(1, 86, 1, N, N, N, N),
3749 MUX(1, 87, 1, N, N, N, N),
3750 MUX(1, 88, 1, N, N, N, N),
3751 MUX(1, 89, 1, N, N, N, N),
3752 MUX(1, 90, 1, N, N, N, N),
3753 };
3754
3755 static struct atlas7_grp_mux sd3_grp_mux = {
3756 .pad_mux_count = ARRAY_SIZE(sd3_grp_pad_mux),
3757 .pad_mux_list = sd3_grp_pad_mux,
3758 };
3759
3760 static struct atlas7_pad_mux sd5_grp_pad_mux[] = {
3761 MUX(1, 91, 1, N, N, N, N),
3762 MUX(1, 92, 1, N, N, N, N),
3763 MUX(1, 93, 1, N, N, N, N),
3764 MUX(1, 94, 1, N, N, N, N),
3765 MUX(1, 95, 1, N, N, N, N),
3766 MUX(1, 96, 1, N, N, N, N),
3767 };
3768
3769 static struct atlas7_grp_mux sd5_grp_mux = {
3770 .pad_mux_count = ARRAY_SIZE(sd5_grp_pad_mux),
3771 .pad_mux_list = sd5_grp_pad_mux,
3772 };
3773
3774 static struct atlas7_pad_mux sd6_grp0_pad_mux[] = {
3775 MUX(1, 79, 4, 0xa00, 27, 0xa80, 27),
3776 MUX(1, 78, 4, 0xa00, 26, 0xa80, 26),
3777 MUX(1, 74, 4, 0xa00, 28, 0xa80, 28),
3778 MUX(1, 75, 4, 0xa00, 29, 0xa80, 29),
3779 MUX(1, 76, 4, 0xa00, 30, 0xa80, 30),
3780 MUX(1, 77, 4, 0xa00, 31, 0xa80, 31),
3781 };
3782
3783 static struct atlas7_grp_mux sd6_grp0_mux = {
3784 .pad_mux_count = ARRAY_SIZE(sd6_grp0_pad_mux),
3785 .pad_mux_list = sd6_grp0_pad_mux,
3786 };
3787
3788 static struct atlas7_pad_mux sd6_grp1_pad_mux[] = {
3789 MUX(1, 101, 3, 0xa00, 27, 0xa80, 27),
3790 MUX(1, 99, 3, 0xa00, 26, 0xa80, 26),
3791 MUX(1, 100, 3, 0xa00, 28, 0xa80, 28),
3792 MUX(1, 110, 3, 0xa00, 29, 0xa80, 29),
3793 MUX(1, 109, 3, 0xa00, 30, 0xa80, 30),
3794 MUX(1, 111, 3, 0xa00, 31, 0xa80, 31),
3795 };
3796
3797 static struct atlas7_grp_mux sd6_grp1_mux = {
3798 .pad_mux_count = ARRAY_SIZE(sd6_grp1_pad_mux),
3799 .pad_mux_list = sd6_grp1_pad_mux,
3800 };
3801
3802 static struct atlas7_pad_mux sp0_ext_ldo_on_grp_pad_mux[] = {
3803 MUX(0, 4, 2, N, N, N, N),
3804 };
3805
3806 static struct atlas7_grp_mux sp0_ext_ldo_on_grp_mux = {
3807 .pad_mux_count = ARRAY_SIZE(sp0_ext_ldo_on_grp_pad_mux),
3808 .pad_mux_list = sp0_ext_ldo_on_grp_pad_mux,
3809 };
3810
3811 static struct atlas7_pad_mux sp0_qspi_grp_pad_mux[] = {
3812 MUX(0, 12, 1, N, N, N, N),
3813 MUX(0, 13, 1, N, N, N, N),
3814 MUX(0, 14, 1, N, N, N, N),
3815 MUX(0, 15, 1, N, N, N, N),
3816 MUX(0, 16, 1, N, N, N, N),
3817 MUX(0, 17, 1, N, N, N, N),
3818 };
3819
3820 static struct atlas7_grp_mux sp0_qspi_grp_mux = {
3821 .pad_mux_count = ARRAY_SIZE(sp0_qspi_grp_pad_mux),
3822 .pad_mux_list = sp0_qspi_grp_pad_mux,
3823 };
3824
3825 static struct atlas7_pad_mux sp1_spi_grp_pad_mux[] = {
3826 MUX(1, 19, 1, N, N, N, N),
3827 MUX(1, 20, 1, N, N, N, N),
3828 MUX(1, 21, 1, N, N, N, N),
3829 MUX(1, 18, 1, N, N, N, N),
3830 };
3831
3832 static struct atlas7_grp_mux sp1_spi_grp_mux = {
3833 .pad_mux_count = ARRAY_SIZE(sp1_spi_grp_pad_mux),
3834 .pad_mux_list = sp1_spi_grp_pad_mux,
3835 };
3836
3837 static struct atlas7_pad_mux tpiu_trace_grp_pad_mux[] = {
3838 MUX(1, 53, 5, N, N, N, N),
3839 MUX(1, 56, 5, N, N, N, N),
3840 MUX(1, 57, 5, N, N, N, N),
3841 MUX(1, 58, 5, N, N, N, N),
3842 MUX(1, 59, 5, N, N, N, N),
3843 MUX(1, 60, 5, N, N, N, N),
3844 MUX(1, 61, 5, N, N, N, N),
3845 MUX(1, 62, 5, N, N, N, N),
3846 MUX(1, 63, 5, N, N, N, N),
3847 MUX(1, 64, 5, N, N, N, N),
3848 MUX(1, 65, 5, N, N, N, N),
3849 MUX(1, 66, 5, N, N, N, N),
3850 MUX(1, 67, 5, N, N, N, N),
3851 MUX(1, 68, 5, N, N, N, N),
3852 MUX(1, 69, 5, N, N, N, N),
3853 MUX(1, 70, 5, N, N, N, N),
3854 MUX(1, 71, 5, N, N, N, N),
3855 MUX(1, 72, 5, N, N, N, N),
3856 };
3857
3858 static struct atlas7_grp_mux tpiu_trace_grp_mux = {
3859 .pad_mux_count = ARRAY_SIZE(tpiu_trace_grp_pad_mux),
3860 .pad_mux_list = tpiu_trace_grp_pad_mux,
3861 };
3862
3863 static struct atlas7_pad_mux uart0_grp_pad_mux[] = {
3864 MUX(1, 121, 4, N, N, N, N),
3865 MUX(1, 120, 4, N, N, N, N),
3866 MUX(1, 134, 1, N, N, N, N),
3867 MUX(1, 133, 1, N, N, N, N),
3868 };
3869
3870 static struct atlas7_grp_mux uart0_grp_mux = {
3871 .pad_mux_count = ARRAY_SIZE(uart0_grp_pad_mux),
3872 .pad_mux_list = uart0_grp_pad_mux,
3873 };
3874
3875 static struct atlas7_pad_mux uart0_nopause_grp_pad_mux[] = {
3876 MUX(1, 134, 1, N, N, N, N),
3877 MUX(1, 133, 1, N, N, N, N),
3878 };
3879
3880 static struct atlas7_grp_mux uart0_nopause_grp_mux = {
3881 .pad_mux_count = ARRAY_SIZE(uart0_nopause_grp_pad_mux),
3882 .pad_mux_list = uart0_nopause_grp_pad_mux,
3883 };
3884
3885 static struct atlas7_pad_mux uart1_grp_pad_mux[] = {
3886 MUX(1, 136, 1, N, N, N, N),
3887 MUX(1, 135, 1, N, N, N, N),
3888 };
3889
3890 static struct atlas7_grp_mux uart1_grp_mux = {
3891 .pad_mux_count = ARRAY_SIZE(uart1_grp_pad_mux),
3892 .pad_mux_list = uart1_grp_pad_mux,
3893 };
3894
3895 static struct atlas7_pad_mux uart2_cts_grp0_pad_mux[] = {
3896 MUX(1, 132, 3, 0xa10, 2, 0xa90, 2),
3897 };
3898
3899 static struct atlas7_grp_mux uart2_cts_grp0_mux = {
3900 .pad_mux_count = ARRAY_SIZE(uart2_cts_grp0_pad_mux),
3901 .pad_mux_list = uart2_cts_grp0_pad_mux,
3902 };
3903
3904 static struct atlas7_pad_mux uart2_cts_grp1_pad_mux[] = {
3905 MUX(1, 162, 2, 0xa10, 2, 0xa90, 2),
3906 };
3907
3908 static struct atlas7_grp_mux uart2_cts_grp1_mux = {
3909 .pad_mux_count = ARRAY_SIZE(uart2_cts_grp1_pad_mux),
3910 .pad_mux_list = uart2_cts_grp1_pad_mux,
3911 };
3912
3913 static struct atlas7_pad_mux uart2_rts_grp0_pad_mux[] = {
3914 MUX(1, 131, 3, N, N, N, N),
3915 };
3916
3917 static struct atlas7_grp_mux uart2_rts_grp0_mux = {
3918 .pad_mux_count = ARRAY_SIZE(uart2_rts_grp0_pad_mux),
3919 .pad_mux_list = uart2_rts_grp0_pad_mux,
3920 };
3921
3922 static struct atlas7_pad_mux uart2_rts_grp1_pad_mux[] = {
3923 MUX(1, 161, 2, N, N, N, N),
3924 };
3925
3926 static struct atlas7_grp_mux uart2_rts_grp1_mux = {
3927 .pad_mux_count = ARRAY_SIZE(uart2_rts_grp1_pad_mux),
3928 .pad_mux_list = uart2_rts_grp1_pad_mux,
3929 };
3930
3931 static struct atlas7_pad_mux uart2_rxd_grp0_pad_mux[] = {
3932 MUX(0, 11, 2, 0xa10, 5, 0xa90, 5),
3933 };
3934
3935 static struct atlas7_grp_mux uart2_rxd_grp0_mux = {
3936 .pad_mux_count = ARRAY_SIZE(uart2_rxd_grp0_pad_mux),
3937 .pad_mux_list = uart2_rxd_grp0_pad_mux,
3938 };
3939
3940 static struct atlas7_pad_mux uart2_rxd_grp1_pad_mux[] = {
3941 MUX(1, 160, 2, 0xa10, 5, 0xa90, 5),
3942 };
3943
3944 static struct atlas7_grp_mux uart2_rxd_grp1_mux = {
3945 .pad_mux_count = ARRAY_SIZE(uart2_rxd_grp1_pad_mux),
3946 .pad_mux_list = uart2_rxd_grp1_pad_mux,
3947 };
3948
3949 static struct atlas7_pad_mux uart2_rxd_grp2_pad_mux[] = {
3950 MUX(1, 130, 3, 0xa10, 5, 0xa90, 5),
3951 };
3952
3953 static struct atlas7_grp_mux uart2_rxd_grp2_mux = {
3954 .pad_mux_count = ARRAY_SIZE(uart2_rxd_grp2_pad_mux),
3955 .pad_mux_list = uart2_rxd_grp2_pad_mux,
3956 };
3957
3958 static struct atlas7_pad_mux uart2_txd_grp0_pad_mux[] = {
3959 MUX(0, 10, 2, N, N, N, N),
3960 };
3961
3962 static struct atlas7_grp_mux uart2_txd_grp0_mux = {
3963 .pad_mux_count = ARRAY_SIZE(uart2_txd_grp0_pad_mux),
3964 .pad_mux_list = uart2_txd_grp0_pad_mux,
3965 };
3966
3967 static struct atlas7_pad_mux uart2_txd_grp1_pad_mux[] = {
3968 MUX(1, 159, 2, N, N, N, N),
3969 };
3970
3971 static struct atlas7_grp_mux uart2_txd_grp1_mux = {
3972 .pad_mux_count = ARRAY_SIZE(uart2_txd_grp1_pad_mux),
3973 .pad_mux_list = uart2_txd_grp1_pad_mux,
3974 };
3975
3976 static struct atlas7_pad_mux uart2_txd_grp2_pad_mux[] = {
3977 MUX(1, 129, 3, N, N, N, N),
3978 };
3979
3980 static struct atlas7_grp_mux uart2_txd_grp2_mux = {
3981 .pad_mux_count = ARRAY_SIZE(uart2_txd_grp2_pad_mux),
3982 .pad_mux_list = uart2_txd_grp2_pad_mux,
3983 };
3984
3985 static struct atlas7_pad_mux uart3_cts_grp0_pad_mux[] = {
3986 MUX(1, 125, 2, 0xa08, 0, 0xa88, 0),
3987 };
3988
3989 static struct atlas7_grp_mux uart3_cts_grp0_mux = {
3990 .pad_mux_count = ARRAY_SIZE(uart3_cts_grp0_pad_mux),
3991 .pad_mux_list = uart3_cts_grp0_pad_mux,
3992 };
3993
3994 static struct atlas7_pad_mux uart3_cts_grp1_pad_mux[] = {
3995 MUX(1, 111, 4, 0xa08, 0, 0xa88, 0),
3996 };
3997
3998 static struct atlas7_grp_mux uart3_cts_grp1_mux = {
3999 .pad_mux_count = ARRAY_SIZE(uart3_cts_grp1_pad_mux),
4000 .pad_mux_list = uart3_cts_grp1_pad_mux,
4001 };
4002
4003 static struct atlas7_pad_mux uart3_cts_grp2_pad_mux[] = {
4004 MUX(1, 140, 2, 0xa08, 0, 0xa88, 0),
4005 };
4006
4007 static struct atlas7_grp_mux uart3_cts_grp2_mux = {
4008 .pad_mux_count = ARRAY_SIZE(uart3_cts_grp2_pad_mux),
4009 .pad_mux_list = uart3_cts_grp2_pad_mux,
4010 };
4011
4012 static struct atlas7_pad_mux uart3_rts_grp0_pad_mux[] = {
4013 MUX(1, 126, 2, N, N, N, N),
4014 };
4015
4016 static struct atlas7_grp_mux uart3_rts_grp0_mux = {
4017 .pad_mux_count = ARRAY_SIZE(uart3_rts_grp0_pad_mux),
4018 .pad_mux_list = uart3_rts_grp0_pad_mux,
4019 };
4020
4021 static struct atlas7_pad_mux uart3_rts_grp1_pad_mux[] = {
4022 MUX(1, 109, 4, N, N, N, N),
4023 };
4024
4025 static struct atlas7_grp_mux uart3_rts_grp1_mux = {
4026 .pad_mux_count = ARRAY_SIZE(uart3_rts_grp1_pad_mux),
4027 .pad_mux_list = uart3_rts_grp1_pad_mux,
4028 };
4029
4030 static struct atlas7_pad_mux uart3_rts_grp2_pad_mux[] = {
4031 MUX(1, 139, 2, N, N, N, N),
4032 };
4033
4034 static struct atlas7_grp_mux uart3_rts_grp2_mux = {
4035 .pad_mux_count = ARRAY_SIZE(uart3_rts_grp2_pad_mux),
4036 .pad_mux_list = uart3_rts_grp2_pad_mux,
4037 };
4038
4039 static struct atlas7_pad_mux uart3_rxd_grp0_pad_mux[] = {
4040 MUX(1, 138, 1, 0xa00, 5, 0xa80, 5),
4041 };
4042
4043 static struct atlas7_grp_mux uart3_rxd_grp0_mux = {
4044 .pad_mux_count = ARRAY_SIZE(uart3_rxd_grp0_pad_mux),
4045 .pad_mux_list = uart3_rxd_grp0_pad_mux,
4046 };
4047
4048 static struct atlas7_pad_mux uart3_rxd_grp1_pad_mux[] = {
4049 MUX(1, 84, 2, 0xa00, 5, 0xa80, 5),
4050 };
4051
4052 static struct atlas7_grp_mux uart3_rxd_grp1_mux = {
4053 .pad_mux_count = ARRAY_SIZE(uart3_rxd_grp1_pad_mux),
4054 .pad_mux_list = uart3_rxd_grp1_pad_mux,
4055 };
4056
4057 static struct atlas7_pad_mux uart3_rxd_grp2_pad_mux[] = {
4058 MUX(1, 162, 3, 0xa00, 5, 0xa80, 5),
4059 };
4060
4061 static struct atlas7_grp_mux uart3_rxd_grp2_mux = {
4062 .pad_mux_count = ARRAY_SIZE(uart3_rxd_grp2_pad_mux),
4063 .pad_mux_list = uart3_rxd_grp2_pad_mux,
4064 };
4065
4066 static struct atlas7_pad_mux uart3_txd_grp0_pad_mux[] = {
4067 MUX(1, 137, 1, N, N, N, N),
4068 };
4069
4070 static struct atlas7_grp_mux uart3_txd_grp0_mux = {
4071 .pad_mux_count = ARRAY_SIZE(uart3_txd_grp0_pad_mux),
4072 .pad_mux_list = uart3_txd_grp0_pad_mux,
4073 };
4074
4075 static struct atlas7_pad_mux uart3_txd_grp1_pad_mux[] = {
4076 MUX(1, 83, 2, N, N, N, N),
4077 };
4078
4079 static struct atlas7_grp_mux uart3_txd_grp1_mux = {
4080 .pad_mux_count = ARRAY_SIZE(uart3_txd_grp1_pad_mux),
4081 .pad_mux_list = uart3_txd_grp1_pad_mux,
4082 };
4083
4084 static struct atlas7_pad_mux uart3_txd_grp2_pad_mux[] = {
4085 MUX(1, 161, 3, N, N, N, N),
4086 };
4087
4088 static struct atlas7_grp_mux uart3_txd_grp2_mux = {
4089 .pad_mux_count = ARRAY_SIZE(uart3_txd_grp2_pad_mux),
4090 .pad_mux_list = uart3_txd_grp2_pad_mux,
4091 };
4092
4093 static struct atlas7_pad_mux uart4_basic_grp_pad_mux[] = {
4094 MUX(1, 140, 1, N, N, N, N),
4095 MUX(1, 139, 1, N, N, N, N),
4096 };
4097
4098 static struct atlas7_grp_mux uart4_basic_grp_mux = {
4099 .pad_mux_count = ARRAY_SIZE(uart4_basic_grp_pad_mux),
4100 .pad_mux_list = uart4_basic_grp_pad_mux,
4101 };
4102
4103 static struct atlas7_pad_mux uart4_cts_grp0_pad_mux[] = {
4104 MUX(1, 122, 4, 0xa08, 1, 0xa88, 1),
4105 };
4106
4107 static struct atlas7_grp_mux uart4_cts_grp0_mux = {
4108 .pad_mux_count = ARRAY_SIZE(uart4_cts_grp0_pad_mux),
4109 .pad_mux_list = uart4_cts_grp0_pad_mux,
4110 };
4111
4112 static struct atlas7_pad_mux uart4_cts_grp1_pad_mux[] = {
4113 MUX(1, 100, 4, 0xa08, 1, 0xa88, 1),
4114 };
4115
4116 static struct atlas7_grp_mux uart4_cts_grp1_mux = {
4117 .pad_mux_count = ARRAY_SIZE(uart4_cts_grp1_pad_mux),
4118 .pad_mux_list = uart4_cts_grp1_pad_mux,
4119 };
4120
4121 static struct atlas7_pad_mux uart4_cts_grp2_pad_mux[] = {
4122 MUX(1, 117, 2, 0xa08, 1, 0xa88, 1),
4123 };
4124
4125 static struct atlas7_grp_mux uart4_cts_grp2_mux = {
4126 .pad_mux_count = ARRAY_SIZE(uart4_cts_grp2_pad_mux),
4127 .pad_mux_list = uart4_cts_grp2_pad_mux,
4128 };
4129
4130 static struct atlas7_pad_mux uart4_rts_grp0_pad_mux[] = {
4131 MUX(1, 123, 4, N, N, N, N),
4132 };
4133
4134 static struct atlas7_grp_mux uart4_rts_grp0_mux = {
4135 .pad_mux_count = ARRAY_SIZE(uart4_rts_grp0_pad_mux),
4136 .pad_mux_list = uart4_rts_grp0_pad_mux,
4137 };
4138
4139 static struct atlas7_pad_mux uart4_rts_grp1_pad_mux[] = {
4140 MUX(1, 99, 4, N, N, N, N),
4141 };
4142
4143 static struct atlas7_grp_mux uart4_rts_grp1_mux = {
4144 .pad_mux_count = ARRAY_SIZE(uart4_rts_grp1_pad_mux),
4145 .pad_mux_list = uart4_rts_grp1_pad_mux,
4146 };
4147
4148 static struct atlas7_pad_mux uart4_rts_grp2_pad_mux[] = {
4149 MUX(1, 116, 2, N, N, N, N),
4150 };
4151
4152 static struct atlas7_grp_mux uart4_rts_grp2_mux = {
4153 .pad_mux_count = ARRAY_SIZE(uart4_rts_grp2_pad_mux),
4154 .pad_mux_list = uart4_rts_grp2_pad_mux,
4155 };
4156
4157 static struct atlas7_pad_mux usb0_drvvbus_grp0_pad_mux[] = {
4158 MUX(1, 51, 2, N, N, N, N),
4159 };
4160
4161 static struct atlas7_grp_mux usb0_drvvbus_grp0_mux = {
4162 .pad_mux_count = ARRAY_SIZE(usb0_drvvbus_grp0_pad_mux),
4163 .pad_mux_list = usb0_drvvbus_grp0_pad_mux,
4164 };
4165
4166 static struct atlas7_pad_mux usb0_drvvbus_grp1_pad_mux[] = {
4167 MUX(1, 162, 7, N, N, N, N),
4168 };
4169
4170 static struct atlas7_grp_mux usb0_drvvbus_grp1_mux = {
4171 .pad_mux_count = ARRAY_SIZE(usb0_drvvbus_grp1_pad_mux),
4172 .pad_mux_list = usb0_drvvbus_grp1_pad_mux,
4173 };
4174
4175 static struct atlas7_pad_mux usb1_drvvbus_grp0_pad_mux[] = {
4176 MUX(1, 134, 2, N, N, N, N),
4177 };
4178
4179 static struct atlas7_grp_mux usb1_drvvbus_grp0_mux = {
4180 .pad_mux_count = ARRAY_SIZE(usb1_drvvbus_grp0_pad_mux),
4181 .pad_mux_list = usb1_drvvbus_grp0_pad_mux,
4182 };
4183
4184 static struct atlas7_pad_mux usb1_drvvbus_grp1_pad_mux[] = {
4185 MUX(1, 163, 2, N, N, N, N),
4186 };
4187
4188 static struct atlas7_grp_mux usb1_drvvbus_grp1_mux = {
4189 .pad_mux_count = ARRAY_SIZE(usb1_drvvbus_grp1_pad_mux),
4190 .pad_mux_list = usb1_drvvbus_grp1_pad_mux,
4191 };
4192
4193 static struct atlas7_pad_mux visbus_dout_grp_pad_mux[] = {
4194 MUX(1, 57, 6, N, N, N, N),
4195 MUX(1, 58, 6, N, N, N, N),
4196 MUX(1, 59, 6, N, N, N, N),
4197 MUX(1, 60, 6, N, N, N, N),
4198 MUX(1, 61, 6, N, N, N, N),
4199 MUX(1, 62, 6, N, N, N, N),
4200 MUX(1, 63, 6, N, N, N, N),
4201 MUX(1, 64, 6, N, N, N, N),
4202 MUX(1, 65, 6, N, N, N, N),
4203 MUX(1, 66, 6, N, N, N, N),
4204 MUX(1, 67, 6, N, N, N, N),
4205 MUX(1, 68, 6, N, N, N, N),
4206 MUX(1, 69, 6, N, N, N, N),
4207 MUX(1, 70, 6, N, N, N, N),
4208 MUX(1, 71, 6, N, N, N, N),
4209 MUX(1, 72, 6, N, N, N, N),
4210 MUX(1, 53, 6, N, N, N, N),
4211 MUX(1, 54, 6, N, N, N, N),
4212 MUX(1, 55, 6, N, N, N, N),
4213 MUX(1, 56, 6, N, N, N, N),
4214 MUX(1, 85, 6, N, N, N, N),
4215 MUX(1, 86, 6, N, N, N, N),
4216 MUX(1, 87, 6, N, N, N, N),
4217 MUX(1, 88, 6, N, N, N, N),
4218 MUX(1, 89, 6, N, N, N, N),
4219 MUX(1, 90, 6, N, N, N, N),
4220 MUX(1, 91, 6, N, N, N, N),
4221 MUX(1, 92, 6, N, N, N, N),
4222 MUX(1, 93, 6, N, N, N, N),
4223 MUX(1, 94, 6, N, N, N, N),
4224 MUX(1, 95, 6, N, N, N, N),
4225 MUX(1, 96, 6, N, N, N, N),
4226 };
4227
4228 static struct atlas7_grp_mux visbus_dout_grp_mux = {
4229 .pad_mux_count = ARRAY_SIZE(visbus_dout_grp_pad_mux),
4230 .pad_mux_list = visbus_dout_grp_pad_mux,
4231 };
4232
4233 static struct atlas7_pad_mux vi_vip1_grp_pad_mux[] = {
4234 MUX(1, 74, 1, N, N, N, N),
4235 MUX(1, 75, 1, N, N, N, N),
4236 MUX(1, 76, 1, N, N, N, N),
4237 MUX(1, 77, 1, N, N, N, N),
4238 MUX(1, 78, 1, N, N, N, N),
4239 MUX(1, 79, 1, N, N, N, N),
4240 MUX(1, 80, 1, N, N, N, N),
4241 MUX(1, 81, 1, N, N, N, N),
4242 MUX(1, 82, 1, N, N, N, N),
4243 MUX(1, 83, 1, N, N, N, N),
4244 MUX(1, 84, 1, N, N, N, N),
4245 MUX(1, 103, 2, N, N, N, N),
4246 MUX(1, 104, 2, N, N, N, N),
4247 MUX(1, 105, 2, N, N, N, N),
4248 MUX(1, 106, 2, N, N, N, N),
4249 MUX(1, 107, 2, N, N, N, N),
4250 MUX(1, 102, 2, N, N, N, N),
4251 MUX(1, 97, 2, N, N, N, N),
4252 MUX(1, 98, 2, N, N, N, N),
4253 };
4254
4255 static struct atlas7_grp_mux vi_vip1_grp_mux = {
4256 .pad_mux_count = ARRAY_SIZE(vi_vip1_grp_pad_mux),
4257 .pad_mux_list = vi_vip1_grp_pad_mux,
4258 };
4259
4260 static struct atlas7_pad_mux vi_vip1_ext_grp_pad_mux[] = {
4261 MUX(1, 74, 1, N, N, N, N),
4262 MUX(1, 75, 1, N, N, N, N),
4263 MUX(1, 76, 1, N, N, N, N),
4264 MUX(1, 77, 1, N, N, N, N),
4265 MUX(1, 78, 1, N, N, N, N),
4266 MUX(1, 79, 1, N, N, N, N),
4267 MUX(1, 80, 1, N, N, N, N),
4268 MUX(1, 81, 1, N, N, N, N),
4269 MUX(1, 82, 1, N, N, N, N),
4270 MUX(1, 83, 1, N, N, N, N),
4271 MUX(1, 84, 1, N, N, N, N),
4272 MUX(1, 108, 2, N, N, N, N),
4273 MUX(1, 103, 2, N, N, N, N),
4274 MUX(1, 104, 2, N, N, N, N),
4275 MUX(1, 105, 2, N, N, N, N),
4276 MUX(1, 106, 2, N, N, N, N),
4277 MUX(1, 107, 2, N, N, N, N),
4278 MUX(1, 102, 2, N, N, N, N),
4279 MUX(1, 97, 2, N, N, N, N),
4280 MUX(1, 98, 2, N, N, N, N),
4281 MUX(1, 99, 2, N, N, N, N),
4282 MUX(1, 100, 2, N, N, N, N),
4283 };
4284
4285 static struct atlas7_grp_mux vi_vip1_ext_grp_mux = {
4286 .pad_mux_count = ARRAY_SIZE(vi_vip1_ext_grp_pad_mux),
4287 .pad_mux_list = vi_vip1_ext_grp_pad_mux,
4288 };
4289
4290 static struct atlas7_pad_mux vi_vip1_low8bit_grp_pad_mux[] = {
4291 MUX(1, 74, 1, N, N, N, N),
4292 MUX(1, 75, 1, N, N, N, N),
4293 MUX(1, 76, 1, N, N, N, N),
4294 MUX(1, 77, 1, N, N, N, N),
4295 MUX(1, 78, 1, N, N, N, N),
4296 MUX(1, 79, 1, N, N, N, N),
4297 MUX(1, 80, 1, N, N, N, N),
4298 MUX(1, 81, 1, N, N, N, N),
4299 };
4300
4301 static struct atlas7_grp_mux vi_vip1_low8bit_grp_mux = {
4302 .pad_mux_count = ARRAY_SIZE(vi_vip1_low8bit_grp_pad_mux),
4303 .pad_mux_list = vi_vip1_low8bit_grp_pad_mux,
4304 };
4305
4306 static struct atlas7_pad_mux vi_vip1_high8bit_grp_pad_mux[] = {
4307 MUX(1, 82, 1, N, N, N, N),
4308 MUX(1, 83, 1, N, N, N, N),
4309 MUX(1, 84, 1, N, N, N, N),
4310 MUX(1, 108, 2, N, N, N, N),
4311 MUX(1, 103, 2, N, N, N, N),
4312 MUX(1, 104, 2, N, N, N, N),
4313 MUX(1, 105, 2, N, N, N, N),
4314 MUX(1, 106, 2, N, N, N, N),
4315 };
4316
4317 static struct atlas7_grp_mux vi_vip1_high8bit_grp_mux = {
4318 .pad_mux_count = ARRAY_SIZE(vi_vip1_high8bit_grp_pad_mux),
4319 .pad_mux_list = vi_vip1_high8bit_grp_pad_mux,
4320 };
4321
4322 static struct atlas7_pmx_func atlas7_pmx_functions[] = {
4323 FUNCTION("gnss_gpio", gnss_gpio_grp, &gnss_gpio_grp_mux),
4324 FUNCTION("lcd_vip_gpio", lcd_vip_gpio_grp, &lcd_vip_gpio_grp_mux),
4325 FUNCTION("sdio_i2s_gpio", sdio_i2s_gpio_grp, &sdio_i2s_gpio_grp_mux),
4326 FUNCTION("sp_rgmii_gpio", sp_rgmii_gpio_grp, &sp_rgmii_gpio_grp_mux),
4327 FUNCTION("lvds_gpio", lvds_gpio_grp, &lvds_gpio_grp_mux),
4328 FUNCTION("jtag_uart_nand_gpio",
4329 jtag_uart_nand_gpio_grp,
4330 &jtag_uart_nand_gpio_grp_mux),
4331 FUNCTION("rtc_gpio", rtc_gpio_grp, &rtc_gpio_grp_mux),
4332 FUNCTION("audio_ac97", audio_ac97_grp, &audio_ac97_grp_mux),
4333 FUNCTION("audio_digmic_m0",
4334 audio_digmic_grp0,
4335 &audio_digmic_grp0_mux),
4336 FUNCTION("audio_digmic_m1",
4337 audio_digmic_grp1,
4338 &audio_digmic_grp1_mux),
4339 FUNCTION("audio_digmic_m2",
4340 audio_digmic_grp2,
4341 &audio_digmic_grp2_mux),
4342 FUNCTION("audio_func_dbg",
4343 audio_func_dbg_grp,
4344 &audio_func_dbg_grp_mux),
4345 FUNCTION("audio_i2s", audio_i2s_grp, &audio_i2s_grp_mux),
4346 FUNCTION("audio_i2s_2ch", audio_i2s_2ch_grp, &audio_i2s_2ch_grp_mux),
4347 FUNCTION("audio_i2s_extclk",
4348 audio_i2s_extclk_grp,
4349 &audio_i2s_extclk_grp_mux),
4350 FUNCTION("audio_spdif_out_m0",
4351 audio_spdif_out_grp0,
4352 &audio_spdif_out_grp0_mux),
4353 FUNCTION("audio_spdif_out_m1",
4354 audio_spdif_out_grp1,
4355 &audio_spdif_out_grp1_mux),
4356 FUNCTION("audio_spdif_out_m2",
4357 audio_spdif_out_grp2,
4358 &audio_spdif_out_grp2_mux),
4359 FUNCTION("audio_uart0_basic",
4360 audio_uart0_basic_grp,
4361 &audio_uart0_basic_grp_mux),
4362 FUNCTION("audio_uart0_urfs_m0",
4363 audio_uart0_urfs_grp0,
4364 &audio_uart0_urfs_grp0_mux),
4365 FUNCTION("audio_uart0_urfs_m1",
4366 audio_uart0_urfs_grp1,
4367 &audio_uart0_urfs_grp1_mux),
4368 FUNCTION("audio_uart0_urfs_m2",
4369 audio_uart0_urfs_grp2,
4370 &audio_uart0_urfs_grp2_mux),
4371 FUNCTION("audio_uart0_urfs_m3",
4372 audio_uart0_urfs_grp3,
4373 &audio_uart0_urfs_grp3_mux),
4374 FUNCTION("audio_uart1_basic",
4375 audio_uart1_basic_grp,
4376 &audio_uart1_basic_grp_mux),
4377 FUNCTION("audio_uart1_urfs_m0",
4378 audio_uart1_urfs_grp0,
4379 &audio_uart1_urfs_grp0_mux),
4380 FUNCTION("audio_uart1_urfs_m1",
4381 audio_uart1_urfs_grp1,
4382 &audio_uart1_urfs_grp1_mux),
4383 FUNCTION("audio_uart1_urfs_m2",
4384 audio_uart1_urfs_grp2,
4385 &audio_uart1_urfs_grp2_mux),
4386 FUNCTION("audio_uart2_urfs_m0",
4387 audio_uart2_urfs_grp0,
4388 &audio_uart2_urfs_grp0_mux),
4389 FUNCTION("audio_uart2_urfs_m1",
4390 audio_uart2_urfs_grp1,
4391 &audio_uart2_urfs_grp1_mux),
4392 FUNCTION("audio_uart2_urfs_m2",
4393 audio_uart2_urfs_grp2,
4394 &audio_uart2_urfs_grp2_mux),
4395 FUNCTION("audio_uart2_urxd_m0",
4396 audio_uart2_urxd_grp0,
4397 &audio_uart2_urxd_grp0_mux),
4398 FUNCTION("audio_uart2_urxd_m1",
4399 audio_uart2_urxd_grp1,
4400 &audio_uart2_urxd_grp1_mux),
4401 FUNCTION("audio_uart2_urxd_m2",
4402 audio_uart2_urxd_grp2,
4403 &audio_uart2_urxd_grp2_mux),
4404 FUNCTION("audio_uart2_usclk_m0",
4405 audio_uart2_usclk_grp0,
4406 &audio_uart2_usclk_grp0_mux),
4407 FUNCTION("audio_uart2_usclk_m1",
4408 audio_uart2_usclk_grp1,
4409 &audio_uart2_usclk_grp1_mux),
4410 FUNCTION("audio_uart2_usclk_m2",
4411 audio_uart2_usclk_grp2,
4412 &audio_uart2_usclk_grp2_mux),
4413 FUNCTION("audio_uart2_utfs_m0",
4414 audio_uart2_utfs_grp0,
4415 &audio_uart2_utfs_grp0_mux),
4416 FUNCTION("audio_uart2_utfs_m1",
4417 audio_uart2_utfs_grp1,
4418 &audio_uart2_utfs_grp1_mux),
4419 FUNCTION("audio_uart2_utfs_m2",
4420 audio_uart2_utfs_grp2,
4421 &audio_uart2_utfs_grp2_mux),
4422 FUNCTION("audio_uart2_utxd_m0",
4423 audio_uart2_utxd_grp0,
4424 &audio_uart2_utxd_grp0_mux),
4425 FUNCTION("audio_uart2_utxd_m1",
4426 audio_uart2_utxd_grp1,
4427 &audio_uart2_utxd_grp1_mux),
4428 FUNCTION("audio_uart2_utxd_m2",
4429 audio_uart2_utxd_grp2,
4430 &audio_uart2_utxd_grp2_mux),
4431 FUNCTION("c_can_trnsvr_en_m0",
4432 c_can_trnsvr_en_grp0,
4433 &c_can_trnsvr_en_grp0_mux),
4434 FUNCTION("c_can_trnsvr_en_m1",
4435 c_can_trnsvr_en_grp1,
4436 &c_can_trnsvr_en_grp1_mux),
4437 FUNCTION("c_can_trnsvr_intr",
4438 c_can_trnsvr_intr_grp,
4439 &c_can_trnsvr_intr_grp_mux),
4440 FUNCTION("c_can_trnsvr_stb_n",
4441 c_can_trnsvr_stb_n_grp,
4442 &c_can_trnsvr_stb_n_grp_mux),
4443 FUNCTION("c0_can_rxd_trnsv0",
4444 c0_can_rxd_trnsv0_grp,
4445 &c0_can_rxd_trnsv0_grp_mux),
4446 FUNCTION("c0_can_rxd_trnsv1",
4447 c0_can_rxd_trnsv1_grp,
4448 &c0_can_rxd_trnsv1_grp_mux),
4449 FUNCTION("c0_can_txd_trnsv0",
4450 c0_can_txd_trnsv0_grp,
4451 &c0_can_txd_trnsv0_grp_mux),
4452 FUNCTION("c0_can_txd_trnsv1",
4453 c0_can_txd_trnsv1_grp,
4454 &c0_can_txd_trnsv1_grp_mux),
4455 FUNCTION("c1_can_rxd_m0", c1_can_rxd_grp0, &c1_can_rxd_grp0_mux),
4456 FUNCTION("c1_can_rxd_m1", c1_can_rxd_grp1, &c1_can_rxd_grp1_mux),
4457 FUNCTION("c1_can_rxd_m2", c1_can_rxd_grp2, &c1_can_rxd_grp2_mux),
4458 FUNCTION("c1_can_rxd_m3", c1_can_rxd_grp3, &c1_can_rxd_grp3_mux),
4459 FUNCTION("c1_can_txd_m0", c1_can_txd_grp0, &c1_can_txd_grp0_mux),
4460 FUNCTION("c1_can_txd_m1", c1_can_txd_grp1, &c1_can_txd_grp1_mux),
4461 FUNCTION("c1_can_txd_m2", c1_can_txd_grp2, &c1_can_txd_grp2_mux),
4462 FUNCTION("c1_can_txd_m3", c1_can_txd_grp3, &c1_can_txd_grp3_mux),
4463 FUNCTION("ca_audio_lpc", ca_audio_lpc_grp, &ca_audio_lpc_grp_mux),
4464 FUNCTION("ca_bt_lpc", ca_bt_lpc_grp, &ca_bt_lpc_grp_mux),
4465 FUNCTION("ca_coex", ca_coex_grp, &ca_coex_grp_mux),
4466 FUNCTION("ca_curator_lpc",
4467 ca_curator_lpc_grp,
4468 &ca_curator_lpc_grp_mux),
4469 FUNCTION("ca_pcm_debug", ca_pcm_debug_grp, &ca_pcm_debug_grp_mux),
4470 FUNCTION("ca_pio", ca_pio_grp, &ca_pio_grp_mux),
4471 FUNCTION("ca_sdio_debug", ca_sdio_debug_grp, &ca_sdio_debug_grp_mux),
4472 FUNCTION("ca_spi", ca_spi_grp, &ca_spi_grp_mux),
4473 FUNCTION("ca_trb", ca_trb_grp, &ca_trb_grp_mux),
4474 FUNCTION("ca_uart_debug", ca_uart_debug_grp, &ca_uart_debug_grp_mux),
4475 FUNCTION("clkc_m0", clkc_grp0, &clkc_grp0_mux),
4476 FUNCTION("clkc_m1", clkc_grp1, &clkc_grp1_mux),
4477 FUNCTION("gn_gnss_i2c", gn_gnss_i2c_grp, &gn_gnss_i2c_grp_mux),
4478 FUNCTION("gn_gnss_uart_nopause",
4479 gn_gnss_uart_nopause_grp,
4480 &gn_gnss_uart_nopause_grp_mux),
4481 FUNCTION("gn_gnss_uart", gn_gnss_uart_grp, &gn_gnss_uart_grp_mux),
4482 FUNCTION("gn_trg_spi_m0", gn_trg_spi_grp0, &gn_trg_spi_grp0_mux),
4483 FUNCTION("gn_trg_spi_m1", gn_trg_spi_grp1, &gn_trg_spi_grp1_mux),
4484 FUNCTION("cvbs_dbg", cvbs_dbg_grp, &cvbs_dbg_grp_mux),
4485 FUNCTION("cvbs_dbg_test_m0",
4486 cvbs_dbg_test_grp0,
4487 &cvbs_dbg_test_grp0_mux),
4488 FUNCTION("cvbs_dbg_test_m1",
4489 cvbs_dbg_test_grp1,
4490 &cvbs_dbg_test_grp1_mux),
4491 FUNCTION("cvbs_dbg_test_m2",
4492 cvbs_dbg_test_grp2,
4493 &cvbs_dbg_test_grp2_mux),
4494 FUNCTION("cvbs_dbg_test_m3",
4495 cvbs_dbg_test_grp3,
4496 &cvbs_dbg_test_grp3_mux),
4497 FUNCTION("cvbs_dbg_test_m4",
4498 cvbs_dbg_test_grp4,
4499 &cvbs_dbg_test_grp4_mux),
4500 FUNCTION("cvbs_dbg_test_m5",
4501 cvbs_dbg_test_grp5,
4502 &cvbs_dbg_test_grp5_mux),
4503 FUNCTION("cvbs_dbg_test_m6",
4504 cvbs_dbg_test_grp6,
4505 &cvbs_dbg_test_grp6_mux),
4506 FUNCTION("cvbs_dbg_test_m7",
4507 cvbs_dbg_test_grp7,
4508 &cvbs_dbg_test_grp7_mux),
4509 FUNCTION("cvbs_dbg_test_m8",
4510 cvbs_dbg_test_grp8,
4511 &cvbs_dbg_test_grp8_mux),
4512 FUNCTION("cvbs_dbg_test_m9",
4513 cvbs_dbg_test_grp9,
4514 &cvbs_dbg_test_grp9_mux),
4515 FUNCTION("cvbs_dbg_test_m10",
4516 cvbs_dbg_test_grp10,
4517 &cvbs_dbg_test_grp10_mux),
4518 FUNCTION("cvbs_dbg_test_m11",
4519 cvbs_dbg_test_grp11,
4520 &cvbs_dbg_test_grp11_mux),
4521 FUNCTION("cvbs_dbg_test_m12",
4522 cvbs_dbg_test_grp12,
4523 &cvbs_dbg_test_grp12_mux),
4524 FUNCTION("cvbs_dbg_test_m13",
4525 cvbs_dbg_test_grp13,
4526 &cvbs_dbg_test_grp13_mux),
4527 FUNCTION("cvbs_dbg_test_m14",
4528 cvbs_dbg_test_grp14,
4529 &cvbs_dbg_test_grp14_mux),
4530 FUNCTION("cvbs_dbg_test_m15",
4531 cvbs_dbg_test_grp15,
4532 &cvbs_dbg_test_grp15_mux),
4533 FUNCTION("gn_gnss_power", gn_gnss_power_grp, &gn_gnss_power_grp_mux),
4534 FUNCTION("gn_gnss_sw_status",
4535 gn_gnss_sw_status_grp,
4536 &gn_gnss_sw_status_grp_mux),
4537 FUNCTION("gn_gnss_eclk", gn_gnss_eclk_grp, &gn_gnss_eclk_grp_mux),
4538 FUNCTION("gn_gnss_irq1_m0",
4539 gn_gnss_irq1_grp0,
4540 &gn_gnss_irq1_grp0_mux),
4541 FUNCTION("gn_gnss_irq2_m0",
4542 gn_gnss_irq2_grp0,
4543 &gn_gnss_irq2_grp0_mux),
4544 FUNCTION("gn_gnss_tm", gn_gnss_tm_grp, &gn_gnss_tm_grp_mux),
4545 FUNCTION("gn_gnss_tsync", gn_gnss_tsync_grp, &gn_gnss_tsync_grp_mux),
4546 FUNCTION("gn_io_gnsssys_sw_cfg",
4547 gn_io_gnsssys_sw_cfg_grp,
4548 &gn_io_gnsssys_sw_cfg_grp_mux),
4549 FUNCTION("gn_trg_m0", gn_trg_grp0, &gn_trg_grp0_mux),
4550 FUNCTION("gn_trg_m1", gn_trg_grp1, &gn_trg_grp1_mux),
4551 FUNCTION("gn_trg_shutdown_m0",
4552 gn_trg_shutdown_grp0,
4553 &gn_trg_shutdown_grp0_mux),
4554 FUNCTION("gn_trg_shutdown_m1",
4555 gn_trg_shutdown_grp1,
4556 &gn_trg_shutdown_grp1_mux),
4557 FUNCTION("gn_trg_shutdown_m2",
4558 gn_trg_shutdown_grp2,
4559 &gn_trg_shutdown_grp2_mux),
4560 FUNCTION("gn_trg_shutdown_m3",
4561 gn_trg_shutdown_grp3,
4562 &gn_trg_shutdown_grp3_mux),
4563 FUNCTION("i2c0", i2c0_grp, &i2c0_grp_mux),
4564 FUNCTION("i2c1", i2c1_grp, &i2c1_grp_mux),
4565 FUNCTION("i2s0", i2s0_grp, &i2s0_grp_mux),
4566 FUNCTION("i2s1_basic", i2s1_basic_grp, &i2s1_basic_grp_mux),
4567 FUNCTION("i2s1_rxd0_m0", i2s1_rxd0_grp0, &i2s1_rxd0_grp0_mux),
4568 FUNCTION("i2s1_rxd0_m1", i2s1_rxd0_grp1, &i2s1_rxd0_grp1_mux),
4569 FUNCTION("i2s1_rxd0_m2", i2s1_rxd0_grp2, &i2s1_rxd0_grp2_mux),
4570 FUNCTION("i2s1_rxd0_m3", i2s1_rxd0_grp3, &i2s1_rxd0_grp3_mux),
4571 FUNCTION("i2s1_rxd0_m4", i2s1_rxd0_grp4, &i2s1_rxd0_grp4_mux),
4572 FUNCTION("i2s1_rxd1_m0", i2s1_rxd1_grp0, &i2s1_rxd1_grp0_mux),
4573 FUNCTION("i2s1_rxd1_m1", i2s1_rxd1_grp1, &i2s1_rxd1_grp1_mux),
4574 FUNCTION("i2s1_rxd1_m2", i2s1_rxd1_grp2, &i2s1_rxd1_grp2_mux),
4575 FUNCTION("i2s1_rxd1_m3", i2s1_rxd1_grp3, &i2s1_rxd1_grp3_mux),
4576 FUNCTION("i2s1_rxd1_m4", i2s1_rxd1_grp4, &i2s1_rxd1_grp4_mux),
4577 FUNCTION("jtag_jt_dbg_nsrst",
4578 jtag_jt_dbg_nsrst_grp,
4579 &jtag_jt_dbg_nsrst_grp_mux),
4580 FUNCTION("jtag_ntrst_m0", jtag_ntrst_grp0, &jtag_ntrst_grp0_mux),
4581 FUNCTION("jtag_ntrst_m1", jtag_ntrst_grp1, &jtag_ntrst_grp1_mux),
4582 FUNCTION("jtag_swdiotms_m0",
4583 jtag_swdiotms_grp0,
4584 &jtag_swdiotms_grp0_mux),
4585 FUNCTION("jtag_swdiotms_m1",
4586 jtag_swdiotms_grp1,
4587 &jtag_swdiotms_grp1_mux),
4588 FUNCTION("jtag_tck_m0", jtag_tck_grp0, &jtag_tck_grp0_mux),
4589 FUNCTION("jtag_tck_m1", jtag_tck_grp1, &jtag_tck_grp1_mux),
4590 FUNCTION("jtag_tdi_m0", jtag_tdi_grp0, &jtag_tdi_grp0_mux),
4591 FUNCTION("jtag_tdi_m1", jtag_tdi_grp1, &jtag_tdi_grp1_mux),
4592 FUNCTION("jtag_tdo_m0", jtag_tdo_grp0, &jtag_tdo_grp0_mux),
4593 FUNCTION("jtag_tdo_m1", jtag_tdo_grp1, &jtag_tdo_grp1_mux),
4594 FUNCTION("ks_kas_spi_m0", ks_kas_spi_grp0, &ks_kas_spi_grp0_mux),
4595 FUNCTION("ld_ldd", ld_ldd_grp, &ld_ldd_grp_mux),
4596 FUNCTION("ld_ldd_16bit", ld_ldd_16bit_grp, &ld_ldd_16bit_grp_mux),
4597 FUNCTION("ld_ldd_fck", ld_ldd_fck_grp, &ld_ldd_fck_grp_mux),
4598 FUNCTION("ld_ldd_lck", ld_ldd_lck_grp, &ld_ldd_lck_grp_mux),
4599 FUNCTION("lr_lcdrom", lr_lcdrom_grp, &lr_lcdrom_grp_mux),
4600 FUNCTION("lvds_analog", lvds_analog_grp, &lvds_analog_grp_mux),
4601 FUNCTION("nd_df", nd_df_grp, &nd_df_grp_mux),
4602 FUNCTION("nd_df_nowp", nd_df_nowp_grp, &nd_df_nowp_grp_mux),
4603 FUNCTION("ps", ps_grp, &ps_grp_mux),
4604 FUNCTION("pwc_core_on", pwc_core_on_grp, &pwc_core_on_grp_mux),
4605 FUNCTION("pwc_ext_on", pwc_ext_on_grp, &pwc_ext_on_grp_mux),
4606 FUNCTION("pwc_gpio3_clk", pwc_gpio3_clk_grp, &pwc_gpio3_clk_grp_mux),
4607 FUNCTION("pwc_io_on", pwc_io_on_grp, &pwc_io_on_grp_mux),
4608 FUNCTION("pwc_lowbatt_b_m0",
4609 pwc_lowbatt_b_grp0,
4610 &pwc_lowbatt_b_grp0_mux),
4611 FUNCTION("pwc_mem_on", pwc_mem_on_grp, &pwc_mem_on_grp_mux),
4612 FUNCTION("pwc_on_key_b_m0",
4613 pwc_on_key_b_grp0,
4614 &pwc_on_key_b_grp0_mux),
4615 FUNCTION("pwc_wakeup_src0",
4616 pwc_wakeup_src0_grp,
4617 &pwc_wakeup_src0_grp_mux),
4618 FUNCTION("pwc_wakeup_src1",
4619 pwc_wakeup_src1_grp,
4620 &pwc_wakeup_src1_grp_mux),
4621 FUNCTION("pwc_wakeup_src2",
4622 pwc_wakeup_src2_grp,
4623 &pwc_wakeup_src2_grp_mux),
4624 FUNCTION("pwc_wakeup_src3",
4625 pwc_wakeup_src3_grp,
4626 &pwc_wakeup_src3_grp_mux),
4627 FUNCTION("pw_cko0_m0", pw_cko0_grp0, &pw_cko0_grp0_mux),
4628 FUNCTION("pw_cko0_m1", pw_cko0_grp1, &pw_cko0_grp1_mux),
4629 FUNCTION("pw_cko0_m2", pw_cko0_grp2, &pw_cko0_grp2_mux),
4630 FUNCTION("pw_cko0_m3", pw_cko0_grp3, &pw_cko0_grp3_mux),
4631 FUNCTION("pw_cko1_m0", pw_cko1_grp0, &pw_cko1_grp0_mux),
4632 FUNCTION("pw_cko1_m1", pw_cko1_grp1, &pw_cko1_grp1_mux),
4633 FUNCTION("pw_cko1_m2", pw_cko1_grp2, &pw_cko1_grp2_mux),
4634 FUNCTION("pw_i2s01_clk_m0",
4635 pw_i2s01_clk_grp0,
4636 &pw_i2s01_clk_grp0_mux),
4637 FUNCTION("pw_i2s01_clk_m1",
4638 pw_i2s01_clk_grp1,
4639 &pw_i2s01_clk_grp1_mux),
4640 FUNCTION("pw_i2s01_clk_m2",
4641 pw_i2s01_clk_grp2,
4642 &pw_i2s01_clk_grp2_mux),
4643 FUNCTION("pw_pwm0_m0", pw_pwm0_grp0, &pw_pwm0_grp0_mux),
4644 FUNCTION("pw_pwm0_m1", pw_pwm0_grp1, &pw_pwm0_grp1_mux),
4645 FUNCTION("pw_pwm1_m0", pw_pwm1_grp0, &pw_pwm1_grp0_mux),
4646 FUNCTION("pw_pwm1_m1", pw_pwm1_grp1, &pw_pwm1_grp1_mux),
4647 FUNCTION("pw_pwm1_m2", pw_pwm1_grp2, &pw_pwm1_grp2_mux),
4648 FUNCTION("pw_pwm2_m0", pw_pwm2_grp0, &pw_pwm2_grp0_mux),
4649 FUNCTION("pw_pwm2_m1", pw_pwm2_grp1, &pw_pwm2_grp1_mux),
4650 FUNCTION("pw_pwm2_m2", pw_pwm2_grp2, &pw_pwm2_grp2_mux),
4651 FUNCTION("pw_pwm3_m0", pw_pwm3_grp0, &pw_pwm3_grp0_mux),
4652 FUNCTION("pw_pwm3_m1", pw_pwm3_grp1, &pw_pwm3_grp1_mux),
4653 FUNCTION("pw_pwm_cpu_vol_m0",
4654 pw_pwm_cpu_vol_grp0,
4655 &pw_pwm_cpu_vol_grp0_mux),
4656 FUNCTION("pw_pwm_cpu_vol_m1",
4657 pw_pwm_cpu_vol_grp1,
4658 &pw_pwm_cpu_vol_grp1_mux),
4659 FUNCTION("pw_pwm_cpu_vol_m2",
4660 pw_pwm_cpu_vol_grp2,
4661 &pw_pwm_cpu_vol_grp2_mux),
4662 FUNCTION("pw_backlight_m0",
4663 pw_backlight_grp0,
4664 &pw_backlight_grp0_mux),
4665 FUNCTION("pw_backlight_m1",
4666 pw_backlight_grp1,
4667 &pw_backlight_grp1_mux),
4668 FUNCTION("rg_eth_mac", rg_eth_mac_grp, &rg_eth_mac_grp_mux),
4669 FUNCTION("rg_gmac_phy_intr_n",
4670 rg_gmac_phy_intr_n_grp,
4671 &rg_gmac_phy_intr_n_grp_mux),
4672 FUNCTION("rg_rgmii_mac", rg_rgmii_mac_grp, &rg_rgmii_mac_grp_mux),
4673 FUNCTION("rg_rgmii_phy_ref_clk_m0",
4674 rg_rgmii_phy_ref_clk_grp0,
4675 &rg_rgmii_phy_ref_clk_grp0_mux),
4676 FUNCTION("rg_rgmii_phy_ref_clk_m1",
4677 rg_rgmii_phy_ref_clk_grp1,
4678 &rg_rgmii_phy_ref_clk_grp1_mux),
4679 FUNCTION("sd0", sd0_grp, &sd0_grp_mux),
4680 FUNCTION("sd0_4bit", sd0_4bit_grp, &sd0_4bit_grp_mux),
4681 FUNCTION("sd1", sd1_grp, &sd1_grp_mux),
4682 FUNCTION("sd1_4bit_m0", sd1_4bit_grp0, &sd1_4bit_grp0_mux),
4683 FUNCTION("sd1_4bit_m1", sd1_4bit_grp1, &sd1_4bit_grp1_mux),
4684 FUNCTION("sd2_basic", sd2_basic_grp, &sd2_basic_grp_mux),
4685 FUNCTION("sd2_cdb_m0", sd2_cdb_grp0, &sd2_cdb_grp0_mux),
4686 FUNCTION("sd2_cdb_m1", sd2_cdb_grp1, &sd2_cdb_grp1_mux),
4687 FUNCTION("sd2_wpb_m0", sd2_wpb_grp0, &sd2_wpb_grp0_mux),
4688 FUNCTION("sd2_wpb_m1", sd2_wpb_grp1, &sd2_wpb_grp1_mux),
4689 FUNCTION("sd3", sd3_grp, &sd3_grp_mux),
4690 FUNCTION("sd5", sd5_grp, &sd5_grp_mux),
4691 FUNCTION("sd6_m0", sd6_grp0, &sd6_grp0_mux),
4692 FUNCTION("sd6_m1", sd6_grp1, &sd6_grp1_mux),
4693 FUNCTION("sp0_ext_ldo_on",
4694 sp0_ext_ldo_on_grp,
4695 &sp0_ext_ldo_on_grp_mux),
4696 FUNCTION("sp0_qspi", sp0_qspi_grp, &sp0_qspi_grp_mux),
4697 FUNCTION("sp1_spi", sp1_spi_grp, &sp1_spi_grp_mux),
4698 FUNCTION("tpiu_trace", tpiu_trace_grp, &tpiu_trace_grp_mux),
4699 FUNCTION("uart0", uart0_grp, &uart0_grp_mux),
4700 FUNCTION("uart0_nopause", uart0_nopause_grp, &uart0_nopause_grp_mux),
4701 FUNCTION("uart1", uart1_grp, &uart1_grp_mux),
4702 FUNCTION("uart2_cts_m0", uart2_cts_grp0, &uart2_cts_grp0_mux),
4703 FUNCTION("uart2_cts_m1", uart2_cts_grp1, &uart2_cts_grp1_mux),
4704 FUNCTION("uart2_rts_m0", uart2_rts_grp0, &uart2_rts_grp0_mux),
4705 FUNCTION("uart2_rts_m1", uart2_rts_grp1, &uart2_rts_grp1_mux),
4706 FUNCTION("uart2_rxd_m0", uart2_rxd_grp0, &uart2_rxd_grp0_mux),
4707 FUNCTION("uart2_rxd_m1", uart2_rxd_grp1, &uart2_rxd_grp1_mux),
4708 FUNCTION("uart2_rxd_m2", uart2_rxd_grp2, &uart2_rxd_grp2_mux),
4709 FUNCTION("uart2_txd_m0", uart2_txd_grp0, &uart2_txd_grp0_mux),
4710 FUNCTION("uart2_txd_m1", uart2_txd_grp1, &uart2_txd_grp1_mux),
4711 FUNCTION("uart2_txd_m2", uart2_txd_grp2, &uart2_txd_grp2_mux),
4712 FUNCTION("uart3_cts_m0", uart3_cts_grp0, &uart3_cts_grp0_mux),
4713 FUNCTION("uart3_cts_m1", uart3_cts_grp1, &uart3_cts_grp1_mux),
4714 FUNCTION("uart3_cts_m2", uart3_cts_grp2, &uart3_cts_grp2_mux),
4715 FUNCTION("uart3_rts_m0", uart3_rts_grp0, &uart3_rts_grp0_mux),
4716 FUNCTION("uart3_rts_m1", uart3_rts_grp1, &uart3_rts_grp1_mux),
4717 FUNCTION("uart3_rts_m2", uart3_rts_grp2, &uart3_rts_grp2_mux),
4718 FUNCTION("uart3_rxd_m0", uart3_rxd_grp0, &uart3_rxd_grp0_mux),
4719 FUNCTION("uart3_rxd_m1", uart3_rxd_grp1, &uart3_rxd_grp1_mux),
4720 FUNCTION("uart3_rxd_m2", uart3_rxd_grp2, &uart3_rxd_grp2_mux),
4721 FUNCTION("uart3_txd_m0", uart3_txd_grp0, &uart3_txd_grp0_mux),
4722 FUNCTION("uart3_txd_m1", uart3_txd_grp1, &uart3_txd_grp1_mux),
4723 FUNCTION("uart3_txd_m2", uart3_txd_grp2, &uart3_txd_grp2_mux),
4724 FUNCTION("uart4_basic", uart4_basic_grp, &uart4_basic_grp_mux),
4725 FUNCTION("uart4_cts_m0", uart4_cts_grp0, &uart4_cts_grp0_mux),
4726 FUNCTION("uart4_cts_m1", uart4_cts_grp1, &uart4_cts_grp1_mux),
4727 FUNCTION("uart4_cts_m2", uart4_cts_grp2, &uart4_cts_grp2_mux),
4728 FUNCTION("uart4_rts_m0", uart4_rts_grp0, &uart4_rts_grp0_mux),
4729 FUNCTION("uart4_rts_m1", uart4_rts_grp1, &uart4_rts_grp1_mux),
4730 FUNCTION("uart4_rts_m2", uart4_rts_grp2, &uart4_rts_grp2_mux),
4731 FUNCTION("usb0_drvvbus_m0",
4732 usb0_drvvbus_grp0,
4733 &usb0_drvvbus_grp0_mux),
4734 FUNCTION("usb0_drvvbus_m1",
4735 usb0_drvvbus_grp1,
4736 &usb0_drvvbus_grp1_mux),
4737 FUNCTION("usb1_drvvbus_m0",
4738 usb1_drvvbus_grp0,
4739 &usb1_drvvbus_grp0_mux),
4740 FUNCTION("usb1_drvvbus_m1",
4741 usb1_drvvbus_grp1,
4742 &usb1_drvvbus_grp1_mux),
4743 FUNCTION("visbus_dout", visbus_dout_grp, &visbus_dout_grp_mux),
4744 FUNCTION("vi_vip1", vi_vip1_grp, &vi_vip1_grp_mux),
4745 FUNCTION("vi_vip1_ext", vi_vip1_ext_grp, &vi_vip1_ext_grp_mux),
4746 FUNCTION("vi_vip1_low8bit",
4747 vi_vip1_low8bit_grp,
4748 &vi_vip1_low8bit_grp_mux),
4749 FUNCTION("vi_vip1_high8bit",
4750 vi_vip1_high8bit_grp,
4751 &vi_vip1_high8bit_grp_mux),
4752 };
4753
4754 struct atlas7_pinctrl_data atlas7_ioc_data = {
4755 .pads = (struct pinctrl_pin_desc *)atlas7_ioc_pads,
4756 .pads_cnt = ARRAY_SIZE(atlas7_ioc_pads),
4757 .grps = (struct atlas7_pin_group *)altas7_pin_groups,
4758 .grps_cnt = ARRAY_SIZE(altas7_pin_groups),
4759 .funcs = (struct atlas7_pmx_func *)atlas7_pmx_functions,
4760 .funcs_cnt = ARRAY_SIZE(atlas7_pmx_functions),
4761 .confs = (struct atlas7_pad_config *)atlas7_ioc_pad_confs,
4762 .confs_cnt = ARRAY_SIZE(atlas7_ioc_pad_confs),
4763 };
4764
4765 /* Simple map data structure */
4766 struct map_data {
4767 u8 idx;
4768 u8 data;
4769 };
4770
4771 /**
4772 * struct atlas7_pull_info - Atlas7 Pad pull info
4773 * @type:The type of this Pad.
4774 * @mask:The mas value of this pin's pull bits.
4775 * @v2s: The map of pull register value to pull status.
4776 * @s2v: The map of pull status to pull register value.
4777 */
4778 struct atlas7_pull_info {
4779 u8 pad_type;
4780 u8 mask;
4781 const struct map_data *v2s;
4782 const struct map_data *s2v;
4783 };
4784
4785 /* Pull Register value map to status */
4786 static const struct map_data p4we_pull_v2s[] = {
4787 { P4WE_PULL_UP, PULL_UP },
4788 { P4WE_HIGH_HYSTERESIS, HIGH_HYSTERESIS },
4789 { P4WE_HIGH_Z, HIGH_Z },
4790 { P4WE_PULL_DOWN, PULL_DOWN },
4791 };
4792
4793 static const struct map_data p16st_pull_v2s[] = {
4794 { P16ST_PULL_UP, PULL_UP },
4795 { PD, PULL_UNKNOWN },
4796 { P16ST_HIGH_Z, HIGH_Z },
4797 { P16ST_PULL_DOWN, PULL_DOWN },
4798 };
4799
4800 static const struct map_data pm31_pull_v2s[] = {
4801 { PM31_PULL_DISABLED, PULL_DOWN },
4802 { PM31_PULL_ENABLED, PULL_UP },
4803 };
4804
4805 static const struct map_data pangd_pull_v2s[] = {
4806 { PANGD_PULL_UP, PULL_UP },
4807 { PD, PULL_UNKNOWN },
4808 { PANGD_HIGH_Z, HIGH_Z },
4809 { PANGD_PULL_DOWN, PULL_DOWN },
4810 };
4811
4812 /* Pull status map to register value */
4813 static const struct map_data p4we_pull_s2v[] = {
4814 { PULL_UP, P4WE_PULL_UP },
4815 { HIGH_HYSTERESIS, P4WE_HIGH_HYSTERESIS },
4816 { HIGH_Z, P4WE_HIGH_Z },
4817 { PULL_DOWN, P4WE_PULL_DOWN },
4818 { PULL_DISABLE, -1 },
4819 { PULL_ENABLE, -1 },
4820 };
4821
4822 static const struct map_data p16st_pull_s2v[] = {
4823 { PULL_UP, P16ST_PULL_UP },
4824 { HIGH_HYSTERESIS, -1 },
4825 { HIGH_Z, P16ST_HIGH_Z },
4826 { PULL_DOWN, P16ST_PULL_DOWN },
4827 { PULL_DISABLE, -1 },
4828 { PULL_ENABLE, -1 },
4829 };
4830
4831 static const struct map_data pm31_pull_s2v[] = {
4832 { PULL_UP, PM31_PULL_ENABLED },
4833 { HIGH_HYSTERESIS, -1 },
4834 { HIGH_Z, -1 },
4835 { PULL_DOWN, PM31_PULL_DISABLED },
4836 { PULL_DISABLE, -1 },
4837 { PULL_ENABLE, -1 },
4838 };
4839
4840 static const struct map_data pangd_pull_s2v[] = {
4841 { PULL_UP, PANGD_PULL_UP },
4842 { HIGH_HYSTERESIS, -1 },
4843 { HIGH_Z, PANGD_HIGH_Z },
4844 { PULL_DOWN, PANGD_PULL_DOWN },
4845 { PULL_DISABLE, -1 },
4846 { PULL_ENABLE, -1 },
4847 };
4848
4849 static const struct atlas7_pull_info atlas7_pull_map[] = {
4850 { PAD_T_4WE_PD, P4WE_PULL_MASK, p4we_pull_v2s, p4we_pull_s2v },
4851 { PAD_T_4WE_PU, P4WE_PULL_MASK, p4we_pull_v2s, p4we_pull_s2v },
4852 { PAD_T_16ST, P16ST_PULL_MASK, p16st_pull_v2s, p16st_pull_s2v },
4853 { PAD_T_M31_0204_PD, PM31_PULL_MASK, pm31_pull_v2s, pm31_pull_s2v },
4854 { PAD_T_M31_0204_PU, PM31_PULL_MASK, pm31_pull_v2s, pm31_pull_s2v },
4855 { PAD_T_M31_0610_PD, PM31_PULL_MASK, pm31_pull_v2s, pm31_pull_s2v },
4856 { PAD_T_M31_0610_PU, PM31_PULL_MASK, pm31_pull_v2s, pm31_pull_s2v },
4857 { PAD_T_AD, PANGD_PULL_MASK, pangd_pull_v2s, pangd_pull_s2v },
4858 };
4859
4860 /**
4861 * struct atlas7_ds_ma_info - Atlas7 Pad DriveStrength & currents info
4862 * @ma: The Drive Strength in current value .
4863 * @ds_16st: The correspond raw value of 16st pad.
4864 * @ds_4we: The correspond raw value of 4we pad.
4865 * @ds_0204m31: The correspond raw value of 0204m31 pad.
4866 * @ds_0610m31: The correspond raw value of 0610m31 pad.
4867 */
4868 struct atlas7_ds_ma_info {
4869 u32 ma;
4870 u32 ds_16st;
4871 u32 ds_4we;
4872 u32 ds_0204m31;
4873 u32 ds_0610m31;
4874 };
4875
4876 static const struct atlas7_ds_ma_info atlas7_ma2ds_map[] = {
4877 { 2, DS_16ST_0, DS_4WE_0, DS_M31_0, DS_NULL },
4878 { 4, DS_16ST_1, DS_NULL, DS_M31_1, DS_NULL },
4879 { 6, DS_16ST_2, DS_NULL, DS_NULL, DS_M31_0 },
4880 { 8, DS_16ST_3, DS_4WE_1, DS_NULL, DS_NULL },
4881 { 10, DS_16ST_4, DS_NULL, DS_NULL, DS_M31_1 },
4882 { 12, DS_16ST_5, DS_NULL, DS_NULL, DS_NULL },
4883 { 14, DS_16ST_6, DS_NULL, DS_NULL, DS_NULL },
4884 { 16, DS_16ST_7, DS_4WE_2, DS_NULL, DS_NULL },
4885 { 18, DS_16ST_8, DS_NULL, DS_NULL, DS_NULL },
4886 { 20, DS_16ST_9, DS_NULL, DS_NULL, DS_NULL },
4887 { 22, DS_16ST_10, DS_NULL, DS_NULL, DS_NULL },
4888 { 24, DS_16ST_11, DS_NULL, DS_NULL, DS_NULL },
4889 { 26, DS_16ST_12, DS_NULL, DS_NULL, DS_NULL },
4890 { 28, DS_16ST_13, DS_4WE_3, DS_NULL, DS_NULL },
4891 { 30, DS_16ST_14, DS_NULL, DS_NULL, DS_NULL },
4892 { 32, DS_16ST_15, DS_NULL, DS_NULL, DS_NULL },
4893 };
4894
4895 /**
4896 * struct atlas7_ds_info - Atlas7 Pad DriveStrength info
4897 * @type: The type of this Pad.
4898 * @mask: The mask value of this pin's pull bits.
4899 * @imval: The immediate value of drives trength register.
4900 */
4901 struct atlas7_ds_info {
4902 u8 type;
4903 u8 mask;
4904 u8 imval;
4905 u8 reserved;
4906 };
4907
4908 static const struct atlas7_ds_info atlas7_ds_map[] = {
4909 { PAD_T_4WE_PD, DS_2BIT_MASK, DS_2BIT_IM_VAL },
4910 { PAD_T_4WE_PU, DS_2BIT_MASK, DS_2BIT_IM_VAL },
4911 { PAD_T_16ST, DS_4BIT_MASK, DS_4BIT_IM_VAL },
4912 { PAD_T_M31_0204_PD, DS_1BIT_MASK, DS_1BIT_IM_VAL },
4913 { PAD_T_M31_0204_PU, DS_1BIT_MASK, DS_1BIT_IM_VAL },
4914 { PAD_T_M31_0610_PD, DS_1BIT_MASK, DS_1BIT_IM_VAL },
4915 { PAD_T_M31_0610_PU, DS_1BIT_MASK, DS_1BIT_IM_VAL },
4916 { PAD_T_AD, DS_NULL, DS_NULL },
4917 };
4918
atlas7_pin_to_bank(u32 pin)4919 static inline u32 atlas7_pin_to_bank(u32 pin)
4920 {
4921 return (pin >= ATLAS7_PINCTRL_BANK_0_PINS) ? 1 : 0;
4922 }
4923
atlas7_pmx_get_funcs_count(struct pinctrl_dev * pctldev)4924 static int atlas7_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
4925 {
4926 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
4927
4928 return pmx->pctl_data->funcs_cnt;
4929 }
4930
atlas7_pmx_get_func_name(struct pinctrl_dev * pctldev,u32 selector)4931 static const char *atlas7_pmx_get_func_name(struct pinctrl_dev *pctldev,
4932 u32 selector)
4933 {
4934 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
4935
4936 return pmx->pctl_data->funcs[selector].name;
4937 }
4938
atlas7_pmx_get_func_groups(struct pinctrl_dev * pctldev,u32 selector,const char * const ** groups,u32 * const num_groups)4939 static int atlas7_pmx_get_func_groups(struct pinctrl_dev *pctldev,
4940 u32 selector, const char * const **groups,
4941 u32 * const num_groups)
4942 {
4943 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
4944
4945 *groups = pmx->pctl_data->funcs[selector].groups;
4946 *num_groups = pmx->pctl_data->funcs[selector].num_groups;
4947
4948 return 0;
4949 }
4950
__atlas7_pmx_pin_input_disable_set(struct atlas7_pmx * pmx,const struct atlas7_pad_mux * mux)4951 static void __atlas7_pmx_pin_input_disable_set(struct atlas7_pmx *pmx,
4952 const struct atlas7_pad_mux *mux)
4953 {
4954 /* Set Input Disable to avoid input glitches
4955 *
4956 * All Input-Disable Control registers are located on IOCRTC.
4957 * So the regs bank is always 0.
4958 *
4959 */
4960 if (mux->dinput_reg && mux->dinput_val_reg) {
4961 writel(DI_MASK << mux->dinput_bit,
4962 pmx->regs[BANK_DS] + CLR_REG(mux->dinput_reg));
4963 writel(DI_DISABLE << mux->dinput_bit,
4964 pmx->regs[BANK_DS] + mux->dinput_reg);
4965
4966
4967 writel(DIV_MASK << mux->dinput_val_bit,
4968 pmx->regs[BANK_DS] + CLR_REG(mux->dinput_val_reg));
4969 writel(DIV_DISABLE << mux->dinput_val_bit,
4970 pmx->regs[BANK_DS] + mux->dinput_val_reg);
4971 }
4972 }
4973
__atlas7_pmx_pin_input_disable_clr(struct atlas7_pmx * pmx,const struct atlas7_pad_mux * mux)4974 static void __atlas7_pmx_pin_input_disable_clr(struct atlas7_pmx *pmx,
4975 const struct atlas7_pad_mux *mux)
4976 {
4977 /* Clear Input Disable to avoid input glitches */
4978 if (mux->dinput_reg && mux->dinput_val_reg) {
4979 writel(DI_MASK << mux->dinput_bit,
4980 pmx->regs[BANK_DS] + CLR_REG(mux->dinput_reg));
4981 writel(DI_ENABLE << mux->dinput_bit,
4982 pmx->regs[BANK_DS] + mux->dinput_reg);
4983
4984 writel(DIV_MASK << mux->dinput_val_bit,
4985 pmx->regs[BANK_DS] + CLR_REG(mux->dinput_val_reg));
4986 writel(DIV_ENABLE << mux->dinput_val_bit,
4987 pmx->regs[BANK_DS] + mux->dinput_val_reg);
4988 }
4989 }
4990
__atlas7_pmx_pin_ad_sel(struct atlas7_pmx * pmx,struct atlas7_pad_config * conf,u32 bank,u32 ad_sel)4991 static int __atlas7_pmx_pin_ad_sel(struct atlas7_pmx *pmx,
4992 struct atlas7_pad_config *conf,
4993 u32 bank, u32 ad_sel)
4994 {
4995 unsigned long regv;
4996
4997 /* Write to clear register to clear A/D selector */
4998 writel(ANA_CLEAR_MASK << conf->ad_ctrl_bit,
4999 pmx->regs[bank] + CLR_REG(conf->ad_ctrl_reg));
5000
5001 /* Set target pad A/D selector */
5002 regv = readl(pmx->regs[bank] + conf->ad_ctrl_reg);
5003 regv &= ~(ANA_CLEAR_MASK << conf->ad_ctrl_bit);
5004 writel(regv | (ad_sel << conf->ad_ctrl_bit),
5005 pmx->regs[bank] + conf->ad_ctrl_reg);
5006
5007 regv = readl(pmx->regs[bank] + conf->ad_ctrl_reg);
5008 pr_debug("bank:%d reg:0x%04x val:0x%08lx\n",
5009 bank, conf->ad_ctrl_reg, regv);
5010 return 0;
5011 }
5012
__atlas7_pmx_pin_analog_enable(struct atlas7_pmx * pmx,struct atlas7_pad_config * conf,u32 bank)5013 static int __atlas7_pmx_pin_analog_enable(struct atlas7_pmx *pmx,
5014 struct atlas7_pad_config *conf, u32 bank)
5015 {
5016 /* Only PAD_T_AD pins can change between Analogue&Digital */
5017 if (conf->type != PAD_T_AD)
5018 return -EINVAL;
5019
5020 return __atlas7_pmx_pin_ad_sel(pmx, conf, bank, 0);
5021 }
5022
__atlas7_pmx_pin_digital_enable(struct atlas7_pmx * pmx,struct atlas7_pad_config * conf,u32 bank)5023 static int __atlas7_pmx_pin_digital_enable(struct atlas7_pmx *pmx,
5024 struct atlas7_pad_config *conf, u32 bank)
5025 {
5026 /* Other type pads are always digital */
5027 if (conf->type != PAD_T_AD)
5028 return 0;
5029
5030 return __atlas7_pmx_pin_ad_sel(pmx, conf, bank, 1);
5031 }
5032
__atlas7_pmx_pin_enable(struct atlas7_pmx * pmx,u32 pin,u32 func)5033 static int __atlas7_pmx_pin_enable(struct atlas7_pmx *pmx,
5034 u32 pin, u32 func)
5035 {
5036 struct atlas7_pad_config *conf;
5037 u32 bank;
5038 int ret;
5039 unsigned long regv;
5040
5041 pr_debug("PMX DUMP ### pin#%d func:%d #### START >>>\n",
5042 pin, func);
5043
5044 /* Get this Pad's descriptor from PINCTRL */
5045 conf = &pmx->pctl_data->confs[pin];
5046 bank = atlas7_pin_to_bank(pin);
5047
5048 /* Just enable the analog function of this pad */
5049 if (FUNC_ANALOGUE == func) {
5050 ret = __atlas7_pmx_pin_analog_enable(pmx, conf, bank);
5051 if (ret)
5052 dev_err(pmx->dev,
5053 "Convert pad#%d to analog failed, ret=%d\n",
5054 pin, ret);
5055 return ret;
5056 }
5057
5058 /* Set Pads from analog to digital */
5059 ret = __atlas7_pmx_pin_digital_enable(pmx, conf, bank);
5060 if (ret) {
5061 dev_err(pmx->dev,
5062 "Convert pad#%d to digital failed, ret=%d\n",
5063 pin, ret);
5064 return ret;
5065 }
5066
5067 /* Write to clear register to clear current function */
5068 writel(FUNC_CLEAR_MASK << conf->mux_bit,
5069 pmx->regs[bank] + CLR_REG(conf->mux_reg));
5070
5071 /* Set target pad mux function */
5072 regv = readl(pmx->regs[bank] + conf->mux_reg);
5073 regv &= ~(FUNC_CLEAR_MASK << conf->mux_bit);
5074 writel(regv | (func << conf->mux_bit),
5075 pmx->regs[bank] + conf->mux_reg);
5076
5077 regv = readl(pmx->regs[bank] + conf->mux_reg);
5078 pr_debug("bank:%d reg:0x%04x val:0x%08lx\n",
5079 bank, conf->mux_reg, regv);
5080
5081 return 0;
5082 }
5083
atlas7_pmx_set_mux(struct pinctrl_dev * pctldev,u32 func_selector,u32 group_selector)5084 static int atlas7_pmx_set_mux(struct pinctrl_dev *pctldev,
5085 u32 func_selector, u32 group_selector)
5086 {
5087 int idx, ret;
5088 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
5089 struct atlas7_pmx_func *pmx_func;
5090 struct atlas7_pin_group *pin_grp;
5091 const struct atlas7_grp_mux *grp_mux;
5092 const struct atlas7_pad_mux *mux;
5093
5094 pmx_func = &pmx->pctl_data->funcs[func_selector];
5095 pin_grp = &pmx->pctl_data->grps[group_selector];
5096
5097 pr_debug("PMX DUMP ### Function:[%s] Group:[%s] #### START >>>\n",
5098 pmx_func->name, pin_grp->name);
5099
5100 grp_mux = pmx_func->grpmux;
5101
5102 for (idx = 0; idx < grp_mux->pad_mux_count; idx++) {
5103 mux = &grp_mux->pad_mux_list[idx];
5104 __atlas7_pmx_pin_input_disable_set(pmx, mux);
5105 ret = __atlas7_pmx_pin_enable(pmx, mux->pin, mux->func);
5106 if (ret) {
5107 dev_err(pmx->dev,
5108 "FUNC:%s GRP:%s PIN#%d.%d failed, ret=%d\n",
5109 pmx_func->name, pin_grp->name,
5110 mux->pin, mux->func, ret);
5111 BUG_ON(1);
5112 }
5113 __atlas7_pmx_pin_input_disable_clr(pmx, mux);
5114 }
5115 pr_debug("PMX DUMP ### Function:[%s] Group:[%s] #### END <<<\n",
5116 pmx_func->name, pin_grp->name);
5117
5118 return 0;
5119 }
5120
convert_current_to_drive_strength(u32 type,u32 ma)5121 static u32 convert_current_to_drive_strength(u32 type, u32 ma)
5122 {
5123 int idx;
5124
5125 for (idx = 0; idx < ARRAY_SIZE(atlas7_ma2ds_map); idx++) {
5126 if (atlas7_ma2ds_map[idx].ma != ma)
5127 continue;
5128
5129 if (type == PAD_T_4WE_PD || type == PAD_T_4WE_PU)
5130 return atlas7_ma2ds_map[idx].ds_4we;
5131 else if (type == PAD_T_16ST)
5132 return atlas7_ma2ds_map[idx].ds_16st;
5133 else if (type == PAD_T_M31_0204_PD || type == PAD_T_M31_0204_PU)
5134 return atlas7_ma2ds_map[idx].ds_0204m31;
5135 else if (type == PAD_T_M31_0610_PD || type == PAD_T_M31_0610_PU)
5136 return atlas7_ma2ds_map[idx].ds_0610m31;
5137 }
5138
5139 return DS_NULL;
5140 }
5141
altas7_pinctrl_set_pull_sel(struct pinctrl_dev * pctldev,u32 pin,u32 sel)5142 static int altas7_pinctrl_set_pull_sel(struct pinctrl_dev *pctldev,
5143 u32 pin, u32 sel)
5144 {
5145 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
5146 struct atlas7_pad_config *conf = &pmx->pctl_data->confs[pin];
5147 const struct atlas7_pull_info *pull_info;
5148 u32 bank;
5149 unsigned long regv;
5150 void __iomem *pull_sel_reg;
5151
5152 bank = atlas7_pin_to_bank(pin);
5153 pull_info = &atlas7_pull_map[conf->type];
5154 pull_sel_reg = pmx->regs[bank] + conf->pupd_reg;
5155
5156 /* Retrieve correspond register value from table by sel */
5157 regv = pull_info->s2v[sel].data & pull_info->mask;
5158
5159 /* Clear & Set new value to pull register */
5160 writel(pull_info->mask << conf->pupd_bit, CLR_REG(pull_sel_reg));
5161 writel(regv << conf->pupd_bit, pull_sel_reg);
5162
5163 pr_debug("PIN_CFG ### SET PIN#%d PULL SELECTOR:%d == OK ####\n",
5164 pin, sel);
5165 return 0;
5166 }
5167
__altas7_pinctrl_set_drive_strength_sel(struct pinctrl_dev * pctldev,u32 pin,u32 sel)5168 static int __altas7_pinctrl_set_drive_strength_sel(struct pinctrl_dev *pctldev,
5169 u32 pin, u32 sel)
5170 {
5171 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
5172 struct atlas7_pad_config *conf = &pmx->pctl_data->confs[pin];
5173 const struct atlas7_ds_info *ds_info;
5174 u32 bank;
5175 void __iomem *ds_sel_reg;
5176
5177 ds_info = &atlas7_ds_map[conf->type];
5178 if (sel & (~(ds_info->mask)))
5179 goto unsupport;
5180
5181 bank = atlas7_pin_to_bank(pin);
5182 ds_sel_reg = pmx->regs[bank] + conf->drvstr_reg;
5183
5184 writel(ds_info->imval << conf->drvstr_bit, CLR_REG(ds_sel_reg));
5185 writel(sel << conf->drvstr_bit, ds_sel_reg);
5186
5187 return 0;
5188
5189 unsupport:
5190 pr_err("Pad#%d type[%d] doesn't support ds code[%d]!\n",
5191 pin, conf->type, sel);
5192 return -ENOTSUPP;
5193 }
5194
altas7_pinctrl_set_drive_strength_sel(struct pinctrl_dev * pctldev,u32 pin,u32 ma)5195 static int altas7_pinctrl_set_drive_strength_sel(struct pinctrl_dev *pctldev,
5196 u32 pin, u32 ma)
5197 {
5198 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
5199 struct atlas7_pad_config *conf = &pmx->pctl_data->confs[pin];
5200 u32 type = conf->type;
5201 u32 sel;
5202 int ret;
5203
5204 sel = convert_current_to_drive_strength(conf->type, ma);
5205 if (DS_NULL == sel) {
5206 pr_err("Pad#%d type[%d] doesn't support ds current[%d]!\n",
5207 pin, type, ma);
5208 return -ENOTSUPP;
5209 }
5210
5211 ret = __altas7_pinctrl_set_drive_strength_sel(pctldev,
5212 pin, sel);
5213 pr_debug("PIN_CFG ### SET PIN#%d DS:%d MA:%d == %s ####\n",
5214 pin, sel, ma, ret?"FAILED":"OK");
5215 return ret;
5216 }
5217
atlas7_pmx_gpio_request_enable(struct pinctrl_dev * pctldev,struct pinctrl_gpio_range * range,u32 pin)5218 static int atlas7_pmx_gpio_request_enable(struct pinctrl_dev *pctldev,
5219 struct pinctrl_gpio_range *range, u32 pin)
5220 {
5221 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
5222 u32 idx;
5223
5224 dev_dbg(pmx->dev,
5225 "atlas7_pmx_gpio_request_enable: pin=%d\n", pin);
5226 for (idx = 0; idx < range->npins; idx++) {
5227 if (pin == range->pins[idx])
5228 break;
5229 }
5230
5231 if (idx >= range->npins) {
5232 dev_err(pmx->dev,
5233 "The pin#%d could not be requested as GPIO!!\n",
5234 pin);
5235 return -EPERM;
5236 }
5237
5238 __atlas7_pmx_pin_enable(pmx, pin, FUNC_GPIO);
5239
5240 return 0;
5241 }
5242
5243 static struct pinmux_ops atlas7_pinmux_ops = {
5244 .get_functions_count = atlas7_pmx_get_funcs_count,
5245 .get_function_name = atlas7_pmx_get_func_name,
5246 .get_function_groups = atlas7_pmx_get_func_groups,
5247 .set_mux = atlas7_pmx_set_mux,
5248 .gpio_request_enable = atlas7_pmx_gpio_request_enable,
5249 };
5250
atlas7_pinctrl_get_groups_count(struct pinctrl_dev * pctldev)5251 static int atlas7_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
5252 {
5253 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
5254
5255 return pmx->pctl_data->grps_cnt;
5256 }
5257
atlas7_pinctrl_get_group_name(struct pinctrl_dev * pctldev,u32 group)5258 static const char *atlas7_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
5259 u32 group)
5260 {
5261 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
5262
5263 return pmx->pctl_data->grps[group].name;
5264 }
5265
atlas7_pinctrl_get_group_pins(struct pinctrl_dev * pctldev,u32 group,const u32 ** pins,u32 * num_pins)5266 static int atlas7_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
5267 u32 group, const u32 **pins, u32 *num_pins)
5268 {
5269 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
5270
5271 *num_pins = pmx->pctl_data->grps[group].num_pins;
5272 *pins = pmx->pctl_data->grps[group].pins;
5273
5274 return 0;
5275 }
5276
atlas7_pinctrl_dt_node_to_map(struct pinctrl_dev * pctldev,struct device_node * np_config,struct pinctrl_map ** map,u32 * num_maps)5277 static int atlas7_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
5278 struct device_node *np_config,
5279 struct pinctrl_map **map,
5280 u32 *num_maps)
5281 {
5282 return pinconf_generic_dt_node_to_map(pctldev, np_config, map,
5283 num_maps, PIN_MAP_TYPE_INVALID);
5284 }
5285
atlas7_pinctrl_dt_free_map(struct pinctrl_dev * pctldev,struct pinctrl_map * map,u32 num_maps)5286 static void atlas7_pinctrl_dt_free_map(struct pinctrl_dev *pctldev,
5287 struct pinctrl_map *map, u32 num_maps)
5288 {
5289 kfree(map);
5290 }
5291
5292 static const struct pinctrl_ops atlas7_pinctrl_ops = {
5293 .get_groups_count = atlas7_pinctrl_get_groups_count,
5294 .get_group_name = atlas7_pinctrl_get_group_name,
5295 .get_group_pins = atlas7_pinctrl_get_group_pins,
5296 .dt_node_to_map = atlas7_pinctrl_dt_node_to_map,
5297 .dt_free_map = atlas7_pinctrl_dt_free_map,
5298 };
5299
atlas7_pin_config_set(struct pinctrl_dev * pctldev,unsigned pin,unsigned long * configs,unsigned num_configs)5300 static int atlas7_pin_config_set(struct pinctrl_dev *pctldev,
5301 unsigned pin, unsigned long *configs,
5302 unsigned num_configs)
5303 {
5304 u16 param, arg;
5305 int idx, err;
5306
5307 for (idx = 0; idx < num_configs; idx++) {
5308 param = pinconf_to_config_param(configs[idx]);
5309 arg = pinconf_to_config_argument(configs[idx]);
5310
5311 pr_debug("PMX CFG###### ATLAS7 PIN#%d [%s] CONFIG PARAM:%d ARG:%d >>>>>\n",
5312 pin, atlas7_ioc_pads[pin].name, param, arg);
5313 switch (param) {
5314 case PIN_CONFIG_BIAS_PULL_UP:
5315 err = altas7_pinctrl_set_pull_sel(pctldev,
5316 pin, PULL_UP);
5317 if (err)
5318 return err;
5319 break;
5320
5321 case PIN_CONFIG_BIAS_PULL_DOWN:
5322 err = altas7_pinctrl_set_pull_sel(pctldev,
5323 pin, PULL_DOWN);
5324 if (err)
5325 return err;
5326 break;
5327
5328 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
5329 err = altas7_pinctrl_set_pull_sel(pctldev,
5330 pin, HIGH_HYSTERESIS);
5331 if (err)
5332 return err;
5333 break;
5334 case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
5335 err = altas7_pinctrl_set_pull_sel(pctldev,
5336 pin, HIGH_Z);
5337 if (err)
5338 return err;
5339 break;
5340
5341 case PIN_CONFIG_DRIVE_STRENGTH:
5342 err = altas7_pinctrl_set_drive_strength_sel(pctldev,
5343 pin, arg);
5344 if (err)
5345 return err;
5346 break;
5347 default:
5348 return -ENOTSUPP;
5349 }
5350 pr_debug("PMX CFG###### ATLAS7 PIN#%d [%s] CONFIG PARAM:%d ARG:%d <<<<\n",
5351 pin, atlas7_ioc_pads[pin].name, param, arg);
5352 }
5353
5354 return 0;
5355 }
5356
atlas7_pin_config_group_set(struct pinctrl_dev * pctldev,unsigned group,unsigned long * configs,unsigned num_configs)5357 static int atlas7_pin_config_group_set(struct pinctrl_dev *pctldev,
5358 unsigned group, unsigned long *configs,
5359 unsigned num_configs)
5360 {
5361 const unsigned *pins;
5362 unsigned npins;
5363 int i, ret;
5364
5365 ret = atlas7_pinctrl_get_group_pins(pctldev, group, &pins, &npins);
5366 if (ret)
5367 return ret;
5368 for (i = 0; i < npins; i++) {
5369 if (atlas7_pin_config_set(pctldev, pins[i],
5370 configs, num_configs))
5371 return -ENOTSUPP;
5372 }
5373 return 0;
5374 }
5375
5376 static const struct pinconf_ops atlas7_pinconf_ops = {
5377 .pin_config_set = atlas7_pin_config_set,
5378 .pin_config_group_set = atlas7_pin_config_group_set,
5379 .is_generic = true,
5380 };
5381
atlas7_pinmux_probe(struct platform_device * pdev)5382 static int atlas7_pinmux_probe(struct platform_device *pdev)
5383 {
5384 int ret, idx;
5385 struct atlas7_pmx *pmx;
5386 struct device_node *np = pdev->dev.of_node;
5387 u32 banks = ATLAS7_PINCTRL_REG_BANKS;
5388
5389 /* Create state holders etc for this driver */
5390 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
5391 if (!pmx)
5392 return -ENOMEM;
5393
5394 pmx->dev = &pdev->dev;
5395
5396 pmx->pctl_data = &atlas7_ioc_data;
5397 pmx->pctl_desc.name = "pinctrl-atlas7";
5398 pmx->pctl_desc.pins = pmx->pctl_data->pads;
5399 pmx->pctl_desc.npins = pmx->pctl_data->pads_cnt;
5400 pmx->pctl_desc.pctlops = &atlas7_pinctrl_ops;
5401 pmx->pctl_desc.pmxops = &atlas7_pinmux_ops;
5402 pmx->pctl_desc.confops = &atlas7_pinconf_ops;
5403
5404 for (idx = 0; idx < banks; idx++) {
5405 pmx->regs[idx] = of_iomap(np, idx);
5406 if (!pmx->regs[idx]) {
5407 dev_err(&pdev->dev,
5408 "can't map ioc bank#%d registers\n", idx);
5409 ret = -ENOMEM;
5410 goto unmap_io;
5411 }
5412 }
5413
5414 /* Now register the pin controller and all pins it handles */
5415 pmx->pctl = pinctrl_register(&pmx->pctl_desc, &pdev->dev, pmx);
5416 if (IS_ERR(pmx->pctl)) {
5417 dev_err(&pdev->dev, "could not register atlas7 pinmux driver\n");
5418 ret = PTR_ERR(pmx->pctl);
5419 goto unmap_io;
5420 }
5421
5422 platform_set_drvdata(pdev, pmx);
5423
5424 dev_info(&pdev->dev, "initialized atlas7 pinmux driver\n");
5425
5426 return 0;
5427
5428 unmap_io:
5429 for (idx = 0; idx < banks; idx++) {
5430 if (!pmx->regs[idx])
5431 break;
5432 iounmap(pmx->regs[idx]);
5433 }
5434
5435 return ret;
5436 }
5437
5438 #ifdef CONFIG_PM_SLEEP
atlas7_pinmux_suspend_noirq(struct device * dev)5439 static int atlas7_pinmux_suspend_noirq(struct device *dev)
5440 {
5441 struct atlas7_pmx *pmx = dev_get_drvdata(dev);
5442 struct atlas7_pad_status *status;
5443 struct atlas7_pad_config *conf;
5444 const struct atlas7_ds_info *ds_info;
5445 const struct atlas7_pull_info *pull_info;
5446 int idx;
5447 u32 bank;
5448 unsigned long regv;
5449
5450 for (idx = 0; idx < pmx->pctl_desc.npins; idx++) {
5451 /* Get this Pad's descriptor from PINCTRL */
5452 conf = &pmx->pctl_data->confs[idx];
5453 bank = atlas7_pin_to_bank(idx);
5454 status = &pmx->sleep_data[idx];
5455
5456 /* Save Function selector */
5457 regv = readl(pmx->regs[bank] + conf->mux_reg);
5458 status->func = (regv >> conf->mux_bit) & FUNC_CLEAR_MASK;
5459
5460 /* Check if Pad is in Analogue selector */
5461 if (conf->ad_ctrl_reg == -1)
5462 goto save_ds_sel;
5463
5464 regv = readl(pmx->regs[bank] + conf->ad_ctrl_reg);
5465 if (!(regv & (conf->ad_ctrl_bit << ANA_CLEAR_MASK)))
5466 status->func = FUNC_ANALOGUE;
5467
5468 save_ds_sel:
5469 if (conf->drvstr_reg == -1)
5470 goto save_pull_sel;
5471
5472 /* Save Drive Strength selector */
5473 ds_info = &atlas7_ds_map[conf->type];
5474 regv = readl(pmx->regs[bank] + conf->drvstr_reg);
5475 status->dstr = (regv >> conf->drvstr_bit) & ds_info->mask;
5476
5477 save_pull_sel:
5478 /* Save Pull selector */
5479 pull_info = &atlas7_pull_map[conf->type];
5480 regv = readl(pmx->regs[bank] + conf->pupd_reg);
5481 regv = (regv >> conf->pupd_bit) & pull_info->mask;
5482 status->pull = pull_info->v2s[regv].data;
5483 }
5484
5485 /*
5486 * Save disable input selector, this selector is not for Pin,
5487 * but for Mux function.
5488 */
5489 for (idx = 0; idx < NUM_OF_IN_DISABLE_REG; idx++) {
5490 pmx->status_ds[idx] = readl(pmx->regs[BANK_DS] +
5491 IN_DISABLE_0_REG_SET + 0x8 * idx);
5492 pmx->status_dsv[idx] = readl(pmx->regs[BANK_DS] +
5493 IN_DISABLE_VAL_0_REG_SET + 0x8 * idx);
5494 }
5495
5496 return 0;
5497 }
5498
atlas7_pinmux_resume_noirq(struct device * dev)5499 static int atlas7_pinmux_resume_noirq(struct device *dev)
5500 {
5501 struct atlas7_pmx *pmx = dev_get_drvdata(dev);
5502 struct atlas7_pad_status *status;
5503 struct atlas7_pad_config *conf;
5504 int idx;
5505 u32 bank;
5506
5507 for (idx = 0; idx < pmx->pctl_desc.npins; idx++) {
5508 /* Get this Pad's descriptor from PINCTRL */
5509 conf = &pmx->pctl_data->confs[idx];
5510 bank = atlas7_pin_to_bank(idx);
5511 status = &pmx->sleep_data[idx];
5512
5513 /* Restore Function selector */
5514 __atlas7_pmx_pin_enable(pmx, idx, (u32)status->func & 0xff);
5515
5516 if (FUNC_ANALOGUE == status->func)
5517 goto restore_pull_sel;
5518
5519 /* Restore Drive Strength selector */
5520 __altas7_pinctrl_set_drive_strength_sel(pmx->pctl, idx,
5521 (u32)status->dstr & 0xff);
5522
5523 restore_pull_sel:
5524 /* Restore Pull selector */
5525 altas7_pinctrl_set_pull_sel(pmx->pctl, idx,
5526 (u32)status->pull & 0xff);
5527 }
5528
5529 /*
5530 * Restore disable input selector, this selector is not for Pin,
5531 * but for Mux function
5532 */
5533 for (idx = 0; idx < NUM_OF_IN_DISABLE_REG; idx++) {
5534 writel(~0, pmx->regs[BANK_DS] +
5535 IN_DISABLE_0_REG_CLR + 0x8 * idx);
5536 writel(pmx->status_ds[idx], pmx->regs[BANK_DS] +
5537 IN_DISABLE_0_REG_SET + 0x8 * idx);
5538 writel(~0, pmx->regs[BANK_DS] +
5539 IN_DISABLE_VAL_0_REG_CLR + 0x8 * idx);
5540 writel(pmx->status_dsv[idx], pmx->regs[BANK_DS] +
5541 IN_DISABLE_VAL_0_REG_SET + 0x8 * idx);
5542 }
5543
5544 return 0;
5545 }
5546
5547 static const struct dev_pm_ops atlas7_pinmux_pm_ops = {
5548 .suspend_noirq = atlas7_pinmux_suspend_noirq,
5549 .resume_noirq = atlas7_pinmux_resume_noirq,
5550 .freeze_noirq = atlas7_pinmux_suspend_noirq,
5551 .restore_noirq = atlas7_pinmux_resume_noirq,
5552 };
5553 #endif
5554
5555 static const struct of_device_id atlas7_pinmux_ids[] = {
5556 { .compatible = "sirf,atlas7-ioc",},
5557 {},
5558 };
5559
5560 static struct platform_driver atlas7_pinmux_driver = {
5561 .driver = {
5562 .name = "atlas7-ioc",
5563 .of_match_table = atlas7_pinmux_ids,
5564 #ifdef CONFIG_PM_SLEEP
5565 .pm = &atlas7_pinmux_pm_ops,
5566 #endif
5567 },
5568 .probe = atlas7_pinmux_probe,
5569 };
5570
atlas7_pinmux_init(void)5571 static int __init atlas7_pinmux_init(void)
5572 {
5573 return platform_driver_register(&atlas7_pinmux_driver);
5574 }
5575 arch_initcall(atlas7_pinmux_init);
5576
5577
5578 /**
5579 * The Following is GPIO Code
5580 */
5581 static inline struct
atlas7_gpio_to_bank(struct atlas7_gpio_chip * a7gc,u32 gpio)5582 atlas7_gpio_bank *atlas7_gpio_to_bank(struct atlas7_gpio_chip *a7gc, u32 gpio)
5583 {
5584 return &a7gc->banks[GPIO_TO_BANK(gpio)];
5585 }
5586
__atlas7_gpio_to_pin(struct atlas7_gpio_chip * a7gc,u32 gpio)5587 static int __atlas7_gpio_to_pin(struct atlas7_gpio_chip *a7gc, u32 gpio)
5588 {
5589 struct atlas7_gpio_bank *bank;
5590 u32 ofs;
5591
5592 bank = atlas7_gpio_to_bank(a7gc, gpio);
5593 ofs = gpio - bank->gpio_offset;
5594 if (ofs >= bank->ngpio)
5595 return -ENODEV;
5596
5597 return bank->gpio_pins[ofs];
5598 }
5599
atlas7_gpio_irq_ack(struct irq_data * d)5600 static void atlas7_gpio_irq_ack(struct irq_data *d)
5601 {
5602 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
5603 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(gc);
5604 struct atlas7_gpio_bank *bank;
5605 void __iomem *ctrl_reg;
5606 u32 val, pin_in_bank;
5607 unsigned long flags;
5608
5609 bank = atlas7_gpio_to_bank(a7gc, d->hwirq);
5610 pin_in_bank = d->hwirq - bank->gpio_offset;
5611 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
5612
5613 spin_lock_irqsave(&a7gc->lock, flags);
5614
5615 val = readl(ctrl_reg);
5616 /* clear interrupt status */
5617 writel(val, ctrl_reg);
5618
5619 spin_unlock_irqrestore(&a7gc->lock, flags);
5620 }
5621
__atlas7_gpio_irq_mask(struct atlas7_gpio_chip * a7gc,int idx)5622 static void __atlas7_gpio_irq_mask(struct atlas7_gpio_chip *a7gc, int idx)
5623 {
5624 struct atlas7_gpio_bank *bank;
5625 void __iomem *ctrl_reg;
5626 u32 val, pin_in_bank;
5627
5628 bank = atlas7_gpio_to_bank(a7gc, idx);
5629 pin_in_bank = idx - bank->gpio_offset;
5630 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
5631
5632 val = readl(ctrl_reg);
5633 val &= ~(ATLAS7_GPIO_CTL_INTR_EN_MASK |
5634 ATLAS7_GPIO_CTL_INTR_STATUS_MASK);
5635 writel(val, ctrl_reg);
5636 }
5637
atlas7_gpio_irq_mask(struct irq_data * d)5638 static void atlas7_gpio_irq_mask(struct irq_data *d)
5639 {
5640 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
5641 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(gc);
5642 unsigned long flags;
5643
5644 spin_lock_irqsave(&a7gc->lock, flags);
5645
5646 __atlas7_gpio_irq_mask(a7gc, d->hwirq);
5647
5648 spin_unlock_irqrestore(&a7gc->lock, flags);
5649 }
5650
atlas7_gpio_irq_unmask(struct irq_data * d)5651 static void atlas7_gpio_irq_unmask(struct irq_data *d)
5652 {
5653 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
5654 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(gc);
5655 struct atlas7_gpio_bank *bank;
5656 void __iomem *ctrl_reg;
5657 u32 val, pin_in_bank;
5658 unsigned long flags;
5659
5660 bank = atlas7_gpio_to_bank(a7gc, d->hwirq);
5661 pin_in_bank = d->hwirq - bank->gpio_offset;
5662 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
5663
5664 spin_lock_irqsave(&a7gc->lock, flags);
5665
5666 val = readl(ctrl_reg);
5667 val &= ~ATLAS7_GPIO_CTL_INTR_STATUS_MASK;
5668 val |= ATLAS7_GPIO_CTL_INTR_EN_MASK;
5669 writel(val, ctrl_reg);
5670
5671 spin_unlock_irqrestore(&a7gc->lock, flags);
5672 }
5673
atlas7_gpio_irq_type(struct irq_data * d,unsigned int type)5674 static int atlas7_gpio_irq_type(struct irq_data *d,
5675 unsigned int type)
5676 {
5677 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
5678 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(gc);
5679 struct atlas7_gpio_bank *bank;
5680 void __iomem *ctrl_reg;
5681 u32 val, pin_in_bank;
5682 unsigned long flags;
5683
5684 bank = atlas7_gpio_to_bank(a7gc, d->hwirq);
5685 pin_in_bank = d->hwirq - bank->gpio_offset;
5686 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
5687
5688 spin_lock_irqsave(&a7gc->lock, flags);
5689
5690 val = readl(ctrl_reg);
5691 val &= ~(ATLAS7_GPIO_CTL_INTR_STATUS_MASK |
5692 ATLAS7_GPIO_CTL_INTR_EN_MASK);
5693
5694 switch (type) {
5695 case IRQ_TYPE_NONE:
5696 break;
5697
5698 case IRQ_TYPE_EDGE_RISING:
5699 val |= ATLAS7_GPIO_CTL_INTR_HIGH_MASK |
5700 ATLAS7_GPIO_CTL_INTR_TYPE_MASK;
5701 val &= ~ATLAS7_GPIO_CTL_INTR_LOW_MASK;
5702 break;
5703
5704 case IRQ_TYPE_EDGE_FALLING:
5705 val &= ~ATLAS7_GPIO_CTL_INTR_HIGH_MASK;
5706 val |= ATLAS7_GPIO_CTL_INTR_LOW_MASK |
5707 ATLAS7_GPIO_CTL_INTR_TYPE_MASK;
5708 break;
5709
5710 case IRQ_TYPE_EDGE_BOTH:
5711 val |= ATLAS7_GPIO_CTL_INTR_HIGH_MASK |
5712 ATLAS7_GPIO_CTL_INTR_LOW_MASK |
5713 ATLAS7_GPIO_CTL_INTR_TYPE_MASK;
5714 break;
5715
5716 case IRQ_TYPE_LEVEL_LOW:
5717 val &= ~(ATLAS7_GPIO_CTL_INTR_HIGH_MASK |
5718 ATLAS7_GPIO_CTL_INTR_TYPE_MASK);
5719 val |= ATLAS7_GPIO_CTL_INTR_LOW_MASK;
5720 break;
5721
5722 case IRQ_TYPE_LEVEL_HIGH:
5723 val |= ATLAS7_GPIO_CTL_INTR_HIGH_MASK;
5724 val &= ~(ATLAS7_GPIO_CTL_INTR_LOW_MASK |
5725 ATLAS7_GPIO_CTL_INTR_TYPE_MASK);
5726 break;
5727 }
5728
5729 writel(val, ctrl_reg);
5730
5731 spin_unlock_irqrestore(&a7gc->lock, flags);
5732
5733 return 0;
5734 }
5735
5736 static struct irq_chip atlas7_gpio_irq_chip = {
5737 .name = "atlas7-gpio-irq",
5738 .irq_ack = atlas7_gpio_irq_ack,
5739 .irq_mask = atlas7_gpio_irq_mask,
5740 .irq_unmask = atlas7_gpio_irq_unmask,
5741 .irq_set_type = atlas7_gpio_irq_type,
5742 };
5743
atlas7_gpio_handle_irq(struct irq_desc * desc)5744 static void atlas7_gpio_handle_irq(struct irq_desc *desc)
5745 {
5746 struct gpio_chip *gc = irq_desc_get_handler_data(desc);
5747 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(gc);
5748 struct atlas7_gpio_bank *bank = NULL;
5749 u32 status, ctrl;
5750 int pin_in_bank = 0, idx;
5751 struct irq_chip *chip = irq_desc_get_chip(desc);
5752 unsigned int irq = irq_desc_get_irq(desc);
5753
5754 for (idx = 0; idx < a7gc->nbank; idx++) {
5755 bank = &a7gc->banks[idx];
5756 if (bank->irq == irq)
5757 break;
5758 }
5759 BUG_ON(idx == a7gc->nbank);
5760
5761 chained_irq_enter(chip, desc);
5762
5763 status = readl(ATLAS7_GPIO_INT_STATUS(bank));
5764 if (!status) {
5765 pr_warn("%s: gpio [%s] status %#x no interrupt is flaged\n",
5766 __func__, gc->label, status);
5767 handle_bad_irq(desc);
5768 return;
5769 }
5770
5771 while (status) {
5772 ctrl = readl(ATLAS7_GPIO_CTRL(bank, pin_in_bank));
5773
5774 /*
5775 * Here we must check whether the corresponding GPIO's
5776 * interrupt has been enabled, otherwise just skip it
5777 */
5778 if ((status & 0x1) && (ctrl & ATLAS7_GPIO_CTL_INTR_EN_MASK)) {
5779 pr_debug("%s: chip[%s] gpio:%d happens\n",
5780 __func__, gc->label,
5781 bank->gpio_offset + pin_in_bank);
5782 generic_handle_irq(
5783 irq_find_mapping(gc->irqdomain,
5784 bank->gpio_offset + pin_in_bank));
5785 }
5786
5787 if (++pin_in_bank >= bank->ngpio)
5788 break;
5789
5790 status = status >> 1;
5791 }
5792
5793 chained_irq_exit(chip, desc);
5794 }
5795
__atlas7_gpio_set_input(struct atlas7_gpio_chip * a7gc,unsigned int gpio)5796 static void __atlas7_gpio_set_input(struct atlas7_gpio_chip *a7gc,
5797 unsigned int gpio)
5798 {
5799 struct atlas7_gpio_bank *bank;
5800 void __iomem *ctrl_reg;
5801 u32 val, pin_in_bank;
5802
5803 bank = atlas7_gpio_to_bank(a7gc, gpio);
5804 pin_in_bank = gpio - bank->gpio_offset;
5805 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
5806
5807 val = readl(ctrl_reg);
5808 val &= ~ATLAS7_GPIO_CTL_OUT_EN_MASK;
5809 writel(val, ctrl_reg);
5810 }
5811
atlas7_gpio_request(struct gpio_chip * chip,unsigned int gpio)5812 static int atlas7_gpio_request(struct gpio_chip *chip,
5813 unsigned int gpio)
5814 {
5815 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
5816 int ret;
5817 unsigned long flags;
5818
5819 ret = __atlas7_gpio_to_pin(a7gc, gpio);
5820 if (ret < 0)
5821 return ret;
5822
5823 if (pinctrl_request_gpio(chip->base + gpio))
5824 return -ENODEV;
5825
5826 spin_lock_irqsave(&a7gc->lock, flags);
5827
5828 /*
5829 * default status:
5830 * set direction as input and mask irq
5831 */
5832 __atlas7_gpio_set_input(a7gc, gpio);
5833 __atlas7_gpio_irq_mask(a7gc, gpio);
5834
5835 spin_unlock_irqrestore(&a7gc->lock, flags);
5836
5837 return 0;
5838 }
5839
atlas7_gpio_free(struct gpio_chip * chip,unsigned int gpio)5840 static void atlas7_gpio_free(struct gpio_chip *chip,
5841 unsigned int gpio)
5842 {
5843 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
5844 unsigned long flags;
5845
5846 spin_lock_irqsave(&a7gc->lock, flags);
5847
5848 __atlas7_gpio_irq_mask(a7gc, gpio);
5849 __atlas7_gpio_set_input(a7gc, gpio);
5850
5851 spin_unlock_irqrestore(&a7gc->lock, flags);
5852
5853 pinctrl_free_gpio(chip->base + gpio);
5854 }
5855
atlas7_gpio_direction_input(struct gpio_chip * chip,unsigned int gpio)5856 static int atlas7_gpio_direction_input(struct gpio_chip *chip,
5857 unsigned int gpio)
5858 {
5859 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
5860 unsigned long flags;
5861
5862 spin_lock_irqsave(&a7gc->lock, flags);
5863
5864 __atlas7_gpio_set_input(a7gc, gpio);
5865
5866 spin_unlock_irqrestore(&a7gc->lock, flags);
5867
5868 return 0;
5869 }
5870
__atlas7_gpio_set_output(struct atlas7_gpio_chip * a7gc,unsigned int gpio,int value)5871 static void __atlas7_gpio_set_output(struct atlas7_gpio_chip *a7gc,
5872 unsigned int gpio, int value)
5873 {
5874 struct atlas7_gpio_bank *bank;
5875 void __iomem *ctrl_reg;
5876 u32 out_ctrl, pin_in_bank;
5877
5878 bank = atlas7_gpio_to_bank(a7gc, gpio);
5879 pin_in_bank = gpio - bank->gpio_offset;
5880 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
5881
5882 out_ctrl = readl(ctrl_reg);
5883 if (value)
5884 out_ctrl |= ATLAS7_GPIO_CTL_DATAOUT_MASK;
5885 else
5886 out_ctrl &= ~ATLAS7_GPIO_CTL_DATAOUT_MASK;
5887
5888 out_ctrl &= ~ATLAS7_GPIO_CTL_INTR_EN_MASK;
5889 out_ctrl |= ATLAS7_GPIO_CTL_OUT_EN_MASK;
5890 writel(out_ctrl, ctrl_reg);
5891 }
5892
atlas7_gpio_direction_output(struct gpio_chip * chip,unsigned int gpio,int value)5893 static int atlas7_gpio_direction_output(struct gpio_chip *chip,
5894 unsigned int gpio, int value)
5895 {
5896 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
5897 unsigned long flags;
5898
5899 spin_lock_irqsave(&a7gc->lock, flags);
5900
5901 __atlas7_gpio_set_output(a7gc, gpio, value);
5902
5903 spin_unlock_irqrestore(&a7gc->lock, flags);
5904
5905 return 0;
5906 }
5907
atlas7_gpio_get_value(struct gpio_chip * chip,unsigned int gpio)5908 static int atlas7_gpio_get_value(struct gpio_chip *chip,
5909 unsigned int gpio)
5910 {
5911 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
5912 struct atlas7_gpio_bank *bank;
5913 u32 val, pin_in_bank;
5914 unsigned long flags;
5915
5916 bank = atlas7_gpio_to_bank(a7gc, gpio);
5917 pin_in_bank = gpio - bank->gpio_offset;
5918
5919 spin_lock_irqsave(&a7gc->lock, flags);
5920
5921 val = readl(ATLAS7_GPIO_CTRL(bank, pin_in_bank));
5922
5923 spin_unlock_irqrestore(&a7gc->lock, flags);
5924
5925 return !!(val & ATLAS7_GPIO_CTL_DATAIN_MASK);
5926 }
5927
atlas7_gpio_set_value(struct gpio_chip * chip,unsigned int gpio,int value)5928 static void atlas7_gpio_set_value(struct gpio_chip *chip,
5929 unsigned int gpio, int value)
5930 {
5931 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
5932 struct atlas7_gpio_bank *bank;
5933 void __iomem *ctrl_reg;
5934 u32 ctrl, pin_in_bank;
5935 unsigned long flags;
5936
5937 bank = atlas7_gpio_to_bank(a7gc, gpio);
5938 pin_in_bank = gpio - bank->gpio_offset;
5939 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
5940
5941 spin_lock_irqsave(&a7gc->lock, flags);
5942
5943 ctrl = readl(ctrl_reg);
5944 if (value)
5945 ctrl |= ATLAS7_GPIO_CTL_DATAOUT_MASK;
5946 else
5947 ctrl &= ~ATLAS7_GPIO_CTL_DATAOUT_MASK;
5948 writel(ctrl, ctrl_reg);
5949
5950 spin_unlock_irqrestore(&a7gc->lock, flags);
5951 }
5952
5953 static const struct of_device_id atlas7_gpio_ids[] = {
5954 { .compatible = "sirf,atlas7-gpio", },
5955 {},
5956 };
5957
atlas7_gpio_probe(struct platform_device * pdev)5958 static int atlas7_gpio_probe(struct platform_device *pdev)
5959 {
5960 struct device_node *np = pdev->dev.of_node;
5961 struct atlas7_gpio_chip *a7gc;
5962 struct gpio_chip *chip;
5963 u32 nbank;
5964 int ret, idx;
5965
5966 ret = of_property_read_u32(np, "gpio-banks", &nbank);
5967 if (ret) {
5968 dev_err(&pdev->dev,
5969 "Could not find GPIO bank info,ret=%d!\n",
5970 ret);
5971 return ret;
5972 }
5973
5974 /* retrieve gpio descriptor data */
5975 a7gc = devm_kzalloc(&pdev->dev, sizeof(*a7gc) +
5976 sizeof(struct atlas7_gpio_bank) * nbank, GFP_KERNEL);
5977 if (!a7gc)
5978 return -ENOMEM;
5979
5980 /* Get Gpio clk */
5981 a7gc->clk = of_clk_get(np, 0);
5982 if (!IS_ERR(a7gc->clk)) {
5983 ret = clk_prepare_enable(a7gc->clk);
5984 if (ret) {
5985 dev_err(&pdev->dev,
5986 "Could not enable clock!\n");
5987 return ret;
5988 }
5989 }
5990
5991 /* Get Gpio Registers */
5992 a7gc->reg = of_iomap(np, 0);
5993 if (!a7gc->reg) {
5994 dev_err(&pdev->dev, "Could not map GPIO Registers!\n");
5995 return -ENOMEM;
5996 }
5997
5998 a7gc->nbank = nbank;
5999 spin_lock_init(&a7gc->lock);
6000
6001 /* Setup GPIO Chip */
6002 chip = &a7gc->chip;
6003 chip->request = atlas7_gpio_request;
6004 chip->free = atlas7_gpio_free;
6005 chip->direction_input = atlas7_gpio_direction_input;
6006 chip->get = atlas7_gpio_get_value;
6007 chip->direction_output = atlas7_gpio_direction_output;
6008 chip->set = atlas7_gpio_set_value;
6009 chip->base = -1;
6010 /* Each chip can support 32 pins at one bank */
6011 chip->ngpio = NGPIO_OF_BANK * nbank;
6012 chip->label = kstrdup(np->name, GFP_KERNEL);
6013 chip->of_node = np;
6014 chip->of_gpio_n_cells = 2;
6015 chip->dev = &pdev->dev;
6016
6017 /* Add gpio chip to system */
6018 ret = gpiochip_add(chip);
6019 if (ret) {
6020 dev_err(&pdev->dev,
6021 "%s: error in probe function with status %d\n",
6022 np->name, ret);
6023 goto failed;
6024 }
6025
6026 /* Add gpio chip to irq subsystem */
6027 ret = gpiochip_irqchip_add(chip, &atlas7_gpio_irq_chip,
6028 0, handle_level_irq, IRQ_TYPE_NONE);
6029 if (ret) {
6030 dev_err(&pdev->dev,
6031 "could not connect irqchip to gpiochip\n");
6032 goto failed;
6033 }
6034
6035 for (idx = 0; idx < nbank; idx++) {
6036 struct gpio_pin_range *pin_range;
6037 struct atlas7_gpio_bank *bank;
6038
6039 bank = &a7gc->banks[idx];
6040 /* Set ctrl registers' base of this bank */
6041 bank->base = ATLAS7_GPIO_BASE(a7gc, idx);
6042
6043 /* Get interrupt number from DTS */
6044 ret = of_irq_get(np, idx);
6045 if (ret == -EPROBE_DEFER) {
6046 dev_err(&pdev->dev,
6047 "Unable to find IRQ number. ret=%d\n", ret);
6048 goto failed;
6049 }
6050 bank->irq = ret;
6051
6052 gpiochip_set_chained_irqchip(chip, &atlas7_gpio_irq_chip,
6053 bank->irq, atlas7_gpio_handle_irq);
6054
6055 /* Records gpio_pin_range to a7gc */
6056 list_for_each_entry(pin_range, &chip->pin_ranges, node) {
6057 struct pinctrl_gpio_range *range;
6058
6059 range = &pin_range->range;
6060 if (range->id == NGPIO_OF_BANK * idx) {
6061 bank->gpio_offset = range->id;
6062 bank->ngpio = range->npins;
6063 bank->gpio_pins = range->pins;
6064 bank->pctldev = pin_range->pctldev;
6065 break;
6066 }
6067 }
6068
6069 BUG_ON(!bank->pctldev);
6070 }
6071
6072 platform_set_drvdata(pdev, a7gc);
6073 dev_info(&pdev->dev, "add to system.\n");
6074 return 0;
6075 failed:
6076 return ret;
6077 }
6078
6079 #ifdef CONFIG_PM_SLEEP
atlas7_gpio_suspend_noirq(struct device * dev)6080 static int atlas7_gpio_suspend_noirq(struct device *dev)
6081 {
6082 struct atlas7_gpio_chip *a7gc = dev_get_drvdata(dev);
6083 struct atlas7_gpio_bank *bank;
6084 void __iomem *ctrl_reg;
6085 u32 idx, pin;
6086
6087 for (idx = 0; idx < a7gc->nbank; idx++) {
6088 bank = &a7gc->banks[idx];
6089 for (pin = 0; pin < bank->ngpio; pin++) {
6090 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin);
6091 bank->sleep_data[pin] = readl(ctrl_reg);
6092 }
6093 }
6094
6095 return 0;
6096 }
6097
atlas7_gpio_resume_noirq(struct device * dev)6098 static int atlas7_gpio_resume_noirq(struct device *dev)
6099 {
6100 struct atlas7_gpio_chip *a7gc = dev_get_drvdata(dev);
6101 struct atlas7_gpio_bank *bank;
6102 void __iomem *ctrl_reg;
6103 u32 idx, pin;
6104
6105 for (idx = 0; idx < a7gc->nbank; idx++) {
6106 bank = &a7gc->banks[idx];
6107 for (pin = 0; pin < bank->ngpio; pin++) {
6108 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin);
6109 writel(bank->sleep_data[pin], ctrl_reg);
6110 }
6111 }
6112
6113 return 0;
6114 }
6115
6116 static const struct dev_pm_ops atlas7_gpio_pm_ops = {
6117 .suspend_noirq = atlas7_gpio_suspend_noirq,
6118 .resume_noirq = atlas7_gpio_resume_noirq,
6119 .freeze_noirq = atlas7_gpio_suspend_noirq,
6120 .restore_noirq = atlas7_gpio_resume_noirq,
6121 };
6122 #endif
6123
6124 static struct platform_driver atlas7_gpio_driver = {
6125 .driver = {
6126 .name = "atlas7-gpio",
6127 .of_match_table = atlas7_gpio_ids,
6128 #ifdef CONFIG_PM_SLEEP
6129 .pm = &atlas7_gpio_pm_ops,
6130 #endif
6131 },
6132 .probe = atlas7_gpio_probe,
6133 };
6134
atlas7_gpio_init(void)6135 static int __init atlas7_gpio_init(void)
6136 {
6137 return platform_driver_register(&atlas7_gpio_driver);
6138 }
6139 subsys_initcall(atlas7_gpio_init);
6140
6141 MODULE_DESCRIPTION("SIRFSOC Atlas7 pin control driver");
6142 MODULE_LICENSE("GPL");
6143