Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
   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 */
  45enum 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
 165struct 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 */
 185struct 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 */
 216struct 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 */
 235struct 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
 256struct 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 */
 270struct 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
 283struct 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
 298struct 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
 338struct 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
 348struct 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
 358struct 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 */
 376static 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
 546static 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 */
 716static 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, };
 718static 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, };
 721static 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, };
 724static 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, };
 727static const unsigned int lvds_gpio_pins[] = { 157, 158, 155, 156, 153, 154,
 728		151, 152, 149, 150, };
 729static 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, };
 732static const unsigned int rtc_gpio_pins[] = { 0, 1, 2, 3, 4, 10, 11, 12, 13,
 733		14, 15, 16, 17, 9, };
 734static const unsigned int audio_ac97_pins[] = { 113, 118, 115, 114, };
 735static const unsigned int audio_digmic_pins0[] = { 51, };
 736static const unsigned int audio_digmic_pins1[] = { 122, };
 737static const unsigned int audio_digmic_pins2[] = { 161, };
 738static 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, };
 741static const unsigned int audio_i2s_pins[] = { 118, 115, 116, 117, 112, 113,
 742		114, };
 743static const unsigned int audio_i2s_2ch_pins[] = { 118, 115, 112, 113, 114, };
 744static const unsigned int audio_i2s_extclk_pins[] = { 112, };
 745static const unsigned int audio_spdif_out_pins0[] = { 112, };
 746static const unsigned int audio_spdif_out_pins1[] = { 116, };
 747static const unsigned int audio_spdif_out_pins2[] = { 142, };
 748static const unsigned int audio_uart0_basic_pins[] = { 143, 142, 141, 144, };
 749static const unsigned int audio_uart0_urfs_pins0[] = { 117, };
 750static const unsigned int audio_uart0_urfs_pins1[] = { 139, };
 751static const unsigned int audio_uart0_urfs_pins2[] = { 163, };
 752static const unsigned int audio_uart0_urfs_pins3[] = { 162, };
 753static const unsigned int audio_uart1_basic_pins[] = { 147, 146, 145, 148, };
 754static const unsigned int audio_uart1_urfs_pins0[] = { 117, };
 755static const unsigned int audio_uart1_urfs_pins1[] = { 140, };
 756static const unsigned int audio_uart1_urfs_pins2[] = { 163, };
 757static const unsigned int audio_uart2_urfs_pins0[] = { 139, };
 758static const unsigned int audio_uart2_urfs_pins1[] = { 163, };
 759static const unsigned int audio_uart2_urfs_pins2[] = { 96, };
 760static const unsigned int audio_uart2_urxd_pins0[] = { 20, };
 761static const unsigned int audio_uart2_urxd_pins1[] = { 109, };
 762static const unsigned int audio_uart2_urxd_pins2[] = { 93, };
 763static const unsigned int audio_uart2_usclk_pins0[] = { 19, };
 764static const unsigned int audio_uart2_usclk_pins1[] = { 101, };
 765static const unsigned int audio_uart2_usclk_pins2[] = { 91, };
 766static const unsigned int audio_uart2_utfs_pins0[] = { 18, };
 767static const unsigned int audio_uart2_utfs_pins1[] = { 111, };
 768static const unsigned int audio_uart2_utfs_pins2[] = { 94, };
 769static const unsigned int audio_uart2_utxd_pins0[] = { 21, };
 770static const unsigned int audio_uart2_utxd_pins1[] = { 110, };
 771static const unsigned int audio_uart2_utxd_pins2[] = { 92, };
 772static const unsigned int c_can_trnsvr_en_pins0[] = { 2, };
 773static const unsigned int c_can_trnsvr_en_pins1[] = { 0, };
 774static const unsigned int c_can_trnsvr_intr_pins[] = { 1, };
 775static const unsigned int c_can_trnsvr_stb_n_pins[] = { 3, };
 776static const unsigned int c0_can_rxd_trnsv0_pins[] = { 11, };
 777static const unsigned int c0_can_rxd_trnsv1_pins[] = { 2, };
 778static const unsigned int c0_can_txd_trnsv0_pins[] = { 10, };
 779static const unsigned int c0_can_txd_trnsv1_pins[] = { 3, };
 780static const unsigned int c1_can_rxd_pins0[] = { 138, };
 781static const unsigned int c1_can_rxd_pins1[] = { 147, };
 782static const unsigned int c1_can_rxd_pins2[] = { 2, };
 783static const unsigned int c1_can_rxd_pins3[] = { 162, };
 784static const unsigned int c1_can_txd_pins0[] = { 137, };
 785static const unsigned int c1_can_txd_pins1[] = { 146, };
 786static const unsigned int c1_can_txd_pins2[] = { 3, };
 787static const unsigned int c1_can_txd_pins3[] = { 161, };
 788static const unsigned int ca_audio_lpc_pins[] = { 62, 63, 64, 65, 66, 67, 68,
 789		69, 70, 71, };
 790static const unsigned int ca_bt_lpc_pins[] = { 85, 86, 87, 88, 89, 90, };
 791static const unsigned int ca_coex_pins[] = { 129, 130, 131, 132, };
 792static const unsigned int ca_curator_lpc_pins[] = { 57, 58, 59, 60, };
 793static const unsigned int ca_pcm_debug_pins[] = { 91, 93, 94, 92, };
 794static const unsigned int ca_pio_pins[] = { 121, 122, 125, 126, 38, 37, 47,
 795		49, 50, 54, 55, 56, };
 796static const unsigned int ca_sdio_debug_pins[] = { 40, 39, 44, 43, 42, 41, };
 797static const unsigned int ca_spi_pins[] = { 82, 79, 80, 81, };
 798static const unsigned int ca_trb_pins[] = { 91, 93, 94, 95, 96, 78, 74, 75,
 799		76, 77, };
 800static const unsigned int ca_uart_debug_pins[] = { 136, 135, 134, 133, };
 801static const unsigned int clkc_pins0[] = { 30, 47, };
 802static const unsigned int clkc_pins1[] = { 78, 54, };
 803static const unsigned int gn_gnss_i2c_pins[] = { 128, 127, };
 804static const unsigned int gn_gnss_uart_nopause_pins[] = { 134, 133, };
 805static const unsigned int gn_gnss_uart_pins[] = { 134, 133, 136, 135, };
 806static const unsigned int gn_trg_spi_pins0[] = { 22, 25, 23, 24, };
 807static const unsigned int gn_trg_spi_pins1[] = { 82, 79, 80, 81, };
 808static const unsigned int cvbs_dbg_pins[] = { 54, 53, 82, 74, 75, 76, 77, 78,
 809		79, 80, 81, 83, 84, 73, 55, 56, };
 810static const unsigned int cvbs_dbg_test_pins0[] = { 57, };
 811static const unsigned int cvbs_dbg_test_pins1[] = { 58, };
 812static const unsigned int cvbs_dbg_test_pins2[] = { 59, };
 813static const unsigned int cvbs_dbg_test_pins3[] = { 60, };
 814static const unsigned int cvbs_dbg_test_pins4[] = { 61, };
 815static const unsigned int cvbs_dbg_test_pins5[] = { 62, };
 816static const unsigned int cvbs_dbg_test_pins6[] = { 63, };
 817static const unsigned int cvbs_dbg_test_pins7[] = { 64, };
 818static const unsigned int cvbs_dbg_test_pins8[] = { 65, };
 819static const unsigned int cvbs_dbg_test_pins9[] = { 66, };
 820static const unsigned int cvbs_dbg_test_pins10[] = { 67, };
 821static const unsigned int cvbs_dbg_test_pins11[] = { 68, };
 822static const unsigned int cvbs_dbg_test_pins12[] = { 69, };
 823static const unsigned int cvbs_dbg_test_pins13[] = { 70, };
 824static const unsigned int cvbs_dbg_test_pins14[] = { 71, };
 825static const unsigned int cvbs_dbg_test_pins15[] = { 72, };
 826static const unsigned int gn_gnss_power_pins[] = { 123, 124, 121, 122, 125,
 827		120, };
 828static 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, };
 830static const unsigned int gn_gnss_eclk_pins[] = { 113, };
 831static const unsigned int gn_gnss_irq1_pins0[] = { 112, };
 832static const unsigned int gn_gnss_irq2_pins0[] = { 118, };
 833static const unsigned int gn_gnss_tm_pins[] = { 115, };
 834static const unsigned int gn_gnss_tsync_pins[] = { 114, };
 835static 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, };
 837static const unsigned int gn_trg_pins0[] = { 29, 28, 26, 27, };
 838static const unsigned int gn_trg_pins1[] = { 77, 76, 74, 75, };
 839static const unsigned int gn_trg_shutdown_pins0[] = { 30, };
 840static const unsigned int gn_trg_shutdown_pins1[] = { 83, };
 841static const unsigned int gn_trg_shutdown_pins2[] = { 117, };
 842static const unsigned int gn_trg_shutdown_pins3[] = { 123, };
 843static const unsigned int i2c0_pins[] = { 128, 127, };
 844static const unsigned int i2c1_pins[] = { 126, 125, };
 845static const unsigned int i2s0_pins[] = { 91, 93, 94, 92, };
 846static const unsigned int i2s1_basic_pins[] = { 95, 96, };
 847static const unsigned int i2s1_rxd0_pins0[] = { 61, };
 848static const unsigned int i2s1_rxd0_pins1[] = { 131, };
 849static const unsigned int i2s1_rxd0_pins2[] = { 129, };
 850static const unsigned int i2s1_rxd0_pins3[] = { 117, };
 851static const unsigned int i2s1_rxd0_pins4[] = { 83, };
 852static const unsigned int i2s1_rxd1_pins0[] = { 72, };
 853static const unsigned int i2s1_rxd1_pins1[] = { 132, };
 854static const unsigned int i2s1_rxd1_pins2[] = { 130, };
 855static const unsigned int i2s1_rxd1_pins3[] = { 118, };
 856static const unsigned int i2s1_rxd1_pins4[] = { 84, };
 857static const unsigned int jtag_jt_dbg_nsrst_pins[] = { 125, };
 858static const unsigned int jtag_ntrst_pins0[] = { 4, };
 859static const unsigned int jtag_ntrst_pins1[] = { 163, };
 860static const unsigned int jtag_swdiotms_pins0[] = { 2, };
 861static const unsigned int jtag_swdiotms_pins1[] = { 160, };
 862static const unsigned int jtag_tck_pins0[] = { 0, };
 863static const unsigned int jtag_tck_pins1[] = { 161, };
 864static const unsigned int jtag_tdi_pins0[] = { 1, };
 865static const unsigned int jtag_tdi_pins1[] = { 162, };
 866static const unsigned int jtag_tdo_pins0[] = { 3, };
 867static const unsigned int jtag_tdo_pins1[] = { 159, };
 868static const unsigned int ks_kas_spi_pins0[] = { 141, 144, 143, 142, };
 869static 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, };
 872static 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, };
 874static const unsigned int ld_ldd_fck_pins[] = { 55, };
 875static const unsigned int ld_ldd_lck_pins[] = { 54, };
 876static 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, };
 878static const unsigned int lvds_analog_pins[] = { 149, 150, 151, 152, 153, 154,
 879		155, 156, 157, 158, };
 880static const unsigned int nd_df_basic_pins[] = { 44, 43, 42, 41, 40, 39, 38,
 881		37, 47, 46, 52, 45, 49, 50, 48, };
 882static const unsigned int nd_df_wp_pins[] = { 124, };
 883static const unsigned int nd_df_cs_pins[] = { 51, };
 884static const unsigned int ps_pins[] = { 120, 119, 121, };
 885static const unsigned int ps_no_dir_pins[] = { 119, };
 886static const unsigned int pwc_core_on_pins[] = { 8, };
 887static const unsigned int pwc_ext_on_pins[] = { 6, };
 888static const unsigned int pwc_gpio3_clk_pins[] = { 3, };
 889static const unsigned int pwc_io_on_pins[] = { 9, };
 890static const unsigned int pwc_lowbatt_b_pins0[] = { 4, };
 891static const unsigned int pwc_mem_on_pins[] = { 7, };
 892static const unsigned int pwc_on_key_b_pins0[] = { 5, };
 893static const unsigned int pwc_wakeup_src0_pins[] = { 0, };
 894static const unsigned int pwc_wakeup_src1_pins[] = { 1, };
 895static const unsigned int pwc_wakeup_src2_pins[] = { 2, };
 896static const unsigned int pwc_wakeup_src3_pins[] = { 3, };
 897static const unsigned int pw_cko0_pins0[] = { 123, };
 898static const unsigned int pw_cko0_pins1[] = { 101, };
 899static const unsigned int pw_cko0_pins2[] = { 82, };
 900static const unsigned int pw_cko0_pins3[] = { 162, };
 901static const unsigned int pw_cko1_pins0[] = { 124, };
 902static const unsigned int pw_cko1_pins1[] = { 110, };
 903static const unsigned int pw_cko1_pins2[] = { 163, };
 904static const unsigned int pw_i2s01_clk_pins0[] = { 125, };
 905static const unsigned int pw_i2s01_clk_pins1[] = { 117, };
 906static const unsigned int pw_i2s01_clk_pins2[] = { 132, };
 907static const unsigned int pw_pwm0_pins0[] = { 119, };
 908static const unsigned int pw_pwm0_pins1[] = { 159, };
 909static const unsigned int pw_pwm1_pins0[] = { 120, };
 910static const unsigned int pw_pwm1_pins1[] = { 160, };
 911static const unsigned int pw_pwm1_pins2[] = { 131, };
 912static const unsigned int pw_pwm2_pins0[] = { 121, };
 913static const unsigned int pw_pwm2_pins1[] = { 98, };
 914static const unsigned int pw_pwm2_pins2[] = { 161, };
 915static const unsigned int pw_pwm3_pins0[] = { 122, };
 916static const unsigned int pw_pwm3_pins1[] = { 73, };
 917static const unsigned int pw_pwm_cpu_vol_pins0[] = { 121, };
 918static const unsigned int pw_pwm_cpu_vol_pins1[] = { 98, };
 919static const unsigned int pw_pwm_cpu_vol_pins2[] = { 161, };
 920static const unsigned int pw_backlight_pins0[] = { 122, };
 921static const unsigned int pw_backlight_pins1[] = { 73, };
 922static const unsigned int rg_eth_mac_pins[] = { 108, 103, 104, 105, 106, 107,
 923		102, 97, 98, 99, 100, 101, };
 924static const unsigned int rg_gmac_phy_intr_n_pins[] = { 111, };
 925static const unsigned int rg_rgmii_mac_pins[] = { 109, 110, };
 926static const unsigned int rg_rgmii_phy_ref_clk_pins0[] = { 111, };
 927static const unsigned int rg_rgmii_phy_ref_clk_pins1[] = { 53, };
 928static const unsigned int sd0_pins[] = { 46, 47, 44, 43, 42, 41, 40, 39, 38,
 929		37, };
 930static const unsigned int sd0_4bit_pins[] = { 46, 47, 44, 43, 42, 41, };
 931static const unsigned int sd1_pins[] = { 48, 49, 44, 43, 42, 41, 40, 39, 38,
 932		37, };
 933static const unsigned int sd1_4bit_pins0[] = { 48, 49, 44, 43, 42, 41, };
 934static const unsigned int sd1_4bit_pins1[] = { 48, 49, 40, 39, 38, 37, };
 935static const unsigned int sd2_basic_pins[] = { 31, 32, 33, 34, 35, 36, };
 936static const unsigned int sd2_cdb_pins0[] = { 124, };
 937static const unsigned int sd2_cdb_pins1[] = { 161, };
 938static const unsigned int sd2_wpb_pins0[] = { 123, };
 939static const unsigned int sd2_wpb_pins1[] = { 163, };
 940static const unsigned int sd3_9_pins[] = { 85, 86, 87, 88, 89, 90, };
 941static const unsigned int sd5_pins[] = { 91, 92, 93, 94, 95, 96, };
 942static const unsigned int sd6_pins0[] = { 79, 78, 74, 75, 76, 77, };
 943static const unsigned int sd6_pins1[] = { 101, 99, 100, 110, 109, 111, };
 944static const unsigned int sp0_ext_ldo_on_pins[] = { 4, };
 945static const unsigned int sp0_qspi_pins[] = { 12, 13, 14, 15, 16, 17, };
 946static const unsigned int sp1_spi_pins[] = { 19, 20, 21, 18, };
 947static 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, };
 949static const unsigned int uart0_pins[] = { 121, 120, 134, 133, };
 950static const unsigned int uart0_nopause_pins[] = { 134, 133, };
 951static const unsigned int uart1_pins[] = { 136, 135, };
 952static const unsigned int uart2_cts_pins0[] = { 132, };
 953static const unsigned int uart2_cts_pins1[] = { 162, };
 954static const unsigned int uart2_rts_pins0[] = { 131, };
 955static const unsigned int uart2_rts_pins1[] = { 161, };
 956static const unsigned int uart2_rxd_pins0[] = { 11, };
 957static const unsigned int uart2_rxd_pins1[] = { 160, };
 958static const unsigned int uart2_rxd_pins2[] = { 130, };
 959static const unsigned int uart2_txd_pins0[] = { 10, };
 960static const unsigned int uart2_txd_pins1[] = { 159, };
 961static const unsigned int uart2_txd_pins2[] = { 129, };
 962static const unsigned int uart3_cts_pins0[] = { 125, };
 963static const unsigned int uart3_cts_pins1[] = { 111, };
 964static const unsigned int uart3_cts_pins2[] = { 140, };
 965static const unsigned int uart3_rts_pins0[] = { 126, };
 966static const unsigned int uart3_rts_pins1[] = { 109, };
 967static const unsigned int uart3_rts_pins2[] = { 139, };
 968static const unsigned int uart3_rxd_pins0[] = { 138, };
 969static const unsigned int uart3_rxd_pins1[] = { 84, };
 970static const unsigned int uart3_rxd_pins2[] = { 162, };
 971static const unsigned int uart3_txd_pins0[] = { 137, };
 972static const unsigned int uart3_txd_pins1[] = { 83, };
 973static const unsigned int uart3_txd_pins2[] = { 161, };
 974static const unsigned int uart4_basic_pins[] = { 140, 139, };
 975static const unsigned int uart4_cts_pins0[] = { 122, };
 976static const unsigned int uart4_cts_pins1[] = { 100, };
 977static const unsigned int uart4_cts_pins2[] = { 117, };
 978static const unsigned int uart4_rts_pins0[] = { 123, };
 979static const unsigned int uart4_rts_pins1[] = { 99, };
 980static const unsigned int uart4_rts_pins2[] = { 116, };
 981static const unsigned int usb0_drvvbus_pins0[] = { 51, };
 982static const unsigned int usb0_drvvbus_pins1[] = { 162, };
 983static const unsigned int usb1_drvvbus_pins0[] = { 134, };
 984static const unsigned int usb1_drvvbus_pins1[] = { 163, };
 985static 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, };
 988static 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, };
 990static 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, };
 993static const unsigned int vi_vip1_low8bit_pins[] = { 74, 75, 76, 77, 78, 79,
 994		80, 81, 82, 83, 84, };
 995static 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 */
 999static 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 */
1246static const char * const gnss_gpio_grp[] = { "gnss_gpio_grp", };
1247static const char * const lcd_vip_gpio_grp[] = { "lcd_vip_gpio_grp", };
1248static const char * const sdio_i2s_gpio_grp[] = { "sdio_i2s_gpio_grp", };
1249static const char * const sp_rgmii_gpio_grp[] = { "sp_rgmii_gpio_grp", };
1250static const char * const lvds_gpio_grp[] = { "lvds_gpio_grp", };
1251static const char * const jtag_uart_nand_gpio_grp[] = {
1252				"jtag_uart_nand_gpio_grp", };
1253static const char * const rtc_gpio_grp[] = { "rtc_gpio_grp", };
1254static const char * const audio_ac97_grp[] = { "audio_ac97_grp", };
1255static const char * const audio_digmic_grp0[] = { "audio_digmic_grp0", };
1256static const char * const audio_digmic_grp1[] = { "audio_digmic_grp1", };
1257static const char * const audio_digmic_grp2[] = { "audio_digmic_grp2", };
1258static const char * const audio_func_dbg_grp[] = { "audio_func_dbg_grp", };
1259static const char * const audio_i2s_grp[] = { "audio_i2s_grp", };
1260static const char * const audio_i2s_2ch_grp[] = { "audio_i2s_2ch_grp", };
1261static const char * const audio_i2s_extclk_grp[] = { "audio_i2s_extclk_grp", };
1262static const char * const audio_spdif_out_grp0[] = { "audio_spdif_out_grp0", };
1263static const char * const audio_spdif_out_grp1[] = { "audio_spdif_out_grp1", };
1264static const char * const audio_spdif_out_grp2[] = { "audio_spdif_out_grp2", };
1265static const char * const audio_uart0_basic_grp[] = {
1266				"audio_uart0_basic_grp", };
1267static const char * const audio_uart0_urfs_grp0[] = {
1268				"audio_uart0_urfs_grp0", };
1269static const char * const audio_uart0_urfs_grp1[] = {
1270				"audio_uart0_urfs_grp1", };
1271static const char * const audio_uart0_urfs_grp2[] = {
1272				"audio_uart0_urfs_grp2", };
1273static const char * const audio_uart0_urfs_grp3[] = {
1274				"audio_uart0_urfs_grp3", };
1275static const char * const audio_uart1_basic_grp[] = {
1276				"audio_uart1_basic_grp", };
1277static const char * const audio_uart1_urfs_grp0[] = {
1278				"audio_uart1_urfs_grp0", };
1279static const char * const audio_uart1_urfs_grp1[] = {
1280				"audio_uart1_urfs_grp1", };
1281static const char * const audio_uart1_urfs_grp2[] = {
1282				"audio_uart1_urfs_grp2", };
1283static const char * const audio_uart2_urfs_grp0[] = {
1284				"audio_uart2_urfs_grp0", };
1285static const char * const audio_uart2_urfs_grp1[] = {
1286				"audio_uart2_urfs_grp1", };
1287static const char * const audio_uart2_urfs_grp2[] = {
1288				"audio_uart2_urfs_grp2", };
1289static const char * const audio_uart2_urxd_grp0[] = {
1290				"audio_uart2_urxd_grp0", };
1291static const char * const audio_uart2_urxd_grp1[] = {
1292				"audio_uart2_urxd_grp1", };
1293static const char * const audio_uart2_urxd_grp2[] = {
1294				"audio_uart2_urxd_grp2", };
1295static const char * const audio_uart2_usclk_grp0[] = {
1296				"audio_uart2_usclk_grp0", };
1297static const char * const audio_uart2_usclk_grp1[] = {
1298				"audio_uart2_usclk_grp1", };
1299static const char * const audio_uart2_usclk_grp2[] = {
1300				"audio_uart2_usclk_grp2", };
1301static const char * const audio_uart2_utfs_grp0[] = {
1302				"audio_uart2_utfs_grp0", };
1303static const char * const audio_uart2_utfs_grp1[] = {
1304				"audio_uart2_utfs_grp1", };
1305static const char * const audio_uart2_utfs_grp2[] = {
1306				"audio_uart2_utfs_grp2", };
1307static const char * const audio_uart2_utxd_grp0[] = {
1308				"audio_uart2_utxd_grp0", };
1309static const char * const audio_uart2_utxd_grp1[] = {
1310				"audio_uart2_utxd_grp1", };
1311static const char * const audio_uart2_utxd_grp2[] = {
1312				"audio_uart2_utxd_grp2", };
1313static const char * const c_can_trnsvr_en_grp0[] = { "c_can_trnsvr_en_grp0", };
1314static const char * const c_can_trnsvr_en_grp1[] = { "c_can_trnsvr_en_grp1", };
1315static const char * const c_can_trnsvr_intr_grp[] = {
1316				"c_can_trnsvr_intr_grp", };
1317static const char * const c_can_trnsvr_stb_n_grp[] = {
1318				"c_can_trnsvr_stb_n_grp", };
1319static const char * const c0_can_rxd_trnsv0_grp[] = {
1320				"c0_can_rxd_trnsv0_grp", };
1321static const char * const c0_can_rxd_trnsv1_grp[] = {
1322				"c0_can_rxd_trnsv1_grp", };
1323static const char * const c0_can_txd_trnsv0_grp[] = {
1324				"c0_can_txd_trnsv0_grp", };
1325static const char * const c0_can_txd_trnsv1_grp[] = {
1326				"c0_can_txd_trnsv1_grp", };
1327static const char * const c1_can_rxd_grp0[] = { "c1_can_rxd_grp0", };
1328static const char * const c1_can_rxd_grp1[] = { "c1_can_rxd_grp1", };
1329static const char * const c1_can_rxd_grp2[] = { "c1_can_rxd_grp2", };
1330static const char * const c1_can_rxd_grp3[] = { "c1_can_rxd_grp3", };
1331static const char * const c1_can_txd_grp0[] = { "c1_can_txd_grp0", };
1332static const char * const c1_can_txd_grp1[] = { "c1_can_txd_grp1", };
1333static const char * const c1_can_txd_grp2[] = { "c1_can_txd_grp2", };
1334static const char * const c1_can_txd_grp3[] = { "c1_can_txd_grp3", };
1335static const char * const ca_audio_lpc_grp[] = { "ca_audio_lpc_grp", };
1336static const char * const ca_bt_lpc_grp[] = { "ca_bt_lpc_grp", };
1337static const char * const ca_coex_grp[] = { "ca_coex_grp", };
1338static const char * const ca_curator_lpc_grp[] = { "ca_curator_lpc_grp", };
1339static const char * const ca_pcm_debug_grp[] = { "ca_pcm_debug_grp", };
1340static const char * const ca_pio_grp[] = { "ca_pio_grp", };
1341static const char * const ca_sdio_debug_grp[] = { "ca_sdio_debug_grp", };
1342static const char * const ca_spi_grp[] = { "ca_spi_grp", };
1343static const char * const ca_trb_grp[] = { "ca_trb_grp", };
1344static const char * const ca_uart_debug_grp[] = { "ca_uart_debug_grp", };
1345static const char * const clkc_grp0[] = { "clkc_grp0", };
1346static const char * const clkc_grp1[] = { "clkc_grp1", };
1347static const char * const gn_gnss_i2c_grp[] = { "gn_gnss_i2c_grp", };
1348static const char * const gn_gnss_uart_nopause_grp[] = {
1349				"gn_gnss_uart_nopause_grp", };
1350static const char * const gn_gnss_uart_grp[] = { "gn_gnss_uart_grp", };
1351static const char * const gn_trg_spi_grp0[] = { "gn_trg_spi_grp0", };
1352static const char * const gn_trg_spi_grp1[] = { "gn_trg_spi_grp1", };
1353static const char * const cvbs_dbg_grp[] = { "cvbs_dbg_grp", };
1354static const char * const cvbs_dbg_test_grp0[] = { "cvbs_dbg_test_grp0", };
1355static const char * const cvbs_dbg_test_grp1[] = { "cvbs_dbg_test_grp1", };
1356static const char * const cvbs_dbg_test_grp2[] = { "cvbs_dbg_test_grp2", };
1357static const char * const cvbs_dbg_test_grp3[] = { "cvbs_dbg_test_grp3", };
1358static const char * const cvbs_dbg_test_grp4[] = { "cvbs_dbg_test_grp4", };
1359static const char * const cvbs_dbg_test_grp5[] = { "cvbs_dbg_test_grp5", };
1360static const char * const cvbs_dbg_test_grp6[] = { "cvbs_dbg_test_grp6", };
1361static const char * const cvbs_dbg_test_grp7[] = { "cvbs_dbg_test_grp7", };
1362static const char * const cvbs_dbg_test_grp8[] = { "cvbs_dbg_test_grp8", };
1363static const char * const cvbs_dbg_test_grp9[] = { "cvbs_dbg_test_grp9", };
1364static const char * const cvbs_dbg_test_grp10[] = { "cvbs_dbg_test_grp10", };
1365static const char * const cvbs_dbg_test_grp11[] = { "cvbs_dbg_test_grp11", };
1366static const char * const cvbs_dbg_test_grp12[] = { "cvbs_dbg_test_grp12", };
1367static const char * const cvbs_dbg_test_grp13[] = { "cvbs_dbg_test_grp13", };
1368static const char * const cvbs_dbg_test_grp14[] = { "cvbs_dbg_test_grp14", };
1369static const char * const cvbs_dbg_test_grp15[] = { "cvbs_dbg_test_grp15", };
1370static const char * const gn_gnss_power_grp[] = { "gn_gnss_power_grp", };
1371static const char * const gn_gnss_sw_status_grp[] = {
1372				"gn_gnss_sw_status_grp", };
1373static const char * const gn_gnss_eclk_grp[] = { "gn_gnss_eclk_grp", };
1374static const char * const gn_gnss_irq1_grp0[] = { "gn_gnss_irq1_grp0", };
1375static const char * const gn_gnss_irq2_grp0[] = { "gn_gnss_irq2_grp0", };
1376static const char * const gn_gnss_tm_grp[] = { "gn_gnss_tm_grp", };
1377static const char * const gn_gnss_tsync_grp[] = { "gn_gnss_tsync_grp", };
1378static const char * const gn_io_gnsssys_sw_cfg_grp[] = {
1379				"gn_io_gnsssys_sw_cfg_grp", };
1380static const char * const gn_trg_grp0[] = { "gn_trg_grp0", };
1381static const char * const gn_trg_grp1[] = { "gn_trg_grp1", };
1382static const char * const gn_trg_shutdown_grp0[] = { "gn_trg_shutdown_grp0", };
1383static const char * const gn_trg_shutdown_grp1[] = { "gn_trg_shutdown_grp1", };
1384static const char * const gn_trg_shutdown_grp2[] = { "gn_trg_shutdown_grp2", };
1385static const char * const gn_trg_shutdown_grp3[] = { "gn_trg_shutdown_grp3", };
1386static const char * const i2c0_grp[] = { "i2c0_grp", };
1387static const char * const i2c1_grp[] = { "i2c1_grp", };
1388static const char * const i2s0_grp[] = { "i2s0_grp", };
1389static const char * const i2s1_basic_grp[] = { "i2s1_basic_grp", };
1390static const char * const i2s1_rxd0_grp0[] = { "i2s1_rxd0_grp0", };
1391static const char * const i2s1_rxd0_grp1[] = { "i2s1_rxd0_grp1", };
1392static const char * const i2s1_rxd0_grp2[] = { "i2s1_rxd0_grp2", };
1393static const char * const i2s1_rxd0_grp3[] = { "i2s1_rxd0_grp3", };
1394static const char * const i2s1_rxd0_grp4[] = { "i2s1_rxd0_grp4", };
1395static const char * const i2s1_rxd1_grp0[] = { "i2s1_rxd1_grp0", };
1396static const char * const i2s1_rxd1_grp1[] = { "i2s1_rxd1_grp1", };
1397static const char * const i2s1_rxd1_grp2[] = { "i2s1_rxd1_grp2", };
1398static const char * const i2s1_rxd1_grp3[] = { "i2s1_rxd1_grp3", };
1399static const char * const i2s1_rxd1_grp4[] = { "i2s1_rxd1_grp4", };
1400static const char * const jtag_jt_dbg_nsrst_grp[] = {
1401				"jtag_jt_dbg_nsrst_grp", };
1402static const char * const jtag_ntrst_grp0[] = { "jtag_ntrst_grp0", };
1403static const char * const jtag_ntrst_grp1[] = { "jtag_ntrst_grp1", };
1404static const char * const jtag_swdiotms_grp0[] = { "jtag_swdiotms_grp0", };
1405static const char * const jtag_swdiotms_grp1[] = { "jtag_swdiotms_grp1", };
1406static const char * const jtag_tck_grp0[] = { "jtag_tck_grp0", };
1407static const char * const jtag_tck_grp1[] = { "jtag_tck_grp1", };
1408static const char * const jtag_tdi_grp0[] = { "jtag_tdi_grp0", };
1409static const char * const jtag_tdi_grp1[] = { "jtag_tdi_grp1", };
1410static const char * const jtag_tdo_grp0[] = { "jtag_tdo_grp0", };
1411static const char * const jtag_tdo_grp1[] = { "jtag_tdo_grp1", };
1412static const char * const ks_kas_spi_grp0[] = { "ks_kas_spi_grp0", };
1413static const char * const ld_ldd_grp[] = { "ld_ldd_grp", };
1414static const char * const ld_ldd_16bit_grp[] = { "ld_ldd_16bit_grp", };
1415static const char * const ld_ldd_fck_grp[] = { "ld_ldd_fck_grp", };
1416static const char * const ld_ldd_lck_grp[] = { "ld_ldd_lck_grp", };
1417static const char * const lr_lcdrom_grp[] = { "lr_lcdrom_grp", };
1418static const char * const lvds_analog_grp[] = { "lvds_analog_grp", };
1419static const char * const nd_df_basic_grp[] = { "nd_df_basic_grp", };
1420static const char * const nd_df_wp_grp[] = { "nd_df_wp_grp", };
1421static const char * const nd_df_cs_grp[] = { "nd_df_cs_grp", };
1422static const char * const ps_grp[] = { "ps_grp", };
1423static const char * const ps_no_dir_grp[] = { "ps_no_dir_grp", };
1424static const char * const pwc_core_on_grp[] = { "pwc_core_on_grp", };
1425static const char * const pwc_ext_on_grp[] = { "pwc_ext_on_grp", };
1426static const char * const pwc_gpio3_clk_grp[] = { "pwc_gpio3_clk_grp", };
1427static const char * const pwc_io_on_grp[] = { "pwc_io_on_grp", };
1428static const char * const pwc_lowbatt_b_grp0[] = { "pwc_lowbatt_b_grp0", };
1429static const char * const pwc_mem_on_grp[] = { "pwc_mem_on_grp", };
1430static const char * const pwc_on_key_b_grp0[] = { "pwc_on_key_b_grp0", };
1431static const char * const pwc_wakeup_src0_grp[] = { "pwc_wakeup_src0_grp", };
1432static const char * const pwc_wakeup_src1_grp[] = { "pwc_wakeup_src1_grp", };
1433static const char * const pwc_wakeup_src2_grp[] = { "pwc_wakeup_src2_grp", };
1434static const char * const pwc_wakeup_src3_grp[] = { "pwc_wakeup_src3_grp", };
1435static const char * const pw_cko0_grp0[] = { "pw_cko0_grp0", };
1436static const char * const pw_cko0_grp1[] = { "pw_cko0_grp1", };
1437static const char * const pw_cko0_grp2[] = { "pw_cko0_grp2", };
1438static const char * const pw_cko0_grp3[] = { "pw_cko0_grp3", };
1439static const char * const pw_cko1_grp0[] = { "pw_cko1_grp0", };
1440static const char * const pw_cko1_grp1[] = { "pw_cko1_grp1", };
1441static const char * const pw_cko1_grp2[] = { "pw_cko1_grp2", };
1442static const char * const pw_i2s01_clk_grp0[] = { "pw_i2s01_clk_grp0", };
1443static const char * const pw_i2s01_clk_grp1[] = { "pw_i2s01_clk_grp1", };
1444static const char * const pw_i2s01_clk_grp2[] = { "pw_i2s01_clk_grp2", };
1445static const char * const pw_pwm0_grp0[] = { "pw_pwm0_grp0", };
1446static const char * const pw_pwm0_grp1[] = { "pw_pwm0_grp1", };
1447static const char * const pw_pwm1_grp0[] = { "pw_pwm1_grp0", };
1448static const char * const pw_pwm1_grp1[] = { "pw_pwm1_grp1", };
1449static const char * const pw_pwm1_grp2[] = { "pw_pwm1_grp2", };
1450static const char * const pw_pwm2_grp0[] = { "pw_pwm2_grp0", };
1451static const char * const pw_pwm2_grp1[] = { "pw_pwm2_grp1", };
1452static const char * const pw_pwm2_grp2[] = { "pw_pwm2_grp2", };
1453static const char * const pw_pwm3_grp0[] = { "pw_pwm3_grp0", };
1454static const char * const pw_pwm3_grp1[] = { "pw_pwm3_grp1", };
1455static const char * const pw_pwm_cpu_vol_grp0[] = { "pw_pwm_cpu_vol_grp0", };
1456static const char * const pw_pwm_cpu_vol_grp1[] = { "pw_pwm_cpu_vol_grp1", };
1457static const char * const pw_pwm_cpu_vol_grp2[] = { "pw_pwm_cpu_vol_grp2", };
1458static const char * const pw_backlight_grp0[] = { "pw_backlight_grp0", };
1459static const char * const pw_backlight_grp1[] = { "pw_backlight_grp1", };
1460static const char * const rg_eth_mac_grp[] = { "rg_eth_mac_grp", };
1461static const char * const rg_gmac_phy_intr_n_grp[] = {
1462				"rg_gmac_phy_intr_n_grp", };
1463static const char * const rg_rgmii_mac_grp[] = { "rg_rgmii_mac_grp", };
1464static const char * const rg_rgmii_phy_ref_clk_grp0[] = {
1465				"rg_rgmii_phy_ref_clk_grp0", };
1466static const char * const rg_rgmii_phy_ref_clk_grp1[] = {
1467				"rg_rgmii_phy_ref_clk_grp1", };
1468static const char * const sd0_grp[] = { "sd0_grp", };
1469static const char * const sd0_4bit_grp[] = { "sd0_4bit_grp", };
1470static const char * const sd1_grp[] = { "sd1_grp", };
1471static const char * const sd1_4bit_grp0[] = { "sd1_4bit_grp0", };
1472static const char * const sd1_4bit_grp1[] = { "sd1_4bit_grp1", };
1473static const char * const sd2_basic_grp[] = { "sd2_basic_grp", };
1474static const char * const sd2_cdb_grp0[] = { "sd2_cdb_grp0", };
1475static const char * const sd2_cdb_grp1[] = { "sd2_cdb_grp1", };
1476static const char * const sd2_wpb_grp0[] = { "sd2_wpb_grp0", };
1477static const char * const sd2_wpb_grp1[] = { "sd2_wpb_grp1", };
1478static const char * const sd3_9_grp[] = { "sd3_9_grp", };
1479static const char * const sd5_grp[] = { "sd5_grp", };
1480static const char * const sd6_grp0[] = { "sd6_grp0", };
1481static const char * const sd6_grp1[] = { "sd6_grp1", };
1482static const char * const sp0_ext_ldo_on_grp[] = { "sp0_ext_ldo_on_grp", };
1483static const char * const sp0_qspi_grp[] = { "sp0_qspi_grp", };
1484static const char * const sp1_spi_grp[] = { "sp1_spi_grp", };
1485static const char * const tpiu_trace_grp[] = { "tpiu_trace_grp", };
1486static const char * const uart0_grp[] = { "uart0_grp", };
1487static const char * const uart0_nopause_grp[] = { "uart0_nopause_grp", };
1488static const char * const uart1_grp[] = { "uart1_grp", };
1489static const char * const uart2_cts_grp0[] = { "uart2_cts_grp0", };
1490static const char * const uart2_cts_grp1[] = { "uart2_cts_grp1", };
1491static const char * const uart2_rts_grp0[] = { "uart2_rts_grp0", };
1492static const char * const uart2_rts_grp1[] = { "uart2_rts_grp1", };
1493static const char * const uart2_rxd_grp0[] = { "uart2_rxd_grp0", };
1494static const char * const uart2_rxd_grp1[] = { "uart2_rxd_grp1", };
1495static const char * const uart2_rxd_grp2[] = { "uart2_rxd_grp2", };
1496static const char * const uart2_txd_grp0[] = { "uart2_txd_grp0", };
1497static const char * const uart2_txd_grp1[] = { "uart2_txd_grp1", };
1498static const char * const uart2_txd_grp2[] = { "uart2_txd_grp2", };
1499static const char * const uart3_cts_grp0[] = { "uart3_cts_grp0", };
1500static const char * const uart3_cts_grp1[] = { "uart3_cts_grp1", };
1501static const char * const uart3_cts_grp2[] = { "uart3_cts_grp2", };
1502static const char * const uart3_rts_grp0[] = { "uart3_rts_grp0", };
1503static const char * const uart3_rts_grp1[] = { "uart3_rts_grp1", };
1504static const char * const uart3_rts_grp2[] = { "uart3_rts_grp2", };
1505static const char * const uart3_rxd_grp0[] = { "uart3_rxd_grp0", };
1506static const char * const uart3_rxd_grp1[] = { "uart3_rxd_grp1", };
1507static const char * const uart3_rxd_grp2[] = { "uart3_rxd_grp2", };
1508static const char * const uart3_txd_grp0[] = { "uart3_txd_grp0", };
1509static const char * const uart3_txd_grp1[] = { "uart3_txd_grp1", };
1510static const char * const uart3_txd_grp2[] = { "uart3_txd_grp2", };
1511static const char * const uart4_basic_grp[] = { "uart4_basic_grp", };
1512static const char * const uart4_cts_grp0[] = { "uart4_cts_grp0", };
1513static const char * const uart4_cts_grp1[] = { "uart4_cts_grp1", };
1514static const char * const uart4_cts_grp2[] = { "uart4_cts_grp2", };
1515static const char * const uart4_rts_grp0[] = { "uart4_rts_grp0", };
1516static const char * const uart4_rts_grp1[] = { "uart4_rts_grp1", };
1517static const char * const uart4_rts_grp2[] = { "uart4_rts_grp2", };
1518static const char * const usb0_drvvbus_grp0[] = { "usb0_drvvbus_grp0", };
1519static const char * const usb0_drvvbus_grp1[] = { "usb0_drvvbus_grp1", };
1520static const char * const usb1_drvvbus_grp0[] = { "usb1_drvvbus_grp0", };
1521static const char * const usb1_drvvbus_grp1[] = { "usb1_drvvbus_grp1", };
1522static const char * const visbus_dout_grp[] = { "visbus_dout_grp", };
1523static const char * const vi_vip1_grp[] = { "vi_vip1_grp", };
1524static const char * const vi_vip1_ext_grp[] = { "vi_vip1_ext_grp", };
1525static const char * const vi_vip1_low8bit_grp[] = { "vi_vip1_low8bit_grp", };
1526static const char * const vi_vip1_high8bit_grp[] = { "vi_vip1_high8bit_grp", };
1527
1528static 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
1550static 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
1555static 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
1590static 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
1595static 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
1627static 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
1632static 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
1662static 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
1667static 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
1680static 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
1685static 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
1717static 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
1722static 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
1739static 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
1744static 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
1751static 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
1756static struct atlas7_pad_mux audio_digmic_grp0_pad_mux[] = {
1757	MUX(1, 51, 3, 0xa10, 20, 0xa90, 20),
1758};
1759
1760static 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
1765static struct atlas7_pad_mux audio_digmic_grp1_pad_mux[] = {
1766	MUX(1, 122, 5, 0xa10, 20, 0xa90, 20),
1767};
1768
1769static 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
1774static struct atlas7_pad_mux audio_digmic_grp2_pad_mux[] = {
1775	MUX(1, 161, 7, 0xa10, 20, 0xa90, 20),
1776};
1777
1778static 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
1783static 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
1812static 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
1817static 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
1827static 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
1832static 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
1840static 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
1845static struct atlas7_pad_mux audio_i2s_extclk_grp_pad_mux[] = {
1846	MUX(1, 112, 2, N, N, N, N),
1847};
1848
1849static 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
1854static struct atlas7_pad_mux audio_spdif_out_grp0_pad_mux[] = {
1855	MUX(1, 112, 3, N, N, N, N),
1856};
1857
1858static 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
1863static struct atlas7_pad_mux audio_spdif_out_grp1_pad_mux[] = {
1864	MUX(1, 116, 3, N, N, N, N),
1865};
1866
1867static 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
1872static struct atlas7_pad_mux audio_spdif_out_grp2_pad_mux[] = {
1873	MUX(1, 142, 3, N, N, N, N),
1874};
1875
1876static 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
1881static 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
1888static 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
1893static struct atlas7_pad_mux audio_uart0_urfs_grp0_pad_mux[] = {
1894	MUX(1, 117, 5, 0xa10, 28, 0xa90, 28),
1895};
1896
1897static 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
1902static struct atlas7_pad_mux audio_uart0_urfs_grp1_pad_mux[] = {
1903	MUX(1, 139, 3, 0xa10, 28, 0xa90, 28),
1904};
1905
1906static 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
1911static struct atlas7_pad_mux audio_uart0_urfs_grp2_pad_mux[] = {
1912	MUX(1, 163, 3, 0xa10, 28, 0xa90, 28),
1913};
1914
1915static 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
1920static struct atlas7_pad_mux audio_uart0_urfs_grp3_pad_mux[] = {
1921	MUX(1, 162, 6, 0xa10, 28, 0xa90, 28),
1922};
1923
1924static 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
1929static 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
1936static 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
1941static struct atlas7_pad_mux audio_uart1_urfs_grp0_pad_mux[] = {
1942	MUX(1, 117, 6, 0xa10, 29, 0xa90, 29),
1943};
1944
1945static 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
1950static struct atlas7_pad_mux audio_uart1_urfs_grp1_pad_mux[] = {
1951	MUX(1, 140, 3, 0xa10, 29, 0xa90, 29),
1952};
1953
1954static 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
1959static struct atlas7_pad_mux audio_uart1_urfs_grp2_pad_mux[] = {
1960	MUX(1, 163, 4, 0xa10, 29, 0xa90, 29),
1961};
1962
1963static 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
1968static struct atlas7_pad_mux audio_uart2_urfs_grp0_pad_mux[] = {
1969	MUX(1, 139, 4, 0xa10, 30, 0xa90, 30),
1970};
1971
1972static 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
1977static struct atlas7_pad_mux audio_uart2_urfs_grp1_pad_mux[] = {
1978	MUX(1, 163, 6, 0xa10, 30, 0xa90, 30),
1979};
1980
1981static 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
1986static struct atlas7_pad_mux audio_uart2_urfs_grp2_pad_mux[] = {
1987	MUX(1, 96, 3, 0xa10, 30, 0xa90, 30),
1988};
1989
1990static 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
1995static struct atlas7_pad_mux audio_uart2_urxd_grp0_pad_mux[] = {
1996	MUX(1, 20, 2, 0xa00, 24, 0xa80, 24),
1997};
1998
1999static 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
2004static struct atlas7_pad_mux audio_uart2_urxd_grp1_pad_mux[] = {
2005	MUX(1, 109, 2, 0xa00, 24, 0xa80, 24),
2006};
2007
2008static 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
2013static struct atlas7_pad_mux audio_uart2_urxd_grp2_pad_mux[] = {
2014	MUX(1, 93, 3, 0xa00, 24, 0xa80, 24),
2015};
2016
2017static 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
2022static struct atlas7_pad_mux audio_uart2_usclk_grp0_pad_mux[] = {
2023	MUX(1, 19, 2, 0xa00, 23, 0xa80, 23),
2024};
2025
2026static 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
2031static struct atlas7_pad_mux audio_uart2_usclk_grp1_pad_mux[] = {
2032	MUX(1, 101, 2, 0xa00, 23, 0xa80, 23),
2033};
2034
2035static 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
2040static struct atlas7_pad_mux audio_uart2_usclk_grp2_pad_mux[] = {
2041	MUX(1, 91, 3, 0xa00, 23, 0xa80, 23),
2042};
2043
2044static 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
2049static struct atlas7_pad_mux audio_uart2_utfs_grp0_pad_mux[] = {
2050	MUX(1, 18, 2, 0xa00, 22, 0xa80, 22),
2051};
2052
2053static 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
2058static struct atlas7_pad_mux audio_uart2_utfs_grp1_pad_mux[] = {
2059	MUX(1, 111, 2, 0xa00, 22, 0xa80, 22),
2060};
2061
2062static 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
2067static struct atlas7_pad_mux audio_uart2_utfs_grp2_pad_mux[] = {
2068	MUX(1, 94, 3, 0xa00, 22, 0xa80, 22),
2069};
2070
2071static 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
2076static struct atlas7_pad_mux audio_uart2_utxd_grp0_pad_mux[] = {
2077	MUX(1, 21, 2, 0xa00, 25, 0xa80, 25),
2078};
2079
2080static 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
2085static struct atlas7_pad_mux audio_uart2_utxd_grp1_pad_mux[] = {
2086	MUX(1, 110, 2, 0xa00, 25, 0xa80, 25),
2087};
2088
2089static 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
2094static struct atlas7_pad_mux audio_uart2_utxd_grp2_pad_mux[] = {
2095	MUX(1, 92, 3, 0xa00, 25, 0xa80, 25),
2096};
2097
2098static 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
2103static struct atlas7_pad_mux c_can_trnsvr_en_grp0_pad_mux[] = {
2104	MUX(0, 2, 6, N, N, N, N),
2105};
2106
2107static 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
2112static struct atlas7_pad_mux c_can_trnsvr_en_grp1_pad_mux[] = {
2113	MUX(0, 0, 2, N, N, N, N),
2114};
2115
2116static 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
2121static struct atlas7_pad_mux c_can_trnsvr_intr_grp_pad_mux[] = {
2122	MUX(0, 1, 2, N, N, N, N),
2123};
2124
2125static 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
2130static struct atlas7_pad_mux c_can_trnsvr_stb_n_grp_pad_mux[] = {
2131	MUX(0, 3, 6, N, N, N, N),
2132};
2133
2134static 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
2139static struct atlas7_pad_mux c0_can_rxd_trnsv0_grp_pad_mux[] = {
2140	MUX(0, 11, 1, 0xa08, 9, 0xa88, 9),
2141};
2142
2143static 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
2148static struct atlas7_pad_mux c0_can_rxd_trnsv1_grp_pad_mux[] = {
2149	MUX(0, 2, 5, 0xa10, 9, 0xa90, 9),
2150};
2151
2152static 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
2157static struct atlas7_pad_mux c0_can_txd_trnsv0_grp_pad_mux[] = {
2158	MUX(0, 10, 1, N, N, N, N),
2159};
2160
2161static 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
2166static struct atlas7_pad_mux c0_can_txd_trnsv1_grp_pad_mux[] = {
2167	MUX(0, 3, 5, N, N, N, N),
2168};
2169
2170static 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
2175static struct atlas7_pad_mux c1_can_rxd_grp0_pad_mux[] = {
2176	MUX(1, 138, 2, 0xa00, 4, 0xa80, 4),
2177};
2178
2179static 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
2184static struct atlas7_pad_mux c1_can_rxd_grp1_pad_mux[] = {
2185	MUX(1, 147, 2, 0xa00, 4, 0xa80, 4),
2186};
2187
2188static 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
2193static struct atlas7_pad_mux c1_can_rxd_grp2_pad_mux[] = {
2194	MUX(0, 2, 2, 0xa00, 4, 0xa80, 4),
2195};
2196
2197static 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
2202static struct atlas7_pad_mux c1_can_rxd_grp3_pad_mux[] = {
2203	MUX(1, 162, 4, 0xa00, 4, 0xa80, 4),
2204};
2205
2206static 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
2211static struct atlas7_pad_mux c1_can_txd_grp0_pad_mux[] = {
2212	MUX(1, 137, 2, N, N, N, N),
2213};
2214
2215static 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
2220static struct atlas7_pad_mux c1_can_txd_grp1_pad_mux[] = {
2221	MUX(1, 146, 2, N, N, N, N),
2222};
2223
2224static 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
2229static struct atlas7_pad_mux c1_can_txd_grp2_pad_mux[] = {
2230	MUX(0, 3, 2, N, N, N, N),
2231};
2232
2233static 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
2238static struct atlas7_pad_mux c1_can_txd_grp3_pad_mux[] = {
2239	MUX(1, 161, 4, N, N, N, N),
2240};
2241
2242static 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
2247static 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
2260static 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
2265static 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
2274static 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
2279static 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
2286static 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
2291static 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
2298static 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
2303static 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
2310static 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
2315static 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
2330static 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
2335static 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
2344static 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
2349static 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
2356static 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
2361static 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
2374static 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
2379static 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
2386static 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
2391static 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
2396static 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
2401static 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
2406static 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
2411static 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
2416static 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
2421static 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
2426static 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
2431static 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
2438static 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
2443static 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
2450static 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
2455static 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
2462static 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
2467static 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
2486static 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
2491static struct atlas7_pad_mux cvbs_dbg_test_grp0_pad_mux[] = {
2492	MUX(1, 57, 3, N, N, N, N),
2493};
2494
2495static 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
2500static struct atlas7_pad_mux cvbs_dbg_test_grp1_pad_mux[] = {
2501	MUX(1, 58, 3, N, N, N, N),
2502};
2503
2504static 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
2509static struct atlas7_pad_mux cvbs_dbg_test_grp2_pad_mux[] = {
2510	MUX(1, 59, 3, N, N, N, N),
2511};
2512
2513static 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
2518static struct atlas7_pad_mux cvbs_dbg_test_grp3_pad_mux[] = {
2519	MUX(1, 60, 3, N, N, N, N),
2520};
2521
2522static 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
2527static struct atlas7_pad_mux cvbs_dbg_test_grp4_pad_mux[] = {
2528	MUX(1, 61, 3, N, N, N, N),
2529};
2530
2531static 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
2536static struct atlas7_pad_mux cvbs_dbg_test_grp5_pad_mux[] = {
2537	MUX(1, 62, 3, N, N, N, N),
2538};
2539
2540static 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
2545static struct atlas7_pad_mux cvbs_dbg_test_grp6_pad_mux[] = {
2546	MUX(1, 63, 3, N, N, N, N),
2547};
2548
2549static 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
2554static struct atlas7_pad_mux cvbs_dbg_test_grp7_pad_mux[] = {
2555	MUX(1, 64, 3, N, N, N, N),
2556};
2557
2558static 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
2563static struct atlas7_pad_mux cvbs_dbg_test_grp8_pad_mux[] = {
2564	MUX(1, 65, 3, N, N, N, N),
2565};
2566
2567static 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
2572static struct atlas7_pad_mux cvbs_dbg_test_grp9_pad_mux[] = {
2573	MUX(1, 66, 3, N, N, N, N),
2574};
2575
2576static 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
2581static struct atlas7_pad_mux cvbs_dbg_test_grp10_pad_mux[] = {
2582	MUX(1, 67, 3, N, N, N, N),
2583};
2584
2585static 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
2590static struct atlas7_pad_mux cvbs_dbg_test_grp11_pad_mux[] = {
2591	MUX(1, 68, 3, N, N, N, N),
2592};
2593
2594static 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
2599static struct atlas7_pad_mux cvbs_dbg_test_grp12_pad_mux[] = {
2600	MUX(1, 69, 3, N, N, N, N),
2601};
2602
2603static 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
2608static struct atlas7_pad_mux cvbs_dbg_test_grp13_pad_mux[] = {
2609	MUX(1, 70, 3, N, N, N, N),
2610};
2611
2612static 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
2617static struct atlas7_pad_mux cvbs_dbg_test_grp14_pad_mux[] = {
2618	MUX(1, 71, 3, N, N, N, N),
2619};
2620
2621static 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
2626static struct atlas7_pad_mux cvbs_dbg_test_grp15_pad_mux[] = {
2627	MUX(1, 72, 3, N, N, N, N),
2628};
2629
2630static 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
2635static 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
2644static 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
2649static 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
2672static 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
2677static struct atlas7_pad_mux gn_gnss_eclk_grp_pad_mux[] = {
2678	MUX(1, 113, 4, N, N, N, N),
2679};
2680
2681static 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
2686static struct atlas7_pad_mux gn_gnss_irq1_grp0_pad_mux[] = {
2687	MUX(1, 112, 4, 0xa08, 10, 0xa88, 10),
2688};
2689
2690static 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
2695static struct atlas7_pad_mux gn_gnss_irq2_grp0_pad_mux[] = {
2696	MUX(1, 118, 4, 0xa08, 11, 0xa88, 11),
2697};
2698
2699static 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
2704static struct atlas7_pad_mux gn_gnss_tm_grp_pad_mux[] = {
2705	MUX(1, 115, 4, N, N, N, N),
2706};
2707
2708static 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
2713static struct atlas7_pad_mux gn_gnss_tsync_grp_pad_mux[] = {
2714	MUX(1, 114, 4, N, N, N, N),
2715};
2716
2717static 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
2722static 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
2741static 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
2746static 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
2753static 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
2758static 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
2765static 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
2770static struct atlas7_pad_mux gn_trg_shutdown_grp0_pad_mux[] = {
2771	MUX(1, 30, 1, N, N, N, N),
2772};
2773
2774static 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
2779static struct atlas7_pad_mux gn_trg_shutdown_grp1_pad_mux[] = {
2780	MUX(1, 83, 3, N, N, N, N),
2781};
2782
2783static 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
2788static struct atlas7_pad_mux gn_trg_shutdown_grp2_pad_mux[] = {
2789	MUX(1, 117, 4, N, N, N, N),
2790};
2791
2792static 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
2797static struct atlas7_pad_mux gn_trg_shutdown_grp3_pad_mux[] = {
2798	MUX(1, 123, 5, N, N, N, N),
2799};
2800
2801static 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
2806static 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
2811static 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
2816static 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
2821static 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
2826static 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
2833static 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
2838static 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
2843static 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
2848static struct atlas7_pad_mux i2s1_rxd0_grp0_pad_mux[] = {
2849	MUX(1, 61, 4, 0xa10, 17, 0xa90, 17),
2850};
2851
2852static 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
2857static struct atlas7_pad_mux i2s1_rxd0_grp1_pad_mux[] = {
2858	MUX(1, 131, 4, 0xa10, 17, 0xa90, 17),
2859};
2860
2861static 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
2866static struct atlas7_pad_mux i2s1_rxd0_grp2_pad_mux[] = {
2867	MUX(1, 129, 2, 0xa10, 17, 0xa90, 17),
2868};
2869
2870static 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
2875static struct atlas7_pad_mux i2s1_rxd0_grp3_pad_mux[] = {
2876	MUX(1, 117, 7, 0xa10, 17, 0xa90, 17),
2877};
2878
2879static 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
2884static struct atlas7_pad_mux i2s1_rxd0_grp4_pad_mux[] = {
2885	MUX(1, 83, 4, 0xa10, 17, 0xa90, 17),
2886};
2887
2888static 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
2893static struct atlas7_pad_mux i2s1_rxd1_grp0_pad_mux[] = {
2894	MUX(1, 72, 4, 0xa10, 18, 0xa90, 18),
2895};
2896
2897static 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
2902static struct atlas7_pad_mux i2s1_rxd1_grp1_pad_mux[] = {
2903	MUX(1, 132, 4, 0xa10, 18, 0xa90, 18),
2904};
2905
2906static 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
2911static struct atlas7_pad_mux i2s1_rxd1_grp2_pad_mux[] = {
2912	MUX(1, 130, 2, 0xa10, 18, 0xa90, 18),
2913};
2914
2915static 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
2920static struct atlas7_pad_mux i2s1_rxd1_grp3_pad_mux[] = {
2921	MUX(1, 118, 7, 0xa10, 18, 0xa90, 18),
2922};
2923
2924static 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
2929static struct atlas7_pad_mux i2s1_rxd1_grp4_pad_mux[] = {
2930	MUX(1, 84, 4, 0xa10, 18, 0xa90, 18),
2931};
2932
2933static 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
2938static struct atlas7_pad_mux jtag_jt_dbg_nsrst_grp_pad_mux[] = {
2939	MUX(1, 125, 5, 0xa08, 2, 0xa88, 2),
2940};
2941
2942static 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
2947static struct atlas7_pad_mux jtag_ntrst_grp0_pad_mux[] = {
2948	MUX(0, 4, 3, 0xa08, 3, 0xa88, 3),
2949};
2950
2951static 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
2956static struct atlas7_pad_mux jtag_ntrst_grp1_pad_mux[] = {
2957	MUX(1, 163, 1, 0xa08, 3, 0xa88, 3),
2958};
2959
2960static 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
2965static struct atlas7_pad_mux jtag_swdiotms_grp0_pad_mux[] = {
2966	MUX(0, 2, 3, 0xa10, 10, 0xa90, 10),
2967};
2968
2969static 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
2974static struct atlas7_pad_mux jtag_swdiotms_grp1_pad_mux[] = {
2975	MUX(1, 160, 1, 0xa10, 10, 0xa90, 10),
2976};
2977
2978static 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
2983static struct atlas7_pad_mux jtag_tck_grp0_pad_mux[] = {
2984	MUX(0, 0, 3, 0xa10, 11, 0xa90, 11),
2985};
2986
2987static 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
2992static struct atlas7_pad_mux jtag_tck_grp1_pad_mux[] = {
2993	MUX(1, 161, 1, 0xa10, 11, 0xa90, 11),
2994};
2995
2996static 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
3001static struct atlas7_pad_mux jtag_tdi_grp0_pad_mux[] = {
3002	MUX(0, 1, 3, 0xa10, 31, 0xa90, 31),
3003};
3004
3005static 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
3010static struct atlas7_pad_mux jtag_tdi_grp1_pad_mux[] = {
3011	MUX(1, 162, 1, 0xa10, 31, 0xa90, 31),
3012};
3013
3014static 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
3019static struct atlas7_pad_mux jtag_tdo_grp0_pad_mux[] = {
3020	MUX(0, 3, 3, N, N, N, N),
3021};
3022
3023static 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
3028static struct atlas7_pad_mux jtag_tdo_grp1_pad_mux[] = {
3029	MUX(1, 159, 1, N, N, N, N),
3030};
3031
3032static 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
3037static 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
3044static 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
3049static 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
3078static 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
3083static 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
3104static 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
3109static struct atlas7_pad_mux ld_ldd_fck_grp_pad_mux[] = {
3110	MUX(1, 55, 1, N, N, N, N),
3111};
3112
3113static 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
3118static struct atlas7_pad_mux ld_ldd_lck_grp_pad_mux[] = {
3119	MUX(1, 54, 1, N, N, N, N),
3120};
3121
3122static 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
3127static 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
3151static 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
3156static 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
3169static 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
3174static 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
3192static 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
3197static struct atlas7_pad_mux nd_df_wp_grp_pad_mux[] = {
3198	MUX(1, 124, 4, N, N, N, N),
3199};
3200
3201static 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
3206static struct atlas7_pad_mux nd_df_cs_grp_pad_mux[] = {
3207	MUX(1, 51, 1, N, N, N, N),
3208};
3209
3210static 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
3215static 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
3221static 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
3226static struct atlas7_pad_mux ps_no_dir_grp_pad_mux[] = {
3227	MUX(1, 119, 2, N, N, N, N),
3228};
3229
3230static 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
3235static struct atlas7_pad_mux pwc_core_on_grp_pad_mux[] = {
3236	MUX(0, 8, 1, N, N, N, N),
3237};
3238
3239static 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
3244static struct atlas7_pad_mux pwc_ext_on_grp_pad_mux[] = {
3245	MUX(0, 6, 1, N, N, N, N),
3246};
3247
3248static 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
3253static struct atlas7_pad_mux pwc_gpio3_clk_grp_pad_mux[] = {
3254	MUX(0, 3, 4, N, N, N, N),
3255};
3256
3257static 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
3262static struct atlas7_pad_mux pwc_io_on_grp_pad_mux[] = {
3263	MUX(0, 9, 1, N, N, N, N),
3264};
3265
3266static 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
3271static struct atlas7_pad_mux pwc_lowbatt_b_grp0_pad_mux[] = {
3272	MUX(0, 4, 1, 0xa08, 4, 0xa88, 4),
3273};
3274
3275static 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
3280static struct atlas7_pad_mux pwc_mem_on_grp_pad_mux[] = {
3281	MUX(0, 7, 1, N, N, N, N),
3282};
3283
3284static 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
3289static struct atlas7_pad_mux pwc_on_key_b_grp0_pad_mux[] = {
3290	MUX(0, 5, 1, 0xa08, 5, 0xa88, 5),
3291};
3292
3293static 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
3298static struct atlas7_pad_mux pwc_wakeup_src0_grp_pad_mux[] = {
3299	MUX(0, 0, 1, N, N, N, N),
3300};
3301
3302static 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
3307static struct atlas7_pad_mux pwc_wakeup_src1_grp_pad_mux[] = {
3308	MUX(0, 1, 1, N, N, N, N),
3309};
3310
3311static 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
3316static struct atlas7_pad_mux pwc_wakeup_src2_grp_pad_mux[] = {
3317	MUX(0, 2, 1, N, N, N, N),
3318};
3319
3320static 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
3325static struct atlas7_pad_mux pwc_wakeup_src3_grp_pad_mux[] = {
3326	MUX(0, 3, 1, N, N, N, N),
3327};
3328
3329static 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
3334static struct atlas7_pad_mux pw_cko0_grp0_pad_mux[] = {
3335	MUX(1, 123, 3, N, N, N, N),
3336};
3337
3338static 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
3343static struct atlas7_pad_mux pw_cko0_grp1_pad_mux[] = {
3344	MUX(1, 101, 4, N, N, N, N),
3345};
3346
3347static 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
3352static struct atlas7_pad_mux pw_cko0_grp2_pad_mux[] = {
3353	MUX(1, 82, 2, N, N, N, N),
3354};
3355
3356static 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
3361static struct atlas7_pad_mux pw_cko0_grp3_pad_mux[] = {
3362	MUX(1, 162, 5, N, N, N, N),
3363};
3364
3365static 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
3370static struct atlas7_pad_mux pw_cko1_grp0_pad_mux[] = {
3371	MUX(1, 124, 3, N, N, N, N),
3372};
3373
3374static 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
3379static struct atlas7_pad_mux pw_cko1_grp1_pad_mux[] = {
3380	MUX(1, 110, 4, N, N, N, N),
3381};
3382
3383static 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
3388static struct atlas7_pad_mux pw_cko1_grp2_pad_mux[] = {
3389	MUX(1, 163, 5, N, N, N, N),
3390};
3391
3392static 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
3397static struct atlas7_pad_mux pw_i2s01_clk_grp0_pad_mux[] = {
3398	MUX(1, 125, 3, N, N, N, N),
3399};
3400
3401static 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
3406static struct atlas7_pad_mux pw_i2s01_clk_grp1_pad_mux[] = {
3407	MUX(1, 117, 3, N, N, N, N),
3408};
3409
3410static 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
3415static struct atlas7_pad_mux pw_i2s01_clk_grp2_pad_mux[] = {
3416	MUX(1, 132, 2, N, N, N, N),
3417};
3418
3419static 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
3424static struct atlas7_pad_mux pw_pwm0_grp0_pad_mux[] = {
3425	MUX(1, 119, 3, N, N, N, N),
3426};
3427
3428static 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
3433static struct atlas7_pad_mux pw_pwm0_grp1_pad_mux[] = {
3434	MUX(1, 159, 5, N, N, N, N),
3435};
3436
3437static 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
3442static struct atlas7_pad_mux pw_pwm1_grp0_pad_mux[] = {
3443	MUX(1, 120, 3, N, N, N, N),
3444};
3445
3446static 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
3451static struct atlas7_pad_mux pw_pwm1_grp1_pad_mux[] = {
3452	MUX(1, 160, 5, N, N, N, N),
3453};
3454
3455static 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
3460static struct atlas7_pad_mux pw_pwm1_grp2_pad_mux[] = {
3461	MUX(1, 131, 2, N, N, N, N),
3462};
3463
3464static 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
3469static struct atlas7_pad_mux pw_pwm2_grp0_pad_mux[] = {
3470	MUX(1, 121, 3, N, N, N, N),
3471};
3472
3473static 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
3478static struct atlas7_pad_mux pw_pwm2_grp1_pad_mux[] = {
3479	MUX(1, 98, 3, N, N, N, N),
3480};
3481
3482static 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
3487static struct atlas7_pad_mux pw_pwm2_grp2_pad_mux[] = {
3488	MUX(1, 161, 5, N, N, N, N),
3489};
3490
3491static 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
3496static struct atlas7_pad_mux pw_pwm3_grp0_pad_mux[] = {
3497	MUX(1, 122, 3, N, N, N, N),
3498};
3499
3500static 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
3505static struct atlas7_pad_mux pw_pwm3_grp1_pad_mux[] = {
3506	MUX(1, 73, 4, N, N, N, N),
3507};
3508
3509static 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
3514static struct atlas7_pad_mux pw_pwm_cpu_vol_grp0_pad_mux[] = {
3515	MUX(1, 121, 3, N, N, N, N),
3516};
3517
3518static 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
3523static struct atlas7_pad_mux pw_pwm_cpu_vol_grp1_pad_mux[] = {
3524	MUX(1, 98, 3, N, N, N, N),
3525};
3526
3527static 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
3532static struct atlas7_pad_mux pw_pwm_cpu_vol_grp2_pad_mux[] = {
3533	MUX(1, 161, 5, N, N, N, N),
3534};
3535
3536static 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
3541static struct atlas7_pad_mux pw_backlight_grp0_pad_mux[] = {
3542	MUX(1, 122, 3, N, N, N, N),
3543};
3544
3545static 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
3550static struct atlas7_pad_mux pw_backlight_grp1_pad_mux[] = {
3551	MUX(1, 73, 4, N, N, N, N),
3552};
3553
3554static 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
3559static 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
3574static 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
3579static struct atlas7_pad_mux rg_gmac_phy_intr_n_grp_pad_mux[] = {
3580	MUX(1, 111, 1, 0xa08, 13, 0xa88, 13),
3581};
3582
3583static 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
3588static 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
3593static 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
3598static struct atlas7_pad_mux rg_rgmii_phy_ref_clk_grp0_pad_mux[] = {
3599	MUX(1, 111, 5, N, N, N, N),
3600};
3601
3602static 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
3607static struct atlas7_pad_mux rg_rgmii_phy_ref_clk_grp1_pad_mux[] = {
3608	MUX(1, 53, 4, N, N, N, N),
3609};
3610
3611static 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
3616static 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
3629static 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
3634static 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
3643static 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
3648static 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
3661static 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
3666static 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
3675static 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
3680static 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
3689static 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
3694static 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
3703static 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
3708static struct atlas7_pad_mux sd2_cdb_grp0_pad_mux[] = {
3709	MUX(1, 124, 2, 0xa08, 7, 0xa88, 7),
3710};
3711
3712static 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
3717static struct atlas7_pad_mux sd2_cdb_grp1_pad_mux[] = {
3718	MUX(1, 161, 6, 0xa08, 7, 0xa88, 7),
3719};
3720
3721static 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
3726static struct atlas7_pad_mux sd2_wpb_grp0_pad_mux[] = {
3727	MUX(1, 123, 2, 0xa10, 6, 0xa90, 6),
3728};
3729
3730static 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
3735static struct atlas7_pad_mux sd2_wpb_grp1_pad_mux[] = {
3736	MUX(1, 163, 7, 0xa10, 6, 0xa90, 6),
3737};
3738
3739static 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
3744static 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
3753static 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
3758static 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
3767static 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
3772static 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
3781static 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
3786static 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
3795static 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
3800static struct atlas7_pad_mux sp0_ext_ldo_on_grp_pad_mux[] = {
3801	MUX(0, 4, 2, N, N, N, N),
3802};
3803
3804static 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
3809static 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
3818static 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
3823static 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
3830static 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
3835static 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
3856static 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
3861static 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
3868static 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
3873static 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
3878static 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
3883static 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
3888static 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
3893static struct atlas7_pad_mux uart2_cts_grp0_pad_mux[] = {
3894	MUX(1, 132, 3, 0xa10, 2, 0xa90, 2),
3895};
3896
3897static 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
3902static struct atlas7_pad_mux uart2_cts_grp1_pad_mux[] = {
3903	MUX(1, 162, 2, 0xa10, 2, 0xa90, 2),
3904};
3905
3906static 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
3911static struct atlas7_pad_mux uart2_rts_grp0_pad_mux[] = {
3912	MUX(1, 131, 3, N, N, N, N),
3913};
3914
3915static 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
3920static struct atlas7_pad_mux uart2_rts_grp1_pad_mux[] = {
3921	MUX(1, 161, 2, N, N, N, N),
3922};
3923
3924static 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
3929static struct atlas7_pad_mux uart2_rxd_grp0_pad_mux[] = {
3930	MUX(0, 11, 2, 0xa10, 5, 0xa90, 5),
3931};
3932
3933static 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
3938static struct atlas7_pad_mux uart2_rxd_grp1_pad_mux[] = {
3939	MUX(1, 160, 2, 0xa10, 5, 0xa90, 5),
3940};
3941
3942static 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
3947static struct atlas7_pad_mux uart2_rxd_grp2_pad_mux[] = {
3948	MUX(1, 130, 3, 0xa10, 5, 0xa90, 5),
3949};
3950
3951static 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
3956static struct atlas7_pad_mux uart2_txd_grp0_pad_mux[] = {
3957	MUX(0, 10, 2, N, N, N, N),
3958};
3959
3960static 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
3965static struct atlas7_pad_mux uart2_txd_grp1_pad_mux[] = {
3966	MUX(1, 159, 2, N, N, N, N),
3967};
3968
3969static 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
3974static struct atlas7_pad_mux uart2_txd_grp2_pad_mux[] = {
3975	MUX(1, 129, 3, N, N, N, N),
3976};
3977
3978static 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
3983static struct atlas7_pad_mux uart3_cts_grp0_pad_mux[] = {
3984	MUX(1, 125, 2, 0xa08, 0, 0xa88, 0),
3985};
3986
3987static 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
3992static struct atlas7_pad_mux uart3_cts_grp1_pad_mux[] = {
3993	MUX(1, 111, 4, 0xa08, 0, 0xa88, 0),
3994};
3995
3996static 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
4001static struct atlas7_pad_mux uart3_cts_grp2_pad_mux[] = {
4002	MUX(1, 140, 2, 0xa08, 0, 0xa88, 0),
4003};
4004
4005static 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
4010static struct atlas7_pad_mux uart3_rts_grp0_pad_mux[] = {
4011	MUX(1, 126, 2, N, N, N, N),
4012};
4013
4014static 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
4019static struct atlas7_pad_mux uart3_rts_grp1_pad_mux[] = {
4020	MUX(1, 109, 4, N, N, N, N),
4021};
4022
4023static 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
4028static struct atlas7_pad_mux uart3_rts_grp2_pad_mux[] = {
4029	MUX(1, 139, 2, N, N, N, N),
4030};
4031
4032static 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
4037static struct atlas7_pad_mux uart3_rxd_grp0_pad_mux[] = {
4038	MUX(1, 138, 1, 0xa00, 5, 0xa80, 5),
4039};
4040
4041static 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
4046static struct atlas7_pad_mux uart3_rxd_grp1_pad_mux[] = {
4047	MUX(1, 84, 2, 0xa00, 5, 0xa80, 5),
4048};
4049
4050static 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
4055static struct atlas7_pad_mux uart3_rxd_grp2_pad_mux[] = {
4056	MUX(1, 162, 3, 0xa00, 5, 0xa80, 5),
4057};
4058
4059static 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
4064static struct atlas7_pad_mux uart3_txd_grp0_pad_mux[] = {
4065	MUX(1, 137, 1, N, N, N, N),
4066};
4067
4068static 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
4073static struct atlas7_pad_mux uart3_txd_grp1_pad_mux[] = {
4074	MUX(1, 83, 2, N, N, N, N),
4075};
4076
4077static 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
4082static struct atlas7_pad_mux uart3_txd_grp2_pad_mux[] = {
4083	MUX(1, 161, 3, N, N, N, N),
4084};
4085
4086static 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
4091static 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
4096static 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
4101static struct atlas7_pad_mux uart4_cts_grp0_pad_mux[] = {
4102	MUX(1, 122, 4, 0xa08, 1, 0xa88, 1),
4103};
4104
4105static 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
4110static struct atlas7_pad_mux uart4_cts_grp1_pad_mux[] = {
4111	MUX(1, 100, 4, 0xa08, 1, 0xa88, 1),
4112};
4113
4114static 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
4119static struct atlas7_pad_mux uart4_cts_grp2_pad_mux[] = {
4120	MUX(1, 117, 2, 0xa08, 1, 0xa88, 1),
4121};
4122
4123static 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
4128static struct atlas7_pad_mux uart4_rts_grp0_pad_mux[] = {
4129	MUX(1, 123, 4, N, N, N, N),
4130};
4131
4132static 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
4137static struct atlas7_pad_mux uart4_rts_grp1_pad_mux[] = {
4138	MUX(1, 99, 4, N, N, N, N),
4139};
4140
4141static 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
4146static struct atlas7_pad_mux uart4_rts_grp2_pad_mux[] = {
4147	MUX(1, 116, 2, N, N, N, N),
4148};
4149
4150static 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
4155static struct atlas7_pad_mux usb0_drvvbus_grp0_pad_mux[] = {
4156	MUX(1, 51, 2, N, N, N, N),
4157};
4158
4159static 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
4164static struct atlas7_pad_mux usb0_drvvbus_grp1_pad_mux[] = {
4165	MUX(1, 162, 7, N, N, N, N),
4166};
4167
4168static 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
4173static struct atlas7_pad_mux usb1_drvvbus_grp0_pad_mux[] = {
4174	MUX(1, 134, 2, N, N, N, N),
4175};
4176
4177static 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
4182static struct atlas7_pad_mux usb1_drvvbus_grp1_pad_mux[] = {
4183	MUX(1, 163, 2, N, N, N, N),
4184};
4185
4186static 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
4191static 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
4226static 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
4231static 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
4253static 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
4258static 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
4283static 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
4288static 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
4302static 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
4307static 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
4321static 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
4326static 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
4761static 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 */
4773struct 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 */
4785struct 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 */
4793static 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
4800static 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
4807static const struct map_data pm31_pull_v2s[] = {
4808	{ PM31_PULL_DISABLED, PULL_DOWN },
4809	{ PM31_PULL_ENABLED, PULL_UP },
4810};
4811
4812static 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 */
4820static 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
4829static 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
4838static 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
4847static 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
4856static 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 */
4875struct 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
4883static 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 */
4909struct atlas7_ds_info {
4910	u8 type;
4911	u8 mask;
4912	u8 imval;
4913	u8 reserved;
4914};
4915
4916static 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
4927static inline u32 atlas7_pin_to_bank(u32 pin)
4928{
4929	return (pin >= ATLAS7_PINCTRL_BANK_0_PINS) ? 1 : 0;
4930}
4931
4932static 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
4939static 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
4947static 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
4959static 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
4982static 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
4999static 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
5021static 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
5031static 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
5041static 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
5092static 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
5137static 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
5158static 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
5184static 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
5205unsupport:
5206	pr_err("Pad#%d type[%d] doesn't support ds code[%d]!\n",
5207		pin, conf->type, sel);
5208	return -ENOTSUPP;
5209}
5210
5211static 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
5234static 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
5259static 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
5267static 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
5274static 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
5282static 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
5293static 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
5302static void atlas7_pinctrl_dt_free_map(struct pinctrl_dev *pctldev,
5303		struct pinctrl_map *map, u32 num_maps)
5304{
5305	kfree(map);
5306}
5307
5308static 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
5316static 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
5374static 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
5393static 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
5399static 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
5463unmap_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
5474static 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
5503save_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
5512save_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
5534static 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
5554restore_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
5578static 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
5586static const struct of_device_id atlas7_pinmux_ids[] = {
5587	{ .compatible = "sirf,atlas7-ioc",},
5588	{},
5589};
5590
5591static 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
5602static int __init atlas7_pinmux_init(void)
5603{
5604	return platform_driver_register(&atlas7_pinmux_driver);
5605}
5606arch_initcall(atlas7_pinmux_init);
5607
5608
5609/*
5610 * The Following is GPIO Code
5611 */
5612static inline struct
5613atlas7_gpio_bank *atlas7_gpio_to_bank(struct atlas7_gpio_chip *a7gc, u32 gpio)
5614{
5615	return &a7gc->banks[GPIO_TO_BANK(gpio)];
5616}
5617
5618static 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
5631static 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
5653static 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
5669static 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
5682static 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
5705static 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
5767static 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
5775static 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
5827static 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
5843static 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
5871static 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
5887static 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
5902static 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
5924static 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
5939static 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
5959static 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
5984static const struct of_device_id atlas7_gpio_ids[] = {
5985	{ .compatible = "sirf,atlas7-gpio", },
5986	{},
5987};
5988
5989static 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;
6093failed:
6094	return ret;
6095}
6096
6097#ifdef CONFIG_PM_SLEEP
6098static 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
6116static 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
6134static 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
6142static 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
6153static int __init atlas7_gpio_init(void)
6154{
6155	return platform_driver_register(&atlas7_gpio_driver);
6156}
6157subsys_initcall(atlas7_gpio_init);