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