162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * Driver for the ST Microelectronics SPEAr1340 pinmux
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (C) 2012 ST Microelectronics
562306a36Sopenharmony_ci * Viresh Kumar <vireshk@kernel.org>
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * This file is licensed under the terms of the GNU General Public
862306a36Sopenharmony_ci * License version 2. This program is licensed "as is" without any
962306a36Sopenharmony_ci * warranty of any kind, whether express or implied.
1062306a36Sopenharmony_ci */
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <linux/err.h>
1362306a36Sopenharmony_ci#include <linux/init.h>
1462306a36Sopenharmony_ci#include <linux/mod_devicetable.h>
1562306a36Sopenharmony_ci#include <linux/platform_device.h>
1662306a36Sopenharmony_ci#include "pinctrl-spear.h"
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#define DRIVER_NAME "spear1340-pinmux"
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci/* pins */
2162306a36Sopenharmony_cistatic const struct pinctrl_pin_desc spear1340_pins[] = {
2262306a36Sopenharmony_ci	SPEAR_PIN_0_TO_101,
2362306a36Sopenharmony_ci	SPEAR_PIN_102_TO_245,
2462306a36Sopenharmony_ci	PINCTRL_PIN(246, "PLGPIO246"),
2562306a36Sopenharmony_ci	PINCTRL_PIN(247, "PLGPIO247"),
2662306a36Sopenharmony_ci	PINCTRL_PIN(248, "PLGPIO248"),
2762306a36Sopenharmony_ci	PINCTRL_PIN(249, "PLGPIO249"),
2862306a36Sopenharmony_ci	PINCTRL_PIN(250, "PLGPIO250"),
2962306a36Sopenharmony_ci	PINCTRL_PIN(251, "PLGPIO251"),
3062306a36Sopenharmony_ci};
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci/* In SPEAr1340 there are two levels of pad muxing */
3362306a36Sopenharmony_ci/* - pads as gpio OR peripherals */
3462306a36Sopenharmony_ci#define PAD_FUNCTION_EN_1			0x668
3562306a36Sopenharmony_ci#define PAD_FUNCTION_EN_2			0x66C
3662306a36Sopenharmony_ci#define PAD_FUNCTION_EN_3			0x670
3762306a36Sopenharmony_ci#define PAD_FUNCTION_EN_4			0x674
3862306a36Sopenharmony_ci#define PAD_FUNCTION_EN_5			0x690
3962306a36Sopenharmony_ci#define PAD_FUNCTION_EN_6			0x694
4062306a36Sopenharmony_ci#define PAD_FUNCTION_EN_7			0x698
4162306a36Sopenharmony_ci#define PAD_FUNCTION_EN_8			0x69C
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci/* - If peripherals, then primary OR alternate peripheral */
4462306a36Sopenharmony_ci#define PAD_SHARED_IP_EN_1			0x6A0
4562306a36Sopenharmony_ci#define PAD_SHARED_IP_EN_2			0x6A4
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci/*
4862306a36Sopenharmony_ci * Macro's for first level of pmx - pads as gpio OR peripherals. There are 8
4962306a36Sopenharmony_ci * registers with 32 bits each for handling gpio pads, register 8 has only 26
5062306a36Sopenharmony_ci * relevant bits.
5162306a36Sopenharmony_ci */
5262306a36Sopenharmony_ci/* macro's for making pads as gpio's */
5362306a36Sopenharmony_ci#define PADS_AS_GPIO_REG0_MASK			0xFFFFFFFE
5462306a36Sopenharmony_ci#define PADS_AS_GPIO_REGS_MASK			0xFFFFFFFF
5562306a36Sopenharmony_ci#define PADS_AS_GPIO_REG7_MASK			0x07FFFFFF
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci/* macro's for making pads as peripherals */
5862306a36Sopenharmony_ci#define FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK	0x00000FFE
5962306a36Sopenharmony_ci#define UART0_ENH_AND_GPT_REG0_MASK		0x0003F000
6062306a36Sopenharmony_ci#define PWM1_AND_KBD_COL5_REG0_MASK		0x00040000
6162306a36Sopenharmony_ci#define I2C1_REG0_MASK				0x01080000
6262306a36Sopenharmony_ci#define SPDIF_IN_REG0_MASK			0x00100000
6362306a36Sopenharmony_ci#define PWM2_AND_GPT0_TMR0_CPT_REG0_MASK	0x00400000
6462306a36Sopenharmony_ci#define PWM3_AND_GPT0_TMR1_CLK_REG0_MASK	0x00800000
6562306a36Sopenharmony_ci#define PWM0_AND_SSP0_CS1_REG0_MASK		0x02000000
6662306a36Sopenharmony_ci#define VIP_AND_CAM3_REG0_MASK			0xFC200000
6762306a36Sopenharmony_ci#define VIP_AND_CAM3_REG1_MASK			0x0000000F
6862306a36Sopenharmony_ci#define VIP_REG1_MASK				0x00001EF0
6962306a36Sopenharmony_ci#define VIP_AND_CAM2_REG1_MASK			0x007FE100
7062306a36Sopenharmony_ci#define VIP_AND_CAM1_REG1_MASK			0xFF800000
7162306a36Sopenharmony_ci#define VIP_AND_CAM1_REG2_MASK			0x00000003
7262306a36Sopenharmony_ci#define VIP_AND_CAM0_REG2_MASK			0x00001FFC
7362306a36Sopenharmony_ci#define SMI_REG2_MASK				0x0021E000
7462306a36Sopenharmony_ci#define SSP0_REG2_MASK				0x001E0000
7562306a36Sopenharmony_ci#define TS_AND_SSP0_CS2_REG2_MASK		0x00400000
7662306a36Sopenharmony_ci#define UART0_REG2_MASK				0x01800000
7762306a36Sopenharmony_ci#define UART1_REG2_MASK				0x06000000
7862306a36Sopenharmony_ci#define I2S_IN_REG2_MASK			0xF8000000
7962306a36Sopenharmony_ci#define DEVS_GRP_AND_MIPHY_DBG_REG3_MASK	0x000001FE
8062306a36Sopenharmony_ci#define I2S_OUT_REG3_MASK			0x000001EF
8162306a36Sopenharmony_ci#define I2S_IN_REG3_MASK			0x00000010
8262306a36Sopenharmony_ci#define GMAC_REG3_MASK				0xFFFFFE00
8362306a36Sopenharmony_ci#define GMAC_REG4_MASK				0x0000001F
8462306a36Sopenharmony_ci#define DEVS_GRP_AND_MIPHY_DBG_REG4_MASK	0x7FFFFF20
8562306a36Sopenharmony_ci#define SSP0_CS3_REG4_MASK			0x00000020
8662306a36Sopenharmony_ci#define I2C0_REG4_MASK				0x000000C0
8762306a36Sopenharmony_ci#define CEC0_REG4_MASK				0x00000100
8862306a36Sopenharmony_ci#define CEC1_REG4_MASK				0x00000200
8962306a36Sopenharmony_ci#define SPDIF_OUT_REG4_MASK			0x00000400
9062306a36Sopenharmony_ci#define CLCD_REG4_MASK				0x7FFFF800
9162306a36Sopenharmony_ci#define CLCD_AND_ARM_TRACE_REG4_MASK		0x80000000
9262306a36Sopenharmony_ci#define CLCD_AND_ARM_TRACE_REG5_MASK		0xFFFFFFFF
9362306a36Sopenharmony_ci#define CLCD_AND_ARM_TRACE_REG6_MASK		0x00000001
9462306a36Sopenharmony_ci#define FSMC_PNOR_AND_MCIF_REG6_MASK		0x073FFFFE
9562306a36Sopenharmony_ci#define MCIF_REG6_MASK				0xF8C00000
9662306a36Sopenharmony_ci#define MCIF_REG7_MASK				0x000043FF
9762306a36Sopenharmony_ci#define FSMC_8BIT_REG7_MASK			0x07FFBC00
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci/* other registers */
10062306a36Sopenharmony_ci#define PERIP_CFG				0x42C
10162306a36Sopenharmony_ci	/* PERIP_CFG register masks */
10262306a36Sopenharmony_ci	#define SSP_CS_CTL_HW			0
10362306a36Sopenharmony_ci	#define SSP_CS_CTL_SW			1
10462306a36Sopenharmony_ci	#define SSP_CS_CTL_MASK			1
10562306a36Sopenharmony_ci	#define SSP_CS_CTL_SHIFT		21
10662306a36Sopenharmony_ci	#define SSP_CS_VAL_MASK			1
10762306a36Sopenharmony_ci	#define SSP_CS_VAL_SHIFT		20
10862306a36Sopenharmony_ci	#define SSP_CS_SEL_CS0			0
10962306a36Sopenharmony_ci	#define SSP_CS_SEL_CS1			1
11062306a36Sopenharmony_ci	#define SSP_CS_SEL_CS2			2
11162306a36Sopenharmony_ci	#define SSP_CS_SEL_MASK			3
11262306a36Sopenharmony_ci	#define SSP_CS_SEL_SHIFT		18
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci	#define I2S_CHNL_2_0			(0)
11562306a36Sopenharmony_ci	#define I2S_CHNL_3_1			(1)
11662306a36Sopenharmony_ci	#define I2S_CHNL_5_1			(2)
11762306a36Sopenharmony_ci	#define I2S_CHNL_7_1			(3)
11862306a36Sopenharmony_ci	#define I2S_CHNL_PLAY_SHIFT		(4)
11962306a36Sopenharmony_ci	#define I2S_CHNL_PLAY_MASK		(3 << 4)
12062306a36Sopenharmony_ci	#define I2S_CHNL_REC_SHIFT		(6)
12162306a36Sopenharmony_ci	#define I2S_CHNL_REC_MASK		(3 << 6)
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci	#define SPDIF_OUT_ENB_MASK		(1 << 2)
12462306a36Sopenharmony_ci	#define SPDIF_OUT_ENB_SHIFT		2
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci	#define MCIF_SEL_SD			1
12762306a36Sopenharmony_ci	#define MCIF_SEL_CF			2
12862306a36Sopenharmony_ci	#define MCIF_SEL_XD			3
12962306a36Sopenharmony_ci	#define MCIF_SEL_MASK			3
13062306a36Sopenharmony_ci	#define MCIF_SEL_SHIFT			0
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci#define GMAC_CLK_CFG				0x248
13362306a36Sopenharmony_ci	#define GMAC_PHY_IF_GMII_VAL		(0 << 3)
13462306a36Sopenharmony_ci	#define GMAC_PHY_IF_RGMII_VAL		(1 << 3)
13562306a36Sopenharmony_ci	#define GMAC_PHY_IF_SGMII_VAL		(2 << 3)
13662306a36Sopenharmony_ci	#define GMAC_PHY_IF_RMII_VAL		(4 << 3)
13762306a36Sopenharmony_ci	#define GMAC_PHY_IF_SEL_MASK		(7 << 3)
13862306a36Sopenharmony_ci	#define GMAC_PHY_INPUT_ENB_VAL		0
13962306a36Sopenharmony_ci	#define GMAC_PHY_SYNT_ENB_VAL		1
14062306a36Sopenharmony_ci	#define GMAC_PHY_CLK_MASK		1
14162306a36Sopenharmony_ci	#define GMAC_PHY_CLK_SHIFT		2
14262306a36Sopenharmony_ci	#define GMAC_PHY_125M_PAD_VAL		0
14362306a36Sopenharmony_ci	#define GMAC_PHY_PLL2_VAL		1
14462306a36Sopenharmony_ci	#define GMAC_PHY_OSC3_VAL		2
14562306a36Sopenharmony_ci	#define GMAC_PHY_INPUT_CLK_MASK		3
14662306a36Sopenharmony_ci	#define GMAC_PHY_INPUT_CLK_SHIFT	0
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci#define PCIE_SATA_CFG				0x424
14962306a36Sopenharmony_ci	/* PCIE CFG MASks */
15062306a36Sopenharmony_ci	#define PCIE_CFG_DEVICE_PRESENT		(1 << 11)
15162306a36Sopenharmony_ci	#define PCIE_CFG_POWERUP_RESET		(1 << 10)
15262306a36Sopenharmony_ci	#define PCIE_CFG_CORE_CLK_EN		(1 << 9)
15362306a36Sopenharmony_ci	#define PCIE_CFG_AUX_CLK_EN		(1 << 8)
15462306a36Sopenharmony_ci	#define SATA_CFG_TX_CLK_EN		(1 << 4)
15562306a36Sopenharmony_ci	#define SATA_CFG_RX_CLK_EN		(1 << 3)
15662306a36Sopenharmony_ci	#define SATA_CFG_POWERUP_RESET		(1 << 2)
15762306a36Sopenharmony_ci	#define SATA_CFG_PM_CLK_EN		(1 << 1)
15862306a36Sopenharmony_ci	#define PCIE_SATA_SEL_PCIE		(0)
15962306a36Sopenharmony_ci	#define PCIE_SATA_SEL_SATA		(1)
16062306a36Sopenharmony_ci	#define SATA_PCIE_CFG_MASK		0xF1F
16162306a36Sopenharmony_ci	#define PCIE_CFG_VAL	(PCIE_SATA_SEL_PCIE | PCIE_CFG_AUX_CLK_EN | \
16262306a36Sopenharmony_ci				PCIE_CFG_CORE_CLK_EN | PCIE_CFG_POWERUP_RESET |\
16362306a36Sopenharmony_ci				PCIE_CFG_DEVICE_PRESENT)
16462306a36Sopenharmony_ci	#define SATA_CFG_VAL	(PCIE_SATA_SEL_SATA | SATA_CFG_PM_CLK_EN | \
16562306a36Sopenharmony_ci				SATA_CFG_POWERUP_RESET | SATA_CFG_RX_CLK_EN | \
16662306a36Sopenharmony_ci				SATA_CFG_TX_CLK_EN)
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ci/* Macro's for second level of pmx - pads as primary OR alternate peripheral */
16962306a36Sopenharmony_ci/* Write 0 to enable FSMC_16_BIT */
17062306a36Sopenharmony_ci#define KBD_ROW_COL_MASK			(1 << 0)
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci/* Write 0 to enable UART0_ENH */
17362306a36Sopenharmony_ci#define GPT_MASK				(1 << 1) /* Only clk & cpt */
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci/* Write 0 to enable PWM1 */
17662306a36Sopenharmony_ci#define KBD_COL5_MASK				(1 << 2)
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ci/* Write 0 to enable PWM2 */
17962306a36Sopenharmony_ci#define GPT0_TMR0_CPT_MASK			(1 << 3) /* Only clk & cpt */
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci/* Write 0 to enable PWM3 */
18262306a36Sopenharmony_ci#define GPT0_TMR1_CLK_MASK			(1 << 4) /* Only clk & cpt */
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci/* Write 0 to enable PWM0 */
18562306a36Sopenharmony_ci#define SSP0_CS1_MASK				(1 << 5)
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci/* Write 0 to enable VIP */
18862306a36Sopenharmony_ci#define CAM3_MASK				(1 << 6)
18962306a36Sopenharmony_ci
19062306a36Sopenharmony_ci/* Write 0 to enable VIP */
19162306a36Sopenharmony_ci#define CAM2_MASK				(1 << 7)
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_ci/* Write 0 to enable VIP */
19462306a36Sopenharmony_ci#define CAM1_MASK				(1 << 8)
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ci/* Write 0 to enable VIP */
19762306a36Sopenharmony_ci#define CAM0_MASK				(1 << 9)
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ci/* Write 0 to enable TS */
20062306a36Sopenharmony_ci#define SSP0_CS2_MASK				(1 << 10)
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci/* Write 0 to enable FSMC PNOR */
20362306a36Sopenharmony_ci#define MCIF_MASK				(1 << 11)
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ci/* Write 0 to enable CLCD */
20662306a36Sopenharmony_ci#define ARM_TRACE_MASK				(1 << 12)
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci/* Write 0 to enable I2S, SSP0_CS2, CEC0, 1, SPDIF out, CLCD */
20962306a36Sopenharmony_ci#define MIPHY_DBG_MASK				(1 << 13)
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci/*
21262306a36Sopenharmony_ci * Pad multiplexing for making all pads as gpio's. This is done to override the
21362306a36Sopenharmony_ci * values passed from bootloader and start from scratch.
21462306a36Sopenharmony_ci */
21562306a36Sopenharmony_cistatic const unsigned pads_as_gpio_pins[] = { 12, 88, 89, 251 };
21662306a36Sopenharmony_cistatic struct spear_muxreg pads_as_gpio_muxreg[] = {
21762306a36Sopenharmony_ci	{
21862306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
21962306a36Sopenharmony_ci		.mask = PADS_AS_GPIO_REG0_MASK,
22062306a36Sopenharmony_ci		.val = 0x0,
22162306a36Sopenharmony_ci	}, {
22262306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_2,
22362306a36Sopenharmony_ci		.mask = PADS_AS_GPIO_REGS_MASK,
22462306a36Sopenharmony_ci		.val = 0x0,
22562306a36Sopenharmony_ci	}, {
22662306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_3,
22762306a36Sopenharmony_ci		.mask = PADS_AS_GPIO_REGS_MASK,
22862306a36Sopenharmony_ci		.val = 0x0,
22962306a36Sopenharmony_ci	}, {
23062306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_4,
23162306a36Sopenharmony_ci		.mask = PADS_AS_GPIO_REGS_MASK,
23262306a36Sopenharmony_ci		.val = 0x0,
23362306a36Sopenharmony_ci	}, {
23462306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_5,
23562306a36Sopenharmony_ci		.mask = PADS_AS_GPIO_REGS_MASK,
23662306a36Sopenharmony_ci		.val = 0x0,
23762306a36Sopenharmony_ci	}, {
23862306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_6,
23962306a36Sopenharmony_ci		.mask = PADS_AS_GPIO_REGS_MASK,
24062306a36Sopenharmony_ci		.val = 0x0,
24162306a36Sopenharmony_ci	}, {
24262306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_7,
24362306a36Sopenharmony_ci		.mask = PADS_AS_GPIO_REGS_MASK,
24462306a36Sopenharmony_ci		.val = 0x0,
24562306a36Sopenharmony_ci	}, {
24662306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_8,
24762306a36Sopenharmony_ci		.mask = PADS_AS_GPIO_REG7_MASK,
24862306a36Sopenharmony_ci		.val = 0x0,
24962306a36Sopenharmony_ci	},
25062306a36Sopenharmony_ci};
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_cistatic struct spear_modemux pads_as_gpio_modemux[] = {
25362306a36Sopenharmony_ci	{
25462306a36Sopenharmony_ci		.muxregs = pads_as_gpio_muxreg,
25562306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(pads_as_gpio_muxreg),
25662306a36Sopenharmony_ci	},
25762306a36Sopenharmony_ci};
25862306a36Sopenharmony_ci
25962306a36Sopenharmony_cistatic struct spear_pingroup pads_as_gpio_pingroup = {
26062306a36Sopenharmony_ci	.name = "pads_as_gpio_grp",
26162306a36Sopenharmony_ci	.pins = pads_as_gpio_pins,
26262306a36Sopenharmony_ci	.npins = ARRAY_SIZE(pads_as_gpio_pins),
26362306a36Sopenharmony_ci	.modemuxs = pads_as_gpio_modemux,
26462306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(pads_as_gpio_modemux),
26562306a36Sopenharmony_ci};
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_cistatic const char *const pads_as_gpio_grps[] = { "pads_as_gpio_grp" };
26862306a36Sopenharmony_cistatic struct spear_function pads_as_gpio_function = {
26962306a36Sopenharmony_ci	.name = "pads_as_gpio",
27062306a36Sopenharmony_ci	.groups = pads_as_gpio_grps,
27162306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(pads_as_gpio_grps),
27262306a36Sopenharmony_ci};
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci/* Pad multiplexing for fsmc_8bit device */
27562306a36Sopenharmony_cistatic const unsigned fsmc_8bit_pins[] = { 233, 234, 235, 236, 238, 239, 240,
27662306a36Sopenharmony_ci	241, 242, 243, 244, 245, 246, 247, 248, 249 };
27762306a36Sopenharmony_cistatic struct spear_muxreg fsmc_8bit_muxreg[] = {
27862306a36Sopenharmony_ci	{
27962306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_8,
28062306a36Sopenharmony_ci		.mask = FSMC_8BIT_REG7_MASK,
28162306a36Sopenharmony_ci		.val = FSMC_8BIT_REG7_MASK,
28262306a36Sopenharmony_ci	}
28362306a36Sopenharmony_ci};
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_cistatic struct spear_modemux fsmc_8bit_modemux[] = {
28662306a36Sopenharmony_ci	{
28762306a36Sopenharmony_ci		.muxregs = fsmc_8bit_muxreg,
28862306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg),
28962306a36Sopenharmony_ci	},
29062306a36Sopenharmony_ci};
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_cistatic struct spear_pingroup fsmc_8bit_pingroup = {
29362306a36Sopenharmony_ci	.name = "fsmc_8bit_grp",
29462306a36Sopenharmony_ci	.pins = fsmc_8bit_pins,
29562306a36Sopenharmony_ci	.npins = ARRAY_SIZE(fsmc_8bit_pins),
29662306a36Sopenharmony_ci	.modemuxs = fsmc_8bit_modemux,
29762306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(fsmc_8bit_modemux),
29862306a36Sopenharmony_ci};
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ci/* Pad multiplexing for fsmc_16bit device */
30162306a36Sopenharmony_cistatic const unsigned fsmc_16bit_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
30262306a36Sopenharmony_cistatic struct spear_muxreg fsmc_16bit_muxreg[] = {
30362306a36Sopenharmony_ci	{
30462306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
30562306a36Sopenharmony_ci		.mask = KBD_ROW_COL_MASK,
30662306a36Sopenharmony_ci		.val = 0,
30762306a36Sopenharmony_ci	}, {
30862306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
30962306a36Sopenharmony_ci		.mask = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK,
31062306a36Sopenharmony_ci		.val = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK,
31162306a36Sopenharmony_ci	},
31262306a36Sopenharmony_ci};
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_cistatic struct spear_modemux fsmc_16bit_modemux[] = {
31562306a36Sopenharmony_ci	{
31662306a36Sopenharmony_ci		.muxregs = fsmc_16bit_muxreg,
31762306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(fsmc_16bit_muxreg),
31862306a36Sopenharmony_ci	},
31962306a36Sopenharmony_ci};
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_cistatic struct spear_pingroup fsmc_16bit_pingroup = {
32262306a36Sopenharmony_ci	.name = "fsmc_16bit_grp",
32362306a36Sopenharmony_ci	.pins = fsmc_16bit_pins,
32462306a36Sopenharmony_ci	.npins = ARRAY_SIZE(fsmc_16bit_pins),
32562306a36Sopenharmony_ci	.modemuxs = fsmc_16bit_modemux,
32662306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(fsmc_16bit_modemux),
32762306a36Sopenharmony_ci};
32862306a36Sopenharmony_ci
32962306a36Sopenharmony_ci/* pad multiplexing for fsmc_pnor device */
33062306a36Sopenharmony_cistatic const unsigned fsmc_pnor_pins[] = { 192, 193, 194, 195, 196, 197, 198,
33162306a36Sopenharmony_ci	199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
33262306a36Sopenharmony_ci	215, 216, 217 };
33362306a36Sopenharmony_cistatic struct spear_muxreg fsmc_pnor_muxreg[] = {
33462306a36Sopenharmony_ci	{
33562306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
33662306a36Sopenharmony_ci		.mask = MCIF_MASK,
33762306a36Sopenharmony_ci		.val = 0,
33862306a36Sopenharmony_ci	}, {
33962306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_7,
34062306a36Sopenharmony_ci		.mask = FSMC_PNOR_AND_MCIF_REG6_MASK,
34162306a36Sopenharmony_ci		.val = FSMC_PNOR_AND_MCIF_REG6_MASK,
34262306a36Sopenharmony_ci	},
34362306a36Sopenharmony_ci};
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_cistatic struct spear_modemux fsmc_pnor_modemux[] = {
34662306a36Sopenharmony_ci	{
34762306a36Sopenharmony_ci		.muxregs = fsmc_pnor_muxreg,
34862306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(fsmc_pnor_muxreg),
34962306a36Sopenharmony_ci	},
35062306a36Sopenharmony_ci};
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_cistatic struct spear_pingroup fsmc_pnor_pingroup = {
35362306a36Sopenharmony_ci	.name = "fsmc_pnor_grp",
35462306a36Sopenharmony_ci	.pins = fsmc_pnor_pins,
35562306a36Sopenharmony_ci	.npins = ARRAY_SIZE(fsmc_pnor_pins),
35662306a36Sopenharmony_ci	.modemuxs = fsmc_pnor_modemux,
35762306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(fsmc_pnor_modemux),
35862306a36Sopenharmony_ci};
35962306a36Sopenharmony_ci
36062306a36Sopenharmony_cistatic const char *const fsmc_grps[] = { "fsmc_8bit_grp", "fsmc_16bit_grp",
36162306a36Sopenharmony_ci	"fsmc_pnor_grp" };
36262306a36Sopenharmony_cistatic struct spear_function fsmc_function = {
36362306a36Sopenharmony_ci	.name = "fsmc",
36462306a36Sopenharmony_ci	.groups = fsmc_grps,
36562306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(fsmc_grps),
36662306a36Sopenharmony_ci};
36762306a36Sopenharmony_ci
36862306a36Sopenharmony_ci/* pad multiplexing for keyboard rows-cols device */
36962306a36Sopenharmony_cistatic const unsigned keyboard_row_col_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
37062306a36Sopenharmony_ci	10 };
37162306a36Sopenharmony_cistatic struct spear_muxreg keyboard_row_col_muxreg[] = {
37262306a36Sopenharmony_ci	{
37362306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
37462306a36Sopenharmony_ci		.mask = KBD_ROW_COL_MASK,
37562306a36Sopenharmony_ci		.val = KBD_ROW_COL_MASK,
37662306a36Sopenharmony_ci	}, {
37762306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
37862306a36Sopenharmony_ci		.mask = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK,
37962306a36Sopenharmony_ci		.val = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK,
38062306a36Sopenharmony_ci	},
38162306a36Sopenharmony_ci};
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_cistatic struct spear_modemux keyboard_row_col_modemux[] = {
38462306a36Sopenharmony_ci	{
38562306a36Sopenharmony_ci		.muxregs = keyboard_row_col_muxreg,
38662306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(keyboard_row_col_muxreg),
38762306a36Sopenharmony_ci	},
38862306a36Sopenharmony_ci};
38962306a36Sopenharmony_ci
39062306a36Sopenharmony_cistatic struct spear_pingroup keyboard_row_col_pingroup = {
39162306a36Sopenharmony_ci	.name = "keyboard_row_col_grp",
39262306a36Sopenharmony_ci	.pins = keyboard_row_col_pins,
39362306a36Sopenharmony_ci	.npins = ARRAY_SIZE(keyboard_row_col_pins),
39462306a36Sopenharmony_ci	.modemuxs = keyboard_row_col_modemux,
39562306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(keyboard_row_col_modemux),
39662306a36Sopenharmony_ci};
39762306a36Sopenharmony_ci
39862306a36Sopenharmony_ci/* pad multiplexing for keyboard col5 device */
39962306a36Sopenharmony_cistatic const unsigned keyboard_col5_pins[] = { 17 };
40062306a36Sopenharmony_cistatic struct spear_muxreg keyboard_col5_muxreg[] = {
40162306a36Sopenharmony_ci	{
40262306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
40362306a36Sopenharmony_ci		.mask = KBD_COL5_MASK,
40462306a36Sopenharmony_ci		.val = KBD_COL5_MASK,
40562306a36Sopenharmony_ci	}, {
40662306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
40762306a36Sopenharmony_ci		.mask = PWM1_AND_KBD_COL5_REG0_MASK,
40862306a36Sopenharmony_ci		.val = PWM1_AND_KBD_COL5_REG0_MASK,
40962306a36Sopenharmony_ci	},
41062306a36Sopenharmony_ci};
41162306a36Sopenharmony_ci
41262306a36Sopenharmony_cistatic struct spear_modemux keyboard_col5_modemux[] = {
41362306a36Sopenharmony_ci	{
41462306a36Sopenharmony_ci		.muxregs = keyboard_col5_muxreg,
41562306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(keyboard_col5_muxreg),
41662306a36Sopenharmony_ci	},
41762306a36Sopenharmony_ci};
41862306a36Sopenharmony_ci
41962306a36Sopenharmony_cistatic struct spear_pingroup keyboard_col5_pingroup = {
42062306a36Sopenharmony_ci	.name = "keyboard_col5_grp",
42162306a36Sopenharmony_ci	.pins = keyboard_col5_pins,
42262306a36Sopenharmony_ci	.npins = ARRAY_SIZE(keyboard_col5_pins),
42362306a36Sopenharmony_ci	.modemuxs = keyboard_col5_modemux,
42462306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(keyboard_col5_modemux),
42562306a36Sopenharmony_ci};
42662306a36Sopenharmony_ci
42762306a36Sopenharmony_cistatic const char *const keyboard_grps[] = { "keyboard_row_col_grp",
42862306a36Sopenharmony_ci	"keyboard_col5_grp" };
42962306a36Sopenharmony_cistatic struct spear_function keyboard_function = {
43062306a36Sopenharmony_ci	.name = "keyboard",
43162306a36Sopenharmony_ci	.groups = keyboard_grps,
43262306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(keyboard_grps),
43362306a36Sopenharmony_ci};
43462306a36Sopenharmony_ci
43562306a36Sopenharmony_ci/* pad multiplexing for spdif_in device */
43662306a36Sopenharmony_cistatic const unsigned spdif_in_pins[] = { 19 };
43762306a36Sopenharmony_cistatic struct spear_muxreg spdif_in_muxreg[] = {
43862306a36Sopenharmony_ci	{
43962306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
44062306a36Sopenharmony_ci		.mask = SPDIF_IN_REG0_MASK,
44162306a36Sopenharmony_ci		.val = SPDIF_IN_REG0_MASK,
44262306a36Sopenharmony_ci	},
44362306a36Sopenharmony_ci};
44462306a36Sopenharmony_ci
44562306a36Sopenharmony_cistatic struct spear_modemux spdif_in_modemux[] = {
44662306a36Sopenharmony_ci	{
44762306a36Sopenharmony_ci		.muxregs = spdif_in_muxreg,
44862306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(spdif_in_muxreg),
44962306a36Sopenharmony_ci	},
45062306a36Sopenharmony_ci};
45162306a36Sopenharmony_ci
45262306a36Sopenharmony_cistatic struct spear_pingroup spdif_in_pingroup = {
45362306a36Sopenharmony_ci	.name = "spdif_in_grp",
45462306a36Sopenharmony_ci	.pins = spdif_in_pins,
45562306a36Sopenharmony_ci	.npins = ARRAY_SIZE(spdif_in_pins),
45662306a36Sopenharmony_ci	.modemuxs = spdif_in_modemux,
45762306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(spdif_in_modemux),
45862306a36Sopenharmony_ci};
45962306a36Sopenharmony_ci
46062306a36Sopenharmony_cistatic const char *const spdif_in_grps[] = { "spdif_in_grp" };
46162306a36Sopenharmony_cistatic struct spear_function spdif_in_function = {
46262306a36Sopenharmony_ci	.name = "spdif_in",
46362306a36Sopenharmony_ci	.groups = spdif_in_grps,
46462306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(spdif_in_grps),
46562306a36Sopenharmony_ci};
46662306a36Sopenharmony_ci
46762306a36Sopenharmony_ci/* pad multiplexing for spdif_out device */
46862306a36Sopenharmony_cistatic const unsigned spdif_out_pins[] = { 137 };
46962306a36Sopenharmony_cistatic struct spear_muxreg spdif_out_muxreg[] = {
47062306a36Sopenharmony_ci	{
47162306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_5,
47262306a36Sopenharmony_ci		.mask = SPDIF_OUT_REG4_MASK,
47362306a36Sopenharmony_ci		.val = SPDIF_OUT_REG4_MASK,
47462306a36Sopenharmony_ci	}, {
47562306a36Sopenharmony_ci		.reg = PERIP_CFG,
47662306a36Sopenharmony_ci		.mask = SPDIF_OUT_ENB_MASK,
47762306a36Sopenharmony_ci		.val = SPDIF_OUT_ENB_MASK,
47862306a36Sopenharmony_ci	}
47962306a36Sopenharmony_ci};
48062306a36Sopenharmony_ci
48162306a36Sopenharmony_cistatic struct spear_modemux spdif_out_modemux[] = {
48262306a36Sopenharmony_ci	{
48362306a36Sopenharmony_ci		.muxregs = spdif_out_muxreg,
48462306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(spdif_out_muxreg),
48562306a36Sopenharmony_ci	},
48662306a36Sopenharmony_ci};
48762306a36Sopenharmony_ci
48862306a36Sopenharmony_cistatic struct spear_pingroup spdif_out_pingroup = {
48962306a36Sopenharmony_ci	.name = "spdif_out_grp",
49062306a36Sopenharmony_ci	.pins = spdif_out_pins,
49162306a36Sopenharmony_ci	.npins = ARRAY_SIZE(spdif_out_pins),
49262306a36Sopenharmony_ci	.modemuxs = spdif_out_modemux,
49362306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(spdif_out_modemux),
49462306a36Sopenharmony_ci};
49562306a36Sopenharmony_ci
49662306a36Sopenharmony_cistatic const char *const spdif_out_grps[] = { "spdif_out_grp" };
49762306a36Sopenharmony_cistatic struct spear_function spdif_out_function = {
49862306a36Sopenharmony_ci	.name = "spdif_out",
49962306a36Sopenharmony_ci	.groups = spdif_out_grps,
50062306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(spdif_out_grps),
50162306a36Sopenharmony_ci};
50262306a36Sopenharmony_ci
50362306a36Sopenharmony_ci/* pad multiplexing for gpt_0_1 device */
50462306a36Sopenharmony_cistatic const unsigned gpt_0_1_pins[] = { 11, 12, 13, 14, 15, 16, 21, 22 };
50562306a36Sopenharmony_cistatic struct spear_muxreg gpt_0_1_muxreg[] = {
50662306a36Sopenharmony_ci	{
50762306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
50862306a36Sopenharmony_ci		.mask = GPT_MASK | GPT0_TMR0_CPT_MASK | GPT0_TMR1_CLK_MASK,
50962306a36Sopenharmony_ci		.val = GPT_MASK | GPT0_TMR0_CPT_MASK | GPT0_TMR1_CLK_MASK,
51062306a36Sopenharmony_ci	}, {
51162306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
51262306a36Sopenharmony_ci		.mask = UART0_ENH_AND_GPT_REG0_MASK |
51362306a36Sopenharmony_ci			PWM2_AND_GPT0_TMR0_CPT_REG0_MASK |
51462306a36Sopenharmony_ci			PWM3_AND_GPT0_TMR1_CLK_REG0_MASK,
51562306a36Sopenharmony_ci		.val = UART0_ENH_AND_GPT_REG0_MASK |
51662306a36Sopenharmony_ci			PWM2_AND_GPT0_TMR0_CPT_REG0_MASK |
51762306a36Sopenharmony_ci			PWM3_AND_GPT0_TMR1_CLK_REG0_MASK,
51862306a36Sopenharmony_ci	},
51962306a36Sopenharmony_ci};
52062306a36Sopenharmony_ci
52162306a36Sopenharmony_cistatic struct spear_modemux gpt_0_1_modemux[] = {
52262306a36Sopenharmony_ci	{
52362306a36Sopenharmony_ci		.muxregs = gpt_0_1_muxreg,
52462306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(gpt_0_1_muxreg),
52562306a36Sopenharmony_ci	},
52662306a36Sopenharmony_ci};
52762306a36Sopenharmony_ci
52862306a36Sopenharmony_cistatic struct spear_pingroup gpt_0_1_pingroup = {
52962306a36Sopenharmony_ci	.name = "gpt_0_1_grp",
53062306a36Sopenharmony_ci	.pins = gpt_0_1_pins,
53162306a36Sopenharmony_ci	.npins = ARRAY_SIZE(gpt_0_1_pins),
53262306a36Sopenharmony_ci	.modemuxs = gpt_0_1_modemux,
53362306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(gpt_0_1_modemux),
53462306a36Sopenharmony_ci};
53562306a36Sopenharmony_ci
53662306a36Sopenharmony_cistatic const char *const gpt_0_1_grps[] = { "gpt_0_1_grp" };
53762306a36Sopenharmony_cistatic struct spear_function gpt_0_1_function = {
53862306a36Sopenharmony_ci	.name = "gpt_0_1",
53962306a36Sopenharmony_ci	.groups = gpt_0_1_grps,
54062306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(gpt_0_1_grps),
54162306a36Sopenharmony_ci};
54262306a36Sopenharmony_ci
54362306a36Sopenharmony_ci/* pad multiplexing for pwm0 device */
54462306a36Sopenharmony_cistatic const unsigned pwm0_pins[] = { 24 };
54562306a36Sopenharmony_cistatic struct spear_muxreg pwm0_muxreg[] = {
54662306a36Sopenharmony_ci	{
54762306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
54862306a36Sopenharmony_ci		.mask = SSP0_CS1_MASK,
54962306a36Sopenharmony_ci		.val = 0,
55062306a36Sopenharmony_ci	}, {
55162306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
55262306a36Sopenharmony_ci		.mask = PWM0_AND_SSP0_CS1_REG0_MASK,
55362306a36Sopenharmony_ci		.val = PWM0_AND_SSP0_CS1_REG0_MASK,
55462306a36Sopenharmony_ci	},
55562306a36Sopenharmony_ci};
55662306a36Sopenharmony_ci
55762306a36Sopenharmony_cistatic struct spear_modemux pwm0_modemux[] = {
55862306a36Sopenharmony_ci	{
55962306a36Sopenharmony_ci		.muxregs = pwm0_muxreg,
56062306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(pwm0_muxreg),
56162306a36Sopenharmony_ci	},
56262306a36Sopenharmony_ci};
56362306a36Sopenharmony_ci
56462306a36Sopenharmony_cistatic struct spear_pingroup pwm0_pingroup = {
56562306a36Sopenharmony_ci	.name = "pwm0_grp",
56662306a36Sopenharmony_ci	.pins = pwm0_pins,
56762306a36Sopenharmony_ci	.npins = ARRAY_SIZE(pwm0_pins),
56862306a36Sopenharmony_ci	.modemuxs = pwm0_modemux,
56962306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(pwm0_modemux),
57062306a36Sopenharmony_ci};
57162306a36Sopenharmony_ci
57262306a36Sopenharmony_ci/* pad multiplexing for pwm1 device */
57362306a36Sopenharmony_cistatic const unsigned pwm1_pins[] = { 17 };
57462306a36Sopenharmony_cistatic struct spear_muxreg pwm1_muxreg[] = {
57562306a36Sopenharmony_ci	{
57662306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
57762306a36Sopenharmony_ci		.mask = KBD_COL5_MASK,
57862306a36Sopenharmony_ci		.val = 0,
57962306a36Sopenharmony_ci	}, {
58062306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
58162306a36Sopenharmony_ci		.mask = PWM1_AND_KBD_COL5_REG0_MASK,
58262306a36Sopenharmony_ci		.val = PWM1_AND_KBD_COL5_REG0_MASK,
58362306a36Sopenharmony_ci	},
58462306a36Sopenharmony_ci};
58562306a36Sopenharmony_ci
58662306a36Sopenharmony_cistatic struct spear_modemux pwm1_modemux[] = {
58762306a36Sopenharmony_ci	{
58862306a36Sopenharmony_ci		.muxregs = pwm1_muxreg,
58962306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(pwm1_muxreg),
59062306a36Sopenharmony_ci	},
59162306a36Sopenharmony_ci};
59262306a36Sopenharmony_ci
59362306a36Sopenharmony_cistatic struct spear_pingroup pwm1_pingroup = {
59462306a36Sopenharmony_ci	.name = "pwm1_grp",
59562306a36Sopenharmony_ci	.pins = pwm1_pins,
59662306a36Sopenharmony_ci	.npins = ARRAY_SIZE(pwm1_pins),
59762306a36Sopenharmony_ci	.modemuxs = pwm1_modemux,
59862306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(pwm1_modemux),
59962306a36Sopenharmony_ci};
60062306a36Sopenharmony_ci
60162306a36Sopenharmony_ci/* pad multiplexing for pwm2 device */
60262306a36Sopenharmony_cistatic const unsigned pwm2_pins[] = { 21 };
60362306a36Sopenharmony_cistatic struct spear_muxreg pwm2_muxreg[] = {
60462306a36Sopenharmony_ci	{
60562306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
60662306a36Sopenharmony_ci		.mask = GPT0_TMR0_CPT_MASK,
60762306a36Sopenharmony_ci		.val = 0,
60862306a36Sopenharmony_ci	}, {
60962306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
61062306a36Sopenharmony_ci		.mask = PWM2_AND_GPT0_TMR0_CPT_REG0_MASK,
61162306a36Sopenharmony_ci		.val = PWM2_AND_GPT0_TMR0_CPT_REG0_MASK,
61262306a36Sopenharmony_ci	},
61362306a36Sopenharmony_ci};
61462306a36Sopenharmony_ci
61562306a36Sopenharmony_cistatic struct spear_modemux pwm2_modemux[] = {
61662306a36Sopenharmony_ci	{
61762306a36Sopenharmony_ci		.muxregs = pwm2_muxreg,
61862306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(pwm2_muxreg),
61962306a36Sopenharmony_ci	},
62062306a36Sopenharmony_ci};
62162306a36Sopenharmony_ci
62262306a36Sopenharmony_cistatic struct spear_pingroup pwm2_pingroup = {
62362306a36Sopenharmony_ci	.name = "pwm2_grp",
62462306a36Sopenharmony_ci	.pins = pwm2_pins,
62562306a36Sopenharmony_ci	.npins = ARRAY_SIZE(pwm2_pins),
62662306a36Sopenharmony_ci	.modemuxs = pwm2_modemux,
62762306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(pwm2_modemux),
62862306a36Sopenharmony_ci};
62962306a36Sopenharmony_ci
63062306a36Sopenharmony_ci/* pad multiplexing for pwm3 device */
63162306a36Sopenharmony_cistatic const unsigned pwm3_pins[] = { 22 };
63262306a36Sopenharmony_cistatic struct spear_muxreg pwm3_muxreg[] = {
63362306a36Sopenharmony_ci	{
63462306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
63562306a36Sopenharmony_ci		.mask = GPT0_TMR1_CLK_MASK,
63662306a36Sopenharmony_ci		.val = 0,
63762306a36Sopenharmony_ci	}, {
63862306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
63962306a36Sopenharmony_ci		.mask = PWM3_AND_GPT0_TMR1_CLK_REG0_MASK,
64062306a36Sopenharmony_ci		.val = PWM3_AND_GPT0_TMR1_CLK_REG0_MASK,
64162306a36Sopenharmony_ci	},
64262306a36Sopenharmony_ci};
64362306a36Sopenharmony_ci
64462306a36Sopenharmony_cistatic struct spear_modemux pwm3_modemux[] = {
64562306a36Sopenharmony_ci	{
64662306a36Sopenharmony_ci		.muxregs = pwm3_muxreg,
64762306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(pwm3_muxreg),
64862306a36Sopenharmony_ci	},
64962306a36Sopenharmony_ci};
65062306a36Sopenharmony_ci
65162306a36Sopenharmony_cistatic struct spear_pingroup pwm3_pingroup = {
65262306a36Sopenharmony_ci	.name = "pwm3_grp",
65362306a36Sopenharmony_ci	.pins = pwm3_pins,
65462306a36Sopenharmony_ci	.npins = ARRAY_SIZE(pwm3_pins),
65562306a36Sopenharmony_ci	.modemuxs = pwm3_modemux,
65662306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(pwm3_modemux),
65762306a36Sopenharmony_ci};
65862306a36Sopenharmony_ci
65962306a36Sopenharmony_cistatic const char *const pwm_grps[] = { "pwm0_grp", "pwm1_grp", "pwm2_grp",
66062306a36Sopenharmony_ci	"pwm3_grp" };
66162306a36Sopenharmony_cistatic struct spear_function pwm_function = {
66262306a36Sopenharmony_ci	.name = "pwm",
66362306a36Sopenharmony_ci	.groups = pwm_grps,
66462306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(pwm_grps),
66562306a36Sopenharmony_ci};
66662306a36Sopenharmony_ci
66762306a36Sopenharmony_ci/* pad multiplexing for vip_mux device */
66862306a36Sopenharmony_cistatic const unsigned vip_mux_pins[] = { 35, 36, 37, 38, 40, 41, 42, 43 };
66962306a36Sopenharmony_cistatic struct spear_muxreg vip_mux_muxreg[] = {
67062306a36Sopenharmony_ci	{
67162306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_2,
67262306a36Sopenharmony_ci		.mask = VIP_REG1_MASK,
67362306a36Sopenharmony_ci		.val = VIP_REG1_MASK,
67462306a36Sopenharmony_ci	},
67562306a36Sopenharmony_ci};
67662306a36Sopenharmony_ci
67762306a36Sopenharmony_cistatic struct spear_modemux vip_mux_modemux[] = {
67862306a36Sopenharmony_ci	{
67962306a36Sopenharmony_ci		.muxregs = vip_mux_muxreg,
68062306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(vip_mux_muxreg),
68162306a36Sopenharmony_ci	},
68262306a36Sopenharmony_ci};
68362306a36Sopenharmony_ci
68462306a36Sopenharmony_cistatic struct spear_pingroup vip_mux_pingroup = {
68562306a36Sopenharmony_ci	.name = "vip_mux_grp",
68662306a36Sopenharmony_ci	.pins = vip_mux_pins,
68762306a36Sopenharmony_ci	.npins = ARRAY_SIZE(vip_mux_pins),
68862306a36Sopenharmony_ci	.modemuxs = vip_mux_modemux,
68962306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(vip_mux_modemux),
69062306a36Sopenharmony_ci};
69162306a36Sopenharmony_ci
69262306a36Sopenharmony_ci/* pad multiplexing for vip_mux_cam0 (disables cam0) device */
69362306a36Sopenharmony_cistatic const unsigned vip_mux_cam0_pins[] = { 65, 66, 67, 68, 69, 70, 71, 72,
69462306a36Sopenharmony_ci	73, 74, 75 };
69562306a36Sopenharmony_cistatic struct spear_muxreg vip_mux_cam0_muxreg[] = {
69662306a36Sopenharmony_ci	{
69762306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
69862306a36Sopenharmony_ci		.mask = CAM0_MASK,
69962306a36Sopenharmony_ci		.val = 0,
70062306a36Sopenharmony_ci	}, {
70162306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_3,
70262306a36Sopenharmony_ci		.mask = VIP_AND_CAM0_REG2_MASK,
70362306a36Sopenharmony_ci		.val = VIP_AND_CAM0_REG2_MASK,
70462306a36Sopenharmony_ci	},
70562306a36Sopenharmony_ci};
70662306a36Sopenharmony_ci
70762306a36Sopenharmony_cistatic struct spear_modemux vip_mux_cam0_modemux[] = {
70862306a36Sopenharmony_ci	{
70962306a36Sopenharmony_ci		.muxregs = vip_mux_cam0_muxreg,
71062306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(vip_mux_cam0_muxreg),
71162306a36Sopenharmony_ci	},
71262306a36Sopenharmony_ci};
71362306a36Sopenharmony_ci
71462306a36Sopenharmony_cistatic struct spear_pingroup vip_mux_cam0_pingroup = {
71562306a36Sopenharmony_ci	.name = "vip_mux_cam0_grp",
71662306a36Sopenharmony_ci	.pins = vip_mux_cam0_pins,
71762306a36Sopenharmony_ci	.npins = ARRAY_SIZE(vip_mux_cam0_pins),
71862306a36Sopenharmony_ci	.modemuxs = vip_mux_cam0_modemux,
71962306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(vip_mux_cam0_modemux),
72062306a36Sopenharmony_ci};
72162306a36Sopenharmony_ci
72262306a36Sopenharmony_ci/* pad multiplexing for vip_mux_cam1 (disables cam1) device */
72362306a36Sopenharmony_cistatic const unsigned vip_mux_cam1_pins[] = { 54, 55, 56, 57, 58, 59, 60, 61,
72462306a36Sopenharmony_ci	62, 63, 64 };
72562306a36Sopenharmony_cistatic struct spear_muxreg vip_mux_cam1_muxreg[] = {
72662306a36Sopenharmony_ci	{
72762306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
72862306a36Sopenharmony_ci		.mask = CAM1_MASK,
72962306a36Sopenharmony_ci		.val = 0,
73062306a36Sopenharmony_ci	}, {
73162306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_2,
73262306a36Sopenharmony_ci		.mask = VIP_AND_CAM1_REG1_MASK,
73362306a36Sopenharmony_ci		.val = VIP_AND_CAM1_REG1_MASK,
73462306a36Sopenharmony_ci	}, {
73562306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_3,
73662306a36Sopenharmony_ci		.mask = VIP_AND_CAM1_REG2_MASK,
73762306a36Sopenharmony_ci		.val = VIP_AND_CAM1_REG2_MASK,
73862306a36Sopenharmony_ci	},
73962306a36Sopenharmony_ci};
74062306a36Sopenharmony_ci
74162306a36Sopenharmony_cistatic struct spear_modemux vip_mux_cam1_modemux[] = {
74262306a36Sopenharmony_ci	{
74362306a36Sopenharmony_ci		.muxregs = vip_mux_cam1_muxreg,
74462306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(vip_mux_cam1_muxreg),
74562306a36Sopenharmony_ci	},
74662306a36Sopenharmony_ci};
74762306a36Sopenharmony_ci
74862306a36Sopenharmony_cistatic struct spear_pingroup vip_mux_cam1_pingroup = {
74962306a36Sopenharmony_ci	.name = "vip_mux_cam1_grp",
75062306a36Sopenharmony_ci	.pins = vip_mux_cam1_pins,
75162306a36Sopenharmony_ci	.npins = ARRAY_SIZE(vip_mux_cam1_pins),
75262306a36Sopenharmony_ci	.modemuxs = vip_mux_cam1_modemux,
75362306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(vip_mux_cam1_modemux),
75462306a36Sopenharmony_ci};
75562306a36Sopenharmony_ci
75662306a36Sopenharmony_ci/* pad multiplexing for vip_mux_cam2 (disables cam2) device */
75762306a36Sopenharmony_cistatic const unsigned vip_mux_cam2_pins[] = { 39, 44, 45, 46, 47, 48, 49, 50,
75862306a36Sopenharmony_ci	51, 52, 53 };
75962306a36Sopenharmony_cistatic struct spear_muxreg vip_mux_cam2_muxreg[] = {
76062306a36Sopenharmony_ci	{
76162306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
76262306a36Sopenharmony_ci		.mask = CAM2_MASK,
76362306a36Sopenharmony_ci		.val = 0,
76462306a36Sopenharmony_ci	}, {
76562306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_2,
76662306a36Sopenharmony_ci		.mask = VIP_AND_CAM2_REG1_MASK,
76762306a36Sopenharmony_ci		.val = VIP_AND_CAM2_REG1_MASK,
76862306a36Sopenharmony_ci	},
76962306a36Sopenharmony_ci};
77062306a36Sopenharmony_ci
77162306a36Sopenharmony_cistatic struct spear_modemux vip_mux_cam2_modemux[] = {
77262306a36Sopenharmony_ci	{
77362306a36Sopenharmony_ci		.muxregs = vip_mux_cam2_muxreg,
77462306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(vip_mux_cam2_muxreg),
77562306a36Sopenharmony_ci	},
77662306a36Sopenharmony_ci};
77762306a36Sopenharmony_ci
77862306a36Sopenharmony_cistatic struct spear_pingroup vip_mux_cam2_pingroup = {
77962306a36Sopenharmony_ci	.name = "vip_mux_cam2_grp",
78062306a36Sopenharmony_ci	.pins = vip_mux_cam2_pins,
78162306a36Sopenharmony_ci	.npins = ARRAY_SIZE(vip_mux_cam2_pins),
78262306a36Sopenharmony_ci	.modemuxs = vip_mux_cam2_modemux,
78362306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(vip_mux_cam2_modemux),
78462306a36Sopenharmony_ci};
78562306a36Sopenharmony_ci
78662306a36Sopenharmony_ci/* pad multiplexing for vip_mux_cam3 (disables cam3) device */
78762306a36Sopenharmony_cistatic const unsigned vip_mux_cam3_pins[] = { 20, 25, 26, 27, 28, 29, 30, 31,
78862306a36Sopenharmony_ci	32, 33, 34 };
78962306a36Sopenharmony_cistatic struct spear_muxreg vip_mux_cam3_muxreg[] = {
79062306a36Sopenharmony_ci	{
79162306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
79262306a36Sopenharmony_ci		.mask = CAM3_MASK,
79362306a36Sopenharmony_ci		.val = 0,
79462306a36Sopenharmony_ci	}, {
79562306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
79662306a36Sopenharmony_ci		.mask = VIP_AND_CAM3_REG0_MASK,
79762306a36Sopenharmony_ci		.val = VIP_AND_CAM3_REG0_MASK,
79862306a36Sopenharmony_ci	}, {
79962306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_2,
80062306a36Sopenharmony_ci		.mask = VIP_AND_CAM3_REG1_MASK,
80162306a36Sopenharmony_ci		.val = VIP_AND_CAM3_REG1_MASK,
80262306a36Sopenharmony_ci	},
80362306a36Sopenharmony_ci};
80462306a36Sopenharmony_ci
80562306a36Sopenharmony_cistatic struct spear_modemux vip_mux_cam3_modemux[] = {
80662306a36Sopenharmony_ci	{
80762306a36Sopenharmony_ci		.muxregs = vip_mux_cam3_muxreg,
80862306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(vip_mux_cam3_muxreg),
80962306a36Sopenharmony_ci	},
81062306a36Sopenharmony_ci};
81162306a36Sopenharmony_ci
81262306a36Sopenharmony_cistatic struct spear_pingroup vip_mux_cam3_pingroup = {
81362306a36Sopenharmony_ci	.name = "vip_mux_cam3_grp",
81462306a36Sopenharmony_ci	.pins = vip_mux_cam3_pins,
81562306a36Sopenharmony_ci	.npins = ARRAY_SIZE(vip_mux_cam3_pins),
81662306a36Sopenharmony_ci	.modemuxs = vip_mux_cam3_modemux,
81762306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(vip_mux_cam3_modemux),
81862306a36Sopenharmony_ci};
81962306a36Sopenharmony_ci
82062306a36Sopenharmony_cistatic const char *const vip_grps[] = { "vip_mux_grp", "vip_mux_cam0_grp" ,
82162306a36Sopenharmony_ci	"vip_mux_cam1_grp" , "vip_mux_cam2_grp", "vip_mux_cam3_grp" };
82262306a36Sopenharmony_cistatic struct spear_function vip_function = {
82362306a36Sopenharmony_ci	.name = "vip",
82462306a36Sopenharmony_ci	.groups = vip_grps,
82562306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(vip_grps),
82662306a36Sopenharmony_ci};
82762306a36Sopenharmony_ci
82862306a36Sopenharmony_ci/* pad multiplexing for cam0 device */
82962306a36Sopenharmony_cistatic const unsigned cam0_pins[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75
83062306a36Sopenharmony_ci};
83162306a36Sopenharmony_cistatic struct spear_muxreg cam0_muxreg[] = {
83262306a36Sopenharmony_ci	{
83362306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
83462306a36Sopenharmony_ci		.mask = CAM0_MASK,
83562306a36Sopenharmony_ci		.val = CAM0_MASK,
83662306a36Sopenharmony_ci	}, {
83762306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_3,
83862306a36Sopenharmony_ci		.mask = VIP_AND_CAM0_REG2_MASK,
83962306a36Sopenharmony_ci		.val = VIP_AND_CAM0_REG2_MASK,
84062306a36Sopenharmony_ci	},
84162306a36Sopenharmony_ci};
84262306a36Sopenharmony_ci
84362306a36Sopenharmony_cistatic struct spear_modemux cam0_modemux[] = {
84462306a36Sopenharmony_ci	{
84562306a36Sopenharmony_ci		.muxregs = cam0_muxreg,
84662306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(cam0_muxreg),
84762306a36Sopenharmony_ci	},
84862306a36Sopenharmony_ci};
84962306a36Sopenharmony_ci
85062306a36Sopenharmony_cistatic struct spear_pingroup cam0_pingroup = {
85162306a36Sopenharmony_ci	.name = "cam0_grp",
85262306a36Sopenharmony_ci	.pins = cam0_pins,
85362306a36Sopenharmony_ci	.npins = ARRAY_SIZE(cam0_pins),
85462306a36Sopenharmony_ci	.modemuxs = cam0_modemux,
85562306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(cam0_modemux),
85662306a36Sopenharmony_ci};
85762306a36Sopenharmony_ci
85862306a36Sopenharmony_cistatic const char *const cam0_grps[] = { "cam0_grp" };
85962306a36Sopenharmony_cistatic struct spear_function cam0_function = {
86062306a36Sopenharmony_ci	.name = "cam0",
86162306a36Sopenharmony_ci	.groups = cam0_grps,
86262306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(cam0_grps),
86362306a36Sopenharmony_ci};
86462306a36Sopenharmony_ci
86562306a36Sopenharmony_ci/* pad multiplexing for cam1 device */
86662306a36Sopenharmony_cistatic const unsigned cam1_pins[] = { 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64
86762306a36Sopenharmony_ci};
86862306a36Sopenharmony_cistatic struct spear_muxreg cam1_muxreg[] = {
86962306a36Sopenharmony_ci	{
87062306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
87162306a36Sopenharmony_ci		.mask = CAM1_MASK,
87262306a36Sopenharmony_ci		.val = CAM1_MASK,
87362306a36Sopenharmony_ci	}, {
87462306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_2,
87562306a36Sopenharmony_ci		.mask = VIP_AND_CAM1_REG1_MASK,
87662306a36Sopenharmony_ci		.val = VIP_AND_CAM1_REG1_MASK,
87762306a36Sopenharmony_ci	}, {
87862306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_3,
87962306a36Sopenharmony_ci		.mask = VIP_AND_CAM1_REG2_MASK,
88062306a36Sopenharmony_ci		.val = VIP_AND_CAM1_REG2_MASK,
88162306a36Sopenharmony_ci	},
88262306a36Sopenharmony_ci};
88362306a36Sopenharmony_ci
88462306a36Sopenharmony_cistatic struct spear_modemux cam1_modemux[] = {
88562306a36Sopenharmony_ci	{
88662306a36Sopenharmony_ci		.muxregs = cam1_muxreg,
88762306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(cam1_muxreg),
88862306a36Sopenharmony_ci	},
88962306a36Sopenharmony_ci};
89062306a36Sopenharmony_ci
89162306a36Sopenharmony_cistatic struct spear_pingroup cam1_pingroup = {
89262306a36Sopenharmony_ci	.name = "cam1_grp",
89362306a36Sopenharmony_ci	.pins = cam1_pins,
89462306a36Sopenharmony_ci	.npins = ARRAY_SIZE(cam1_pins),
89562306a36Sopenharmony_ci	.modemuxs = cam1_modemux,
89662306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(cam1_modemux),
89762306a36Sopenharmony_ci};
89862306a36Sopenharmony_ci
89962306a36Sopenharmony_cistatic const char *const cam1_grps[] = { "cam1_grp" };
90062306a36Sopenharmony_cistatic struct spear_function cam1_function = {
90162306a36Sopenharmony_ci	.name = "cam1",
90262306a36Sopenharmony_ci	.groups = cam1_grps,
90362306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(cam1_grps),
90462306a36Sopenharmony_ci};
90562306a36Sopenharmony_ci
90662306a36Sopenharmony_ci/* pad multiplexing for cam2 device */
90762306a36Sopenharmony_cistatic const unsigned cam2_pins[] = { 39, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53
90862306a36Sopenharmony_ci};
90962306a36Sopenharmony_cistatic struct spear_muxreg cam2_muxreg[] = {
91062306a36Sopenharmony_ci	{
91162306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
91262306a36Sopenharmony_ci		.mask = CAM2_MASK,
91362306a36Sopenharmony_ci		.val = CAM2_MASK,
91462306a36Sopenharmony_ci	}, {
91562306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_2,
91662306a36Sopenharmony_ci		.mask = VIP_AND_CAM2_REG1_MASK,
91762306a36Sopenharmony_ci		.val = VIP_AND_CAM2_REG1_MASK,
91862306a36Sopenharmony_ci	},
91962306a36Sopenharmony_ci};
92062306a36Sopenharmony_ci
92162306a36Sopenharmony_cistatic struct spear_modemux cam2_modemux[] = {
92262306a36Sopenharmony_ci	{
92362306a36Sopenharmony_ci		.muxregs = cam2_muxreg,
92462306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(cam2_muxreg),
92562306a36Sopenharmony_ci	},
92662306a36Sopenharmony_ci};
92762306a36Sopenharmony_ci
92862306a36Sopenharmony_cistatic struct spear_pingroup cam2_pingroup = {
92962306a36Sopenharmony_ci	.name = "cam2_grp",
93062306a36Sopenharmony_ci	.pins = cam2_pins,
93162306a36Sopenharmony_ci	.npins = ARRAY_SIZE(cam2_pins),
93262306a36Sopenharmony_ci	.modemuxs = cam2_modemux,
93362306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(cam2_modemux),
93462306a36Sopenharmony_ci};
93562306a36Sopenharmony_ci
93662306a36Sopenharmony_cistatic const char *const cam2_grps[] = { "cam2_grp" };
93762306a36Sopenharmony_cistatic struct spear_function cam2_function = {
93862306a36Sopenharmony_ci	.name = "cam2",
93962306a36Sopenharmony_ci	.groups = cam2_grps,
94062306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(cam2_grps),
94162306a36Sopenharmony_ci};
94262306a36Sopenharmony_ci
94362306a36Sopenharmony_ci/* pad multiplexing for cam3 device */
94462306a36Sopenharmony_cistatic const unsigned cam3_pins[] = { 20, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
94562306a36Sopenharmony_ci};
94662306a36Sopenharmony_cistatic struct spear_muxreg cam3_muxreg[] = {
94762306a36Sopenharmony_ci	{
94862306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
94962306a36Sopenharmony_ci		.mask = CAM3_MASK,
95062306a36Sopenharmony_ci		.val = CAM3_MASK,
95162306a36Sopenharmony_ci	}, {
95262306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
95362306a36Sopenharmony_ci		.mask = VIP_AND_CAM3_REG0_MASK,
95462306a36Sopenharmony_ci		.val = VIP_AND_CAM3_REG0_MASK,
95562306a36Sopenharmony_ci	}, {
95662306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_2,
95762306a36Sopenharmony_ci		.mask = VIP_AND_CAM3_REG1_MASK,
95862306a36Sopenharmony_ci		.val = VIP_AND_CAM3_REG1_MASK,
95962306a36Sopenharmony_ci	},
96062306a36Sopenharmony_ci};
96162306a36Sopenharmony_ci
96262306a36Sopenharmony_cistatic struct spear_modemux cam3_modemux[] = {
96362306a36Sopenharmony_ci	{
96462306a36Sopenharmony_ci		.muxregs = cam3_muxreg,
96562306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(cam3_muxreg),
96662306a36Sopenharmony_ci	},
96762306a36Sopenharmony_ci};
96862306a36Sopenharmony_ci
96962306a36Sopenharmony_cistatic struct spear_pingroup cam3_pingroup = {
97062306a36Sopenharmony_ci	.name = "cam3_grp",
97162306a36Sopenharmony_ci	.pins = cam3_pins,
97262306a36Sopenharmony_ci	.npins = ARRAY_SIZE(cam3_pins),
97362306a36Sopenharmony_ci	.modemuxs = cam3_modemux,
97462306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(cam3_modemux),
97562306a36Sopenharmony_ci};
97662306a36Sopenharmony_ci
97762306a36Sopenharmony_cistatic const char *const cam3_grps[] = { "cam3_grp" };
97862306a36Sopenharmony_cistatic struct spear_function cam3_function = {
97962306a36Sopenharmony_ci	.name = "cam3",
98062306a36Sopenharmony_ci	.groups = cam3_grps,
98162306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(cam3_grps),
98262306a36Sopenharmony_ci};
98362306a36Sopenharmony_ci
98462306a36Sopenharmony_ci/* pad multiplexing for smi device */
98562306a36Sopenharmony_cistatic const unsigned smi_pins[] = { 76, 77, 78, 79, 84 };
98662306a36Sopenharmony_cistatic struct spear_muxreg smi_muxreg[] = {
98762306a36Sopenharmony_ci	{
98862306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_3,
98962306a36Sopenharmony_ci		.mask = SMI_REG2_MASK,
99062306a36Sopenharmony_ci		.val = SMI_REG2_MASK,
99162306a36Sopenharmony_ci	},
99262306a36Sopenharmony_ci};
99362306a36Sopenharmony_ci
99462306a36Sopenharmony_cistatic struct spear_modemux smi_modemux[] = {
99562306a36Sopenharmony_ci	{
99662306a36Sopenharmony_ci		.muxregs = smi_muxreg,
99762306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(smi_muxreg),
99862306a36Sopenharmony_ci	},
99962306a36Sopenharmony_ci};
100062306a36Sopenharmony_ci
100162306a36Sopenharmony_cistatic struct spear_pingroup smi_pingroup = {
100262306a36Sopenharmony_ci	.name = "smi_grp",
100362306a36Sopenharmony_ci	.pins = smi_pins,
100462306a36Sopenharmony_ci	.npins = ARRAY_SIZE(smi_pins),
100562306a36Sopenharmony_ci	.modemuxs = smi_modemux,
100662306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(smi_modemux),
100762306a36Sopenharmony_ci};
100862306a36Sopenharmony_ci
100962306a36Sopenharmony_cistatic const char *const smi_grps[] = { "smi_grp" };
101062306a36Sopenharmony_cistatic struct spear_function smi_function = {
101162306a36Sopenharmony_ci	.name = "smi",
101262306a36Sopenharmony_ci	.groups = smi_grps,
101362306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(smi_grps),
101462306a36Sopenharmony_ci};
101562306a36Sopenharmony_ci
101662306a36Sopenharmony_ci/* pad multiplexing for ssp0 device */
101762306a36Sopenharmony_cistatic const unsigned ssp0_pins[] = { 80, 81, 82, 83 };
101862306a36Sopenharmony_cistatic struct spear_muxreg ssp0_muxreg[] = {
101962306a36Sopenharmony_ci	{
102062306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_3,
102162306a36Sopenharmony_ci		.mask = SSP0_REG2_MASK,
102262306a36Sopenharmony_ci		.val = SSP0_REG2_MASK,
102362306a36Sopenharmony_ci	},
102462306a36Sopenharmony_ci};
102562306a36Sopenharmony_ci
102662306a36Sopenharmony_cistatic struct spear_modemux ssp0_modemux[] = {
102762306a36Sopenharmony_ci	{
102862306a36Sopenharmony_ci		.muxregs = ssp0_muxreg,
102962306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(ssp0_muxreg),
103062306a36Sopenharmony_ci	},
103162306a36Sopenharmony_ci};
103262306a36Sopenharmony_ci
103362306a36Sopenharmony_cistatic struct spear_pingroup ssp0_pingroup = {
103462306a36Sopenharmony_ci	.name = "ssp0_grp",
103562306a36Sopenharmony_ci	.pins = ssp0_pins,
103662306a36Sopenharmony_ci	.npins = ARRAY_SIZE(ssp0_pins),
103762306a36Sopenharmony_ci	.modemuxs = ssp0_modemux,
103862306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(ssp0_modemux),
103962306a36Sopenharmony_ci};
104062306a36Sopenharmony_ci
104162306a36Sopenharmony_ci/* pad multiplexing for ssp0_cs1 device */
104262306a36Sopenharmony_cistatic const unsigned ssp0_cs1_pins[] = { 24 };
104362306a36Sopenharmony_cistatic struct spear_muxreg ssp0_cs1_muxreg[] = {
104462306a36Sopenharmony_ci	{
104562306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
104662306a36Sopenharmony_ci		.mask = SSP0_CS1_MASK,
104762306a36Sopenharmony_ci		.val = SSP0_CS1_MASK,
104862306a36Sopenharmony_ci	}, {
104962306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
105062306a36Sopenharmony_ci		.mask = PWM0_AND_SSP0_CS1_REG0_MASK,
105162306a36Sopenharmony_ci		.val = PWM0_AND_SSP0_CS1_REG0_MASK,
105262306a36Sopenharmony_ci	},
105362306a36Sopenharmony_ci};
105462306a36Sopenharmony_ci
105562306a36Sopenharmony_cistatic struct spear_modemux ssp0_cs1_modemux[] = {
105662306a36Sopenharmony_ci	{
105762306a36Sopenharmony_ci		.muxregs = ssp0_cs1_muxreg,
105862306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(ssp0_cs1_muxreg),
105962306a36Sopenharmony_ci	},
106062306a36Sopenharmony_ci};
106162306a36Sopenharmony_ci
106262306a36Sopenharmony_cistatic struct spear_pingroup ssp0_cs1_pingroup = {
106362306a36Sopenharmony_ci	.name = "ssp0_cs1_grp",
106462306a36Sopenharmony_ci	.pins = ssp0_cs1_pins,
106562306a36Sopenharmony_ci	.npins = ARRAY_SIZE(ssp0_cs1_pins),
106662306a36Sopenharmony_ci	.modemuxs = ssp0_cs1_modemux,
106762306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(ssp0_cs1_modemux),
106862306a36Sopenharmony_ci};
106962306a36Sopenharmony_ci
107062306a36Sopenharmony_ci/* pad multiplexing for ssp0_cs2 device */
107162306a36Sopenharmony_cistatic const unsigned ssp0_cs2_pins[] = { 85 };
107262306a36Sopenharmony_cistatic struct spear_muxreg ssp0_cs2_muxreg[] = {
107362306a36Sopenharmony_ci	{
107462306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
107562306a36Sopenharmony_ci		.mask = SSP0_CS2_MASK,
107662306a36Sopenharmony_ci		.val = SSP0_CS2_MASK,
107762306a36Sopenharmony_ci	}, {
107862306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_3,
107962306a36Sopenharmony_ci		.mask = TS_AND_SSP0_CS2_REG2_MASK,
108062306a36Sopenharmony_ci		.val = TS_AND_SSP0_CS2_REG2_MASK,
108162306a36Sopenharmony_ci	},
108262306a36Sopenharmony_ci};
108362306a36Sopenharmony_ci
108462306a36Sopenharmony_cistatic struct spear_modemux ssp0_cs2_modemux[] = {
108562306a36Sopenharmony_ci	{
108662306a36Sopenharmony_ci		.muxregs = ssp0_cs2_muxreg,
108762306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(ssp0_cs2_muxreg),
108862306a36Sopenharmony_ci	},
108962306a36Sopenharmony_ci};
109062306a36Sopenharmony_ci
109162306a36Sopenharmony_cistatic struct spear_pingroup ssp0_cs2_pingroup = {
109262306a36Sopenharmony_ci	.name = "ssp0_cs2_grp",
109362306a36Sopenharmony_ci	.pins = ssp0_cs2_pins,
109462306a36Sopenharmony_ci	.npins = ARRAY_SIZE(ssp0_cs2_pins),
109562306a36Sopenharmony_ci	.modemuxs = ssp0_cs2_modemux,
109662306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(ssp0_cs2_modemux),
109762306a36Sopenharmony_ci};
109862306a36Sopenharmony_ci
109962306a36Sopenharmony_ci/* pad multiplexing for ssp0_cs3 device */
110062306a36Sopenharmony_cistatic const unsigned ssp0_cs3_pins[] = { 132 };
110162306a36Sopenharmony_cistatic struct spear_muxreg ssp0_cs3_muxreg[] = {
110262306a36Sopenharmony_ci	{
110362306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_5,
110462306a36Sopenharmony_ci		.mask = SSP0_CS3_REG4_MASK,
110562306a36Sopenharmony_ci		.val = SSP0_CS3_REG4_MASK,
110662306a36Sopenharmony_ci	},
110762306a36Sopenharmony_ci};
110862306a36Sopenharmony_ci
110962306a36Sopenharmony_cistatic struct spear_modemux ssp0_cs3_modemux[] = {
111062306a36Sopenharmony_ci	{
111162306a36Sopenharmony_ci		.muxregs = ssp0_cs3_muxreg,
111262306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(ssp0_cs3_muxreg),
111362306a36Sopenharmony_ci	},
111462306a36Sopenharmony_ci};
111562306a36Sopenharmony_ci
111662306a36Sopenharmony_cistatic struct spear_pingroup ssp0_cs3_pingroup = {
111762306a36Sopenharmony_ci	.name = "ssp0_cs3_grp",
111862306a36Sopenharmony_ci	.pins = ssp0_cs3_pins,
111962306a36Sopenharmony_ci	.npins = ARRAY_SIZE(ssp0_cs3_pins),
112062306a36Sopenharmony_ci	.modemuxs = ssp0_cs3_modemux,
112162306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(ssp0_cs3_modemux),
112262306a36Sopenharmony_ci};
112362306a36Sopenharmony_ci
112462306a36Sopenharmony_cistatic const char *const ssp0_grps[] = { "ssp0_grp", "ssp0_cs1_grp",
112562306a36Sopenharmony_ci	"ssp0_cs2_grp", "ssp0_cs3_grp" };
112662306a36Sopenharmony_cistatic struct spear_function ssp0_function = {
112762306a36Sopenharmony_ci	.name = "ssp0",
112862306a36Sopenharmony_ci	.groups = ssp0_grps,
112962306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(ssp0_grps),
113062306a36Sopenharmony_ci};
113162306a36Sopenharmony_ci
113262306a36Sopenharmony_ci/* pad multiplexing for uart0 device */
113362306a36Sopenharmony_cistatic const unsigned uart0_pins[] = { 86, 87 };
113462306a36Sopenharmony_cistatic struct spear_muxreg uart0_muxreg[] = {
113562306a36Sopenharmony_ci	{
113662306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_3,
113762306a36Sopenharmony_ci		.mask = UART0_REG2_MASK,
113862306a36Sopenharmony_ci		.val = UART0_REG2_MASK,
113962306a36Sopenharmony_ci	},
114062306a36Sopenharmony_ci};
114162306a36Sopenharmony_ci
114262306a36Sopenharmony_cistatic struct spear_modemux uart0_modemux[] = {
114362306a36Sopenharmony_ci	{
114462306a36Sopenharmony_ci		.muxregs = uart0_muxreg,
114562306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(uart0_muxreg),
114662306a36Sopenharmony_ci	},
114762306a36Sopenharmony_ci};
114862306a36Sopenharmony_ci
114962306a36Sopenharmony_cistatic struct spear_pingroup uart0_pingroup = {
115062306a36Sopenharmony_ci	.name = "uart0_grp",
115162306a36Sopenharmony_ci	.pins = uart0_pins,
115262306a36Sopenharmony_ci	.npins = ARRAY_SIZE(uart0_pins),
115362306a36Sopenharmony_ci	.modemuxs = uart0_modemux,
115462306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(uart0_modemux),
115562306a36Sopenharmony_ci};
115662306a36Sopenharmony_ci
115762306a36Sopenharmony_ci/* pad multiplexing for uart0_enh device */
115862306a36Sopenharmony_cistatic const unsigned uart0_enh_pins[] = { 11, 12, 13, 14, 15, 16 };
115962306a36Sopenharmony_cistatic struct spear_muxreg uart0_enh_muxreg[] = {
116062306a36Sopenharmony_ci	{
116162306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
116262306a36Sopenharmony_ci		.mask = GPT_MASK,
116362306a36Sopenharmony_ci		.val = 0,
116462306a36Sopenharmony_ci	}, {
116562306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
116662306a36Sopenharmony_ci		.mask = UART0_ENH_AND_GPT_REG0_MASK,
116762306a36Sopenharmony_ci		.val = UART0_ENH_AND_GPT_REG0_MASK,
116862306a36Sopenharmony_ci	},
116962306a36Sopenharmony_ci};
117062306a36Sopenharmony_ci
117162306a36Sopenharmony_cistatic struct spear_modemux uart0_enh_modemux[] = {
117262306a36Sopenharmony_ci	{
117362306a36Sopenharmony_ci		.muxregs = uart0_enh_muxreg,
117462306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(uart0_enh_muxreg),
117562306a36Sopenharmony_ci	},
117662306a36Sopenharmony_ci};
117762306a36Sopenharmony_ci
117862306a36Sopenharmony_cistatic struct spear_pingroup uart0_enh_pingroup = {
117962306a36Sopenharmony_ci	.name = "uart0_enh_grp",
118062306a36Sopenharmony_ci	.pins = uart0_enh_pins,
118162306a36Sopenharmony_ci	.npins = ARRAY_SIZE(uart0_enh_pins),
118262306a36Sopenharmony_ci	.modemuxs = uart0_enh_modemux,
118362306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(uart0_enh_modemux),
118462306a36Sopenharmony_ci};
118562306a36Sopenharmony_ci
118662306a36Sopenharmony_cistatic const char *const uart0_grps[] = { "uart0_grp", "uart0_enh_grp" };
118762306a36Sopenharmony_cistatic struct spear_function uart0_function = {
118862306a36Sopenharmony_ci	.name = "uart0",
118962306a36Sopenharmony_ci	.groups = uart0_grps,
119062306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(uart0_grps),
119162306a36Sopenharmony_ci};
119262306a36Sopenharmony_ci
119362306a36Sopenharmony_ci/* pad multiplexing for uart1 device */
119462306a36Sopenharmony_cistatic const unsigned uart1_pins[] = { 88, 89 };
119562306a36Sopenharmony_cistatic struct spear_muxreg uart1_muxreg[] = {
119662306a36Sopenharmony_ci	{
119762306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_3,
119862306a36Sopenharmony_ci		.mask = UART1_REG2_MASK,
119962306a36Sopenharmony_ci		.val = UART1_REG2_MASK,
120062306a36Sopenharmony_ci	},
120162306a36Sopenharmony_ci};
120262306a36Sopenharmony_ci
120362306a36Sopenharmony_cistatic struct spear_modemux uart1_modemux[] = {
120462306a36Sopenharmony_ci	{
120562306a36Sopenharmony_ci		.muxregs = uart1_muxreg,
120662306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(uart1_muxreg),
120762306a36Sopenharmony_ci	},
120862306a36Sopenharmony_ci};
120962306a36Sopenharmony_ci
121062306a36Sopenharmony_cistatic struct spear_pingroup uart1_pingroup = {
121162306a36Sopenharmony_ci	.name = "uart1_grp",
121262306a36Sopenharmony_ci	.pins = uart1_pins,
121362306a36Sopenharmony_ci	.npins = ARRAY_SIZE(uart1_pins),
121462306a36Sopenharmony_ci	.modemuxs = uart1_modemux,
121562306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(uart1_modemux),
121662306a36Sopenharmony_ci};
121762306a36Sopenharmony_ci
121862306a36Sopenharmony_cistatic const char *const uart1_grps[] = { "uart1_grp" };
121962306a36Sopenharmony_cistatic struct spear_function uart1_function = {
122062306a36Sopenharmony_ci	.name = "uart1",
122162306a36Sopenharmony_ci	.groups = uart1_grps,
122262306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(uart1_grps),
122362306a36Sopenharmony_ci};
122462306a36Sopenharmony_ci
122562306a36Sopenharmony_ci/* pad multiplexing for i2s_in device */
122662306a36Sopenharmony_cistatic const unsigned i2s_in_pins[] = { 90, 91, 92, 93, 94, 99 };
122762306a36Sopenharmony_cistatic struct spear_muxreg i2s_in_muxreg[] = {
122862306a36Sopenharmony_ci	{
122962306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_3,
123062306a36Sopenharmony_ci		.mask = I2S_IN_REG2_MASK,
123162306a36Sopenharmony_ci		.val = I2S_IN_REG2_MASK,
123262306a36Sopenharmony_ci	}, {
123362306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_4,
123462306a36Sopenharmony_ci		.mask = I2S_IN_REG3_MASK,
123562306a36Sopenharmony_ci		.val = I2S_IN_REG3_MASK,
123662306a36Sopenharmony_ci	},
123762306a36Sopenharmony_ci};
123862306a36Sopenharmony_ci
123962306a36Sopenharmony_cistatic struct spear_modemux i2s_in_modemux[] = {
124062306a36Sopenharmony_ci	{
124162306a36Sopenharmony_ci		.muxregs = i2s_in_muxreg,
124262306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(i2s_in_muxreg),
124362306a36Sopenharmony_ci	},
124462306a36Sopenharmony_ci};
124562306a36Sopenharmony_ci
124662306a36Sopenharmony_cistatic struct spear_pingroup i2s_in_pingroup = {
124762306a36Sopenharmony_ci	.name = "i2s_in_grp",
124862306a36Sopenharmony_ci	.pins = i2s_in_pins,
124962306a36Sopenharmony_ci	.npins = ARRAY_SIZE(i2s_in_pins),
125062306a36Sopenharmony_ci	.modemuxs = i2s_in_modemux,
125162306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(i2s_in_modemux),
125262306a36Sopenharmony_ci};
125362306a36Sopenharmony_ci
125462306a36Sopenharmony_ci/* pad multiplexing for i2s_out device */
125562306a36Sopenharmony_cistatic const unsigned i2s_out_pins[] = { 95, 96, 97, 98, 100, 101, 102, 103 };
125662306a36Sopenharmony_cistatic struct spear_muxreg i2s_out_muxreg[] = {
125762306a36Sopenharmony_ci	{
125862306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_4,
125962306a36Sopenharmony_ci		.mask = I2S_OUT_REG3_MASK,
126062306a36Sopenharmony_ci		.val = I2S_OUT_REG3_MASK,
126162306a36Sopenharmony_ci	},
126262306a36Sopenharmony_ci};
126362306a36Sopenharmony_ci
126462306a36Sopenharmony_cistatic struct spear_modemux i2s_out_modemux[] = {
126562306a36Sopenharmony_ci	{
126662306a36Sopenharmony_ci		.muxregs = i2s_out_muxreg,
126762306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(i2s_out_muxreg),
126862306a36Sopenharmony_ci	},
126962306a36Sopenharmony_ci};
127062306a36Sopenharmony_ci
127162306a36Sopenharmony_cistatic struct spear_pingroup i2s_out_pingroup = {
127262306a36Sopenharmony_ci	.name = "i2s_out_grp",
127362306a36Sopenharmony_ci	.pins = i2s_out_pins,
127462306a36Sopenharmony_ci	.npins = ARRAY_SIZE(i2s_out_pins),
127562306a36Sopenharmony_ci	.modemuxs = i2s_out_modemux,
127662306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(i2s_out_modemux),
127762306a36Sopenharmony_ci};
127862306a36Sopenharmony_ci
127962306a36Sopenharmony_cistatic const char *const i2s_grps[] = { "i2s_in_grp", "i2s_out_grp" };
128062306a36Sopenharmony_cistatic struct spear_function i2s_function = {
128162306a36Sopenharmony_ci	.name = "i2s",
128262306a36Sopenharmony_ci	.groups = i2s_grps,
128362306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(i2s_grps),
128462306a36Sopenharmony_ci};
128562306a36Sopenharmony_ci
128662306a36Sopenharmony_ci/* pad multiplexing for gmac device */
128762306a36Sopenharmony_cistatic const unsigned gmac_pins[] = { 104, 105, 106, 107, 108, 109, 110, 111,
128862306a36Sopenharmony_ci	112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
128962306a36Sopenharmony_ci	126, 127, 128, 129, 130, 131 };
129062306a36Sopenharmony_ci#define GMAC_MUXREG				\
129162306a36Sopenharmony_ci	{					\
129262306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_4,	\
129362306a36Sopenharmony_ci		.mask = GMAC_REG3_MASK,		\
129462306a36Sopenharmony_ci		.val = GMAC_REG3_MASK,		\
129562306a36Sopenharmony_ci	}, {					\
129662306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_5,	\
129762306a36Sopenharmony_ci		.mask = GMAC_REG4_MASK,		\
129862306a36Sopenharmony_ci		.val = GMAC_REG4_MASK,		\
129962306a36Sopenharmony_ci	}
130062306a36Sopenharmony_ci
130162306a36Sopenharmony_ci/* pad multiplexing for gmii device */
130262306a36Sopenharmony_cistatic struct spear_muxreg gmii_muxreg[] = {
130362306a36Sopenharmony_ci	GMAC_MUXREG,
130462306a36Sopenharmony_ci	{
130562306a36Sopenharmony_ci		.reg = GMAC_CLK_CFG,
130662306a36Sopenharmony_ci		.mask = GMAC_PHY_IF_SEL_MASK,
130762306a36Sopenharmony_ci		.val = GMAC_PHY_IF_GMII_VAL,
130862306a36Sopenharmony_ci	},
130962306a36Sopenharmony_ci};
131062306a36Sopenharmony_ci
131162306a36Sopenharmony_cistatic struct spear_modemux gmii_modemux[] = {
131262306a36Sopenharmony_ci	{
131362306a36Sopenharmony_ci		.muxregs = gmii_muxreg,
131462306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(gmii_muxreg),
131562306a36Sopenharmony_ci	},
131662306a36Sopenharmony_ci};
131762306a36Sopenharmony_ci
131862306a36Sopenharmony_cistatic struct spear_pingroup gmii_pingroup = {
131962306a36Sopenharmony_ci	.name = "gmii_grp",
132062306a36Sopenharmony_ci	.pins = gmac_pins,
132162306a36Sopenharmony_ci	.npins = ARRAY_SIZE(gmac_pins),
132262306a36Sopenharmony_ci	.modemuxs = gmii_modemux,
132362306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(gmii_modemux),
132462306a36Sopenharmony_ci};
132562306a36Sopenharmony_ci
132662306a36Sopenharmony_ci/* pad multiplexing for rgmii device */
132762306a36Sopenharmony_cistatic struct spear_muxreg rgmii_muxreg[] = {
132862306a36Sopenharmony_ci	GMAC_MUXREG,
132962306a36Sopenharmony_ci	{
133062306a36Sopenharmony_ci		.reg = GMAC_CLK_CFG,
133162306a36Sopenharmony_ci		.mask = GMAC_PHY_IF_SEL_MASK,
133262306a36Sopenharmony_ci		.val = GMAC_PHY_IF_RGMII_VAL,
133362306a36Sopenharmony_ci	},
133462306a36Sopenharmony_ci};
133562306a36Sopenharmony_ci
133662306a36Sopenharmony_cistatic struct spear_modemux rgmii_modemux[] = {
133762306a36Sopenharmony_ci	{
133862306a36Sopenharmony_ci		.muxregs = rgmii_muxreg,
133962306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(rgmii_muxreg),
134062306a36Sopenharmony_ci	},
134162306a36Sopenharmony_ci};
134262306a36Sopenharmony_ci
134362306a36Sopenharmony_cistatic struct spear_pingroup rgmii_pingroup = {
134462306a36Sopenharmony_ci	.name = "rgmii_grp",
134562306a36Sopenharmony_ci	.pins = gmac_pins,
134662306a36Sopenharmony_ci	.npins = ARRAY_SIZE(gmac_pins),
134762306a36Sopenharmony_ci	.modemuxs = rgmii_modemux,
134862306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(rgmii_modemux),
134962306a36Sopenharmony_ci};
135062306a36Sopenharmony_ci
135162306a36Sopenharmony_ci/* pad multiplexing for rmii device */
135262306a36Sopenharmony_cistatic struct spear_muxreg rmii_muxreg[] = {
135362306a36Sopenharmony_ci	GMAC_MUXREG,
135462306a36Sopenharmony_ci	{
135562306a36Sopenharmony_ci		.reg = GMAC_CLK_CFG,
135662306a36Sopenharmony_ci		.mask = GMAC_PHY_IF_SEL_MASK,
135762306a36Sopenharmony_ci		.val = GMAC_PHY_IF_RMII_VAL,
135862306a36Sopenharmony_ci	},
135962306a36Sopenharmony_ci};
136062306a36Sopenharmony_ci
136162306a36Sopenharmony_cistatic struct spear_modemux rmii_modemux[] = {
136262306a36Sopenharmony_ci	{
136362306a36Sopenharmony_ci		.muxregs = rmii_muxreg,
136462306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(rmii_muxreg),
136562306a36Sopenharmony_ci	},
136662306a36Sopenharmony_ci};
136762306a36Sopenharmony_ci
136862306a36Sopenharmony_cistatic struct spear_pingroup rmii_pingroup = {
136962306a36Sopenharmony_ci	.name = "rmii_grp",
137062306a36Sopenharmony_ci	.pins = gmac_pins,
137162306a36Sopenharmony_ci	.npins = ARRAY_SIZE(gmac_pins),
137262306a36Sopenharmony_ci	.modemuxs = rmii_modemux,
137362306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(rmii_modemux),
137462306a36Sopenharmony_ci};
137562306a36Sopenharmony_ci
137662306a36Sopenharmony_ci/* pad multiplexing for sgmii device */
137762306a36Sopenharmony_cistatic struct spear_muxreg sgmii_muxreg[] = {
137862306a36Sopenharmony_ci	GMAC_MUXREG,
137962306a36Sopenharmony_ci	{
138062306a36Sopenharmony_ci		.reg = GMAC_CLK_CFG,
138162306a36Sopenharmony_ci		.mask = GMAC_PHY_IF_SEL_MASK,
138262306a36Sopenharmony_ci		.val = GMAC_PHY_IF_SGMII_VAL,
138362306a36Sopenharmony_ci	},
138462306a36Sopenharmony_ci};
138562306a36Sopenharmony_ci
138662306a36Sopenharmony_cistatic struct spear_modemux sgmii_modemux[] = {
138762306a36Sopenharmony_ci	{
138862306a36Sopenharmony_ci		.muxregs = sgmii_muxreg,
138962306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(sgmii_muxreg),
139062306a36Sopenharmony_ci	},
139162306a36Sopenharmony_ci};
139262306a36Sopenharmony_ci
139362306a36Sopenharmony_cistatic struct spear_pingroup sgmii_pingroup = {
139462306a36Sopenharmony_ci	.name = "sgmii_grp",
139562306a36Sopenharmony_ci	.pins = gmac_pins,
139662306a36Sopenharmony_ci	.npins = ARRAY_SIZE(gmac_pins),
139762306a36Sopenharmony_ci	.modemuxs = sgmii_modemux,
139862306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(sgmii_modemux),
139962306a36Sopenharmony_ci};
140062306a36Sopenharmony_ci
140162306a36Sopenharmony_cistatic const char *const gmac_grps[] = { "gmii_grp", "rgmii_grp", "rmii_grp",
140262306a36Sopenharmony_ci	"sgmii_grp" };
140362306a36Sopenharmony_cistatic struct spear_function gmac_function = {
140462306a36Sopenharmony_ci	.name = "gmac",
140562306a36Sopenharmony_ci	.groups = gmac_grps,
140662306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(gmac_grps),
140762306a36Sopenharmony_ci};
140862306a36Sopenharmony_ci
140962306a36Sopenharmony_ci/* pad multiplexing for i2c0 device */
141062306a36Sopenharmony_cistatic const unsigned i2c0_pins[] = { 133, 134 };
141162306a36Sopenharmony_cistatic struct spear_muxreg i2c0_muxreg[] = {
141262306a36Sopenharmony_ci	{
141362306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_5,
141462306a36Sopenharmony_ci		.mask = I2C0_REG4_MASK,
141562306a36Sopenharmony_ci		.val = I2C0_REG4_MASK,
141662306a36Sopenharmony_ci	},
141762306a36Sopenharmony_ci};
141862306a36Sopenharmony_ci
141962306a36Sopenharmony_cistatic struct spear_modemux i2c0_modemux[] = {
142062306a36Sopenharmony_ci	{
142162306a36Sopenharmony_ci		.muxregs = i2c0_muxreg,
142262306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(i2c0_muxreg),
142362306a36Sopenharmony_ci	},
142462306a36Sopenharmony_ci};
142562306a36Sopenharmony_ci
142662306a36Sopenharmony_cistatic struct spear_pingroup i2c0_pingroup = {
142762306a36Sopenharmony_ci	.name = "i2c0_grp",
142862306a36Sopenharmony_ci	.pins = i2c0_pins,
142962306a36Sopenharmony_ci	.npins = ARRAY_SIZE(i2c0_pins),
143062306a36Sopenharmony_ci	.modemuxs = i2c0_modemux,
143162306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(i2c0_modemux),
143262306a36Sopenharmony_ci};
143362306a36Sopenharmony_ci
143462306a36Sopenharmony_cistatic const char *const i2c0_grps[] = { "i2c0_grp" };
143562306a36Sopenharmony_cistatic struct spear_function i2c0_function = {
143662306a36Sopenharmony_ci	.name = "i2c0",
143762306a36Sopenharmony_ci	.groups = i2c0_grps,
143862306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(i2c0_grps),
143962306a36Sopenharmony_ci};
144062306a36Sopenharmony_ci
144162306a36Sopenharmony_ci/* pad multiplexing for i2c1 device */
144262306a36Sopenharmony_cistatic const unsigned i2c1_pins[] = { 18, 23 };
144362306a36Sopenharmony_cistatic struct spear_muxreg i2c1_muxreg[] = {
144462306a36Sopenharmony_ci	{
144562306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_1,
144662306a36Sopenharmony_ci		.mask = I2C1_REG0_MASK,
144762306a36Sopenharmony_ci		.val = I2C1_REG0_MASK,
144862306a36Sopenharmony_ci	},
144962306a36Sopenharmony_ci};
145062306a36Sopenharmony_ci
145162306a36Sopenharmony_cistatic struct spear_modemux i2c1_modemux[] = {
145262306a36Sopenharmony_ci	{
145362306a36Sopenharmony_ci		.muxregs = i2c1_muxreg,
145462306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(i2c1_muxreg),
145562306a36Sopenharmony_ci	},
145662306a36Sopenharmony_ci};
145762306a36Sopenharmony_ci
145862306a36Sopenharmony_cistatic struct spear_pingroup i2c1_pingroup = {
145962306a36Sopenharmony_ci	.name = "i2c1_grp",
146062306a36Sopenharmony_ci	.pins = i2c1_pins,
146162306a36Sopenharmony_ci	.npins = ARRAY_SIZE(i2c1_pins),
146262306a36Sopenharmony_ci	.modemuxs = i2c1_modemux,
146362306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(i2c1_modemux),
146462306a36Sopenharmony_ci};
146562306a36Sopenharmony_ci
146662306a36Sopenharmony_cistatic const char *const i2c1_grps[] = { "i2c1_grp" };
146762306a36Sopenharmony_cistatic struct spear_function i2c1_function = {
146862306a36Sopenharmony_ci	.name = "i2c1",
146962306a36Sopenharmony_ci	.groups = i2c1_grps,
147062306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(i2c1_grps),
147162306a36Sopenharmony_ci};
147262306a36Sopenharmony_ci
147362306a36Sopenharmony_ci/* pad multiplexing for cec0 device */
147462306a36Sopenharmony_cistatic const unsigned cec0_pins[] = { 135 };
147562306a36Sopenharmony_cistatic struct spear_muxreg cec0_muxreg[] = {
147662306a36Sopenharmony_ci	{
147762306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_5,
147862306a36Sopenharmony_ci		.mask = CEC0_REG4_MASK,
147962306a36Sopenharmony_ci		.val = CEC0_REG4_MASK,
148062306a36Sopenharmony_ci	},
148162306a36Sopenharmony_ci};
148262306a36Sopenharmony_ci
148362306a36Sopenharmony_cistatic struct spear_modemux cec0_modemux[] = {
148462306a36Sopenharmony_ci	{
148562306a36Sopenharmony_ci		.muxregs = cec0_muxreg,
148662306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(cec0_muxreg),
148762306a36Sopenharmony_ci	},
148862306a36Sopenharmony_ci};
148962306a36Sopenharmony_ci
149062306a36Sopenharmony_cistatic struct spear_pingroup cec0_pingroup = {
149162306a36Sopenharmony_ci	.name = "cec0_grp",
149262306a36Sopenharmony_ci	.pins = cec0_pins,
149362306a36Sopenharmony_ci	.npins = ARRAY_SIZE(cec0_pins),
149462306a36Sopenharmony_ci	.modemuxs = cec0_modemux,
149562306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(cec0_modemux),
149662306a36Sopenharmony_ci};
149762306a36Sopenharmony_ci
149862306a36Sopenharmony_cistatic const char *const cec0_grps[] = { "cec0_grp" };
149962306a36Sopenharmony_cistatic struct spear_function cec0_function = {
150062306a36Sopenharmony_ci	.name = "cec0",
150162306a36Sopenharmony_ci	.groups = cec0_grps,
150262306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(cec0_grps),
150362306a36Sopenharmony_ci};
150462306a36Sopenharmony_ci
150562306a36Sopenharmony_ci/* pad multiplexing for cec1 device */
150662306a36Sopenharmony_cistatic const unsigned cec1_pins[] = { 136 };
150762306a36Sopenharmony_cistatic struct spear_muxreg cec1_muxreg[] = {
150862306a36Sopenharmony_ci	{
150962306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_5,
151062306a36Sopenharmony_ci		.mask = CEC1_REG4_MASK,
151162306a36Sopenharmony_ci		.val = CEC1_REG4_MASK,
151262306a36Sopenharmony_ci	},
151362306a36Sopenharmony_ci};
151462306a36Sopenharmony_ci
151562306a36Sopenharmony_cistatic struct spear_modemux cec1_modemux[] = {
151662306a36Sopenharmony_ci	{
151762306a36Sopenharmony_ci		.muxregs = cec1_muxreg,
151862306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(cec1_muxreg),
151962306a36Sopenharmony_ci	},
152062306a36Sopenharmony_ci};
152162306a36Sopenharmony_ci
152262306a36Sopenharmony_cistatic struct spear_pingroup cec1_pingroup = {
152362306a36Sopenharmony_ci	.name = "cec1_grp",
152462306a36Sopenharmony_ci	.pins = cec1_pins,
152562306a36Sopenharmony_ci	.npins = ARRAY_SIZE(cec1_pins),
152662306a36Sopenharmony_ci	.modemuxs = cec1_modemux,
152762306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(cec1_modemux),
152862306a36Sopenharmony_ci};
152962306a36Sopenharmony_ci
153062306a36Sopenharmony_cistatic const char *const cec1_grps[] = { "cec1_grp" };
153162306a36Sopenharmony_cistatic struct spear_function cec1_function = {
153262306a36Sopenharmony_ci	.name = "cec1",
153362306a36Sopenharmony_ci	.groups = cec1_grps,
153462306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(cec1_grps),
153562306a36Sopenharmony_ci};
153662306a36Sopenharmony_ci
153762306a36Sopenharmony_ci/* pad multiplexing for mcif devices */
153862306a36Sopenharmony_cistatic const unsigned mcif_pins[] = { 193, 194, 195, 196, 197, 198, 199, 200,
153962306a36Sopenharmony_ci	201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
154062306a36Sopenharmony_ci	215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
154162306a36Sopenharmony_ci	229, 230, 231, 232, 237 };
154262306a36Sopenharmony_ci#define MCIF_MUXREG							\
154362306a36Sopenharmony_ci	{								\
154462306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,				\
154562306a36Sopenharmony_ci		.mask = MCIF_MASK,					\
154662306a36Sopenharmony_ci		.val = MCIF_MASK,					\
154762306a36Sopenharmony_ci	}, {								\
154862306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_7,				\
154962306a36Sopenharmony_ci		.mask = FSMC_PNOR_AND_MCIF_REG6_MASK | MCIF_REG6_MASK,	\
155062306a36Sopenharmony_ci		.val = FSMC_PNOR_AND_MCIF_REG6_MASK | MCIF_REG6_MASK,	\
155162306a36Sopenharmony_ci	}, {								\
155262306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_8,				\
155362306a36Sopenharmony_ci		.mask = MCIF_REG7_MASK,					\
155462306a36Sopenharmony_ci		.val = MCIF_REG7_MASK,					\
155562306a36Sopenharmony_ci	}
155662306a36Sopenharmony_ci
155762306a36Sopenharmony_ci/* Pad multiplexing for sdhci device */
155862306a36Sopenharmony_cistatic struct spear_muxreg sdhci_muxreg[] = {
155962306a36Sopenharmony_ci	MCIF_MUXREG,
156062306a36Sopenharmony_ci	{
156162306a36Sopenharmony_ci		.reg = PERIP_CFG,
156262306a36Sopenharmony_ci		.mask = MCIF_SEL_MASK,
156362306a36Sopenharmony_ci		.val = MCIF_SEL_SD,
156462306a36Sopenharmony_ci	},
156562306a36Sopenharmony_ci};
156662306a36Sopenharmony_ci
156762306a36Sopenharmony_cistatic struct spear_modemux sdhci_modemux[] = {
156862306a36Sopenharmony_ci	{
156962306a36Sopenharmony_ci		.muxregs = sdhci_muxreg,
157062306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(sdhci_muxreg),
157162306a36Sopenharmony_ci	},
157262306a36Sopenharmony_ci};
157362306a36Sopenharmony_ci
157462306a36Sopenharmony_cistatic struct spear_pingroup sdhci_pingroup = {
157562306a36Sopenharmony_ci	.name = "sdhci_grp",
157662306a36Sopenharmony_ci	.pins = mcif_pins,
157762306a36Sopenharmony_ci	.npins = ARRAY_SIZE(mcif_pins),
157862306a36Sopenharmony_ci	.modemuxs = sdhci_modemux,
157962306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(sdhci_modemux),
158062306a36Sopenharmony_ci};
158162306a36Sopenharmony_ci
158262306a36Sopenharmony_cistatic const char *const sdhci_grps[] = { "sdhci_grp" };
158362306a36Sopenharmony_cistatic struct spear_function sdhci_function = {
158462306a36Sopenharmony_ci	.name = "sdhci",
158562306a36Sopenharmony_ci	.groups = sdhci_grps,
158662306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(sdhci_grps),
158762306a36Sopenharmony_ci};
158862306a36Sopenharmony_ci
158962306a36Sopenharmony_ci/* Pad multiplexing for cf device */
159062306a36Sopenharmony_cistatic struct spear_muxreg cf_muxreg[] = {
159162306a36Sopenharmony_ci	MCIF_MUXREG,
159262306a36Sopenharmony_ci	{
159362306a36Sopenharmony_ci		.reg = PERIP_CFG,
159462306a36Sopenharmony_ci		.mask = MCIF_SEL_MASK,
159562306a36Sopenharmony_ci		.val = MCIF_SEL_CF,
159662306a36Sopenharmony_ci	},
159762306a36Sopenharmony_ci};
159862306a36Sopenharmony_ci
159962306a36Sopenharmony_cistatic struct spear_modemux cf_modemux[] = {
160062306a36Sopenharmony_ci	{
160162306a36Sopenharmony_ci		.muxregs = cf_muxreg,
160262306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(cf_muxreg),
160362306a36Sopenharmony_ci	},
160462306a36Sopenharmony_ci};
160562306a36Sopenharmony_ci
160662306a36Sopenharmony_cistatic struct spear_pingroup cf_pingroup = {
160762306a36Sopenharmony_ci	.name = "cf_grp",
160862306a36Sopenharmony_ci	.pins = mcif_pins,
160962306a36Sopenharmony_ci	.npins = ARRAY_SIZE(mcif_pins),
161062306a36Sopenharmony_ci	.modemuxs = cf_modemux,
161162306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(cf_modemux),
161262306a36Sopenharmony_ci};
161362306a36Sopenharmony_ci
161462306a36Sopenharmony_cistatic const char *const cf_grps[] = { "cf_grp" };
161562306a36Sopenharmony_cistatic struct spear_function cf_function = {
161662306a36Sopenharmony_ci	.name = "cf",
161762306a36Sopenharmony_ci	.groups = cf_grps,
161862306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(cf_grps),
161962306a36Sopenharmony_ci};
162062306a36Sopenharmony_ci
162162306a36Sopenharmony_ci/* Pad multiplexing for xd device */
162262306a36Sopenharmony_cistatic struct spear_muxreg xd_muxreg[] = {
162362306a36Sopenharmony_ci	MCIF_MUXREG,
162462306a36Sopenharmony_ci	{
162562306a36Sopenharmony_ci		.reg = PERIP_CFG,
162662306a36Sopenharmony_ci		.mask = MCIF_SEL_MASK,
162762306a36Sopenharmony_ci		.val = MCIF_SEL_XD,
162862306a36Sopenharmony_ci	},
162962306a36Sopenharmony_ci};
163062306a36Sopenharmony_ci
163162306a36Sopenharmony_cistatic struct spear_modemux xd_modemux[] = {
163262306a36Sopenharmony_ci	{
163362306a36Sopenharmony_ci		.muxregs = xd_muxreg,
163462306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(xd_muxreg),
163562306a36Sopenharmony_ci	},
163662306a36Sopenharmony_ci};
163762306a36Sopenharmony_ci
163862306a36Sopenharmony_cistatic struct spear_pingroup xd_pingroup = {
163962306a36Sopenharmony_ci	.name = "xd_grp",
164062306a36Sopenharmony_ci	.pins = mcif_pins,
164162306a36Sopenharmony_ci	.npins = ARRAY_SIZE(mcif_pins),
164262306a36Sopenharmony_ci	.modemuxs = xd_modemux,
164362306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(xd_modemux),
164462306a36Sopenharmony_ci};
164562306a36Sopenharmony_ci
164662306a36Sopenharmony_cistatic const char *const xd_grps[] = { "xd_grp" };
164762306a36Sopenharmony_cistatic struct spear_function xd_function = {
164862306a36Sopenharmony_ci	.name = "xd",
164962306a36Sopenharmony_ci	.groups = xd_grps,
165062306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(xd_grps),
165162306a36Sopenharmony_ci};
165262306a36Sopenharmony_ci
165362306a36Sopenharmony_ci/* pad multiplexing for clcd device */
165462306a36Sopenharmony_cistatic const unsigned clcd_pins[] = { 138, 139, 140, 141, 142, 143, 144, 145,
165562306a36Sopenharmony_ci	146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
165662306a36Sopenharmony_ci	160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
165762306a36Sopenharmony_ci	174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
165862306a36Sopenharmony_ci	188, 189, 190, 191 };
165962306a36Sopenharmony_cistatic struct spear_muxreg clcd_muxreg[] = {
166062306a36Sopenharmony_ci	{
166162306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
166262306a36Sopenharmony_ci		.mask = ARM_TRACE_MASK | MIPHY_DBG_MASK,
166362306a36Sopenharmony_ci		.val = 0,
166462306a36Sopenharmony_ci	}, {
166562306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_5,
166662306a36Sopenharmony_ci		.mask = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK,
166762306a36Sopenharmony_ci		.val = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK,
166862306a36Sopenharmony_ci	}, {
166962306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_6,
167062306a36Sopenharmony_ci		.mask = CLCD_AND_ARM_TRACE_REG5_MASK,
167162306a36Sopenharmony_ci		.val = CLCD_AND_ARM_TRACE_REG5_MASK,
167262306a36Sopenharmony_ci	}, {
167362306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_7,
167462306a36Sopenharmony_ci		.mask = CLCD_AND_ARM_TRACE_REG6_MASK,
167562306a36Sopenharmony_ci		.val = CLCD_AND_ARM_TRACE_REG6_MASK,
167662306a36Sopenharmony_ci	},
167762306a36Sopenharmony_ci};
167862306a36Sopenharmony_ci
167962306a36Sopenharmony_cistatic struct spear_modemux clcd_modemux[] = {
168062306a36Sopenharmony_ci	{
168162306a36Sopenharmony_ci		.muxregs = clcd_muxreg,
168262306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(clcd_muxreg),
168362306a36Sopenharmony_ci	},
168462306a36Sopenharmony_ci};
168562306a36Sopenharmony_ci
168662306a36Sopenharmony_cistatic struct spear_pingroup clcd_pingroup = {
168762306a36Sopenharmony_ci	.name = "clcd_grp",
168862306a36Sopenharmony_ci	.pins = clcd_pins,
168962306a36Sopenharmony_ci	.npins = ARRAY_SIZE(clcd_pins),
169062306a36Sopenharmony_ci	.modemuxs = clcd_modemux,
169162306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(clcd_modemux),
169262306a36Sopenharmony_ci};
169362306a36Sopenharmony_ci
169462306a36Sopenharmony_ci/* Disable cld runtime to save panel damage */
169562306a36Sopenharmony_cistatic struct spear_muxreg clcd_sleep_muxreg[] = {
169662306a36Sopenharmony_ci	{
169762306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
169862306a36Sopenharmony_ci		.mask = ARM_TRACE_MASK | MIPHY_DBG_MASK,
169962306a36Sopenharmony_ci		.val = 0,
170062306a36Sopenharmony_ci	}, {
170162306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_5,
170262306a36Sopenharmony_ci		.mask = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK,
170362306a36Sopenharmony_ci		.val = 0x0,
170462306a36Sopenharmony_ci	}, {
170562306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_6,
170662306a36Sopenharmony_ci		.mask = CLCD_AND_ARM_TRACE_REG5_MASK,
170762306a36Sopenharmony_ci		.val = 0x0,
170862306a36Sopenharmony_ci	}, {
170962306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_7,
171062306a36Sopenharmony_ci		.mask = CLCD_AND_ARM_TRACE_REG6_MASK,
171162306a36Sopenharmony_ci		.val = 0x0,
171262306a36Sopenharmony_ci	},
171362306a36Sopenharmony_ci};
171462306a36Sopenharmony_ci
171562306a36Sopenharmony_cistatic struct spear_modemux clcd_sleep_modemux[] = {
171662306a36Sopenharmony_ci	{
171762306a36Sopenharmony_ci		.muxregs = clcd_sleep_muxreg,
171862306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(clcd_sleep_muxreg),
171962306a36Sopenharmony_ci	},
172062306a36Sopenharmony_ci};
172162306a36Sopenharmony_ci
172262306a36Sopenharmony_cistatic struct spear_pingroup clcd_sleep_pingroup = {
172362306a36Sopenharmony_ci	.name = "clcd_sleep_grp",
172462306a36Sopenharmony_ci	.pins = clcd_pins,
172562306a36Sopenharmony_ci	.npins = ARRAY_SIZE(clcd_pins),
172662306a36Sopenharmony_ci	.modemuxs = clcd_sleep_modemux,
172762306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(clcd_sleep_modemux),
172862306a36Sopenharmony_ci};
172962306a36Sopenharmony_ci
173062306a36Sopenharmony_cistatic const char *const clcd_grps[] = { "clcd_grp", "clcd_sleep_grp" };
173162306a36Sopenharmony_cistatic struct spear_function clcd_function = {
173262306a36Sopenharmony_ci	.name = "clcd",
173362306a36Sopenharmony_ci	.groups = clcd_grps,
173462306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(clcd_grps),
173562306a36Sopenharmony_ci};
173662306a36Sopenharmony_ci
173762306a36Sopenharmony_ci/* pad multiplexing for arm_trace device */
173862306a36Sopenharmony_cistatic const unsigned arm_trace_pins[] = { 158, 159, 160, 161, 162, 163, 164,
173962306a36Sopenharmony_ci	165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
174062306a36Sopenharmony_ci	179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
174162306a36Sopenharmony_ci	193, 194, 195, 196, 197, 198, 199, 200 };
174262306a36Sopenharmony_cistatic struct spear_muxreg arm_trace_muxreg[] = {
174362306a36Sopenharmony_ci	{
174462306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
174562306a36Sopenharmony_ci		.mask = ARM_TRACE_MASK,
174662306a36Sopenharmony_ci		.val = ARM_TRACE_MASK,
174762306a36Sopenharmony_ci	}, {
174862306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_5,
174962306a36Sopenharmony_ci		.mask = CLCD_AND_ARM_TRACE_REG4_MASK,
175062306a36Sopenharmony_ci		.val = CLCD_AND_ARM_TRACE_REG4_MASK,
175162306a36Sopenharmony_ci	}, {
175262306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_6,
175362306a36Sopenharmony_ci		.mask = CLCD_AND_ARM_TRACE_REG5_MASK,
175462306a36Sopenharmony_ci		.val = CLCD_AND_ARM_TRACE_REG5_MASK,
175562306a36Sopenharmony_ci	}, {
175662306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_7,
175762306a36Sopenharmony_ci		.mask = CLCD_AND_ARM_TRACE_REG6_MASK,
175862306a36Sopenharmony_ci		.val = CLCD_AND_ARM_TRACE_REG6_MASK,
175962306a36Sopenharmony_ci	},
176062306a36Sopenharmony_ci};
176162306a36Sopenharmony_ci
176262306a36Sopenharmony_cistatic struct spear_modemux arm_trace_modemux[] = {
176362306a36Sopenharmony_ci	{
176462306a36Sopenharmony_ci		.muxregs = arm_trace_muxreg,
176562306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(arm_trace_muxreg),
176662306a36Sopenharmony_ci	},
176762306a36Sopenharmony_ci};
176862306a36Sopenharmony_ci
176962306a36Sopenharmony_cistatic struct spear_pingroup arm_trace_pingroup = {
177062306a36Sopenharmony_ci	.name = "arm_trace_grp",
177162306a36Sopenharmony_ci	.pins = arm_trace_pins,
177262306a36Sopenharmony_ci	.npins = ARRAY_SIZE(arm_trace_pins),
177362306a36Sopenharmony_ci	.modemuxs = arm_trace_modemux,
177462306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(arm_trace_modemux),
177562306a36Sopenharmony_ci};
177662306a36Sopenharmony_ci
177762306a36Sopenharmony_cistatic const char *const arm_trace_grps[] = { "arm_trace_grp" };
177862306a36Sopenharmony_cistatic struct spear_function arm_trace_function = {
177962306a36Sopenharmony_ci	.name = "arm_trace",
178062306a36Sopenharmony_ci	.groups = arm_trace_grps,
178162306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(arm_trace_grps),
178262306a36Sopenharmony_ci};
178362306a36Sopenharmony_ci
178462306a36Sopenharmony_ci/* pad multiplexing for miphy_dbg device */
178562306a36Sopenharmony_cistatic const unsigned miphy_dbg_pins[] = { 96, 97, 98, 99, 100, 101, 102, 103,
178662306a36Sopenharmony_ci	132, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
178762306a36Sopenharmony_ci	148, 149, 150, 151, 152, 153, 154, 155, 156, 157 };
178862306a36Sopenharmony_cistatic struct spear_muxreg miphy_dbg_muxreg[] = {
178962306a36Sopenharmony_ci	{
179062306a36Sopenharmony_ci		.reg = PAD_SHARED_IP_EN_1,
179162306a36Sopenharmony_ci		.mask = MIPHY_DBG_MASK,
179262306a36Sopenharmony_ci		.val = MIPHY_DBG_MASK,
179362306a36Sopenharmony_ci	}, {
179462306a36Sopenharmony_ci		.reg = PAD_FUNCTION_EN_5,
179562306a36Sopenharmony_ci		.mask = DEVS_GRP_AND_MIPHY_DBG_REG4_MASK,
179662306a36Sopenharmony_ci		.val = DEVS_GRP_AND_MIPHY_DBG_REG4_MASK,
179762306a36Sopenharmony_ci	},
179862306a36Sopenharmony_ci};
179962306a36Sopenharmony_ci
180062306a36Sopenharmony_cistatic struct spear_modemux miphy_dbg_modemux[] = {
180162306a36Sopenharmony_ci	{
180262306a36Sopenharmony_ci		.muxregs = miphy_dbg_muxreg,
180362306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(miphy_dbg_muxreg),
180462306a36Sopenharmony_ci	},
180562306a36Sopenharmony_ci};
180662306a36Sopenharmony_ci
180762306a36Sopenharmony_cistatic struct spear_pingroup miphy_dbg_pingroup = {
180862306a36Sopenharmony_ci	.name = "miphy_dbg_grp",
180962306a36Sopenharmony_ci	.pins = miphy_dbg_pins,
181062306a36Sopenharmony_ci	.npins = ARRAY_SIZE(miphy_dbg_pins),
181162306a36Sopenharmony_ci	.modemuxs = miphy_dbg_modemux,
181262306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(miphy_dbg_modemux),
181362306a36Sopenharmony_ci};
181462306a36Sopenharmony_ci
181562306a36Sopenharmony_cistatic const char *const miphy_dbg_grps[] = { "miphy_dbg_grp" };
181662306a36Sopenharmony_cistatic struct spear_function miphy_dbg_function = {
181762306a36Sopenharmony_ci	.name = "miphy_dbg",
181862306a36Sopenharmony_ci	.groups = miphy_dbg_grps,
181962306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(miphy_dbg_grps),
182062306a36Sopenharmony_ci};
182162306a36Sopenharmony_ci
182262306a36Sopenharmony_ci/* pad multiplexing for pcie device */
182362306a36Sopenharmony_cistatic const unsigned pcie_pins[] = { 250 };
182462306a36Sopenharmony_cistatic struct spear_muxreg pcie_muxreg[] = {
182562306a36Sopenharmony_ci	{
182662306a36Sopenharmony_ci		.reg = PCIE_SATA_CFG,
182762306a36Sopenharmony_ci		.mask = SATA_PCIE_CFG_MASK,
182862306a36Sopenharmony_ci		.val = PCIE_CFG_VAL,
182962306a36Sopenharmony_ci	},
183062306a36Sopenharmony_ci};
183162306a36Sopenharmony_ci
183262306a36Sopenharmony_cistatic struct spear_modemux pcie_modemux[] = {
183362306a36Sopenharmony_ci	{
183462306a36Sopenharmony_ci		.muxregs = pcie_muxreg,
183562306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(pcie_muxreg),
183662306a36Sopenharmony_ci	},
183762306a36Sopenharmony_ci};
183862306a36Sopenharmony_ci
183962306a36Sopenharmony_cistatic struct spear_pingroup pcie_pingroup = {
184062306a36Sopenharmony_ci	.name = "pcie_grp",
184162306a36Sopenharmony_ci	.pins = pcie_pins,
184262306a36Sopenharmony_ci	.npins = ARRAY_SIZE(pcie_pins),
184362306a36Sopenharmony_ci	.modemuxs = pcie_modemux,
184462306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(pcie_modemux),
184562306a36Sopenharmony_ci};
184662306a36Sopenharmony_ci
184762306a36Sopenharmony_cistatic const char *const pcie_grps[] = { "pcie_grp" };
184862306a36Sopenharmony_cistatic struct spear_function pcie_function = {
184962306a36Sopenharmony_ci	.name = "pcie",
185062306a36Sopenharmony_ci	.groups = pcie_grps,
185162306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(pcie_grps),
185262306a36Sopenharmony_ci};
185362306a36Sopenharmony_ci
185462306a36Sopenharmony_ci/* pad multiplexing for sata device */
185562306a36Sopenharmony_cistatic const unsigned sata_pins[] = { 250 };
185662306a36Sopenharmony_cistatic struct spear_muxreg sata_muxreg[] = {
185762306a36Sopenharmony_ci	{
185862306a36Sopenharmony_ci		.reg = PCIE_SATA_CFG,
185962306a36Sopenharmony_ci		.mask = SATA_PCIE_CFG_MASK,
186062306a36Sopenharmony_ci		.val = SATA_CFG_VAL,
186162306a36Sopenharmony_ci	},
186262306a36Sopenharmony_ci};
186362306a36Sopenharmony_ci
186462306a36Sopenharmony_cistatic struct spear_modemux sata_modemux[] = {
186562306a36Sopenharmony_ci	{
186662306a36Sopenharmony_ci		.muxregs = sata_muxreg,
186762306a36Sopenharmony_ci		.nmuxregs = ARRAY_SIZE(sata_muxreg),
186862306a36Sopenharmony_ci	},
186962306a36Sopenharmony_ci};
187062306a36Sopenharmony_ci
187162306a36Sopenharmony_cistatic struct spear_pingroup sata_pingroup = {
187262306a36Sopenharmony_ci	.name = "sata_grp",
187362306a36Sopenharmony_ci	.pins = sata_pins,
187462306a36Sopenharmony_ci	.npins = ARRAY_SIZE(sata_pins),
187562306a36Sopenharmony_ci	.modemuxs = sata_modemux,
187662306a36Sopenharmony_ci	.nmodemuxs = ARRAY_SIZE(sata_modemux),
187762306a36Sopenharmony_ci};
187862306a36Sopenharmony_ci
187962306a36Sopenharmony_cistatic const char *const sata_grps[] = { "sata_grp" };
188062306a36Sopenharmony_cistatic struct spear_function sata_function = {
188162306a36Sopenharmony_ci	.name = "sata",
188262306a36Sopenharmony_ci	.groups = sata_grps,
188362306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(sata_grps),
188462306a36Sopenharmony_ci};
188562306a36Sopenharmony_ci
188662306a36Sopenharmony_ci/* pingroups */
188762306a36Sopenharmony_cistatic struct spear_pingroup *spear1340_pingroups[] = {
188862306a36Sopenharmony_ci	&pads_as_gpio_pingroup,
188962306a36Sopenharmony_ci	&fsmc_8bit_pingroup,
189062306a36Sopenharmony_ci	&fsmc_16bit_pingroup,
189162306a36Sopenharmony_ci	&fsmc_pnor_pingroup,
189262306a36Sopenharmony_ci	&keyboard_row_col_pingroup,
189362306a36Sopenharmony_ci	&keyboard_col5_pingroup,
189462306a36Sopenharmony_ci	&spdif_in_pingroup,
189562306a36Sopenharmony_ci	&spdif_out_pingroup,
189662306a36Sopenharmony_ci	&gpt_0_1_pingroup,
189762306a36Sopenharmony_ci	&pwm0_pingroup,
189862306a36Sopenharmony_ci	&pwm1_pingroup,
189962306a36Sopenharmony_ci	&pwm2_pingroup,
190062306a36Sopenharmony_ci	&pwm3_pingroup,
190162306a36Sopenharmony_ci	&vip_mux_pingroup,
190262306a36Sopenharmony_ci	&vip_mux_cam0_pingroup,
190362306a36Sopenharmony_ci	&vip_mux_cam1_pingroup,
190462306a36Sopenharmony_ci	&vip_mux_cam2_pingroup,
190562306a36Sopenharmony_ci	&vip_mux_cam3_pingroup,
190662306a36Sopenharmony_ci	&cam0_pingroup,
190762306a36Sopenharmony_ci	&cam1_pingroup,
190862306a36Sopenharmony_ci	&cam2_pingroup,
190962306a36Sopenharmony_ci	&cam3_pingroup,
191062306a36Sopenharmony_ci	&smi_pingroup,
191162306a36Sopenharmony_ci	&ssp0_pingroup,
191262306a36Sopenharmony_ci	&ssp0_cs1_pingroup,
191362306a36Sopenharmony_ci	&ssp0_cs2_pingroup,
191462306a36Sopenharmony_ci	&ssp0_cs3_pingroup,
191562306a36Sopenharmony_ci	&uart0_pingroup,
191662306a36Sopenharmony_ci	&uart0_enh_pingroup,
191762306a36Sopenharmony_ci	&uart1_pingroup,
191862306a36Sopenharmony_ci	&i2s_in_pingroup,
191962306a36Sopenharmony_ci	&i2s_out_pingroup,
192062306a36Sopenharmony_ci	&gmii_pingroup,
192162306a36Sopenharmony_ci	&rgmii_pingroup,
192262306a36Sopenharmony_ci	&rmii_pingroup,
192362306a36Sopenharmony_ci	&sgmii_pingroup,
192462306a36Sopenharmony_ci	&i2c0_pingroup,
192562306a36Sopenharmony_ci	&i2c1_pingroup,
192662306a36Sopenharmony_ci	&cec0_pingroup,
192762306a36Sopenharmony_ci	&cec1_pingroup,
192862306a36Sopenharmony_ci	&sdhci_pingroup,
192962306a36Sopenharmony_ci	&cf_pingroup,
193062306a36Sopenharmony_ci	&xd_pingroup,
193162306a36Sopenharmony_ci	&clcd_sleep_pingroup,
193262306a36Sopenharmony_ci	&clcd_pingroup,
193362306a36Sopenharmony_ci	&arm_trace_pingroup,
193462306a36Sopenharmony_ci	&miphy_dbg_pingroup,
193562306a36Sopenharmony_ci	&pcie_pingroup,
193662306a36Sopenharmony_ci	&sata_pingroup,
193762306a36Sopenharmony_ci};
193862306a36Sopenharmony_ci
193962306a36Sopenharmony_ci/* functions */
194062306a36Sopenharmony_cistatic struct spear_function *spear1340_functions[] = {
194162306a36Sopenharmony_ci	&pads_as_gpio_function,
194262306a36Sopenharmony_ci	&fsmc_function,
194362306a36Sopenharmony_ci	&keyboard_function,
194462306a36Sopenharmony_ci	&spdif_in_function,
194562306a36Sopenharmony_ci	&spdif_out_function,
194662306a36Sopenharmony_ci	&gpt_0_1_function,
194762306a36Sopenharmony_ci	&pwm_function,
194862306a36Sopenharmony_ci	&vip_function,
194962306a36Sopenharmony_ci	&cam0_function,
195062306a36Sopenharmony_ci	&cam1_function,
195162306a36Sopenharmony_ci	&cam2_function,
195262306a36Sopenharmony_ci	&cam3_function,
195362306a36Sopenharmony_ci	&smi_function,
195462306a36Sopenharmony_ci	&ssp0_function,
195562306a36Sopenharmony_ci	&uart0_function,
195662306a36Sopenharmony_ci	&uart1_function,
195762306a36Sopenharmony_ci	&i2s_function,
195862306a36Sopenharmony_ci	&gmac_function,
195962306a36Sopenharmony_ci	&i2c0_function,
196062306a36Sopenharmony_ci	&i2c1_function,
196162306a36Sopenharmony_ci	&cec0_function,
196262306a36Sopenharmony_ci	&cec1_function,
196362306a36Sopenharmony_ci	&sdhci_function,
196462306a36Sopenharmony_ci	&cf_function,
196562306a36Sopenharmony_ci	&xd_function,
196662306a36Sopenharmony_ci	&clcd_function,
196762306a36Sopenharmony_ci	&arm_trace_function,
196862306a36Sopenharmony_ci	&miphy_dbg_function,
196962306a36Sopenharmony_ci	&pcie_function,
197062306a36Sopenharmony_ci	&sata_function,
197162306a36Sopenharmony_ci};
197262306a36Sopenharmony_ci
197362306a36Sopenharmony_cistatic void gpio_request_endisable(struct spear_pmx *pmx, int pin,
197462306a36Sopenharmony_ci		bool enable)
197562306a36Sopenharmony_ci{
197662306a36Sopenharmony_ci	unsigned int regoffset, regindex, bitoffset;
197762306a36Sopenharmony_ci	unsigned int val;
197862306a36Sopenharmony_ci
197962306a36Sopenharmony_ci	/* pin++ as gpio configuration starts from 2nd bit of base register */
198062306a36Sopenharmony_ci	pin++;
198162306a36Sopenharmony_ci
198262306a36Sopenharmony_ci	regindex = pin / 32;
198362306a36Sopenharmony_ci	bitoffset = pin % 32;
198462306a36Sopenharmony_ci
198562306a36Sopenharmony_ci	if (regindex <= 3)
198662306a36Sopenharmony_ci		regoffset = PAD_FUNCTION_EN_1 + regindex * sizeof(int *);
198762306a36Sopenharmony_ci	else
198862306a36Sopenharmony_ci		regoffset = PAD_FUNCTION_EN_5 + (regindex - 4) * sizeof(int *);
198962306a36Sopenharmony_ci
199062306a36Sopenharmony_ci	val = pmx_readl(pmx, regoffset);
199162306a36Sopenharmony_ci	if (enable)
199262306a36Sopenharmony_ci		val &= ~(0x1 << bitoffset);
199362306a36Sopenharmony_ci	else
199462306a36Sopenharmony_ci		val |= 0x1 << bitoffset;
199562306a36Sopenharmony_ci
199662306a36Sopenharmony_ci	pmx_writel(pmx, val, regoffset);
199762306a36Sopenharmony_ci}
199862306a36Sopenharmony_ci
199962306a36Sopenharmony_cistatic struct spear_pinctrl_machdata spear1340_machdata = {
200062306a36Sopenharmony_ci	.pins = spear1340_pins,
200162306a36Sopenharmony_ci	.npins = ARRAY_SIZE(spear1340_pins),
200262306a36Sopenharmony_ci	.groups = spear1340_pingroups,
200362306a36Sopenharmony_ci	.ngroups = ARRAY_SIZE(spear1340_pingroups),
200462306a36Sopenharmony_ci	.functions = spear1340_functions,
200562306a36Sopenharmony_ci	.nfunctions = ARRAY_SIZE(spear1340_functions),
200662306a36Sopenharmony_ci	.gpio_request_endisable = gpio_request_endisable,
200762306a36Sopenharmony_ci	.modes_supported = false,
200862306a36Sopenharmony_ci};
200962306a36Sopenharmony_ci
201062306a36Sopenharmony_cistatic const struct of_device_id spear1340_pinctrl_of_match[] = {
201162306a36Sopenharmony_ci	{
201262306a36Sopenharmony_ci		.compatible = "st,spear1340-pinmux",
201362306a36Sopenharmony_ci	},
201462306a36Sopenharmony_ci	{},
201562306a36Sopenharmony_ci};
201662306a36Sopenharmony_ci
201762306a36Sopenharmony_cistatic int spear1340_pinctrl_probe(struct platform_device *pdev)
201862306a36Sopenharmony_ci{
201962306a36Sopenharmony_ci	return spear_pinctrl_probe(pdev, &spear1340_machdata);
202062306a36Sopenharmony_ci}
202162306a36Sopenharmony_ci
202262306a36Sopenharmony_cistatic struct platform_driver spear1340_pinctrl_driver = {
202362306a36Sopenharmony_ci	.driver = {
202462306a36Sopenharmony_ci		.name = DRIVER_NAME,
202562306a36Sopenharmony_ci		.of_match_table = spear1340_pinctrl_of_match,
202662306a36Sopenharmony_ci	},
202762306a36Sopenharmony_ci	.probe = spear1340_pinctrl_probe,
202862306a36Sopenharmony_ci};
202962306a36Sopenharmony_ci
203062306a36Sopenharmony_cistatic int __init spear1340_pinctrl_init(void)
203162306a36Sopenharmony_ci{
203262306a36Sopenharmony_ci	return platform_driver_register(&spear1340_pinctrl_driver);
203362306a36Sopenharmony_ci}
203462306a36Sopenharmony_ciarch_initcall(spear1340_pinctrl_init);
2035