152130b60SViresh Kumar /*
252130b60SViresh Kumar  * Driver for the ST Microelectronics SPEAr320 pinmux
352130b60SViresh Kumar  *
452130b60SViresh Kumar  * Copyright (C) 2012 ST Microelectronics
5da89947bSViresh Kumar  * Viresh Kumar <vireshk@kernel.org>
652130b60SViresh Kumar  *
752130b60SViresh Kumar  * This file is licensed under the terms of the GNU General Public
852130b60SViresh Kumar  * License version 2. This program is licensed "as is" without any
952130b60SViresh Kumar  * warranty of any kind, whether express or implied.
1052130b60SViresh Kumar  */
1152130b60SViresh Kumar 
1252130b60SViresh Kumar #include <linux/err.h>
1352130b60SViresh Kumar #include <linux/init.h>
14*060f03e9SRob Herring #include <linux/mod_devicetable.h>
1552130b60SViresh Kumar #include <linux/platform_device.h>
1652130b60SViresh Kumar #include "pinctrl-spear3xx.h"
1752130b60SViresh Kumar 
1852130b60SViresh Kumar #define DRIVER_NAME "spear320-pinmux"
1952130b60SViresh Kumar 
2052130b60SViresh Kumar /* addresses */
2152130b60SViresh Kumar #define PMX_CONFIG_REG			0x0C
2252130b60SViresh Kumar #define MODE_CONFIG_REG			0x10
2352130b60SViresh Kumar #define MODE_EXT_CONFIG_REG		0x18
2452130b60SViresh Kumar 
2552130b60SViresh Kumar /* modes */
2652130b60SViresh Kumar #define AUTO_NET_SMII_MODE	(1 << 0)
2752130b60SViresh Kumar #define AUTO_NET_MII_MODE	(1 << 1)
2852130b60SViresh Kumar #define AUTO_EXP_MODE		(1 << 2)
2952130b60SViresh Kumar #define SMALL_PRINTERS_MODE	(1 << 3)
3052130b60SViresh Kumar #define EXTENDED_MODE		(1 << 4)
3152130b60SViresh Kumar 
3252130b60SViresh Kumar static struct spear_pmx_mode pmx_mode_auto_net_smii = {
3352130b60SViresh Kumar 	.name = "Automation Networking SMII mode",
3452130b60SViresh Kumar 	.mode = AUTO_NET_SMII_MODE,
3552130b60SViresh Kumar 	.reg = MODE_CONFIG_REG,
3652130b60SViresh Kumar 	.mask = 0x00000007,
3752130b60SViresh Kumar 	.val = 0x0,
3852130b60SViresh Kumar };
3952130b60SViresh Kumar 
4052130b60SViresh Kumar static struct spear_pmx_mode pmx_mode_auto_net_mii = {
4152130b60SViresh Kumar 	.name = "Automation Networking MII mode",
4252130b60SViresh Kumar 	.mode = AUTO_NET_MII_MODE,
4352130b60SViresh Kumar 	.reg = MODE_CONFIG_REG,
4452130b60SViresh Kumar 	.mask = 0x00000007,
4552130b60SViresh Kumar 	.val = 0x1,
4652130b60SViresh Kumar };
4752130b60SViresh Kumar 
4852130b60SViresh Kumar static struct spear_pmx_mode pmx_mode_auto_exp = {
4952130b60SViresh Kumar 	.name = "Automation Expanded mode",
5052130b60SViresh Kumar 	.mode = AUTO_EXP_MODE,
5152130b60SViresh Kumar 	.reg = MODE_CONFIG_REG,
5252130b60SViresh Kumar 	.mask = 0x00000007,
5352130b60SViresh Kumar 	.val = 0x2,
5452130b60SViresh Kumar };
5552130b60SViresh Kumar 
5652130b60SViresh Kumar static struct spear_pmx_mode pmx_mode_small_printers = {
5752130b60SViresh Kumar 	.name = "Small Printers mode",
5852130b60SViresh Kumar 	.mode = SMALL_PRINTERS_MODE,
5952130b60SViresh Kumar 	.reg = MODE_CONFIG_REG,
6052130b60SViresh Kumar 	.mask = 0x00000007,
6152130b60SViresh Kumar 	.val = 0x3,
6252130b60SViresh Kumar };
6352130b60SViresh Kumar 
6452130b60SViresh Kumar static struct spear_pmx_mode pmx_mode_extended = {
6552130b60SViresh Kumar 	.name = "extended mode",
6652130b60SViresh Kumar 	.mode = EXTENDED_MODE,
6752130b60SViresh Kumar 	.reg = MODE_EXT_CONFIG_REG,
6852130b60SViresh Kumar 	.mask = 0x00000001,
6952130b60SViresh Kumar 	.val = 0x1,
7052130b60SViresh Kumar };
7152130b60SViresh Kumar 
7252130b60SViresh Kumar static struct spear_pmx_mode *spear320_pmx_modes[] = {
7352130b60SViresh Kumar 	&pmx_mode_auto_net_smii,
7452130b60SViresh Kumar 	&pmx_mode_auto_net_mii,
7552130b60SViresh Kumar 	&pmx_mode_auto_exp,
7652130b60SViresh Kumar 	&pmx_mode_small_printers,
7752130b60SViresh Kumar 	&pmx_mode_extended,
7852130b60SViresh Kumar };
7952130b60SViresh Kumar 
8052130b60SViresh Kumar /* Extended mode registers and their offsets */
8152130b60SViresh Kumar #define EXT_CTRL_REG				0x0018
8252130b60SViresh Kumar 	#define MII_MDIO_MASK			(1 << 4)
8352130b60SViresh Kumar 	#define MII_MDIO_10_11_VAL		0
8452130b60SViresh Kumar 	#define MII_MDIO_81_VAL			(1 << 4)
8552130b60SViresh Kumar 	#define EMI_FSMC_DYNAMIC_MUX_MASK	(1 << 5)
8652130b60SViresh Kumar 	#define MAC_MODE_MII			0
8752130b60SViresh Kumar 	#define MAC_MODE_RMII			1
8852130b60SViresh Kumar 	#define MAC_MODE_SMII			2
8952130b60SViresh Kumar 	#define MAC_MODE_SS_SMII		3
9052130b60SViresh Kumar 	#define MAC_MODE_MASK			0x3
9152130b60SViresh Kumar 	#define MAC1_MODE_SHIFT			16
9252130b60SViresh Kumar 	#define MAC2_MODE_SHIFT			18
9352130b60SViresh Kumar 
9452130b60SViresh Kumar #define IP_SEL_PAD_0_9_REG			0x00A4
9552130b60SViresh Kumar 	#define PMX_PL_0_1_MASK			(0x3F << 0)
9652130b60SViresh Kumar 	#define PMX_UART2_PL_0_1_VAL		0x0
9752130b60SViresh Kumar 	#define PMX_I2C2_PL_0_1_VAL		(0x4 | (0x4 << 3))
9852130b60SViresh Kumar 
9952130b60SViresh Kumar 	#define PMX_PL_2_3_MASK			(0x3F << 6)
10052130b60SViresh Kumar 	#define PMX_I2C2_PL_2_3_VAL		0x0
10152130b60SViresh Kumar 	#define PMX_UART6_PL_2_3_VAL		((0x1 << 6) | (0x1 << 9))
10252130b60SViresh Kumar 	#define PMX_UART1_ENH_PL_2_3_VAL	((0x4 << 6) | (0x4 << 9))
10352130b60SViresh Kumar 
10452130b60SViresh Kumar 	#define PMX_PL_4_5_MASK			(0x3F << 12)
10552130b60SViresh Kumar 	#define PMX_UART5_PL_4_5_VAL		((0x1 << 12) | (0x1 << 15))
10652130b60SViresh Kumar 	#define PMX_UART1_ENH_PL_4_5_VAL	((0x4 << 12) | (0x4 << 15))
10752130b60SViresh Kumar 	#define PMX_PL_5_MASK			(0x7 << 15)
10852130b60SViresh Kumar 	#define PMX_TOUCH_Y_PL_5_VAL		0x0
10952130b60SViresh Kumar 
11052130b60SViresh Kumar 	#define PMX_PL_6_7_MASK			(0x3F << 18)
11152130b60SViresh Kumar 	#define PMX_PL_6_MASK			(0x7 << 18)
11252130b60SViresh Kumar 	#define PMX_PL_7_MASK			(0x7 << 21)
11352130b60SViresh Kumar 	#define PMX_UART4_PL_6_7_VAL		((0x1 << 18) | (0x1 << 21))
11452130b60SViresh Kumar 	#define PMX_PWM_3_PL_6_VAL		(0x2 << 18)
11552130b60SViresh Kumar 	#define PMX_PWM_2_PL_7_VAL		(0x2 << 21)
11652130b60SViresh Kumar 	#define PMX_UART1_ENH_PL_6_7_VAL	((0x4 << 18) | (0x4 << 21))
11752130b60SViresh Kumar 
11852130b60SViresh Kumar 	#define PMX_PL_8_9_MASK			(0x3F << 24)
11952130b60SViresh Kumar 	#define PMX_UART3_PL_8_9_VAL		((0x1 << 24) | (0x1 << 27))
12052130b60SViresh Kumar 	#define PMX_PWM_0_1_PL_8_9_VAL		((0x2 << 24) | (0x2 << 27))
12152130b60SViresh Kumar 	#define PMX_I2C1_PL_8_9_VAL		((0x4 << 24) | (0x4 << 27))
12252130b60SViresh Kumar 
12352130b60SViresh Kumar #define IP_SEL_PAD_10_19_REG			0x00A8
12452130b60SViresh Kumar 	#define PMX_PL_10_11_MASK		(0x3F << 0)
12552130b60SViresh Kumar 	#define PMX_SMII_PL_10_11_VAL		0
12652130b60SViresh Kumar 	#define PMX_RMII_PL_10_11_VAL		((0x4 << 0) | (0x4 << 3))
12752130b60SViresh Kumar 
12852130b60SViresh Kumar 	#define PMX_PL_12_MASK			(0x7 << 6)
12952130b60SViresh Kumar 	#define PMX_PWM3_PL_12_VAL		0
13052130b60SViresh Kumar 	#define PMX_SDHCI_CD_PL_12_VAL		(0x4 << 6)
13152130b60SViresh Kumar 
13252130b60SViresh Kumar 	#define PMX_PL_13_14_MASK		(0x3F << 9)
13352130b60SViresh Kumar 	#define PMX_PL_13_MASK			(0x7 << 9)
13452130b60SViresh Kumar 	#define PMX_PL_14_MASK			(0x7 << 12)
13552130b60SViresh Kumar 	#define PMX_SSP2_PL_13_14_15_16_VAL	0
13652130b60SViresh Kumar 	#define PMX_UART4_PL_13_14_VAL		((0x1 << 9) | (0x1 << 12))
13752130b60SViresh Kumar 	#define PMX_RMII_PL_13_14_VAL		((0x4 << 9) | (0x4 << 12))
13852130b60SViresh Kumar 	#define PMX_PWM2_PL_13_VAL		(0x2 << 9)
13952130b60SViresh Kumar 	#define PMX_PWM1_PL_14_VAL		(0x2 << 12)
14052130b60SViresh Kumar 
14152130b60SViresh Kumar 	#define PMX_PL_15_MASK			(0x7 << 15)
14252130b60SViresh Kumar 	#define PMX_PWM0_PL_15_VAL		(0x2 << 15)
14352130b60SViresh Kumar 	#define PMX_PL_15_16_MASK		(0x3F << 15)
14452130b60SViresh Kumar 	#define PMX_UART3_PL_15_16_VAL		((0x1 << 15) | (0x1 << 18))
14552130b60SViresh Kumar 	#define PMX_RMII_PL_15_16_VAL		((0x4 << 15) | (0x4 << 18))
14652130b60SViresh Kumar 
14752130b60SViresh Kumar 	#define PMX_PL_17_18_MASK		(0x3F << 21)
14852130b60SViresh Kumar 	#define PMX_SSP1_PL_17_18_19_20_VAL	0
14952130b60SViresh Kumar 	#define PMX_RMII_PL_17_18_VAL		((0x4 << 21) | (0x4 << 24))
15052130b60SViresh Kumar 
15152130b60SViresh Kumar 	#define PMX_PL_19_MASK			(0x7 << 27)
15252130b60SViresh Kumar 	#define PMX_I2C2_PL_19_VAL		(0x1 << 27)
15352130b60SViresh Kumar 	#define PMX_RMII_PL_19_VAL		(0x4 << 27)
15452130b60SViresh Kumar 
15552130b60SViresh Kumar #define IP_SEL_PAD_20_29_REG			0x00AC
15652130b60SViresh Kumar 	#define PMX_PL_20_MASK			(0x7 << 0)
15752130b60SViresh Kumar 	#define PMX_I2C2_PL_20_VAL		(0x1 << 0)
15852130b60SViresh Kumar 	#define PMX_RMII_PL_20_VAL		(0x4 << 0)
15952130b60SViresh Kumar 
16052130b60SViresh Kumar 	#define PMX_PL_21_TO_27_MASK		(0x1FFFFF << 3)
16152130b60SViresh Kumar 	#define PMX_SMII_PL_21_TO_27_VAL	0
16252130b60SViresh Kumar 	#define PMX_RMII_PL_21_TO_27_VAL	((0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12) | (0x4 << 15) | (0x4 << 18) | (0x4 << 21))
16352130b60SViresh Kumar 
16452130b60SViresh Kumar 	#define PMX_PL_28_29_MASK		(0x3F << 24)
16552130b60SViresh Kumar 	#define PMX_PL_28_MASK			(0x7 << 24)
16652130b60SViresh Kumar 	#define PMX_PL_29_MASK			(0x7 << 27)
16752130b60SViresh Kumar 	#define PMX_UART1_PL_28_29_VAL		0
16852130b60SViresh Kumar 	#define PMX_PWM_3_PL_28_VAL		(0x4 << 24)
16952130b60SViresh Kumar 	#define PMX_PWM_2_PL_29_VAL		(0x4 << 27)
17052130b60SViresh Kumar 
17152130b60SViresh Kumar #define IP_SEL_PAD_30_39_REG			0x00B0
17252130b60SViresh Kumar 	#define PMX_PL_30_31_MASK		(0x3F << 0)
17352130b60SViresh Kumar 	#define PMX_CAN1_PL_30_31_VAL		(0)
17452130b60SViresh Kumar 	#define PMX_PL_30_MASK			(0x7 << 0)
17552130b60SViresh Kumar 	#define PMX_PL_31_MASK			(0x7 << 3)
17652130b60SViresh Kumar 	#define PMX_PWM1_EXT_PL_30_VAL		(0x4 << 0)
17752130b60SViresh Kumar 	#define PMX_PWM0_EXT_PL_31_VAL		(0x4 << 3)
17852130b60SViresh Kumar 	#define PMX_UART1_ENH_PL_31_VAL		(0x3 << 3)
17952130b60SViresh Kumar 
18052130b60SViresh Kumar 	#define PMX_PL_32_33_MASK		(0x3F << 6)
18152130b60SViresh Kumar 	#define PMX_CAN0_PL_32_33_VAL		0
18252130b60SViresh Kumar 	#define PMX_UART1_ENH_PL_32_33_VAL	((0x3 << 6) | (0x3 << 9))
18352130b60SViresh Kumar 	#define PMX_SSP2_PL_32_33_VAL		((0x4 << 6) | (0x4 << 9))
18452130b60SViresh Kumar 
18552130b60SViresh Kumar 	#define PMX_PL_34_MASK			(0x7 << 12)
18652130b60SViresh Kumar 	#define PMX_PWM2_PL_34_VAL		0
18752130b60SViresh Kumar 	#define PMX_UART1_ENH_PL_34_VAL		(0x2 << 12)
18852130b60SViresh Kumar 	#define PMX_SSP2_PL_34_VAL		(0x4 << 12)
18952130b60SViresh Kumar 
19052130b60SViresh Kumar 	#define PMX_PL_35_MASK			(0x7 << 15)
19152130b60SViresh Kumar 	#define PMX_I2S_REF_CLK_PL_35_VAL	0
19252130b60SViresh Kumar 	#define PMX_UART1_ENH_PL_35_VAL		(0x2 << 15)
19352130b60SViresh Kumar 	#define PMX_SSP2_PL_35_VAL		(0x4 << 15)
19452130b60SViresh Kumar 
19552130b60SViresh Kumar 	#define PMX_PL_36_MASK			(0x7 << 18)
19652130b60SViresh Kumar 	#define PMX_TOUCH_X_PL_36_VAL		0
19752130b60SViresh Kumar 	#define PMX_UART1_ENH_PL_36_VAL		(0x2 << 18)
19852130b60SViresh Kumar 	#define PMX_SSP1_PL_36_VAL		(0x4 << 18)
19952130b60SViresh Kumar 
20052130b60SViresh Kumar 	#define PMX_PL_37_38_MASK		(0x3F << 21)
20152130b60SViresh Kumar 	#define PMX_PWM0_1_PL_37_38_VAL		0
20252130b60SViresh Kumar 	#define PMX_UART5_PL_37_38_VAL		((0x2 << 21) | (0x2 << 24))
20352130b60SViresh Kumar 	#define PMX_SSP1_PL_37_38_VAL		((0x4 << 21) | (0x4 << 24))
20452130b60SViresh Kumar 
20552130b60SViresh Kumar 	#define PMX_PL_39_MASK			(0x7 << 27)
20652130b60SViresh Kumar 	#define PMX_I2S_PL_39_VAL		0
20752130b60SViresh Kumar 	#define PMX_UART4_PL_39_VAL		(0x2 << 27)
20852130b60SViresh Kumar 	#define PMX_SSP1_PL_39_VAL		(0x4 << 27)
20952130b60SViresh Kumar 
21052130b60SViresh Kumar #define IP_SEL_PAD_40_49_REG			0x00B4
21152130b60SViresh Kumar 	#define PMX_PL_40_MASK			(0x7 << 0)
21252130b60SViresh Kumar 	#define PMX_I2S_PL_40_VAL		0
21352130b60SViresh Kumar 	#define PMX_UART4_PL_40_VAL		(0x2 << 0)
21452130b60SViresh Kumar 	#define PMX_PWM3_PL_40_VAL		(0x4 << 0)
21552130b60SViresh Kumar 
21652130b60SViresh Kumar 	#define PMX_PL_41_42_MASK		(0x3F << 3)
21752130b60SViresh Kumar 	#define PMX_PL_41_MASK			(0x7 << 3)
21852130b60SViresh Kumar 	#define PMX_PL_42_MASK			(0x7 << 6)
21952130b60SViresh Kumar 	#define PMX_I2S_PL_41_42_VAL		0
22052130b60SViresh Kumar 	#define PMX_UART3_PL_41_42_VAL		((0x2 << 3) | (0x2 << 6))
22152130b60SViresh Kumar 	#define PMX_PWM2_PL_41_VAL		(0x4 << 3)
22252130b60SViresh Kumar 	#define PMX_PWM1_PL_42_VAL		(0x4 << 6)
22352130b60SViresh Kumar 
22452130b60SViresh Kumar 	#define PMX_PL_43_MASK			(0x7 << 9)
22552130b60SViresh Kumar 	#define PMX_SDHCI_PL_43_VAL		0
22652130b60SViresh Kumar 	#define PMX_UART1_ENH_PL_43_VAL		(0x2 << 9)
22752130b60SViresh Kumar 	#define PMX_PWM0_PL_43_VAL		(0x4 << 9)
22852130b60SViresh Kumar 
22952130b60SViresh Kumar 	#define PMX_PL_44_45_MASK		(0x3F << 12)
23052130b60SViresh Kumar 	#define PMX_SDHCI_PL_44_45_VAL	0
23152130b60SViresh Kumar 	#define PMX_UART1_ENH_PL_44_45_VAL	((0x2 << 12) | (0x2 << 15))
23252130b60SViresh Kumar 	#define PMX_SSP2_PL_44_45_VAL		((0x4 << 12) | (0x4 << 15))
23352130b60SViresh Kumar 
23452130b60SViresh Kumar 	#define PMX_PL_46_47_MASK		(0x3F << 18)
23552130b60SViresh Kumar 	#define PMX_SDHCI_PL_46_47_VAL	0
23652130b60SViresh Kumar 	#define PMX_FSMC_EMI_PL_46_47_VAL	((0x2 << 18) | (0x2 << 21))
23752130b60SViresh Kumar 	#define PMX_SSP2_PL_46_47_VAL		((0x4 << 18) | (0x4 << 21))
23852130b60SViresh Kumar 
23952130b60SViresh Kumar 	#define PMX_PL_48_49_MASK		(0x3F << 24)
24052130b60SViresh Kumar 	#define PMX_SDHCI_PL_48_49_VAL	0
24152130b60SViresh Kumar 	#define PMX_FSMC_EMI_PL_48_49_VAL	((0x2 << 24) | (0x2 << 27))
24252130b60SViresh Kumar 	#define PMX_SSP1_PL_48_49_VAL		((0x4 << 24) | (0x4 << 27))
24352130b60SViresh Kumar 
24452130b60SViresh Kumar #define IP_SEL_PAD_50_59_REG			0x00B8
24552130b60SViresh Kumar 	#define PMX_PL_50_51_MASK		(0x3F << 0)
24652130b60SViresh Kumar 	#define PMX_EMI_PL_50_51_VAL		((0x2 << 0) | (0x2 << 3))
24752130b60SViresh Kumar 	#define PMX_SSP1_PL_50_51_VAL		((0x4 << 0) | (0x4 << 3))
24852130b60SViresh Kumar 	#define PMX_PL_50_MASK			(0x7 << 0)
24952130b60SViresh Kumar 	#define PMX_PL_51_MASK			(0x7 << 3)
25052130b60SViresh Kumar 	#define PMX_SDHCI_PL_50_VAL		0
25152130b60SViresh Kumar 	#define PMX_SDHCI_CD_PL_51_VAL		0
25252130b60SViresh Kumar 
25352130b60SViresh Kumar 	#define PMX_PL_52_53_MASK		(0x3F << 6)
25452130b60SViresh Kumar 	#define PMX_FSMC_PL_52_53_VAL		0
25552130b60SViresh Kumar 	#define PMX_EMI_PL_52_53_VAL		((0x2 << 6) | (0x2 << 9))
25652130b60SViresh Kumar 	#define PMX_UART3_PL_52_53_VAL		((0x4 << 6) | (0x4 << 9))
25752130b60SViresh Kumar 
25852130b60SViresh Kumar 	#define PMX_PL_54_55_56_MASK		(0x1FF << 12)
25952130b60SViresh Kumar 	#define PMX_FSMC_EMI_PL_54_55_56_VAL	((0x2 << 12) | (0x2 << 15) | (0x2 << 18))
26052130b60SViresh Kumar 
26152130b60SViresh Kumar 	#define PMX_PL_57_MASK			(0x7 << 21)
26252130b60SViresh Kumar 	#define PMX_FSMC_PL_57_VAL		0
26352130b60SViresh Kumar 	#define PMX_PWM3_PL_57_VAL		(0x4 << 21)
26452130b60SViresh Kumar 
26552130b60SViresh Kumar 	#define PMX_PL_58_59_MASK		(0x3F << 24)
26652130b60SViresh Kumar 	#define PMX_PL_58_MASK			(0x7 << 24)
26752130b60SViresh Kumar 	#define PMX_PL_59_MASK			(0x7 << 27)
26852130b60SViresh Kumar 	#define PMX_FSMC_EMI_PL_58_59_VAL	((0x2 << 24) | (0x2 << 27))
26952130b60SViresh Kumar 	#define PMX_PWM2_PL_58_VAL		(0x4 << 24)
27052130b60SViresh Kumar 	#define PMX_PWM1_PL_59_VAL		(0x4 << 27)
27152130b60SViresh Kumar 
27252130b60SViresh Kumar #define IP_SEL_PAD_60_69_REG			0x00BC
27352130b60SViresh Kumar 	#define PMX_PL_60_MASK			(0x7 << 0)
27452130b60SViresh Kumar 	#define PMX_FSMC_PL_60_VAL		0
27552130b60SViresh Kumar 	#define PMX_PWM0_PL_60_VAL		(0x4 << 0)
27652130b60SViresh Kumar 
27752130b60SViresh Kumar 	#define PMX_PL_61_TO_64_MASK		(0xFFF << 3)
27852130b60SViresh Kumar 	#define PMX_FSMC_PL_61_TO_64_VAL	((0x2 << 3) | (0x2 << 6) | (0x2 << 9) | (0x2 << 12))
27952130b60SViresh Kumar 	#define PMX_SSP2_PL_61_TO_64_VAL	((0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12))
28052130b60SViresh Kumar 
28152130b60SViresh Kumar 	#define PMX_PL_65_TO_68_MASK		(0xFFF << 15)
28252130b60SViresh Kumar 	#define PMX_FSMC_PL_65_TO_68_VAL	((0x2 << 15) | (0x2 << 18) | (0x2 << 21) | (0x2 << 24))
28352130b60SViresh Kumar 	#define PMX_SSP1_PL_65_TO_68_VAL	((0x4 << 15) | (0x4 << 18) | (0x4 << 21) | (0x4 << 24))
28452130b60SViresh Kumar 
28552130b60SViresh Kumar 	#define PMX_PL_69_MASK			(0x7 << 27)
28652130b60SViresh Kumar 	#define PMX_CLCD_PL_69_VAL		(0)
28752130b60SViresh Kumar 	#define PMX_EMI_PL_69_VAL		(0x2 << 27)
28852130b60SViresh Kumar 	#define PMX_SPP_PL_69_VAL		(0x3 << 27)
28952130b60SViresh Kumar 	#define PMX_UART5_PL_69_VAL		(0x4 << 27)
29052130b60SViresh Kumar 
29152130b60SViresh Kumar #define IP_SEL_PAD_70_79_REG			0x00C0
29252130b60SViresh Kumar 	#define PMX_PL_70_MASK			(0x7 << 0)
29352130b60SViresh Kumar 	#define PMX_CLCD_PL_70_VAL		(0)
29452130b60SViresh Kumar 	#define PMX_FSMC_EMI_PL_70_VAL		(0x2 << 0)
29552130b60SViresh Kumar 	#define PMX_SPP_PL_70_VAL		(0x3 << 0)
29652130b60SViresh Kumar 	#define PMX_UART5_PL_70_VAL		(0x4 << 0)
29752130b60SViresh Kumar 
29852130b60SViresh Kumar 	#define PMX_PL_71_72_MASK		(0x3F << 3)
29952130b60SViresh Kumar 	#define PMX_CLCD_PL_71_72_VAL		(0)
30052130b60SViresh Kumar 	#define PMX_FSMC_EMI_PL_71_72_VAL	((0x2 << 3) | (0x2 << 6))
30152130b60SViresh Kumar 	#define PMX_SPP_PL_71_72_VAL		((0x3 << 3) | (0x3 << 6))
30252130b60SViresh Kumar 	#define PMX_UART4_PL_71_72_VAL		((0x4 << 3) | (0x4 << 6))
30352130b60SViresh Kumar 
30452130b60SViresh Kumar 	#define PMX_PL_73_MASK			(0x7 << 9)
30552130b60SViresh Kumar 	#define PMX_CLCD_PL_73_VAL		(0)
30652130b60SViresh Kumar 	#define PMX_FSMC_EMI_PL_73_VAL		(0x2 << 9)
30752130b60SViresh Kumar 	#define PMX_SPP_PL_73_VAL		(0x3 << 9)
30852130b60SViresh Kumar 	#define PMX_UART3_PL_73_VAL		(0x4 << 9)
30952130b60SViresh Kumar 
31052130b60SViresh Kumar 	#define PMX_PL_74_MASK			(0x7 << 12)
31152130b60SViresh Kumar 	#define PMX_CLCD_PL_74_VAL		(0)
31252130b60SViresh Kumar 	#define PMX_EMI_PL_74_VAL		(0x2 << 12)
31352130b60SViresh Kumar 	#define PMX_SPP_PL_74_VAL		(0x3 << 12)
31452130b60SViresh Kumar 	#define PMX_UART3_PL_74_VAL		(0x4 << 12)
31552130b60SViresh Kumar 
31652130b60SViresh Kumar 	#define PMX_PL_75_76_MASK		(0x3F << 15)
31752130b60SViresh Kumar 	#define PMX_CLCD_PL_75_76_VAL		(0)
31852130b60SViresh Kumar 	#define PMX_EMI_PL_75_76_VAL		((0x2 << 15) | (0x2 << 18))
31952130b60SViresh Kumar 	#define PMX_SPP_PL_75_76_VAL		((0x3 << 15) | (0x3 << 18))
32052130b60SViresh Kumar 	#define PMX_I2C2_PL_75_76_VAL		((0x4 << 15) | (0x4 << 18))
32152130b60SViresh Kumar 
32252130b60SViresh Kumar 	#define PMX_PL_77_78_79_MASK		(0x1FF << 21)
32352130b60SViresh Kumar 	#define PMX_CLCD_PL_77_78_79_VAL	(0)
32452130b60SViresh Kumar 	#define PMX_EMI_PL_77_78_79_VAL		((0x2 << 21) | (0x2 << 24) | (0x2 << 27))
32552130b60SViresh Kumar 	#define PMX_SPP_PL_77_78_79_VAL		((0x3 << 21) | (0x3 << 24) | (0x3 << 27))
32652130b60SViresh Kumar 	#define PMX_RS485_PL_77_78_79_VAL	((0x4 << 21) | (0x4 << 24) | (0x4 << 27))
32752130b60SViresh Kumar 
32852130b60SViresh Kumar #define IP_SEL_PAD_80_89_REG			0x00C4
32952130b60SViresh Kumar 	#define PMX_PL_80_TO_85_MASK		(0x3FFFF << 0)
33052130b60SViresh Kumar 	#define PMX_CLCD_PL_80_TO_85_VAL	0
33152130b60SViresh Kumar 	#define PMX_MII2_PL_80_TO_85_VAL	((0x1 << 0) | (0x1 << 3) | (0x1 << 6) | (0x1 << 9) | (0x1 << 12) | (0x1 << 15))
33252130b60SViresh Kumar 	#define PMX_EMI_PL_80_TO_85_VAL		((0x2 << 0) | (0x2 << 3) | (0x2 << 6) | (0x2 << 9) | (0x2 << 12) | (0x2 << 15))
33352130b60SViresh Kumar 	#define PMX_SPP_PL_80_TO_85_VAL		((0x3 << 0) | (0x3 << 3) | (0x3 << 6) | (0x3 << 9) | (0x3 << 12) | (0x3 << 15))
33452130b60SViresh Kumar 	#define PMX_UART1_ENH_PL_80_TO_85_VAL	((0x4 << 0) | (0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12) | (0x4 << 15))
33552130b60SViresh Kumar 
33652130b60SViresh Kumar 	#define PMX_PL_86_87_MASK		(0x3F << 18)
33752130b60SViresh Kumar 	#define PMX_PL_86_MASK			(0x7 << 18)
33852130b60SViresh Kumar 	#define PMX_PL_87_MASK			(0x7 << 21)
33952130b60SViresh Kumar 	#define PMX_CLCD_PL_86_87_VAL		0
34052130b60SViresh Kumar 	#define PMX_MII2_PL_86_87_VAL		((0x1 << 18) | (0x1 << 21))
34152130b60SViresh Kumar 	#define PMX_EMI_PL_86_87_VAL		((0x2 << 18) | (0x2 << 21))
34252130b60SViresh Kumar 	#define PMX_PWM3_PL_86_VAL		(0x4 << 18)
34352130b60SViresh Kumar 	#define PMX_PWM2_PL_87_VAL		(0x4 << 21)
34452130b60SViresh Kumar 
34552130b60SViresh Kumar 	#define PMX_PL_88_89_MASK		(0x3F << 24)
34652130b60SViresh Kumar 	#define PMX_CLCD_PL_88_89_VAL		0
34752130b60SViresh Kumar 	#define PMX_MII2_PL_88_89_VAL		((0x1 << 24) | (0x1 << 27))
34852130b60SViresh Kumar 	#define PMX_EMI_PL_88_89_VAL		((0x2 << 24) | (0x2 << 27))
34952130b60SViresh Kumar 	#define PMX_UART6_PL_88_89_VAL		((0x3 << 24) | (0x3 << 27))
35052130b60SViresh Kumar 	#define PMX_PWM0_1_PL_88_89_VAL		((0x4 << 24) | (0x4 << 27))
35152130b60SViresh Kumar 
35252130b60SViresh Kumar #define IP_SEL_PAD_90_99_REG			0x00C8
35352130b60SViresh Kumar 	#define PMX_PL_90_91_MASK		(0x3F << 0)
35452130b60SViresh Kumar 	#define PMX_CLCD_PL_90_91_VAL		0
35552130b60SViresh Kumar 	#define PMX_MII2_PL_90_91_VAL		((0x1 << 0) | (0x1 << 3))
35652130b60SViresh Kumar 	#define PMX_EMI1_PL_90_91_VAL		((0x2 << 0) | (0x2 << 3))
35752130b60SViresh Kumar 	#define PMX_UART5_PL_90_91_VAL		((0x3 << 0) | (0x3 << 3))
35852130b60SViresh Kumar 	#define PMX_SSP2_PL_90_91_VAL		((0x4 << 0) | (0x4 << 3))
35952130b60SViresh Kumar 
36052130b60SViresh Kumar 	#define PMX_PL_92_93_MASK		(0x3F << 6)
36152130b60SViresh Kumar 	#define PMX_CLCD_PL_92_93_VAL		0
36252130b60SViresh Kumar 	#define PMX_MII2_PL_92_93_VAL		((0x1 << 6) | (0x1 << 9))
36352130b60SViresh Kumar 	#define PMX_EMI1_PL_92_93_VAL		((0x2 << 6) | (0x2 << 9))
36452130b60SViresh Kumar 	#define PMX_UART4_PL_92_93_VAL		((0x3 << 6) | (0x3 << 9))
36552130b60SViresh Kumar 	#define PMX_SSP2_PL_92_93_VAL		((0x4 << 6) | (0x4 << 9))
36652130b60SViresh Kumar 
36752130b60SViresh Kumar 	#define PMX_PL_94_95_MASK		(0x3F << 12)
36852130b60SViresh Kumar 	#define PMX_CLCD_PL_94_95_VAL		0
36952130b60SViresh Kumar 	#define PMX_MII2_PL_94_95_VAL		((0x1 << 12) | (0x1 << 15))
37052130b60SViresh Kumar 	#define PMX_EMI1_PL_94_95_VAL		((0x2 << 12) | (0x2 << 15))
37152130b60SViresh Kumar 	#define PMX_UART3_PL_94_95_VAL		((0x3 << 12) | (0x3 << 15))
37252130b60SViresh Kumar 	#define PMX_SSP1_PL_94_95_VAL		((0x4 << 12) | (0x4 << 15))
37352130b60SViresh Kumar 
37452130b60SViresh Kumar 	#define PMX_PL_96_97_MASK		(0x3F << 18)
37552130b60SViresh Kumar 	#define PMX_CLCD_PL_96_97_VAL		0
37652130b60SViresh Kumar 	#define PMX_MII2_PL_96_97_VAL		((0x1 << 18) | (0x1 << 21))
37752130b60SViresh Kumar 	#define PMX_EMI1_PL_96_97_VAL		((0x2 << 18) | (0x2 << 21))
37852130b60SViresh Kumar 	#define PMX_I2C2_PL_96_97_VAL		((0x3 << 18) | (0x3 << 21))
37952130b60SViresh Kumar 	#define PMX_SSP1_PL_96_97_VAL		((0x4 << 18) | (0x4 << 21))
38052130b60SViresh Kumar 
38152130b60SViresh Kumar 	#define PMX_PL_98_MASK			(0x7 << 24)
38252130b60SViresh Kumar 	#define PMX_CLCD_PL_98_VAL		0
38352130b60SViresh Kumar 	#define PMX_I2C1_PL_98_VAL		(0x2 << 24)
38452130b60SViresh Kumar 	#define PMX_UART3_PL_98_VAL		(0x4 << 24)
38552130b60SViresh Kumar 
38652130b60SViresh Kumar 	#define PMX_PL_99_MASK			(0x7 << 27)
38752130b60SViresh Kumar 	#define PMX_SDHCI_PL_99_VAL		0
38852130b60SViresh Kumar 	#define PMX_I2C1_PL_99_VAL		(0x2 << 27)
38952130b60SViresh Kumar 	#define PMX_UART3_PL_99_VAL		(0x4 << 27)
39052130b60SViresh Kumar 
39152130b60SViresh Kumar #define IP_SEL_MIX_PAD_REG			0x00CC
39252130b60SViresh Kumar 	#define PMX_PL_100_101_MASK		(0x3F << 0)
39352130b60SViresh Kumar 	#define PMX_SDHCI_PL_100_101_VAL	0
39452130b60SViresh Kumar 	#define PMX_UART4_PL_100_101_VAL	((0x4 << 0) | (0x4 << 3))
39552130b60SViresh Kumar 
39652130b60SViresh Kumar 	#define PMX_SSP1_PORT_SEL_MASK		(0x7 << 8)
39752130b60SViresh Kumar 	#define PMX_SSP1_PORT_94_TO_97_VAL	0
39852130b60SViresh Kumar 	#define PMX_SSP1_PORT_65_TO_68_VAL	(0x1 << 8)
39952130b60SViresh Kumar 	#define PMX_SSP1_PORT_48_TO_51_VAL	(0x2 << 8)
40052130b60SViresh Kumar 	#define PMX_SSP1_PORT_36_TO_39_VAL	(0x3 << 8)
40152130b60SViresh Kumar 	#define PMX_SSP1_PORT_17_TO_20_VAL	(0x4 << 8)
40252130b60SViresh Kumar 
40352130b60SViresh Kumar 	#define PMX_SSP2_PORT_SEL_MASK		(0x7 << 11)
40452130b60SViresh Kumar 	#define PMX_SSP2_PORT_90_TO_93_VAL	0
40552130b60SViresh Kumar 	#define PMX_SSP2_PORT_61_TO_64_VAL	(0x1 << 11)
40652130b60SViresh Kumar 	#define PMX_SSP2_PORT_44_TO_47_VAL	(0x2 << 11)
40752130b60SViresh Kumar 	#define PMX_SSP2_PORT_32_TO_35_VAL	(0x3 << 11)
40852130b60SViresh Kumar 	#define PMX_SSP2_PORT_13_TO_16_VAL	(0x4 << 11)
40952130b60SViresh Kumar 
41052130b60SViresh Kumar 	#define PMX_UART1_ENH_PORT_SEL_MASK		(0x3 << 14)
41152130b60SViresh Kumar 	#define PMX_UART1_ENH_PORT_81_TO_85_VAL		0
41252130b60SViresh Kumar 	#define PMX_UART1_ENH_PORT_44_45_34_36_VAL	(0x1 << 14)
41352130b60SViresh Kumar 	#define PMX_UART1_ENH_PORT_32_TO_34_36_VAL	(0x2 << 14)
41452130b60SViresh Kumar 	#define PMX_UART1_ENH_PORT_3_TO_5_7_VAL		(0x3 << 14)
41552130b60SViresh Kumar 
41652130b60SViresh Kumar 	#define PMX_UART3_PORT_SEL_MASK		(0x7 << 16)
41752130b60SViresh Kumar 	#define PMX_UART3_PORT_94_VAL		0
41852130b60SViresh Kumar 	#define PMX_UART3_PORT_73_VAL		(0x1 << 16)
41952130b60SViresh Kumar 	#define PMX_UART3_PORT_52_VAL		(0x2 << 16)
42052130b60SViresh Kumar 	#define PMX_UART3_PORT_41_VAL		(0x3 << 16)
42152130b60SViresh Kumar 	#define PMX_UART3_PORT_15_VAL		(0x4 << 16)
42252130b60SViresh Kumar 	#define PMX_UART3_PORT_8_VAL		(0x5 << 16)
42352130b60SViresh Kumar 	#define PMX_UART3_PORT_99_VAL		(0x6 << 16)
42452130b60SViresh Kumar 
42552130b60SViresh Kumar 	#define PMX_UART4_PORT_SEL_MASK		(0x7 << 19)
42652130b60SViresh Kumar 	#define PMX_UART4_PORT_92_VAL		0
42752130b60SViresh Kumar 	#define PMX_UART4_PORT_71_VAL		(0x1 << 19)
42852130b60SViresh Kumar 	#define PMX_UART4_PORT_39_VAL		(0x2 << 19)
42952130b60SViresh Kumar 	#define PMX_UART4_PORT_13_VAL		(0x3 << 19)
43052130b60SViresh Kumar 	#define PMX_UART4_PORT_6_VAL		(0x4 << 19)
43152130b60SViresh Kumar 	#define PMX_UART4_PORT_101_VAL		(0x5 << 19)
43252130b60SViresh Kumar 
43352130b60SViresh Kumar 	#define PMX_UART5_PORT_SEL_MASK		(0x3 << 22)
43452130b60SViresh Kumar 	#define PMX_UART5_PORT_90_VAL		0
43552130b60SViresh Kumar 	#define PMX_UART5_PORT_69_VAL		(0x1 << 22)
43652130b60SViresh Kumar 	#define PMX_UART5_PORT_37_VAL		(0x2 << 22)
43752130b60SViresh Kumar 	#define PMX_UART5_PORT_4_VAL		(0x3 << 22)
43852130b60SViresh Kumar 
43952130b60SViresh Kumar 	#define PMX_UART6_PORT_SEL_MASK		(0x1 << 24)
44052130b60SViresh Kumar 	#define PMX_UART6_PORT_88_VAL		0
44152130b60SViresh Kumar 	#define PMX_UART6_PORT_2_VAL		(0x1 << 24)
44252130b60SViresh Kumar 
44352130b60SViresh Kumar 	#define PMX_I2C1_PORT_SEL_MASK		(0x1 << 25)
44452130b60SViresh Kumar 	#define PMX_I2C1_PORT_8_9_VAL		0
44552130b60SViresh Kumar 	#define PMX_I2C1_PORT_98_99_VAL		(0x1 << 25)
44652130b60SViresh Kumar 
44752130b60SViresh Kumar 	#define PMX_I2C2_PORT_SEL_MASK		(0x3 << 26)
44852130b60SViresh Kumar 	#define PMX_I2C2_PORT_96_97_VAL		0
44952130b60SViresh Kumar 	#define PMX_I2C2_PORT_75_76_VAL		(0x1 << 26)
45052130b60SViresh Kumar 	#define PMX_I2C2_PORT_19_20_VAL		(0x2 << 26)
45152130b60SViresh Kumar 	#define PMX_I2C2_PORT_2_3_VAL		(0x3 << 26)
45252130b60SViresh Kumar 	#define PMX_I2C2_PORT_0_1_VAL		(0x4 << 26)
45352130b60SViresh Kumar 
45452130b60SViresh Kumar 	#define PMX_SDHCI_CD_PORT_SEL_MASK	(0x1 << 29)
45552130b60SViresh Kumar 	#define PMX_SDHCI_CD_PORT_12_VAL	0
45652130b60SViresh Kumar 	#define PMX_SDHCI_CD_PORT_51_VAL	(0x1 << 29)
45752130b60SViresh Kumar 
45852130b60SViresh Kumar /* Pad multiplexing for CLCD device */
45952130b60SViresh Kumar static const unsigned clcd_pins[] = { 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
46052130b60SViresh Kumar 	79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
46152130b60SViresh Kumar 	97 };
46252130b60SViresh Kumar static struct spear_muxreg clcd_muxreg[] = {
46352130b60SViresh Kumar 	{
46452130b60SViresh Kumar 		.reg = IP_SEL_PAD_60_69_REG,
46552130b60SViresh Kumar 		.mask = PMX_PL_69_MASK,
46652130b60SViresh Kumar 		.val = PMX_CLCD_PL_69_VAL,
46752130b60SViresh Kumar 	}, {
46852130b60SViresh Kumar 		.reg = IP_SEL_PAD_70_79_REG,
46952130b60SViresh Kumar 		.mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK |
47052130b60SViresh Kumar 			PMX_PL_74_MASK | PMX_PL_75_76_MASK |
47152130b60SViresh Kumar 			PMX_PL_77_78_79_MASK,
47252130b60SViresh Kumar 		.val = PMX_CLCD_PL_70_VAL | PMX_CLCD_PL_71_72_VAL |
47352130b60SViresh Kumar 			PMX_CLCD_PL_73_VAL | PMX_CLCD_PL_74_VAL |
47452130b60SViresh Kumar 			PMX_CLCD_PL_75_76_VAL | PMX_CLCD_PL_77_78_79_VAL,
47552130b60SViresh Kumar 	}, {
47652130b60SViresh Kumar 		.reg = IP_SEL_PAD_80_89_REG,
47752130b60SViresh Kumar 		.mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK |
47852130b60SViresh Kumar 			PMX_PL_88_89_MASK,
47952130b60SViresh Kumar 		.val = PMX_CLCD_PL_80_TO_85_VAL | PMX_CLCD_PL_86_87_VAL |
48052130b60SViresh Kumar 			PMX_CLCD_PL_88_89_VAL,
48152130b60SViresh Kumar 	}, {
48252130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
48352130b60SViresh Kumar 		.mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK |
48452130b60SViresh Kumar 			PMX_PL_94_95_MASK | PMX_PL_96_97_MASK | PMX_PL_98_MASK,
48552130b60SViresh Kumar 		.val = PMX_CLCD_PL_90_91_VAL | PMX_CLCD_PL_92_93_VAL |
48652130b60SViresh Kumar 			PMX_CLCD_PL_94_95_VAL | PMX_CLCD_PL_96_97_VAL |
48752130b60SViresh Kumar 			PMX_CLCD_PL_98_VAL,
48852130b60SViresh Kumar 	},
48952130b60SViresh Kumar };
49052130b60SViresh Kumar 
49152130b60SViresh Kumar static struct spear_modemux clcd_modemux[] = {
49252130b60SViresh Kumar 	{
49352130b60SViresh Kumar 		.modes = EXTENDED_MODE,
49452130b60SViresh Kumar 		.muxregs = clcd_muxreg,
49552130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(clcd_muxreg),
49652130b60SViresh Kumar 	},
49752130b60SViresh Kumar };
49852130b60SViresh Kumar 
49952130b60SViresh Kumar static struct spear_pingroup clcd_pingroup = {
50052130b60SViresh Kumar 	.name = "clcd_grp",
50152130b60SViresh Kumar 	.pins = clcd_pins,
50252130b60SViresh Kumar 	.npins = ARRAY_SIZE(clcd_pins),
50352130b60SViresh Kumar 	.modemuxs = clcd_modemux,
50452130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(clcd_modemux),
50552130b60SViresh Kumar };
50652130b60SViresh Kumar 
50752130b60SViresh Kumar static const char *const clcd_grps[] = { "clcd_grp" };
50852130b60SViresh Kumar static struct spear_function clcd_function = {
50952130b60SViresh Kumar 	.name = "clcd",
51052130b60SViresh Kumar 	.groups = clcd_grps,
51152130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(clcd_grps),
51252130b60SViresh Kumar };
51352130b60SViresh Kumar 
51452130b60SViresh Kumar /* Pad multiplexing for EMI (Parallel NOR flash) device */
51552130b60SViresh Kumar static const unsigned emi_pins[] = { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
51652130b60SViresh Kumar 	57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
51752130b60SViresh Kumar 	75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
51852130b60SViresh Kumar 	93, 94, 95, 96, 97 };
51952130b60SViresh Kumar static struct spear_muxreg emi_muxreg[] = {
52052130b60SViresh Kumar 	{
52152130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
52252130b60SViresh Kumar 		.mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
52352130b60SViresh Kumar 		.val = 0,
52452130b60SViresh Kumar 	},
52552130b60SViresh Kumar };
52652130b60SViresh Kumar 
52752130b60SViresh Kumar static struct spear_muxreg emi_ext_muxreg[] = {
52852130b60SViresh Kumar 	{
52952130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
53052130b60SViresh Kumar 		.mask = PMX_PL_46_47_MASK | PMX_PL_48_49_MASK,
53152130b60SViresh Kumar 		.val = PMX_FSMC_EMI_PL_46_47_VAL | PMX_FSMC_EMI_PL_48_49_VAL,
53252130b60SViresh Kumar 	}, {
53352130b60SViresh Kumar 		.reg = IP_SEL_PAD_50_59_REG,
53452130b60SViresh Kumar 		.mask = PMX_PL_50_51_MASK | PMX_PL_52_53_MASK |
53552130b60SViresh Kumar 			PMX_PL_54_55_56_MASK | PMX_PL_58_59_MASK,
53652130b60SViresh Kumar 		.val = PMX_EMI_PL_50_51_VAL | PMX_EMI_PL_52_53_VAL |
53752130b60SViresh Kumar 			PMX_FSMC_EMI_PL_54_55_56_VAL |
53852130b60SViresh Kumar 			PMX_FSMC_EMI_PL_58_59_VAL,
53952130b60SViresh Kumar 	}, {
54052130b60SViresh Kumar 		.reg = IP_SEL_PAD_60_69_REG,
54152130b60SViresh Kumar 		.mask = PMX_PL_69_MASK,
54252130b60SViresh Kumar 		.val = PMX_EMI_PL_69_VAL,
54352130b60SViresh Kumar 	}, {
54452130b60SViresh Kumar 		.reg = IP_SEL_PAD_70_79_REG,
54552130b60SViresh Kumar 		.mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK |
54652130b60SViresh Kumar 			PMX_PL_74_MASK | PMX_PL_75_76_MASK |
54752130b60SViresh Kumar 			PMX_PL_77_78_79_MASK,
54852130b60SViresh Kumar 		.val = PMX_FSMC_EMI_PL_70_VAL | PMX_FSMC_EMI_PL_71_72_VAL |
54952130b60SViresh Kumar 			PMX_FSMC_EMI_PL_73_VAL | PMX_EMI_PL_74_VAL |
55052130b60SViresh Kumar 			PMX_EMI_PL_75_76_VAL | PMX_EMI_PL_77_78_79_VAL,
55152130b60SViresh Kumar 	}, {
55252130b60SViresh Kumar 		.reg = IP_SEL_PAD_80_89_REG,
55352130b60SViresh Kumar 		.mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK |
55452130b60SViresh Kumar 			PMX_PL_88_89_MASK,
55552130b60SViresh Kumar 		.val = PMX_EMI_PL_80_TO_85_VAL | PMX_EMI_PL_86_87_VAL |
55652130b60SViresh Kumar 			PMX_EMI_PL_88_89_VAL,
55752130b60SViresh Kumar 	}, {
55852130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
55952130b60SViresh Kumar 		.mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK |
56052130b60SViresh Kumar 			PMX_PL_94_95_MASK | PMX_PL_96_97_MASK,
56152130b60SViresh Kumar 		.val = PMX_EMI1_PL_90_91_VAL | PMX_EMI1_PL_92_93_VAL |
56252130b60SViresh Kumar 			PMX_EMI1_PL_94_95_VAL | PMX_EMI1_PL_96_97_VAL,
56352130b60SViresh Kumar 	}, {
56452130b60SViresh Kumar 		.reg = EXT_CTRL_REG,
56552130b60SViresh Kumar 		.mask = EMI_FSMC_DYNAMIC_MUX_MASK,
56652130b60SViresh Kumar 		.val = EMI_FSMC_DYNAMIC_MUX_MASK,
56752130b60SViresh Kumar 	},
56852130b60SViresh Kumar };
56952130b60SViresh Kumar 
57052130b60SViresh Kumar static struct spear_modemux emi_modemux[] = {
57152130b60SViresh Kumar 	{
57252130b60SViresh Kumar 		.modes = AUTO_EXP_MODE | EXTENDED_MODE,
57352130b60SViresh Kumar 		.muxregs = emi_muxreg,
57452130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(emi_muxreg),
57552130b60SViresh Kumar 	}, {
57652130b60SViresh Kumar 		.modes = EXTENDED_MODE,
57752130b60SViresh Kumar 		.muxregs = emi_ext_muxreg,
57852130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(emi_ext_muxreg),
57952130b60SViresh Kumar 	},
58052130b60SViresh Kumar };
58152130b60SViresh Kumar 
58252130b60SViresh Kumar static struct spear_pingroup emi_pingroup = {
58352130b60SViresh Kumar 	.name = "emi_grp",
58452130b60SViresh Kumar 	.pins = emi_pins,
58552130b60SViresh Kumar 	.npins = ARRAY_SIZE(emi_pins),
58652130b60SViresh Kumar 	.modemuxs = emi_modemux,
58752130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(emi_modemux),
58852130b60SViresh Kumar };
58952130b60SViresh Kumar 
59052130b60SViresh Kumar static const char *const emi_grps[] = { "emi_grp" };
59152130b60SViresh Kumar static struct spear_function emi_function = {
59252130b60SViresh Kumar 	.name = "emi",
59352130b60SViresh Kumar 	.groups = emi_grps,
59452130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(emi_grps),
59552130b60SViresh Kumar };
59652130b60SViresh Kumar 
59752130b60SViresh Kumar /* Pad multiplexing for FSMC (NAND flash) device */
59852130b60SViresh Kumar static const unsigned fsmc_8bit_pins[] = { 52, 53, 54, 55, 56, 57, 58, 59, 60,
59952130b60SViresh Kumar 	61, 62, 63, 64, 65, 66, 67, 68 };
60052130b60SViresh Kumar static struct spear_muxreg fsmc_8bit_muxreg[] = {
60152130b60SViresh Kumar 	{
60252130b60SViresh Kumar 		.reg = IP_SEL_PAD_50_59_REG,
60352130b60SViresh Kumar 		.mask = PMX_PL_52_53_MASK | PMX_PL_54_55_56_MASK |
60452130b60SViresh Kumar 			PMX_PL_57_MASK | PMX_PL_58_59_MASK,
60552130b60SViresh Kumar 		.val = PMX_FSMC_PL_52_53_VAL | PMX_FSMC_EMI_PL_54_55_56_VAL |
60652130b60SViresh Kumar 			PMX_FSMC_PL_57_VAL | PMX_FSMC_EMI_PL_58_59_VAL,
60752130b60SViresh Kumar 	}, {
60852130b60SViresh Kumar 		.reg = IP_SEL_PAD_60_69_REG,
60952130b60SViresh Kumar 		.mask = PMX_PL_60_MASK | PMX_PL_61_TO_64_MASK |
61052130b60SViresh Kumar 			PMX_PL_65_TO_68_MASK,
61152130b60SViresh Kumar 		.val = PMX_FSMC_PL_60_VAL | PMX_FSMC_PL_61_TO_64_VAL |
61252130b60SViresh Kumar 			PMX_FSMC_PL_65_TO_68_VAL,
61352130b60SViresh Kumar 	}, {
61452130b60SViresh Kumar 		.reg = EXT_CTRL_REG,
61552130b60SViresh Kumar 		.mask = EMI_FSMC_DYNAMIC_MUX_MASK,
61652130b60SViresh Kumar 		.val = EMI_FSMC_DYNAMIC_MUX_MASK,
61752130b60SViresh Kumar 	},
61852130b60SViresh Kumar };
61952130b60SViresh Kumar 
62052130b60SViresh Kumar static struct spear_modemux fsmc_8bit_modemux[] = {
62152130b60SViresh Kumar 	{
62252130b60SViresh Kumar 		.modes = EXTENDED_MODE,
62352130b60SViresh Kumar 		.muxregs = fsmc_8bit_muxreg,
62452130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg),
62552130b60SViresh Kumar 	},
62652130b60SViresh Kumar };
62752130b60SViresh Kumar 
62852130b60SViresh Kumar static struct spear_pingroup fsmc_8bit_pingroup = {
62952130b60SViresh Kumar 	.name = "fsmc_8bit_grp",
63052130b60SViresh Kumar 	.pins = fsmc_8bit_pins,
63152130b60SViresh Kumar 	.npins = ARRAY_SIZE(fsmc_8bit_pins),
63252130b60SViresh Kumar 	.modemuxs = fsmc_8bit_modemux,
63352130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(fsmc_8bit_modemux),
63452130b60SViresh Kumar };
63552130b60SViresh Kumar 
63652130b60SViresh Kumar static const unsigned fsmc_16bit_pins[] = { 46, 47, 48, 49, 52, 53, 54, 55, 56,
63752130b60SViresh Kumar 	57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73 };
63852130b60SViresh Kumar static struct spear_muxreg fsmc_16bit_autoexp_muxreg[] = {
63952130b60SViresh Kumar 	{
64052130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
64152130b60SViresh Kumar 		.mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
64252130b60SViresh Kumar 		.val = 0,
64352130b60SViresh Kumar 	},
64452130b60SViresh Kumar };
64552130b60SViresh Kumar 
64652130b60SViresh Kumar static struct spear_muxreg fsmc_16bit_muxreg[] = {
64752130b60SViresh Kumar 	{
64852130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
64952130b60SViresh Kumar 		.mask = PMX_PL_46_47_MASK | PMX_PL_48_49_MASK,
65052130b60SViresh Kumar 		.val = PMX_FSMC_EMI_PL_46_47_VAL | PMX_FSMC_EMI_PL_48_49_VAL,
65152130b60SViresh Kumar 	}, {
65252130b60SViresh Kumar 		.reg = IP_SEL_PAD_70_79_REG,
65352130b60SViresh Kumar 		.mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK,
65452130b60SViresh Kumar 		.val = PMX_FSMC_EMI_PL_70_VAL | PMX_FSMC_EMI_PL_71_72_VAL |
65552130b60SViresh Kumar 			PMX_FSMC_EMI_PL_73_VAL,
65652130b60SViresh Kumar 	}
65752130b60SViresh Kumar };
65852130b60SViresh Kumar 
65952130b60SViresh Kumar static struct spear_modemux fsmc_16bit_modemux[] = {
66052130b60SViresh Kumar 	{
66152130b60SViresh Kumar 		.modes = EXTENDED_MODE,
66252130b60SViresh Kumar 		.muxregs = fsmc_8bit_muxreg,
66352130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg),
66452130b60SViresh Kumar 	}, {
66552130b60SViresh Kumar 		.modes = AUTO_EXP_MODE | EXTENDED_MODE,
66652130b60SViresh Kumar 		.muxregs = fsmc_16bit_autoexp_muxreg,
66752130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(fsmc_16bit_autoexp_muxreg),
66852130b60SViresh Kumar 	}, {
66952130b60SViresh Kumar 		.modes = EXTENDED_MODE,
67052130b60SViresh Kumar 		.muxregs = fsmc_16bit_muxreg,
67152130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(fsmc_16bit_muxreg),
67252130b60SViresh Kumar 	},
67352130b60SViresh Kumar };
67452130b60SViresh Kumar 
67552130b60SViresh Kumar static struct spear_pingroup fsmc_16bit_pingroup = {
67652130b60SViresh Kumar 	.name = "fsmc_16bit_grp",
67752130b60SViresh Kumar 	.pins = fsmc_16bit_pins,
67852130b60SViresh Kumar 	.npins = ARRAY_SIZE(fsmc_16bit_pins),
67952130b60SViresh Kumar 	.modemuxs = fsmc_16bit_modemux,
68052130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(fsmc_16bit_modemux),
68152130b60SViresh Kumar };
68252130b60SViresh Kumar 
68352130b60SViresh Kumar static const char *const fsmc_grps[] = { "fsmc_8bit_grp", "fsmc_16bit_grp" };
68452130b60SViresh Kumar static struct spear_function fsmc_function = {
68552130b60SViresh Kumar 	.name = "fsmc",
68652130b60SViresh Kumar 	.groups = fsmc_grps,
68752130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(fsmc_grps),
68852130b60SViresh Kumar };
68952130b60SViresh Kumar 
69052130b60SViresh Kumar /* Pad multiplexing for SPP device */
69152130b60SViresh Kumar static const unsigned spp_pins[] = { 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
69252130b60SViresh Kumar 	80, 81, 82, 83, 84, 85 };
69352130b60SViresh Kumar static struct spear_muxreg spp_muxreg[] = {
69452130b60SViresh Kumar 	{
69552130b60SViresh Kumar 		.reg = IP_SEL_PAD_60_69_REG,
69652130b60SViresh Kumar 		.mask = PMX_PL_69_MASK,
69752130b60SViresh Kumar 		.val = PMX_SPP_PL_69_VAL,
69852130b60SViresh Kumar 	}, {
69952130b60SViresh Kumar 		.reg = IP_SEL_PAD_70_79_REG,
70052130b60SViresh Kumar 		.mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK |
70152130b60SViresh Kumar 			PMX_PL_74_MASK | PMX_PL_75_76_MASK |
70252130b60SViresh Kumar 			PMX_PL_77_78_79_MASK,
70352130b60SViresh Kumar 		.val = PMX_SPP_PL_70_VAL | PMX_SPP_PL_71_72_VAL |
70452130b60SViresh Kumar 			PMX_SPP_PL_73_VAL | PMX_SPP_PL_74_VAL |
70552130b60SViresh Kumar 			PMX_SPP_PL_75_76_VAL | PMX_SPP_PL_77_78_79_VAL,
70652130b60SViresh Kumar 	}, {
70752130b60SViresh Kumar 		.reg = IP_SEL_PAD_80_89_REG,
70852130b60SViresh Kumar 		.mask = PMX_PL_80_TO_85_MASK,
70952130b60SViresh Kumar 		.val = PMX_SPP_PL_80_TO_85_VAL,
71052130b60SViresh Kumar 	},
71152130b60SViresh Kumar };
71252130b60SViresh Kumar 
71352130b60SViresh Kumar static struct spear_modemux spp_modemux[] = {
71452130b60SViresh Kumar 	{
71552130b60SViresh Kumar 		.modes = EXTENDED_MODE,
71652130b60SViresh Kumar 		.muxregs = spp_muxreg,
71752130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(spp_muxreg),
71852130b60SViresh Kumar 	},
71952130b60SViresh Kumar };
72052130b60SViresh Kumar 
72152130b60SViresh Kumar static struct spear_pingroup spp_pingroup = {
72252130b60SViresh Kumar 	.name = "spp_grp",
72352130b60SViresh Kumar 	.pins = spp_pins,
72452130b60SViresh Kumar 	.npins = ARRAY_SIZE(spp_pins),
72552130b60SViresh Kumar 	.modemuxs = spp_modemux,
72652130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(spp_modemux),
72752130b60SViresh Kumar };
72852130b60SViresh Kumar 
72952130b60SViresh Kumar static const char *const spp_grps[] = { "spp_grp" };
73052130b60SViresh Kumar static struct spear_function spp_function = {
73152130b60SViresh Kumar 	.name = "spp",
73252130b60SViresh Kumar 	.groups = spp_grps,
73352130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(spp_grps),
73452130b60SViresh Kumar };
73552130b60SViresh Kumar 
73652130b60SViresh Kumar /* Pad multiplexing for SDHCI device */
73752130b60SViresh Kumar static const unsigned sdhci_led_pins[] = { 34 };
73852130b60SViresh Kumar static struct spear_muxreg sdhci_led_muxreg[] = {
73952130b60SViresh Kumar 	{
74052130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
74152130b60SViresh Kumar 		.mask = PMX_SSP_CS_MASK,
74252130b60SViresh Kumar 		.val = 0,
74352130b60SViresh Kumar 	},
74452130b60SViresh Kumar };
74552130b60SViresh Kumar 
74652130b60SViresh Kumar static struct spear_muxreg sdhci_led_ext_muxreg[] = {
74752130b60SViresh Kumar 	{
74852130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
74952130b60SViresh Kumar 		.mask = PMX_PL_34_MASK,
75052130b60SViresh Kumar 		.val = PMX_PWM2_PL_34_VAL,
75152130b60SViresh Kumar 	},
75252130b60SViresh Kumar };
75352130b60SViresh Kumar 
75452130b60SViresh Kumar static struct spear_modemux sdhci_led_modemux[] = {
75552130b60SViresh Kumar 	{
75652130b60SViresh Kumar 		.modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
75752130b60SViresh Kumar 		.muxregs = sdhci_led_muxreg,
75852130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(sdhci_led_muxreg),
75952130b60SViresh Kumar 	}, {
76052130b60SViresh Kumar 		.modes = EXTENDED_MODE,
76152130b60SViresh Kumar 		.muxregs = sdhci_led_ext_muxreg,
76252130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(sdhci_led_ext_muxreg),
76352130b60SViresh Kumar 	},
76452130b60SViresh Kumar };
76552130b60SViresh Kumar 
76652130b60SViresh Kumar static struct spear_pingroup sdhci_led_pingroup = {
76752130b60SViresh Kumar 	.name = "sdhci_led_grp",
76852130b60SViresh Kumar 	.pins = sdhci_led_pins,
76952130b60SViresh Kumar 	.npins = ARRAY_SIZE(sdhci_led_pins),
77052130b60SViresh Kumar 	.modemuxs = sdhci_led_modemux,
77152130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(sdhci_led_modemux),
77252130b60SViresh Kumar };
77352130b60SViresh Kumar 
77452130b60SViresh Kumar static const unsigned sdhci_cd_12_pins[] = { 12, 43, 44, 45, 46, 47, 48, 49,
77552130b60SViresh Kumar 	50};
77652130b60SViresh Kumar static const unsigned sdhci_cd_51_pins[] = { 43, 44, 45, 46, 47, 48, 49, 50, 51
77752130b60SViresh Kumar };
77852130b60SViresh Kumar static struct spear_muxreg sdhci_muxreg[] = {
77952130b60SViresh Kumar 	{
78052130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
78152130b60SViresh Kumar 		.mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
78252130b60SViresh Kumar 		.val = 0,
78352130b60SViresh Kumar 	},
78452130b60SViresh Kumar };
78552130b60SViresh Kumar 
78652130b60SViresh Kumar static struct spear_muxreg sdhci_ext_muxreg[] = {
78752130b60SViresh Kumar 	{
78852130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
78952130b60SViresh Kumar 		.mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK | PMX_PL_46_47_MASK |
79052130b60SViresh Kumar 			PMX_PL_48_49_MASK,
79152130b60SViresh Kumar 		.val = PMX_SDHCI_PL_43_VAL | PMX_SDHCI_PL_44_45_VAL |
79252130b60SViresh Kumar 			PMX_SDHCI_PL_46_47_VAL | PMX_SDHCI_PL_48_49_VAL,
79352130b60SViresh Kumar 	}, {
79452130b60SViresh Kumar 		.reg = IP_SEL_PAD_50_59_REG,
79552130b60SViresh Kumar 		.mask = PMX_PL_50_MASK,
79652130b60SViresh Kumar 		.val = PMX_SDHCI_PL_50_VAL,
79752130b60SViresh Kumar 	}, {
79852130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
79952130b60SViresh Kumar 		.mask = PMX_PL_99_MASK,
80052130b60SViresh Kumar 		.val = PMX_SDHCI_PL_99_VAL,
80152130b60SViresh Kumar 	}, {
80252130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
80352130b60SViresh Kumar 		.mask = PMX_PL_100_101_MASK,
80452130b60SViresh Kumar 		.val = PMX_SDHCI_PL_100_101_VAL,
80552130b60SViresh Kumar 	},
80652130b60SViresh Kumar };
80752130b60SViresh Kumar 
80852130b60SViresh Kumar static struct spear_muxreg sdhci_cd_12_muxreg[] = {
80952130b60SViresh Kumar 	{
81052130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
81152130b60SViresh Kumar 		.mask = PMX_MII_MASK,
81252130b60SViresh Kumar 		.val = 0,
81352130b60SViresh Kumar 	}, {
81452130b60SViresh Kumar 		.reg = IP_SEL_PAD_10_19_REG,
81552130b60SViresh Kumar 		.mask = PMX_PL_12_MASK,
81652130b60SViresh Kumar 		.val = PMX_SDHCI_CD_PL_12_VAL,
81752130b60SViresh Kumar 	}, {
81852130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
81952130b60SViresh Kumar 		.mask = PMX_SDHCI_CD_PORT_SEL_MASK,
82052130b60SViresh Kumar 		.val = PMX_SDHCI_CD_PORT_12_VAL,
82152130b60SViresh Kumar 	},
82252130b60SViresh Kumar };
82352130b60SViresh Kumar 
82452130b60SViresh Kumar static struct spear_muxreg sdhci_cd_51_muxreg[] = {
82552130b60SViresh Kumar 	{
82652130b60SViresh Kumar 		.reg = IP_SEL_PAD_50_59_REG,
82752130b60SViresh Kumar 		.mask = PMX_PL_51_MASK,
82852130b60SViresh Kumar 		.val = PMX_SDHCI_CD_PL_51_VAL,
82952130b60SViresh Kumar 	}, {
83052130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
83152130b60SViresh Kumar 		.mask = PMX_SDHCI_CD_PORT_SEL_MASK,
83252130b60SViresh Kumar 		.val = PMX_SDHCI_CD_PORT_51_VAL,
83352130b60SViresh Kumar 	},
83452130b60SViresh Kumar };
83552130b60SViresh Kumar 
83652130b60SViresh Kumar #define pmx_sdhci_common_modemux					\
83752130b60SViresh Kumar 	{								\
83852130b60SViresh Kumar 		.modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE |	\
83952130b60SViresh Kumar 			SMALL_PRINTERS_MODE | EXTENDED_MODE,		\
84052130b60SViresh Kumar 		.muxregs = sdhci_muxreg,				\
84152130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(sdhci_muxreg),			\
84252130b60SViresh Kumar 	}, {								\
84352130b60SViresh Kumar 		.modes = EXTENDED_MODE,					\
84452130b60SViresh Kumar 		.muxregs = sdhci_ext_muxreg,				\
84552130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(sdhci_ext_muxreg),		\
84652130b60SViresh Kumar 	}
84752130b60SViresh Kumar 
84852130b60SViresh Kumar static struct spear_modemux sdhci_modemux[][3] = {
84952130b60SViresh Kumar 	{
85052130b60SViresh Kumar 		/* select pin 12 for cd */
85152130b60SViresh Kumar 		pmx_sdhci_common_modemux,
85252130b60SViresh Kumar 		{
85352130b60SViresh Kumar 			.modes = EXTENDED_MODE,
85452130b60SViresh Kumar 			.muxregs = sdhci_cd_12_muxreg,
85552130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(sdhci_cd_12_muxreg),
85652130b60SViresh Kumar 		},
85752130b60SViresh Kumar 	}, {
85852130b60SViresh Kumar 		/* select pin 51 for cd */
85952130b60SViresh Kumar 		pmx_sdhci_common_modemux,
86052130b60SViresh Kumar 		{
86152130b60SViresh Kumar 			.modes = EXTENDED_MODE,
86252130b60SViresh Kumar 			.muxregs = sdhci_cd_51_muxreg,
86352130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(sdhci_cd_51_muxreg),
86452130b60SViresh Kumar 		},
86552130b60SViresh Kumar 	}
86652130b60SViresh Kumar };
86752130b60SViresh Kumar 
86852130b60SViresh Kumar static struct spear_pingroup sdhci_pingroup[] = {
86952130b60SViresh Kumar 	{
87052130b60SViresh Kumar 		.name = "sdhci_cd_12_grp",
87152130b60SViresh Kumar 		.pins = sdhci_cd_12_pins,
87252130b60SViresh Kumar 		.npins = ARRAY_SIZE(sdhci_cd_12_pins),
87352130b60SViresh Kumar 		.modemuxs = sdhci_modemux[0],
87452130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(sdhci_modemux[0]),
87552130b60SViresh Kumar 	}, {
87652130b60SViresh Kumar 		.name = "sdhci_cd_51_grp",
87752130b60SViresh Kumar 		.pins = sdhci_cd_51_pins,
87852130b60SViresh Kumar 		.npins = ARRAY_SIZE(sdhci_cd_51_pins),
87952130b60SViresh Kumar 		.modemuxs = sdhci_modemux[1],
88052130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(sdhci_modemux[1]),
88152130b60SViresh Kumar 	},
88252130b60SViresh Kumar };
88352130b60SViresh Kumar 
88452130b60SViresh Kumar static const char *const sdhci_grps[] = { "sdhci_cd_12_grp", "sdhci_cd_51_grp",
88552130b60SViresh Kumar 	"sdhci_led_grp" };
88652130b60SViresh Kumar 
88752130b60SViresh Kumar static struct spear_function sdhci_function = {
88852130b60SViresh Kumar 	.name = "sdhci",
88952130b60SViresh Kumar 	.groups = sdhci_grps,
89052130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(sdhci_grps),
89152130b60SViresh Kumar };
89252130b60SViresh Kumar 
89352130b60SViresh Kumar /* Pad multiplexing for I2S device */
89452130b60SViresh Kumar static const unsigned i2s_pins[] = { 35, 39, 40, 41, 42 };
89552130b60SViresh Kumar static struct spear_muxreg i2s_muxreg[] = {
89652130b60SViresh Kumar 	{
89752130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
89852130b60SViresh Kumar 		.mask = PMX_SSP_CS_MASK,
89952130b60SViresh Kumar 		.val = 0,
90052130b60SViresh Kumar 	}, {
90152130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
90252130b60SViresh Kumar 		.mask = PMX_UART0_MODEM_MASK,
90352130b60SViresh Kumar 		.val = 0,
90452130b60SViresh Kumar 	},
90552130b60SViresh Kumar };
90652130b60SViresh Kumar 
90752130b60SViresh Kumar static struct spear_muxreg i2s_ext_muxreg[] = {
90852130b60SViresh Kumar 	{
90952130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
91052130b60SViresh Kumar 		.mask = PMX_PL_35_MASK | PMX_PL_39_MASK,
91152130b60SViresh Kumar 		.val = PMX_I2S_REF_CLK_PL_35_VAL | PMX_I2S_PL_39_VAL,
91252130b60SViresh Kumar 	}, {
91352130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
91452130b60SViresh Kumar 		.mask = PMX_PL_40_MASK | PMX_PL_41_42_MASK,
91552130b60SViresh Kumar 		.val = PMX_I2S_PL_40_VAL | PMX_I2S_PL_41_42_VAL,
91652130b60SViresh Kumar 	},
91752130b60SViresh Kumar };
91852130b60SViresh Kumar 
91952130b60SViresh Kumar static struct spear_modemux i2s_modemux[] = {
92052130b60SViresh Kumar 	{
92152130b60SViresh Kumar 		.modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
92252130b60SViresh Kumar 		.muxregs = i2s_muxreg,
92352130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(i2s_muxreg),
92452130b60SViresh Kumar 	}, {
92552130b60SViresh Kumar 		.modes = EXTENDED_MODE,
92652130b60SViresh Kumar 		.muxregs = i2s_ext_muxreg,
92752130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(i2s_ext_muxreg),
92852130b60SViresh Kumar 	},
92952130b60SViresh Kumar };
93052130b60SViresh Kumar 
93152130b60SViresh Kumar static struct spear_pingroup i2s_pingroup = {
93252130b60SViresh Kumar 	.name = "i2s_grp",
93352130b60SViresh Kumar 	.pins = i2s_pins,
93452130b60SViresh Kumar 	.npins = ARRAY_SIZE(i2s_pins),
93552130b60SViresh Kumar 	.modemuxs = i2s_modemux,
93652130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(i2s_modemux),
93752130b60SViresh Kumar };
93852130b60SViresh Kumar 
93952130b60SViresh Kumar static const char *const i2s_grps[] = { "i2s_grp" };
94052130b60SViresh Kumar static struct spear_function i2s_function = {
94152130b60SViresh Kumar 	.name = "i2s",
94252130b60SViresh Kumar 	.groups = i2s_grps,
94352130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(i2s_grps),
94452130b60SViresh Kumar };
94552130b60SViresh Kumar 
94652130b60SViresh Kumar /* Pad multiplexing for UART1 device */
94752130b60SViresh Kumar static const unsigned uart1_pins[] = { 28, 29 };
94852130b60SViresh Kumar static struct spear_muxreg uart1_muxreg[] = {
94952130b60SViresh Kumar 	{
95052130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
95152130b60SViresh Kumar 		.mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK,
95252130b60SViresh Kumar 		.val = 0,
95352130b60SViresh Kumar 	},
95452130b60SViresh Kumar };
95552130b60SViresh Kumar 
95652130b60SViresh Kumar static struct spear_muxreg uart1_ext_muxreg[] = {
95752130b60SViresh Kumar 	{
95852130b60SViresh Kumar 		.reg = IP_SEL_PAD_20_29_REG,
95952130b60SViresh Kumar 		.mask = PMX_PL_28_29_MASK,
96052130b60SViresh Kumar 		.val = PMX_UART1_PL_28_29_VAL,
96152130b60SViresh Kumar 	},
96252130b60SViresh Kumar };
96352130b60SViresh Kumar 
96452130b60SViresh Kumar static struct spear_modemux uart1_modemux[] = {
96552130b60SViresh Kumar 	{
96652130b60SViresh Kumar 		.modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
96752130b60SViresh Kumar 			| SMALL_PRINTERS_MODE | EXTENDED_MODE,
96852130b60SViresh Kumar 		.muxregs = uart1_muxreg,
96952130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart1_muxreg),
97052130b60SViresh Kumar 	}, {
97152130b60SViresh Kumar 		.modes = EXTENDED_MODE,
97252130b60SViresh Kumar 		.muxregs = uart1_ext_muxreg,
97352130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart1_ext_muxreg),
97452130b60SViresh Kumar 	},
97552130b60SViresh Kumar };
97652130b60SViresh Kumar 
97752130b60SViresh Kumar static struct spear_pingroup uart1_pingroup = {
97852130b60SViresh Kumar 	.name = "uart1_grp",
97952130b60SViresh Kumar 	.pins = uart1_pins,
98052130b60SViresh Kumar 	.npins = ARRAY_SIZE(uart1_pins),
98152130b60SViresh Kumar 	.modemuxs = uart1_modemux,
98252130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(uart1_modemux),
98352130b60SViresh Kumar };
98452130b60SViresh Kumar 
98552130b60SViresh Kumar static const char *const uart1_grps[] = { "uart1_grp" };
98652130b60SViresh Kumar static struct spear_function uart1_function = {
98752130b60SViresh Kumar 	.name = "uart1",
98852130b60SViresh Kumar 	.groups = uart1_grps,
98952130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(uart1_grps),
99052130b60SViresh Kumar };
99152130b60SViresh Kumar 
99252130b60SViresh Kumar /* Pad multiplexing for UART1 Modem device */
99352130b60SViresh Kumar static const unsigned uart1_modem_2_to_7_pins[] = { 2, 3, 4, 5, 6, 7 };
99452130b60SViresh Kumar static const unsigned uart1_modem_31_to_36_pins[] = { 31, 32, 33, 34, 35, 36 };
99552130b60SViresh Kumar static const unsigned uart1_modem_34_to_45_pins[] = { 34, 35, 36, 43, 44, 45 };
99652130b60SViresh Kumar static const unsigned uart1_modem_80_to_85_pins[] = { 80, 81, 82, 83, 84, 85 };
99752130b60SViresh Kumar 
99852130b60SViresh Kumar static struct spear_muxreg uart1_modem_ext_2_to_7_muxreg[] = {
99952130b60SViresh Kumar 	{
100052130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
100152130b60SViresh Kumar 		.mask = PMX_UART0_MASK | PMX_I2C_MASK | PMX_SSP_MASK,
100252130b60SViresh Kumar 		.val = 0,
100352130b60SViresh Kumar 	}, {
100452130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
100552130b60SViresh Kumar 		.mask = PMX_PL_2_3_MASK | PMX_PL_6_7_MASK,
100652130b60SViresh Kumar 		.val = PMX_UART1_ENH_PL_2_3_VAL | PMX_UART1_ENH_PL_4_5_VAL |
100752130b60SViresh Kumar 			PMX_UART1_ENH_PL_6_7_VAL,
100852130b60SViresh Kumar 	}, {
100952130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
101052130b60SViresh Kumar 		.mask = PMX_UART1_ENH_PORT_SEL_MASK,
101152130b60SViresh Kumar 		.val = PMX_UART1_ENH_PORT_3_TO_5_7_VAL,
101252130b60SViresh Kumar 	},
101352130b60SViresh Kumar };
101452130b60SViresh Kumar 
101552130b60SViresh Kumar static struct spear_muxreg uart1_modem_31_to_36_muxreg[] = {
101652130b60SViresh Kumar 	{
101752130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
101852130b60SViresh Kumar 		.mask = PMX_GPIO_PIN3_MASK | PMX_GPIO_PIN4_MASK |
101952130b60SViresh Kumar 			PMX_GPIO_PIN5_MASK | PMX_SSP_CS_MASK,
102052130b60SViresh Kumar 		.val = 0,
102152130b60SViresh Kumar 	},
102252130b60SViresh Kumar };
102352130b60SViresh Kumar 
102452130b60SViresh Kumar static struct spear_muxreg uart1_modem_ext_31_to_36_muxreg[] = {
102552130b60SViresh Kumar 	{
102652130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
102752130b60SViresh Kumar 		.mask = PMX_PL_31_MASK | PMX_PL_32_33_MASK | PMX_PL_34_MASK |
102852130b60SViresh Kumar 			PMX_PL_35_MASK | PMX_PL_36_MASK,
102952130b60SViresh Kumar 		.val = PMX_UART1_ENH_PL_31_VAL | PMX_UART1_ENH_PL_32_33_VAL |
103052130b60SViresh Kumar 			PMX_UART1_ENH_PL_34_VAL | PMX_UART1_ENH_PL_35_VAL |
103152130b60SViresh Kumar 			PMX_UART1_ENH_PL_36_VAL,
103252130b60SViresh Kumar 	}, {
103352130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
103452130b60SViresh Kumar 		.mask = PMX_UART1_ENH_PORT_SEL_MASK,
103552130b60SViresh Kumar 		.val = PMX_UART1_ENH_PORT_32_TO_34_36_VAL,
103652130b60SViresh Kumar 	},
103752130b60SViresh Kumar };
103852130b60SViresh Kumar 
103952130b60SViresh Kumar static struct spear_muxreg uart1_modem_34_to_45_muxreg[] = {
104052130b60SViresh Kumar 	{
104152130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
104252130b60SViresh Kumar 		.mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK |
104352130b60SViresh Kumar 			PMX_SSP_CS_MASK,
104452130b60SViresh Kumar 		.val = 0,
104552130b60SViresh Kumar 	},
104652130b60SViresh Kumar };
104752130b60SViresh Kumar 
104852130b60SViresh Kumar static struct spear_muxreg uart1_modem_ext_34_to_45_muxreg[] = {
104952130b60SViresh Kumar 	{
105052130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
105152130b60SViresh Kumar 		.mask = PMX_PL_34_MASK | PMX_PL_35_MASK | PMX_PL_36_MASK,
105252130b60SViresh Kumar 		.val = PMX_UART1_ENH_PL_34_VAL | PMX_UART1_ENH_PL_35_VAL |
105352130b60SViresh Kumar 			PMX_UART1_ENH_PL_36_VAL,
105452130b60SViresh Kumar 	}, {
105552130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
105652130b60SViresh Kumar 		.mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK,
105752130b60SViresh Kumar 		.val = PMX_UART1_ENH_PL_43_VAL | PMX_UART1_ENH_PL_44_45_VAL,
105852130b60SViresh Kumar 	}, {
105952130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
106052130b60SViresh Kumar 		.mask = PMX_UART1_ENH_PORT_SEL_MASK,
106152130b60SViresh Kumar 		.val = PMX_UART1_ENH_PORT_44_45_34_36_VAL,
106252130b60SViresh Kumar 	},
106352130b60SViresh Kumar };
106452130b60SViresh Kumar 
106552130b60SViresh Kumar static struct spear_muxreg uart1_modem_ext_80_to_85_muxreg[] = {
106652130b60SViresh Kumar 	{
106752130b60SViresh Kumar 		.reg = IP_SEL_PAD_80_89_REG,
106852130b60SViresh Kumar 		.mask = PMX_PL_80_TO_85_MASK,
106952130b60SViresh Kumar 		.val = PMX_UART1_ENH_PL_80_TO_85_VAL,
107052130b60SViresh Kumar 	}, {
107152130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
107252130b60SViresh Kumar 		.mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK,
107352130b60SViresh Kumar 		.val = PMX_UART1_ENH_PL_43_VAL | PMX_UART1_ENH_PL_44_45_VAL,
107452130b60SViresh Kumar 	}, {
107552130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
107652130b60SViresh Kumar 		.mask = PMX_UART1_ENH_PORT_SEL_MASK,
107752130b60SViresh Kumar 		.val = PMX_UART1_ENH_PORT_81_TO_85_VAL,
107852130b60SViresh Kumar 	},
107952130b60SViresh Kumar };
108052130b60SViresh Kumar 
108152130b60SViresh Kumar static struct spear_modemux uart1_modem_2_to_7_modemux[] = {
108252130b60SViresh Kumar 	{
108352130b60SViresh Kumar 		.modes = EXTENDED_MODE,
108452130b60SViresh Kumar 		.muxregs = uart1_modem_ext_2_to_7_muxreg,
108552130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart1_modem_ext_2_to_7_muxreg),
108652130b60SViresh Kumar 	},
108752130b60SViresh Kumar };
108852130b60SViresh Kumar 
108952130b60SViresh Kumar static struct spear_modemux uart1_modem_31_to_36_modemux[] = {
109052130b60SViresh Kumar 	{
109152130b60SViresh Kumar 		.modes = SMALL_PRINTERS_MODE | EXTENDED_MODE,
109252130b60SViresh Kumar 		.muxregs = uart1_modem_31_to_36_muxreg,
109352130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart1_modem_31_to_36_muxreg),
109452130b60SViresh Kumar 	}, {
109552130b60SViresh Kumar 		.modes = EXTENDED_MODE,
109652130b60SViresh Kumar 		.muxregs = uart1_modem_ext_31_to_36_muxreg,
109752130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart1_modem_ext_31_to_36_muxreg),
109852130b60SViresh Kumar 	},
109952130b60SViresh Kumar };
110052130b60SViresh Kumar 
110152130b60SViresh Kumar static struct spear_modemux uart1_modem_34_to_45_modemux[] = {
110252130b60SViresh Kumar 	{
110352130b60SViresh Kumar 		.modes = AUTO_EXP_MODE | EXTENDED_MODE,
110452130b60SViresh Kumar 		.muxregs = uart1_modem_34_to_45_muxreg,
110552130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart1_modem_34_to_45_muxreg),
110652130b60SViresh Kumar 	}, {
110752130b60SViresh Kumar 		.modes = EXTENDED_MODE,
110852130b60SViresh Kumar 		.muxregs = uart1_modem_ext_34_to_45_muxreg,
110952130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart1_modem_ext_34_to_45_muxreg),
111052130b60SViresh Kumar 	},
111152130b60SViresh Kumar };
111252130b60SViresh Kumar 
111352130b60SViresh Kumar static struct spear_modemux uart1_modem_80_to_85_modemux[] = {
111452130b60SViresh Kumar 	{
111552130b60SViresh Kumar 		.modes = EXTENDED_MODE,
111652130b60SViresh Kumar 		.muxregs = uart1_modem_ext_80_to_85_muxreg,
111752130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart1_modem_ext_80_to_85_muxreg),
111852130b60SViresh Kumar 	},
111952130b60SViresh Kumar };
112052130b60SViresh Kumar 
112152130b60SViresh Kumar static struct spear_pingroup uart1_modem_pingroup[] = {
112252130b60SViresh Kumar 	{
112352130b60SViresh Kumar 		.name = "uart1_modem_2_to_7_grp",
112452130b60SViresh Kumar 		.pins = uart1_modem_2_to_7_pins,
112552130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart1_modem_2_to_7_pins),
112652130b60SViresh Kumar 		.modemuxs = uart1_modem_2_to_7_modemux,
112752130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart1_modem_2_to_7_modemux),
112852130b60SViresh Kumar 	}, {
112952130b60SViresh Kumar 		.name = "uart1_modem_31_to_36_grp",
113052130b60SViresh Kumar 		.pins = uart1_modem_31_to_36_pins,
113152130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart1_modem_31_to_36_pins),
113252130b60SViresh Kumar 		.modemuxs = uart1_modem_31_to_36_modemux,
113352130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart1_modem_31_to_36_modemux),
113452130b60SViresh Kumar 	}, {
113552130b60SViresh Kumar 		.name = "uart1_modem_34_to_45_grp",
113652130b60SViresh Kumar 		.pins = uart1_modem_34_to_45_pins,
113752130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart1_modem_34_to_45_pins),
113852130b60SViresh Kumar 		.modemuxs = uart1_modem_34_to_45_modemux,
113952130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart1_modem_34_to_45_modemux),
114052130b60SViresh Kumar 	}, {
114152130b60SViresh Kumar 		.name = "uart1_modem_80_to_85_grp",
114252130b60SViresh Kumar 		.pins = uart1_modem_80_to_85_pins,
114352130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart1_modem_80_to_85_pins),
114452130b60SViresh Kumar 		.modemuxs = uart1_modem_80_to_85_modemux,
114552130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart1_modem_80_to_85_modemux),
114652130b60SViresh Kumar 	},
114752130b60SViresh Kumar };
114852130b60SViresh Kumar 
114952130b60SViresh Kumar static const char *const uart1_modem_grps[] = { "uart1_modem_2_to_7_grp",
115052130b60SViresh Kumar 	"uart1_modem_31_to_36_grp", "uart1_modem_34_to_45_grp",
115152130b60SViresh Kumar 	"uart1_modem_80_to_85_grp" };
115252130b60SViresh Kumar static struct spear_function uart1_modem_function = {
115352130b60SViresh Kumar 	.name = "uart1_modem",
115452130b60SViresh Kumar 	.groups = uart1_modem_grps,
115552130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(uart1_modem_grps),
115652130b60SViresh Kumar };
115752130b60SViresh Kumar 
115852130b60SViresh Kumar /* Pad multiplexing for UART2 device */
115952130b60SViresh Kumar static const unsigned uart2_pins[] = { 0, 1 };
116052130b60SViresh Kumar static struct spear_muxreg uart2_muxreg[] = {
116152130b60SViresh Kumar 	{
116252130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
116352130b60SViresh Kumar 		.mask = PMX_FIRDA_MASK,
116452130b60SViresh Kumar 		.val = 0,
116552130b60SViresh Kumar 	},
116652130b60SViresh Kumar };
116752130b60SViresh Kumar 
116852130b60SViresh Kumar static struct spear_muxreg uart2_ext_muxreg[] = {
116952130b60SViresh Kumar 	{
117052130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
117152130b60SViresh Kumar 		.mask = PMX_PL_0_1_MASK,
117252130b60SViresh Kumar 		.val = PMX_UART2_PL_0_1_VAL,
117352130b60SViresh Kumar 	},
117452130b60SViresh Kumar };
117552130b60SViresh Kumar 
117652130b60SViresh Kumar static struct spear_modemux uart2_modemux[] = {
117752130b60SViresh Kumar 	{
117852130b60SViresh Kumar 		.modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
117952130b60SViresh Kumar 			| SMALL_PRINTERS_MODE | EXTENDED_MODE,
118052130b60SViresh Kumar 		.muxregs = uart2_muxreg,
118152130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart2_muxreg),
118252130b60SViresh Kumar 	}, {
118352130b60SViresh Kumar 		.modes = EXTENDED_MODE,
118452130b60SViresh Kumar 		.muxregs = uart2_ext_muxreg,
118552130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart2_ext_muxreg),
118652130b60SViresh Kumar 	},
118752130b60SViresh Kumar };
118852130b60SViresh Kumar 
118952130b60SViresh Kumar static struct spear_pingroup uart2_pingroup = {
119052130b60SViresh Kumar 	.name = "uart2_grp",
119152130b60SViresh Kumar 	.pins = uart2_pins,
119252130b60SViresh Kumar 	.npins = ARRAY_SIZE(uart2_pins),
119352130b60SViresh Kumar 	.modemuxs = uart2_modemux,
119452130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(uart2_modemux),
119552130b60SViresh Kumar };
119652130b60SViresh Kumar 
119752130b60SViresh Kumar static const char *const uart2_grps[] = { "uart2_grp" };
119852130b60SViresh Kumar static struct spear_function uart2_function = {
119952130b60SViresh Kumar 	.name = "uart2",
120052130b60SViresh Kumar 	.groups = uart2_grps,
120152130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(uart2_grps),
120252130b60SViresh Kumar };
120352130b60SViresh Kumar 
120452130b60SViresh Kumar /* Pad multiplexing for uart3 device */
120552130b60SViresh Kumar static const unsigned uart3_pins[][2] = { { 8, 9 }, { 15, 16 }, { 41, 42 },
120652130b60SViresh Kumar 	{ 52, 53 }, { 73, 74 }, { 94, 95 }, { 98, 99 } };
120752130b60SViresh Kumar 
120852130b60SViresh Kumar static struct spear_muxreg uart3_ext_8_9_muxreg[] = {
120952130b60SViresh Kumar 	{
121052130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
121152130b60SViresh Kumar 		.mask = PMX_SSP_MASK,
121252130b60SViresh Kumar 		.val = 0,
121352130b60SViresh Kumar 	}, {
121452130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
121552130b60SViresh Kumar 		.mask = PMX_PL_8_9_MASK,
121652130b60SViresh Kumar 		.val = PMX_UART3_PL_8_9_VAL,
121752130b60SViresh Kumar 	}, {
121852130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
121952130b60SViresh Kumar 		.mask = PMX_UART3_PORT_SEL_MASK,
122052130b60SViresh Kumar 		.val = PMX_UART3_PORT_8_VAL,
122152130b60SViresh Kumar 	},
122252130b60SViresh Kumar };
122352130b60SViresh Kumar 
122452130b60SViresh Kumar static struct spear_muxreg uart3_ext_15_16_muxreg[] = {
122552130b60SViresh Kumar 	{
122652130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
122752130b60SViresh Kumar 		.mask = PMX_MII_MASK,
122852130b60SViresh Kumar 		.val = 0,
122952130b60SViresh Kumar 	}, {
123052130b60SViresh Kumar 		.reg = IP_SEL_PAD_10_19_REG,
123152130b60SViresh Kumar 		.mask = PMX_PL_15_16_MASK,
123252130b60SViresh Kumar 		.val = PMX_UART3_PL_15_16_VAL,
123352130b60SViresh Kumar 	}, {
123452130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
123552130b60SViresh Kumar 		.mask = PMX_UART3_PORT_SEL_MASK,
123652130b60SViresh Kumar 		.val = PMX_UART3_PORT_15_VAL,
123752130b60SViresh Kumar 	},
123852130b60SViresh Kumar };
123952130b60SViresh Kumar 
124052130b60SViresh Kumar static struct spear_muxreg uart3_ext_41_42_muxreg[] = {
124152130b60SViresh Kumar 	{
124252130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
124352130b60SViresh Kumar 		.mask = PMX_UART0_MODEM_MASK,
124452130b60SViresh Kumar 		.val = 0,
124552130b60SViresh Kumar 	}, {
124652130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
124752130b60SViresh Kumar 		.mask = PMX_PL_41_42_MASK,
124852130b60SViresh Kumar 		.val = PMX_UART3_PL_41_42_VAL,
124952130b60SViresh Kumar 	}, {
125052130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
125152130b60SViresh Kumar 		.mask = PMX_UART3_PORT_SEL_MASK,
125252130b60SViresh Kumar 		.val = PMX_UART3_PORT_41_VAL,
125352130b60SViresh Kumar 	},
125452130b60SViresh Kumar };
125552130b60SViresh Kumar 
125652130b60SViresh Kumar static struct spear_muxreg uart3_ext_52_53_muxreg[] = {
125752130b60SViresh Kumar 	{
125852130b60SViresh Kumar 		.reg = IP_SEL_PAD_50_59_REG,
125952130b60SViresh Kumar 		.mask = PMX_PL_52_53_MASK,
126052130b60SViresh Kumar 		.val = PMX_UART3_PL_52_53_VAL,
126152130b60SViresh Kumar 	}, {
126252130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
126352130b60SViresh Kumar 		.mask = PMX_UART3_PORT_SEL_MASK,
126452130b60SViresh Kumar 		.val = PMX_UART3_PORT_52_VAL,
126552130b60SViresh Kumar 	},
126652130b60SViresh Kumar };
126752130b60SViresh Kumar 
126852130b60SViresh Kumar static struct spear_muxreg uart3_ext_73_74_muxreg[] = {
126952130b60SViresh Kumar 	{
127052130b60SViresh Kumar 		.reg = IP_SEL_PAD_70_79_REG,
127152130b60SViresh Kumar 		.mask = PMX_PL_73_MASK | PMX_PL_74_MASK,
127252130b60SViresh Kumar 		.val = PMX_UART3_PL_73_VAL | PMX_UART3_PL_74_VAL,
127352130b60SViresh Kumar 	}, {
127452130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
127552130b60SViresh Kumar 		.mask = PMX_UART3_PORT_SEL_MASK,
127652130b60SViresh Kumar 		.val = PMX_UART3_PORT_73_VAL,
127752130b60SViresh Kumar 	},
127852130b60SViresh Kumar };
127952130b60SViresh Kumar 
128052130b60SViresh Kumar static struct spear_muxreg uart3_ext_94_95_muxreg[] = {
128152130b60SViresh Kumar 	{
128252130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
128352130b60SViresh Kumar 		.mask = PMX_PL_94_95_MASK,
128452130b60SViresh Kumar 		.val = PMX_UART3_PL_94_95_VAL,
128552130b60SViresh Kumar 	}, {
128652130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
128752130b60SViresh Kumar 		.mask = PMX_UART3_PORT_SEL_MASK,
128852130b60SViresh Kumar 		.val = PMX_UART3_PORT_94_VAL,
128952130b60SViresh Kumar 	},
129052130b60SViresh Kumar };
129152130b60SViresh Kumar 
129252130b60SViresh Kumar static struct spear_muxreg uart3_ext_98_99_muxreg[] = {
129352130b60SViresh Kumar 	{
129452130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
129552130b60SViresh Kumar 		.mask = PMX_PL_98_MASK | PMX_PL_99_MASK,
129652130b60SViresh Kumar 		.val = PMX_UART3_PL_98_VAL | PMX_UART3_PL_99_VAL,
129752130b60SViresh Kumar 	}, {
129852130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
129952130b60SViresh Kumar 		.mask = PMX_UART3_PORT_SEL_MASK,
130052130b60SViresh Kumar 		.val = PMX_UART3_PORT_99_VAL,
130152130b60SViresh Kumar 	},
130252130b60SViresh Kumar };
130352130b60SViresh Kumar 
130452130b60SViresh Kumar static struct spear_modemux uart3_modemux[][1] = {
130552130b60SViresh Kumar 	{
130652130b60SViresh Kumar 		/* Select signals on pins 8_9 */
130752130b60SViresh Kumar 		{
130852130b60SViresh Kumar 			.modes = EXTENDED_MODE,
130952130b60SViresh Kumar 			.muxregs = uart3_ext_8_9_muxreg,
131052130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart3_ext_8_9_muxreg),
131152130b60SViresh Kumar 		},
131252130b60SViresh Kumar 	}, {
131352130b60SViresh Kumar 		/* Select signals on pins 15_16 */
131452130b60SViresh Kumar 		{
131552130b60SViresh Kumar 			.modes = EXTENDED_MODE,
131652130b60SViresh Kumar 			.muxregs = uart3_ext_15_16_muxreg,
131752130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart3_ext_15_16_muxreg),
131852130b60SViresh Kumar 		},
131952130b60SViresh Kumar 	}, {
132052130b60SViresh Kumar 		/* Select signals on pins 41_42 */
132152130b60SViresh Kumar 		{
132252130b60SViresh Kumar 			.modes = EXTENDED_MODE,
132352130b60SViresh Kumar 			.muxregs = uart3_ext_41_42_muxreg,
132452130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart3_ext_41_42_muxreg),
132552130b60SViresh Kumar 		},
132652130b60SViresh Kumar 	}, {
132752130b60SViresh Kumar 		/* Select signals on pins 52_53 */
132852130b60SViresh Kumar 		{
132952130b60SViresh Kumar 			.modes = EXTENDED_MODE,
133052130b60SViresh Kumar 			.muxregs = uart3_ext_52_53_muxreg,
133152130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart3_ext_52_53_muxreg),
133252130b60SViresh Kumar 		},
133352130b60SViresh Kumar 	}, {
133452130b60SViresh Kumar 		/* Select signals on pins 73_74 */
133552130b60SViresh Kumar 		{
133652130b60SViresh Kumar 			.modes = EXTENDED_MODE,
133752130b60SViresh Kumar 			.muxregs = uart3_ext_73_74_muxreg,
133852130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart3_ext_73_74_muxreg),
133952130b60SViresh Kumar 		},
134052130b60SViresh Kumar 	}, {
134152130b60SViresh Kumar 		/* Select signals on pins 94_95 */
134252130b60SViresh Kumar 		{
134352130b60SViresh Kumar 			.modes = EXTENDED_MODE,
134452130b60SViresh Kumar 			.muxregs = uart3_ext_94_95_muxreg,
134552130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart3_ext_94_95_muxreg),
134652130b60SViresh Kumar 		},
134752130b60SViresh Kumar 	}, {
134852130b60SViresh Kumar 		/* Select signals on pins 98_99 */
134952130b60SViresh Kumar 		{
135052130b60SViresh Kumar 			.modes = EXTENDED_MODE,
135152130b60SViresh Kumar 			.muxregs = uart3_ext_98_99_muxreg,
135252130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart3_ext_98_99_muxreg),
135352130b60SViresh Kumar 		},
135452130b60SViresh Kumar 	},
135552130b60SViresh Kumar };
135652130b60SViresh Kumar 
135752130b60SViresh Kumar static struct spear_pingroup uart3_pingroup[] = {
135852130b60SViresh Kumar 	{
135952130b60SViresh Kumar 		.name = "uart3_8_9_grp",
136052130b60SViresh Kumar 		.pins = uart3_pins[0],
136152130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart3_pins[0]),
136252130b60SViresh Kumar 		.modemuxs = uart3_modemux[0],
136352130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart3_modemux[0]),
136452130b60SViresh Kumar 	}, {
136552130b60SViresh Kumar 		.name = "uart3_15_16_grp",
136652130b60SViresh Kumar 		.pins = uart3_pins[1],
136752130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart3_pins[1]),
136852130b60SViresh Kumar 		.modemuxs = uart3_modemux[1],
136952130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart3_modemux[1]),
137052130b60SViresh Kumar 	}, {
137152130b60SViresh Kumar 		.name = "uart3_41_42_grp",
137252130b60SViresh Kumar 		.pins = uart3_pins[2],
137352130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart3_pins[2]),
137452130b60SViresh Kumar 		.modemuxs = uart3_modemux[2],
137552130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart3_modemux[2]),
137652130b60SViresh Kumar 	}, {
137752130b60SViresh Kumar 		.name = "uart3_52_53_grp",
137852130b60SViresh Kumar 		.pins = uart3_pins[3],
137952130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart3_pins[3]),
138052130b60SViresh Kumar 		.modemuxs = uart3_modemux[3],
138152130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart3_modemux[3]),
138252130b60SViresh Kumar 	}, {
138352130b60SViresh Kumar 		.name = "uart3_73_74_grp",
138452130b60SViresh Kumar 		.pins = uart3_pins[4],
138552130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart3_pins[4]),
138652130b60SViresh Kumar 		.modemuxs = uart3_modemux[4],
138752130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart3_modemux[4]),
138852130b60SViresh Kumar 	}, {
138952130b60SViresh Kumar 		.name = "uart3_94_95_grp",
139052130b60SViresh Kumar 		.pins = uart3_pins[5],
139152130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart3_pins[5]),
139252130b60SViresh Kumar 		.modemuxs = uart3_modemux[5],
139352130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart3_modemux[5]),
139452130b60SViresh Kumar 	}, {
139552130b60SViresh Kumar 		.name = "uart3_98_99_grp",
139652130b60SViresh Kumar 		.pins = uart3_pins[6],
139752130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart3_pins[6]),
139852130b60SViresh Kumar 		.modemuxs = uart3_modemux[6],
139952130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart3_modemux[6]),
140052130b60SViresh Kumar 	},
140152130b60SViresh Kumar };
140252130b60SViresh Kumar 
140352130b60SViresh Kumar static const char *const uart3_grps[] = { "uart3_8_9_grp", "uart3_15_16_grp",
140452130b60SViresh Kumar 	"uart3_41_42_grp", "uart3_52_53_grp", "uart3_73_74_grp",
140552130b60SViresh Kumar 	"uart3_94_95_grp", "uart3_98_99_grp" };
140652130b60SViresh Kumar 
140752130b60SViresh Kumar static struct spear_function uart3_function = {
140852130b60SViresh Kumar 	.name = "uart3",
140952130b60SViresh Kumar 	.groups = uart3_grps,
141052130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(uart3_grps),
141152130b60SViresh Kumar };
141252130b60SViresh Kumar 
141352130b60SViresh Kumar /* Pad multiplexing for uart4 device */
141452130b60SViresh Kumar static const unsigned uart4_pins[][2] = { { 6, 7 }, { 13, 14 }, { 39, 40 },
141552130b60SViresh Kumar 	{ 71, 72 }, { 92, 93 }, { 100, 101 } };
141652130b60SViresh Kumar 
141752130b60SViresh Kumar static struct spear_muxreg uart4_ext_6_7_muxreg[] = {
141852130b60SViresh Kumar 	{
141952130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
142052130b60SViresh Kumar 		.mask = PMX_SSP_MASK,
142152130b60SViresh Kumar 		.val = 0,
142252130b60SViresh Kumar 	}, {
142352130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
142452130b60SViresh Kumar 		.mask = PMX_PL_6_7_MASK,
142552130b60SViresh Kumar 		.val = PMX_UART4_PL_6_7_VAL,
142652130b60SViresh Kumar 	}, {
142752130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
142852130b60SViresh Kumar 		.mask = PMX_UART4_PORT_SEL_MASK,
142952130b60SViresh Kumar 		.val = PMX_UART4_PORT_6_VAL,
143052130b60SViresh Kumar 	},
143152130b60SViresh Kumar };
143252130b60SViresh Kumar 
143352130b60SViresh Kumar static struct spear_muxreg uart4_ext_13_14_muxreg[] = {
143452130b60SViresh Kumar 	{
143552130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
143652130b60SViresh Kumar 		.mask = PMX_MII_MASK,
143752130b60SViresh Kumar 		.val = 0,
143852130b60SViresh Kumar 	}, {
143952130b60SViresh Kumar 		.reg = IP_SEL_PAD_10_19_REG,
144052130b60SViresh Kumar 		.mask = PMX_PL_13_14_MASK,
144152130b60SViresh Kumar 		.val = PMX_UART4_PL_13_14_VAL,
144252130b60SViresh Kumar 	}, {
144352130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
144452130b60SViresh Kumar 		.mask = PMX_UART4_PORT_SEL_MASK,
144552130b60SViresh Kumar 		.val = PMX_UART4_PORT_13_VAL,
144652130b60SViresh Kumar 	},
144752130b60SViresh Kumar };
144852130b60SViresh Kumar 
144952130b60SViresh Kumar static struct spear_muxreg uart4_ext_39_40_muxreg[] = {
145052130b60SViresh Kumar 	{
145152130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
145252130b60SViresh Kumar 		.mask = PMX_UART0_MODEM_MASK,
145352130b60SViresh Kumar 		.val = 0,
145452130b60SViresh Kumar 	}, {
145552130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
145652130b60SViresh Kumar 		.mask = PMX_PL_39_MASK,
145752130b60SViresh Kumar 		.val = PMX_UART4_PL_39_VAL,
145852130b60SViresh Kumar 	}, {
145952130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
146052130b60SViresh Kumar 		.mask = PMX_PL_40_MASK,
146152130b60SViresh Kumar 		.val = PMX_UART4_PL_40_VAL,
146252130b60SViresh Kumar 	}, {
146352130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
146452130b60SViresh Kumar 		.mask = PMX_UART4_PORT_SEL_MASK,
146552130b60SViresh Kumar 		.val = PMX_UART4_PORT_39_VAL,
146652130b60SViresh Kumar 	},
146752130b60SViresh Kumar };
146852130b60SViresh Kumar 
146952130b60SViresh Kumar static struct spear_muxreg uart4_ext_71_72_muxreg[] = {
147052130b60SViresh Kumar 	{
147152130b60SViresh Kumar 		.reg = IP_SEL_PAD_70_79_REG,
147252130b60SViresh Kumar 		.mask = PMX_PL_71_72_MASK,
147352130b60SViresh Kumar 		.val = PMX_UART4_PL_71_72_VAL,
147452130b60SViresh Kumar 	}, {
147552130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
147652130b60SViresh Kumar 		.mask = PMX_UART4_PORT_SEL_MASK,
147752130b60SViresh Kumar 		.val = PMX_UART4_PORT_71_VAL,
147852130b60SViresh Kumar 	},
147952130b60SViresh Kumar };
148052130b60SViresh Kumar 
148152130b60SViresh Kumar static struct spear_muxreg uart4_ext_92_93_muxreg[] = {
148252130b60SViresh Kumar 	{
148352130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
148452130b60SViresh Kumar 		.mask = PMX_PL_92_93_MASK,
148552130b60SViresh Kumar 		.val = PMX_UART4_PL_92_93_VAL,
148652130b60SViresh Kumar 	}, {
148752130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
148852130b60SViresh Kumar 		.mask = PMX_UART4_PORT_SEL_MASK,
148952130b60SViresh Kumar 		.val = PMX_UART4_PORT_92_VAL,
149052130b60SViresh Kumar 	},
149152130b60SViresh Kumar };
149252130b60SViresh Kumar 
149352130b60SViresh Kumar static struct spear_muxreg uart4_ext_100_101_muxreg[] = {
149452130b60SViresh Kumar 	{
149552130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
149652130b60SViresh Kumar 		.mask = PMX_PL_100_101_MASK |
149752130b60SViresh Kumar 			PMX_UART4_PORT_SEL_MASK,
149852130b60SViresh Kumar 		.val = PMX_UART4_PL_100_101_VAL |
149952130b60SViresh Kumar 			PMX_UART4_PORT_101_VAL,
150052130b60SViresh Kumar 	},
150152130b60SViresh Kumar };
150252130b60SViresh Kumar 
150352130b60SViresh Kumar static struct spear_modemux uart4_modemux[][1] = {
150452130b60SViresh Kumar 	{
150552130b60SViresh Kumar 		/* Select signals on pins 6_7 */
150652130b60SViresh Kumar 		{
150752130b60SViresh Kumar 			.modes = EXTENDED_MODE,
150852130b60SViresh Kumar 			.muxregs = uart4_ext_6_7_muxreg,
150952130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart4_ext_6_7_muxreg),
151052130b60SViresh Kumar 		},
151152130b60SViresh Kumar 	}, {
151252130b60SViresh Kumar 		/* Select signals on pins 13_14 */
151352130b60SViresh Kumar 		{
151452130b60SViresh Kumar 			.modes = EXTENDED_MODE,
151552130b60SViresh Kumar 			.muxregs = uart4_ext_13_14_muxreg,
151652130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart4_ext_13_14_muxreg),
151752130b60SViresh Kumar 		},
151852130b60SViresh Kumar 	}, {
151952130b60SViresh Kumar 		/* Select signals on pins 39_40 */
152052130b60SViresh Kumar 		{
152152130b60SViresh Kumar 			.modes = EXTENDED_MODE,
152252130b60SViresh Kumar 			.muxregs = uart4_ext_39_40_muxreg,
152352130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart4_ext_39_40_muxreg),
152452130b60SViresh Kumar 		},
152552130b60SViresh Kumar 	}, {
152652130b60SViresh Kumar 		/* Select signals on pins 71_72 */
152752130b60SViresh Kumar 		{
152852130b60SViresh Kumar 			.modes = EXTENDED_MODE,
152952130b60SViresh Kumar 			.muxregs = uart4_ext_71_72_muxreg,
153052130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart4_ext_71_72_muxreg),
153152130b60SViresh Kumar 		},
153252130b60SViresh Kumar 	}, {
153352130b60SViresh Kumar 		/* Select signals on pins 92_93 */
153452130b60SViresh Kumar 		{
153552130b60SViresh Kumar 			.modes = EXTENDED_MODE,
153652130b60SViresh Kumar 			.muxregs = uart4_ext_92_93_muxreg,
153752130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart4_ext_92_93_muxreg),
153852130b60SViresh Kumar 		},
153952130b60SViresh Kumar 	}, {
154052130b60SViresh Kumar 		/* Select signals on pins 100_101_ */
154152130b60SViresh Kumar 		{
154252130b60SViresh Kumar 			.modes = EXTENDED_MODE,
154352130b60SViresh Kumar 			.muxregs = uart4_ext_100_101_muxreg,
154452130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart4_ext_100_101_muxreg),
154552130b60SViresh Kumar 		},
154652130b60SViresh Kumar 	},
154752130b60SViresh Kumar };
154852130b60SViresh Kumar 
154952130b60SViresh Kumar static struct spear_pingroup uart4_pingroup[] = {
155052130b60SViresh Kumar 	{
155152130b60SViresh Kumar 		.name = "uart4_6_7_grp",
155252130b60SViresh Kumar 		.pins = uart4_pins[0],
155352130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart4_pins[0]),
155452130b60SViresh Kumar 		.modemuxs = uart4_modemux[0],
155552130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart4_modemux[0]),
155652130b60SViresh Kumar 	}, {
155752130b60SViresh Kumar 		.name = "uart4_13_14_grp",
155852130b60SViresh Kumar 		.pins = uart4_pins[1],
155952130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart4_pins[1]),
156052130b60SViresh Kumar 		.modemuxs = uart4_modemux[1],
156152130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart4_modemux[1]),
156252130b60SViresh Kumar 	}, {
156352130b60SViresh Kumar 		.name = "uart4_39_40_grp",
156452130b60SViresh Kumar 		.pins = uart4_pins[2],
156552130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart4_pins[2]),
156652130b60SViresh Kumar 		.modemuxs = uart4_modemux[2],
156752130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart4_modemux[2]),
156852130b60SViresh Kumar 	}, {
156952130b60SViresh Kumar 		.name = "uart4_71_72_grp",
157052130b60SViresh Kumar 		.pins = uart4_pins[3],
157152130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart4_pins[3]),
157252130b60SViresh Kumar 		.modemuxs = uart4_modemux[3],
157352130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart4_modemux[3]),
157452130b60SViresh Kumar 	}, {
157552130b60SViresh Kumar 		.name = "uart4_92_93_grp",
157652130b60SViresh Kumar 		.pins = uart4_pins[4],
157752130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart4_pins[4]),
157852130b60SViresh Kumar 		.modemuxs = uart4_modemux[4],
157952130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart4_modemux[4]),
158052130b60SViresh Kumar 	}, {
158152130b60SViresh Kumar 		.name = "uart4_100_101_grp",
158252130b60SViresh Kumar 		.pins = uart4_pins[5],
158352130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart4_pins[5]),
158452130b60SViresh Kumar 		.modemuxs = uart4_modemux[5],
158552130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart4_modemux[5]),
158652130b60SViresh Kumar 	},
158752130b60SViresh Kumar };
158852130b60SViresh Kumar 
158952130b60SViresh Kumar static const char *const uart4_grps[] = { "uart4_6_7_grp", "uart4_13_14_grp",
159052130b60SViresh Kumar 	"uart4_39_40_grp", "uart4_71_72_grp", "uart4_92_93_grp",
159152130b60SViresh Kumar 	"uart4_100_101_grp" };
159252130b60SViresh Kumar 
159352130b60SViresh Kumar static struct spear_function uart4_function = {
159452130b60SViresh Kumar 	.name = "uart4",
159552130b60SViresh Kumar 	.groups = uart4_grps,
159652130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(uart4_grps),
159752130b60SViresh Kumar };
159852130b60SViresh Kumar 
159952130b60SViresh Kumar /* Pad multiplexing for uart5 device */
160052130b60SViresh Kumar static const unsigned uart5_pins[][2] = { { 4, 5 }, { 37, 38 }, { 69, 70 },
160152130b60SViresh Kumar 	{ 90, 91 } };
160252130b60SViresh Kumar 
160352130b60SViresh Kumar static struct spear_muxreg uart5_ext_4_5_muxreg[] = {
160452130b60SViresh Kumar 	{
160552130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
160652130b60SViresh Kumar 		.mask = PMX_I2C_MASK,
160752130b60SViresh Kumar 		.val = 0,
160852130b60SViresh Kumar 	}, {
160952130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
161052130b60SViresh Kumar 		.mask = PMX_PL_4_5_MASK,
161152130b60SViresh Kumar 		.val = PMX_UART5_PL_4_5_VAL,
161252130b60SViresh Kumar 	}, {
161352130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
161452130b60SViresh Kumar 		.mask = PMX_UART5_PORT_SEL_MASK,
161552130b60SViresh Kumar 		.val = PMX_UART5_PORT_4_VAL,
161652130b60SViresh Kumar 	},
161752130b60SViresh Kumar };
161852130b60SViresh Kumar 
161952130b60SViresh Kumar static struct spear_muxreg uart5_ext_37_38_muxreg[] = {
162052130b60SViresh Kumar 	{
162152130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
162252130b60SViresh Kumar 		.mask = PMX_UART0_MODEM_MASK,
162352130b60SViresh Kumar 		.val = 0,
162452130b60SViresh Kumar 	}, {
162552130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
162652130b60SViresh Kumar 		.mask = PMX_PL_37_38_MASK,
162752130b60SViresh Kumar 		.val = PMX_UART5_PL_37_38_VAL,
162852130b60SViresh Kumar 	}, {
162952130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
163052130b60SViresh Kumar 		.mask = PMX_UART5_PORT_SEL_MASK,
163152130b60SViresh Kumar 		.val = PMX_UART5_PORT_37_VAL,
163252130b60SViresh Kumar 	},
163352130b60SViresh Kumar };
163452130b60SViresh Kumar 
163552130b60SViresh Kumar static struct spear_muxreg uart5_ext_69_70_muxreg[] = {
163652130b60SViresh Kumar 	{
163752130b60SViresh Kumar 		.reg = IP_SEL_PAD_60_69_REG,
163852130b60SViresh Kumar 		.mask = PMX_PL_69_MASK,
163952130b60SViresh Kumar 		.val = PMX_UART5_PL_69_VAL,
164052130b60SViresh Kumar 	}, {
164152130b60SViresh Kumar 		.reg = IP_SEL_PAD_70_79_REG,
164252130b60SViresh Kumar 		.mask = PMX_PL_70_MASK,
164352130b60SViresh Kumar 		.val = PMX_UART5_PL_70_VAL,
164452130b60SViresh Kumar 	}, {
164552130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
164652130b60SViresh Kumar 		.mask = PMX_UART5_PORT_SEL_MASK,
164752130b60SViresh Kumar 		.val = PMX_UART5_PORT_69_VAL,
164852130b60SViresh Kumar 	},
164952130b60SViresh Kumar };
165052130b60SViresh Kumar 
165152130b60SViresh Kumar static struct spear_muxreg uart5_ext_90_91_muxreg[] = {
165252130b60SViresh Kumar 	{
165352130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
165452130b60SViresh Kumar 		.mask = PMX_PL_90_91_MASK,
165552130b60SViresh Kumar 		.val = PMX_UART5_PL_90_91_VAL,
165652130b60SViresh Kumar 	}, {
165752130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
165852130b60SViresh Kumar 		.mask = PMX_UART5_PORT_SEL_MASK,
165952130b60SViresh Kumar 		.val = PMX_UART5_PORT_90_VAL,
166052130b60SViresh Kumar 	},
166152130b60SViresh Kumar };
166252130b60SViresh Kumar 
166352130b60SViresh Kumar static struct spear_modemux uart5_modemux[][1] = {
166452130b60SViresh Kumar 	{
166552130b60SViresh Kumar 		/* Select signals on pins 4_5 */
166652130b60SViresh Kumar 		{
166752130b60SViresh Kumar 			.modes = EXTENDED_MODE,
166852130b60SViresh Kumar 			.muxregs = uart5_ext_4_5_muxreg,
166952130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart5_ext_4_5_muxreg),
167052130b60SViresh Kumar 		},
167152130b60SViresh Kumar 	}, {
167252130b60SViresh Kumar 		/* Select signals on pins 37_38 */
167352130b60SViresh Kumar 		{
167452130b60SViresh Kumar 			.modes = EXTENDED_MODE,
167552130b60SViresh Kumar 			.muxregs = uart5_ext_37_38_muxreg,
167652130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart5_ext_37_38_muxreg),
167752130b60SViresh Kumar 		},
167852130b60SViresh Kumar 	}, {
167952130b60SViresh Kumar 		/* Select signals on pins 69_70 */
168052130b60SViresh Kumar 		{
168152130b60SViresh Kumar 			.modes = EXTENDED_MODE,
168252130b60SViresh Kumar 			.muxregs = uart5_ext_69_70_muxreg,
168352130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart5_ext_69_70_muxreg),
168452130b60SViresh Kumar 		},
168552130b60SViresh Kumar 	}, {
168652130b60SViresh Kumar 		/* Select signals on pins 90_91 */
168752130b60SViresh Kumar 		{
168852130b60SViresh Kumar 			.modes = EXTENDED_MODE,
168952130b60SViresh Kumar 			.muxregs = uart5_ext_90_91_muxreg,
169052130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart5_ext_90_91_muxreg),
169152130b60SViresh Kumar 		},
169252130b60SViresh Kumar 	},
169352130b60SViresh Kumar };
169452130b60SViresh Kumar 
169552130b60SViresh Kumar static struct spear_pingroup uart5_pingroup[] = {
169652130b60SViresh Kumar 	{
169752130b60SViresh Kumar 		.name = "uart5_4_5_grp",
169852130b60SViresh Kumar 		.pins = uart5_pins[0],
169952130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart5_pins[0]),
170052130b60SViresh Kumar 		.modemuxs = uart5_modemux[0],
170152130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart5_modemux[0]),
170252130b60SViresh Kumar 	}, {
170352130b60SViresh Kumar 		.name = "uart5_37_38_grp",
170452130b60SViresh Kumar 		.pins = uart5_pins[1],
170552130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart5_pins[1]),
170652130b60SViresh Kumar 		.modemuxs = uart5_modemux[1],
170752130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart5_modemux[1]),
170852130b60SViresh Kumar 	}, {
170952130b60SViresh Kumar 		.name = "uart5_69_70_grp",
171052130b60SViresh Kumar 		.pins = uart5_pins[2],
171152130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart5_pins[2]),
171252130b60SViresh Kumar 		.modemuxs = uart5_modemux[2],
171352130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart5_modemux[2]),
171452130b60SViresh Kumar 	}, {
171552130b60SViresh Kumar 		.name = "uart5_90_91_grp",
171652130b60SViresh Kumar 		.pins = uart5_pins[3],
171752130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart5_pins[3]),
171852130b60SViresh Kumar 		.modemuxs = uart5_modemux[3],
171952130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart5_modemux[3]),
172052130b60SViresh Kumar 	},
172152130b60SViresh Kumar };
172252130b60SViresh Kumar 
172352130b60SViresh Kumar static const char *const uart5_grps[] = { "uart5_4_5_grp", "uart5_37_38_grp",
172452130b60SViresh Kumar 	"uart5_69_70_grp", "uart5_90_91_grp" };
172552130b60SViresh Kumar static struct spear_function uart5_function = {
172652130b60SViresh Kumar 	.name = "uart5",
172752130b60SViresh Kumar 	.groups = uart5_grps,
172852130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(uart5_grps),
172952130b60SViresh Kumar };
173052130b60SViresh Kumar 
173152130b60SViresh Kumar /* Pad multiplexing for uart6 device */
173252130b60SViresh Kumar static const unsigned uart6_pins[][2] = { { 2, 3 }, { 88, 89 } };
173352130b60SViresh Kumar static struct spear_muxreg uart6_ext_2_3_muxreg[] = {
173452130b60SViresh Kumar 	{
173552130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
173652130b60SViresh Kumar 		.mask = PMX_UART0_MASK,
173752130b60SViresh Kumar 		.val = 0,
173852130b60SViresh Kumar 	}, {
173952130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
174052130b60SViresh Kumar 		.mask = PMX_PL_2_3_MASK,
174152130b60SViresh Kumar 		.val = PMX_UART6_PL_2_3_VAL,
174252130b60SViresh Kumar 	}, {
174352130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
174452130b60SViresh Kumar 		.mask = PMX_UART6_PORT_SEL_MASK,
174552130b60SViresh Kumar 		.val = PMX_UART6_PORT_2_VAL,
174652130b60SViresh Kumar 	},
174752130b60SViresh Kumar };
174852130b60SViresh Kumar 
174952130b60SViresh Kumar static struct spear_muxreg uart6_ext_88_89_muxreg[] = {
175052130b60SViresh Kumar 	{
175152130b60SViresh Kumar 		.reg = IP_SEL_PAD_80_89_REG,
175252130b60SViresh Kumar 		.mask = PMX_PL_88_89_MASK,
175352130b60SViresh Kumar 		.val = PMX_UART6_PL_88_89_VAL,
175452130b60SViresh Kumar 	}, {
175552130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
175652130b60SViresh Kumar 		.mask = PMX_UART6_PORT_SEL_MASK,
175752130b60SViresh Kumar 		.val = PMX_UART6_PORT_88_VAL,
175852130b60SViresh Kumar 	},
175952130b60SViresh Kumar };
176052130b60SViresh Kumar 
176152130b60SViresh Kumar static struct spear_modemux uart6_modemux[][1] = {
176252130b60SViresh Kumar 	{
176352130b60SViresh Kumar 		/* Select signals on pins 2_3 */
176452130b60SViresh Kumar 		{
176552130b60SViresh Kumar 			.modes = EXTENDED_MODE,
176652130b60SViresh Kumar 			.muxregs = uart6_ext_2_3_muxreg,
176752130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart6_ext_2_3_muxreg),
176852130b60SViresh Kumar 		},
176952130b60SViresh Kumar 	}, {
177052130b60SViresh Kumar 		/* Select signals on pins 88_89 */
177152130b60SViresh Kumar 		{
177252130b60SViresh Kumar 			.modes = EXTENDED_MODE,
177352130b60SViresh Kumar 			.muxregs = uart6_ext_88_89_muxreg,
177452130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(uart6_ext_88_89_muxreg),
177552130b60SViresh Kumar 		},
177652130b60SViresh Kumar 	},
177752130b60SViresh Kumar };
177852130b60SViresh Kumar 
177952130b60SViresh Kumar static struct spear_pingroup uart6_pingroup[] = {
178052130b60SViresh Kumar 	{
178152130b60SViresh Kumar 		.name = "uart6_2_3_grp",
178252130b60SViresh Kumar 		.pins = uart6_pins[0],
178352130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart6_pins[0]),
178452130b60SViresh Kumar 		.modemuxs = uart6_modemux[0],
178552130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart6_modemux[0]),
178652130b60SViresh Kumar 	}, {
178752130b60SViresh Kumar 		.name = "uart6_88_89_grp",
178852130b60SViresh Kumar 		.pins = uart6_pins[1],
178952130b60SViresh Kumar 		.npins = ARRAY_SIZE(uart6_pins[1]),
179052130b60SViresh Kumar 		.modemuxs = uart6_modemux[1],
179152130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(uart6_modemux[1]),
179252130b60SViresh Kumar 	},
179352130b60SViresh Kumar };
179452130b60SViresh Kumar 
179552130b60SViresh Kumar static const char *const uart6_grps[] = { "uart6_2_3_grp", "uart6_88_89_grp" };
179652130b60SViresh Kumar static struct spear_function uart6_function = {
179752130b60SViresh Kumar 	.name = "uart6",
179852130b60SViresh Kumar 	.groups = uart6_grps,
179952130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(uart6_grps),
180052130b60SViresh Kumar };
180152130b60SViresh Kumar 
180252130b60SViresh Kumar /* UART - RS485 pmx */
180352130b60SViresh Kumar static const unsigned rs485_pins[] = { 77, 78, 79 };
180452130b60SViresh Kumar static struct spear_muxreg rs485_muxreg[] = {
180552130b60SViresh Kumar 	{
180652130b60SViresh Kumar 		.reg = IP_SEL_PAD_70_79_REG,
180752130b60SViresh Kumar 		.mask = PMX_PL_77_78_79_MASK,
180852130b60SViresh Kumar 		.val = PMX_RS485_PL_77_78_79_VAL,
180952130b60SViresh Kumar 	},
181052130b60SViresh Kumar };
181152130b60SViresh Kumar 
181252130b60SViresh Kumar static struct spear_modemux rs485_modemux[] = {
181352130b60SViresh Kumar 	{
181452130b60SViresh Kumar 		.modes = EXTENDED_MODE,
181552130b60SViresh Kumar 		.muxregs = rs485_muxreg,
181652130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(rs485_muxreg),
181752130b60SViresh Kumar 	},
181852130b60SViresh Kumar };
181952130b60SViresh Kumar 
182052130b60SViresh Kumar static struct spear_pingroup rs485_pingroup = {
182152130b60SViresh Kumar 	.name = "rs485_grp",
182252130b60SViresh Kumar 	.pins = rs485_pins,
182352130b60SViresh Kumar 	.npins = ARRAY_SIZE(rs485_pins),
182452130b60SViresh Kumar 	.modemuxs = rs485_modemux,
182552130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(rs485_modemux),
182652130b60SViresh Kumar };
182752130b60SViresh Kumar 
182852130b60SViresh Kumar static const char *const rs485_grps[] = { "rs485_grp" };
182952130b60SViresh Kumar static struct spear_function rs485_function = {
183052130b60SViresh Kumar 	.name = "rs485",
183152130b60SViresh Kumar 	.groups = rs485_grps,
183252130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(rs485_grps),
183352130b60SViresh Kumar };
183452130b60SViresh Kumar 
183552130b60SViresh Kumar /* Pad multiplexing for Touchscreen device */
183652130b60SViresh Kumar static const unsigned touchscreen_pins[] = { 5, 36 };
183752130b60SViresh Kumar static struct spear_muxreg touchscreen_muxreg[] = {
183852130b60SViresh Kumar 	{
183952130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
184052130b60SViresh Kumar 		.mask = PMX_I2C_MASK | PMX_SSP_CS_MASK,
184152130b60SViresh Kumar 		.val = 0,
184252130b60SViresh Kumar 	},
184352130b60SViresh Kumar };
184452130b60SViresh Kumar 
184552130b60SViresh Kumar static struct spear_muxreg touchscreen_ext_muxreg[] = {
184652130b60SViresh Kumar 	{
184752130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
184852130b60SViresh Kumar 		.mask = PMX_PL_5_MASK,
184952130b60SViresh Kumar 		.val = PMX_TOUCH_Y_PL_5_VAL,
185052130b60SViresh Kumar 	}, {
185152130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
185252130b60SViresh Kumar 		.mask = PMX_PL_36_MASK,
185352130b60SViresh Kumar 		.val = PMX_TOUCH_X_PL_36_VAL,
185452130b60SViresh Kumar 	},
185552130b60SViresh Kumar };
185652130b60SViresh Kumar 
185752130b60SViresh Kumar static struct spear_modemux touchscreen_modemux[] = {
185852130b60SViresh Kumar 	{
185952130b60SViresh Kumar 		.modes = AUTO_NET_SMII_MODE | EXTENDED_MODE,
186052130b60SViresh Kumar 		.muxregs = touchscreen_muxreg,
186152130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(touchscreen_muxreg),
186252130b60SViresh Kumar 	}, {
186352130b60SViresh Kumar 		.modes = EXTENDED_MODE,
186452130b60SViresh Kumar 		.muxregs = touchscreen_ext_muxreg,
186552130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(touchscreen_ext_muxreg),
186652130b60SViresh Kumar 	},
186752130b60SViresh Kumar };
186852130b60SViresh Kumar 
186952130b60SViresh Kumar static struct spear_pingroup touchscreen_pingroup = {
187052130b60SViresh Kumar 	.name = "touchscreen_grp",
187152130b60SViresh Kumar 	.pins = touchscreen_pins,
187252130b60SViresh Kumar 	.npins = ARRAY_SIZE(touchscreen_pins),
187352130b60SViresh Kumar 	.modemuxs = touchscreen_modemux,
187452130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(touchscreen_modemux),
187552130b60SViresh Kumar };
187652130b60SViresh Kumar 
187752130b60SViresh Kumar static const char *const touchscreen_grps[] = { "touchscreen_grp" };
187852130b60SViresh Kumar static struct spear_function touchscreen_function = {
187952130b60SViresh Kumar 	.name = "touchscreen",
188052130b60SViresh Kumar 	.groups = touchscreen_grps,
188152130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(touchscreen_grps),
188252130b60SViresh Kumar };
188352130b60SViresh Kumar 
188452130b60SViresh Kumar /* Pad multiplexing for CAN device */
188552130b60SViresh Kumar static const unsigned can0_pins[] = { 32, 33 };
188652130b60SViresh Kumar static struct spear_muxreg can0_muxreg[] = {
188752130b60SViresh Kumar 	{
188852130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
188952130b60SViresh Kumar 		.mask = PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK,
189052130b60SViresh Kumar 		.val = 0,
189152130b60SViresh Kumar 	},
189252130b60SViresh Kumar };
189352130b60SViresh Kumar 
189452130b60SViresh Kumar static struct spear_muxreg can0_ext_muxreg[] = {
189552130b60SViresh Kumar 	{
189652130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
189752130b60SViresh Kumar 		.mask = PMX_PL_32_33_MASK,
189852130b60SViresh Kumar 		.val = PMX_CAN0_PL_32_33_VAL,
189952130b60SViresh Kumar 	},
190052130b60SViresh Kumar };
190152130b60SViresh Kumar 
190252130b60SViresh Kumar static struct spear_modemux can0_modemux[] = {
190352130b60SViresh Kumar 	{
190452130b60SViresh Kumar 		.modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
190552130b60SViresh Kumar 			| EXTENDED_MODE,
190652130b60SViresh Kumar 		.muxregs = can0_muxreg,
190752130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(can0_muxreg),
190852130b60SViresh Kumar 	}, {
190952130b60SViresh Kumar 		.modes = EXTENDED_MODE,
191052130b60SViresh Kumar 		.muxregs = can0_ext_muxreg,
191152130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(can0_ext_muxreg),
191252130b60SViresh Kumar 	},
191352130b60SViresh Kumar };
191452130b60SViresh Kumar 
191552130b60SViresh Kumar static struct spear_pingroup can0_pingroup = {
191652130b60SViresh Kumar 	.name = "can0_grp",
191752130b60SViresh Kumar 	.pins = can0_pins,
191852130b60SViresh Kumar 	.npins = ARRAY_SIZE(can0_pins),
191952130b60SViresh Kumar 	.modemuxs = can0_modemux,
192052130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(can0_modemux),
192152130b60SViresh Kumar };
192252130b60SViresh Kumar 
192352130b60SViresh Kumar static const char *const can0_grps[] = { "can0_grp" };
192452130b60SViresh Kumar static struct spear_function can0_function = {
192552130b60SViresh Kumar 	.name = "can0",
192652130b60SViresh Kumar 	.groups = can0_grps,
192752130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(can0_grps),
192852130b60SViresh Kumar };
192952130b60SViresh Kumar 
193052130b60SViresh Kumar static const unsigned can1_pins[] = { 30, 31 };
193152130b60SViresh Kumar static struct spear_muxreg can1_muxreg[] = {
193252130b60SViresh Kumar 	{
193352130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
193452130b60SViresh Kumar 		.mask = PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK,
193552130b60SViresh Kumar 		.val = 0,
193652130b60SViresh Kumar 	},
193752130b60SViresh Kumar };
193852130b60SViresh Kumar 
193952130b60SViresh Kumar static struct spear_muxreg can1_ext_muxreg[] = {
194052130b60SViresh Kumar 	{
194152130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
194252130b60SViresh Kumar 		.mask = PMX_PL_30_31_MASK,
194352130b60SViresh Kumar 		.val = PMX_CAN1_PL_30_31_VAL,
194452130b60SViresh Kumar 	},
194552130b60SViresh Kumar };
194652130b60SViresh Kumar 
194752130b60SViresh Kumar static struct spear_modemux can1_modemux[] = {
194852130b60SViresh Kumar 	{
194952130b60SViresh Kumar 		.modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
195052130b60SViresh Kumar 			| EXTENDED_MODE,
195152130b60SViresh Kumar 		.muxregs = can1_muxreg,
195252130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(can1_muxreg),
195352130b60SViresh Kumar 	}, {
195452130b60SViresh Kumar 		.modes = EXTENDED_MODE,
195552130b60SViresh Kumar 		.muxregs = can1_ext_muxreg,
195652130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(can1_ext_muxreg),
195752130b60SViresh Kumar 	},
195852130b60SViresh Kumar };
195952130b60SViresh Kumar 
196052130b60SViresh Kumar static struct spear_pingroup can1_pingroup = {
196152130b60SViresh Kumar 	.name = "can1_grp",
196252130b60SViresh Kumar 	.pins = can1_pins,
196352130b60SViresh Kumar 	.npins = ARRAY_SIZE(can1_pins),
196452130b60SViresh Kumar 	.modemuxs = can1_modemux,
196552130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(can1_modemux),
196652130b60SViresh Kumar };
196752130b60SViresh Kumar 
196852130b60SViresh Kumar static const char *const can1_grps[] = { "can1_grp" };
196952130b60SViresh Kumar static struct spear_function can1_function = {
197052130b60SViresh Kumar 	.name = "can1",
197152130b60SViresh Kumar 	.groups = can1_grps,
197252130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(can1_grps),
197352130b60SViresh Kumar };
197452130b60SViresh Kumar 
197552130b60SViresh Kumar /* Pad multiplexing for PWM0_1 device */
197652130b60SViresh Kumar static const unsigned pwm0_1_pins[][2] = { { 37, 38 }, { 14, 15 }, { 8, 9 },
197752130b60SViresh Kumar 	{ 30, 31 }, { 42, 43 }, { 59, 60 }, { 88, 89 } };
197852130b60SViresh Kumar 
197952130b60SViresh Kumar static struct spear_muxreg pwm0_1_pin_8_9_muxreg[] = {
198052130b60SViresh Kumar 	{
198152130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
198252130b60SViresh Kumar 		.mask = PMX_SSP_MASK,
198352130b60SViresh Kumar 		.val = 0,
198452130b60SViresh Kumar 	}, {
198552130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
198652130b60SViresh Kumar 		.mask = PMX_PL_8_9_MASK,
198752130b60SViresh Kumar 		.val = PMX_PWM_0_1_PL_8_9_VAL,
198852130b60SViresh Kumar 	},
198952130b60SViresh Kumar };
199052130b60SViresh Kumar 
199152130b60SViresh Kumar static struct spear_muxreg pwm0_1_autoexpsmallpri_muxreg[] = {
199252130b60SViresh Kumar 	{
199352130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
199452130b60SViresh Kumar 		.mask = PMX_MII_MASK,
199552130b60SViresh Kumar 		.val = 0,
199652130b60SViresh Kumar 	},
199752130b60SViresh Kumar };
199852130b60SViresh Kumar 
199952130b60SViresh Kumar static struct spear_muxreg pwm0_1_pin_14_15_muxreg[] = {
200052130b60SViresh Kumar 	{
200152130b60SViresh Kumar 		.reg = IP_SEL_PAD_10_19_REG,
200252130b60SViresh Kumar 		.mask = PMX_PL_14_MASK | PMX_PL_15_MASK,
200352130b60SViresh Kumar 		.val = PMX_PWM1_PL_14_VAL | PMX_PWM0_PL_15_VAL,
200452130b60SViresh Kumar 	},
200552130b60SViresh Kumar };
200652130b60SViresh Kumar 
200752130b60SViresh Kumar static struct spear_muxreg pwm0_1_pin_30_31_muxreg[] = {
200852130b60SViresh Kumar 	{
200952130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
201052130b60SViresh Kumar 		.mask = PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK,
201152130b60SViresh Kumar 		.val = 0,
201252130b60SViresh Kumar 	}, {
201352130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
201452130b60SViresh Kumar 		.mask = PMX_PL_30_MASK | PMX_PL_31_MASK,
201552130b60SViresh Kumar 		.val = PMX_PWM1_EXT_PL_30_VAL | PMX_PWM0_EXT_PL_31_VAL,
201652130b60SViresh Kumar 	},
201752130b60SViresh Kumar };
201852130b60SViresh Kumar 
201952130b60SViresh Kumar static struct spear_muxreg pwm0_1_net_muxreg[] = {
202052130b60SViresh Kumar 	{
202152130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
202252130b60SViresh Kumar 		.mask = PMX_UART0_MODEM_MASK,
202352130b60SViresh Kumar 		.val = 0,
202452130b60SViresh Kumar 	},
202552130b60SViresh Kumar };
202652130b60SViresh Kumar 
202752130b60SViresh Kumar static struct spear_muxreg pwm0_1_pin_37_38_muxreg[] = {
202852130b60SViresh Kumar 	{
202952130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
203052130b60SViresh Kumar 		.mask = PMX_PL_37_38_MASK,
203152130b60SViresh Kumar 		.val = PMX_PWM0_1_PL_37_38_VAL,
203252130b60SViresh Kumar 	},
203352130b60SViresh Kumar };
203452130b60SViresh Kumar 
203552130b60SViresh Kumar static struct spear_muxreg pwm0_1_pin_42_43_muxreg[] = {
203652130b60SViresh Kumar 	{
203752130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
203852130b60SViresh Kumar 		.mask = PMX_UART0_MODEM_MASK | PMX_TIMER_0_1_MASK ,
203952130b60SViresh Kumar 		.val = 0,
204052130b60SViresh Kumar 	}, {
204152130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
204252130b60SViresh Kumar 		.mask = PMX_PL_42_MASK | PMX_PL_43_MASK,
204352130b60SViresh Kumar 		.val = PMX_PWM1_PL_42_VAL |
204452130b60SViresh Kumar 			PMX_PWM0_PL_43_VAL,
204552130b60SViresh Kumar 	},
204652130b60SViresh Kumar };
204752130b60SViresh Kumar 
204852130b60SViresh Kumar static struct spear_muxreg pwm0_1_pin_59_60_muxreg[] = {
204952130b60SViresh Kumar 	{
205052130b60SViresh Kumar 		.reg = IP_SEL_PAD_50_59_REG,
205152130b60SViresh Kumar 		.mask = PMX_PL_59_MASK,
205252130b60SViresh Kumar 		.val = PMX_PWM1_PL_59_VAL,
205352130b60SViresh Kumar 	}, {
205452130b60SViresh Kumar 		.reg = IP_SEL_PAD_60_69_REG,
205552130b60SViresh Kumar 		.mask = PMX_PL_60_MASK,
205652130b60SViresh Kumar 		.val = PMX_PWM0_PL_60_VAL,
205752130b60SViresh Kumar 	},
205852130b60SViresh Kumar };
205952130b60SViresh Kumar 
206052130b60SViresh Kumar static struct spear_muxreg pwm0_1_pin_88_89_muxreg[] = {
206152130b60SViresh Kumar 	{
206252130b60SViresh Kumar 		.reg = IP_SEL_PAD_80_89_REG,
206352130b60SViresh Kumar 		.mask = PMX_PL_88_89_MASK,
206452130b60SViresh Kumar 		.val = PMX_PWM0_1_PL_88_89_VAL,
206552130b60SViresh Kumar 	},
206652130b60SViresh Kumar };
206752130b60SViresh Kumar 
206852130b60SViresh Kumar static struct spear_modemux pwm0_1_pin_8_9_modemux[] = {
206952130b60SViresh Kumar 	{
207052130b60SViresh Kumar 		.modes = EXTENDED_MODE,
207152130b60SViresh Kumar 		.muxregs = pwm0_1_pin_8_9_muxreg,
207252130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm0_1_pin_8_9_muxreg),
207352130b60SViresh Kumar 	},
207452130b60SViresh Kumar };
207552130b60SViresh Kumar 
207652130b60SViresh Kumar static struct spear_modemux pwm0_1_pin_14_15_modemux[] = {
207752130b60SViresh Kumar 	{
207852130b60SViresh Kumar 		.modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE | EXTENDED_MODE,
207952130b60SViresh Kumar 		.muxregs = pwm0_1_autoexpsmallpri_muxreg,
208052130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm0_1_autoexpsmallpri_muxreg),
208152130b60SViresh Kumar 	}, {
208252130b60SViresh Kumar 		.modes = EXTENDED_MODE,
208352130b60SViresh Kumar 		.muxregs = pwm0_1_pin_14_15_muxreg,
208452130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm0_1_pin_14_15_muxreg),
208552130b60SViresh Kumar 	},
208652130b60SViresh Kumar };
208752130b60SViresh Kumar 
208852130b60SViresh Kumar static struct spear_modemux pwm0_1_pin_30_31_modemux[] = {
208952130b60SViresh Kumar 	{
209052130b60SViresh Kumar 		.modes = EXTENDED_MODE,
209152130b60SViresh Kumar 		.muxregs = pwm0_1_pin_30_31_muxreg,
209252130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm0_1_pin_30_31_muxreg),
209352130b60SViresh Kumar 	},
209452130b60SViresh Kumar };
209552130b60SViresh Kumar 
209652130b60SViresh Kumar static struct spear_modemux pwm0_1_pin_37_38_modemux[] = {
209752130b60SViresh Kumar 	{
209852130b60SViresh Kumar 		.modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
209952130b60SViresh Kumar 		.muxregs = pwm0_1_net_muxreg,
210052130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm0_1_net_muxreg),
210152130b60SViresh Kumar 	}, {
210252130b60SViresh Kumar 		.modes = EXTENDED_MODE,
210352130b60SViresh Kumar 		.muxregs = pwm0_1_pin_37_38_muxreg,
210452130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm0_1_pin_37_38_muxreg),
210552130b60SViresh Kumar 	},
210652130b60SViresh Kumar };
210752130b60SViresh Kumar 
210852130b60SViresh Kumar static struct spear_modemux pwm0_1_pin_42_43_modemux[] = {
210952130b60SViresh Kumar 	{
211052130b60SViresh Kumar 		.modes = EXTENDED_MODE,
211152130b60SViresh Kumar 		.muxregs = pwm0_1_pin_42_43_muxreg,
211252130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm0_1_pin_42_43_muxreg),
211352130b60SViresh Kumar 	},
211452130b60SViresh Kumar };
211552130b60SViresh Kumar 
211652130b60SViresh Kumar static struct spear_modemux pwm0_1_pin_59_60_modemux[] = {
211752130b60SViresh Kumar 	{
211852130b60SViresh Kumar 		.modes = EXTENDED_MODE,
211952130b60SViresh Kumar 		.muxregs = pwm0_1_pin_59_60_muxreg,
212052130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm0_1_pin_59_60_muxreg),
212152130b60SViresh Kumar 	},
212252130b60SViresh Kumar };
212352130b60SViresh Kumar 
212452130b60SViresh Kumar static struct spear_modemux pwm0_1_pin_88_89_modemux[] = {
212552130b60SViresh Kumar 	{
212652130b60SViresh Kumar 		.modes = EXTENDED_MODE,
212752130b60SViresh Kumar 		.muxregs = pwm0_1_pin_88_89_muxreg,
212852130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm0_1_pin_88_89_muxreg),
212952130b60SViresh Kumar 	},
213052130b60SViresh Kumar };
213152130b60SViresh Kumar 
213252130b60SViresh Kumar static struct spear_pingroup pwm0_1_pingroup[] = {
213352130b60SViresh Kumar 	{
213452130b60SViresh Kumar 		.name = "pwm0_1_pin_8_9_grp",
213552130b60SViresh Kumar 		.pins = pwm0_1_pins[0],
213652130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm0_1_pins[0]),
213752130b60SViresh Kumar 		.modemuxs = pwm0_1_pin_8_9_modemux,
213852130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm0_1_pin_8_9_modemux),
213952130b60SViresh Kumar 	}, {
214052130b60SViresh Kumar 		.name = "pwm0_1_pin_14_15_grp",
214152130b60SViresh Kumar 		.pins = pwm0_1_pins[1],
214252130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm0_1_pins[1]),
214352130b60SViresh Kumar 		.modemuxs = pwm0_1_pin_14_15_modemux,
214452130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm0_1_pin_14_15_modemux),
214552130b60SViresh Kumar 	}, {
214652130b60SViresh Kumar 		.name = "pwm0_1_pin_30_31_grp",
214752130b60SViresh Kumar 		.pins = pwm0_1_pins[2],
214852130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm0_1_pins[2]),
214952130b60SViresh Kumar 		.modemuxs = pwm0_1_pin_30_31_modemux,
215052130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm0_1_pin_30_31_modemux),
215152130b60SViresh Kumar 	}, {
215252130b60SViresh Kumar 		.name = "pwm0_1_pin_37_38_grp",
215352130b60SViresh Kumar 		.pins = pwm0_1_pins[3],
215452130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm0_1_pins[3]),
215552130b60SViresh Kumar 		.modemuxs = pwm0_1_pin_37_38_modemux,
215652130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm0_1_pin_37_38_modemux),
215752130b60SViresh Kumar 	}, {
215852130b60SViresh Kumar 		.name = "pwm0_1_pin_42_43_grp",
215952130b60SViresh Kumar 		.pins = pwm0_1_pins[4],
216052130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm0_1_pins[4]),
216152130b60SViresh Kumar 		.modemuxs = pwm0_1_pin_42_43_modemux,
216252130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm0_1_pin_42_43_modemux),
216352130b60SViresh Kumar 	}, {
216452130b60SViresh Kumar 		.name = "pwm0_1_pin_59_60_grp",
216552130b60SViresh Kumar 		.pins = pwm0_1_pins[5],
216652130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm0_1_pins[5]),
216752130b60SViresh Kumar 		.modemuxs = pwm0_1_pin_59_60_modemux,
216852130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm0_1_pin_59_60_modemux),
216952130b60SViresh Kumar 	}, {
217052130b60SViresh Kumar 		.name = "pwm0_1_pin_88_89_grp",
217152130b60SViresh Kumar 		.pins = pwm0_1_pins[6],
217252130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm0_1_pins[6]),
217352130b60SViresh Kumar 		.modemuxs = pwm0_1_pin_88_89_modemux,
217452130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm0_1_pin_88_89_modemux),
217552130b60SViresh Kumar 	},
217652130b60SViresh Kumar };
217752130b60SViresh Kumar 
217852130b60SViresh Kumar static const char *const pwm0_1_grps[] = { "pwm0_1_pin_8_9_grp",
217952130b60SViresh Kumar 	"pwm0_1_pin_14_15_grp", "pwm0_1_pin_30_31_grp", "pwm0_1_pin_37_38_grp",
218052130b60SViresh Kumar 	"pwm0_1_pin_42_43_grp", "pwm0_1_pin_59_60_grp", "pwm0_1_pin_88_89_grp"
218152130b60SViresh Kumar };
218252130b60SViresh Kumar 
218352130b60SViresh Kumar static struct spear_function pwm0_1_function = {
218452130b60SViresh Kumar 	.name = "pwm0_1",
218552130b60SViresh Kumar 	.groups = pwm0_1_grps,
218652130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(pwm0_1_grps),
218752130b60SViresh Kumar };
218852130b60SViresh Kumar 
218952130b60SViresh Kumar /* Pad multiplexing for PWM2 device */
219052130b60SViresh Kumar static const unsigned pwm2_pins[][1] = { { 7 }, { 13 }, { 29 }, { 34 }, { 41 },
219152130b60SViresh Kumar 	{ 58 }, { 87 } };
219252130b60SViresh Kumar static struct spear_muxreg pwm2_net_muxreg[] = {
219352130b60SViresh Kumar 	{
219452130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
219552130b60SViresh Kumar 		.mask = PMX_SSP_CS_MASK,
219652130b60SViresh Kumar 		.val = 0,
219752130b60SViresh Kumar 	},
219852130b60SViresh Kumar };
219952130b60SViresh Kumar 
220052130b60SViresh Kumar static struct spear_muxreg pwm2_pin_7_muxreg[] = {
220152130b60SViresh Kumar 	{
220252130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
220352130b60SViresh Kumar 		.mask = PMX_PL_7_MASK,
220452130b60SViresh Kumar 		.val = PMX_PWM_2_PL_7_VAL,
220552130b60SViresh Kumar 	},
220652130b60SViresh Kumar };
220752130b60SViresh Kumar 
220852130b60SViresh Kumar static struct spear_muxreg pwm2_autoexpsmallpri_muxreg[] = {
220952130b60SViresh Kumar 	{
221052130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
221152130b60SViresh Kumar 		.mask = PMX_MII_MASK,
221252130b60SViresh Kumar 		.val = 0,
221352130b60SViresh Kumar 	},
221452130b60SViresh Kumar };
221552130b60SViresh Kumar 
221652130b60SViresh Kumar static struct spear_muxreg pwm2_pin_13_muxreg[] = {
221752130b60SViresh Kumar 	{
221852130b60SViresh Kumar 		.reg = IP_SEL_PAD_10_19_REG,
221952130b60SViresh Kumar 		.mask = PMX_PL_13_MASK,
222052130b60SViresh Kumar 		.val = PMX_PWM2_PL_13_VAL,
222152130b60SViresh Kumar 	},
222252130b60SViresh Kumar };
222352130b60SViresh Kumar 
222452130b60SViresh Kumar static struct spear_muxreg pwm2_pin_29_muxreg[] = {
222552130b60SViresh Kumar 	{
222652130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
222752130b60SViresh Kumar 		.mask = PMX_GPIO_PIN1_MASK,
222852130b60SViresh Kumar 		.val = 0,
222952130b60SViresh Kumar 	}, {
223052130b60SViresh Kumar 		.reg = IP_SEL_PAD_20_29_REG,
223152130b60SViresh Kumar 		.mask = PMX_PL_29_MASK,
223252130b60SViresh Kumar 		.val = PMX_PWM_2_PL_29_VAL,
223352130b60SViresh Kumar 	},
223452130b60SViresh Kumar };
223552130b60SViresh Kumar 
223652130b60SViresh Kumar static struct spear_muxreg pwm2_pin_34_muxreg[] = {
223752130b60SViresh Kumar 	{
223852130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
223952130b60SViresh Kumar 		.mask = PMX_SSP_CS_MASK,
224052130b60SViresh Kumar 		.val = 0,
224152130b60SViresh Kumar 	}, {
2242a7780055SShiraz Hashim 		.reg = MODE_CONFIG_REG,
2243a7780055SShiraz Hashim 		.mask = PMX_PWM_MASK,
2244a7780055SShiraz Hashim 		.val = PMX_PWM_MASK,
2245a7780055SShiraz Hashim 	}, {
224652130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
224752130b60SViresh Kumar 		.mask = PMX_PL_34_MASK,
224852130b60SViresh Kumar 		.val = PMX_PWM2_PL_34_VAL,
224952130b60SViresh Kumar 	},
225052130b60SViresh Kumar };
225152130b60SViresh Kumar 
225252130b60SViresh Kumar static struct spear_muxreg pwm2_pin_41_muxreg[] = {
225352130b60SViresh Kumar 	{
225452130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
225552130b60SViresh Kumar 		.mask = PMX_UART0_MODEM_MASK,
225652130b60SViresh Kumar 		.val = 0,
225752130b60SViresh Kumar 	}, {
225852130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
225952130b60SViresh Kumar 		.mask = PMX_PL_41_MASK,
226052130b60SViresh Kumar 		.val = PMX_PWM2_PL_41_VAL,
226152130b60SViresh Kumar 	},
226252130b60SViresh Kumar };
226352130b60SViresh Kumar 
226452130b60SViresh Kumar static struct spear_muxreg pwm2_pin_58_muxreg[] = {
226552130b60SViresh Kumar 	{
226652130b60SViresh Kumar 		.reg = IP_SEL_PAD_50_59_REG,
226752130b60SViresh Kumar 		.mask = PMX_PL_58_MASK,
226852130b60SViresh Kumar 		.val = PMX_PWM2_PL_58_VAL,
226952130b60SViresh Kumar 	},
227052130b60SViresh Kumar };
227152130b60SViresh Kumar 
227252130b60SViresh Kumar static struct spear_muxreg pwm2_pin_87_muxreg[] = {
227352130b60SViresh Kumar 	{
227452130b60SViresh Kumar 		.reg = IP_SEL_PAD_80_89_REG,
227552130b60SViresh Kumar 		.mask = PMX_PL_87_MASK,
227652130b60SViresh Kumar 		.val = PMX_PWM2_PL_87_VAL,
227752130b60SViresh Kumar 	},
227852130b60SViresh Kumar };
227952130b60SViresh Kumar 
228052130b60SViresh Kumar static struct spear_modemux pwm2_pin_7_modemux[] = {
228152130b60SViresh Kumar 	{
228252130b60SViresh Kumar 		.modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
228352130b60SViresh Kumar 		.muxregs = pwm2_net_muxreg,
228452130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm2_net_muxreg),
228552130b60SViresh Kumar 	}, {
228652130b60SViresh Kumar 		.modes = EXTENDED_MODE,
228752130b60SViresh Kumar 		.muxregs = pwm2_pin_7_muxreg,
228852130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm2_pin_7_muxreg),
228952130b60SViresh Kumar 	},
229052130b60SViresh Kumar };
229152130b60SViresh Kumar static struct spear_modemux pwm2_pin_13_modemux[] = {
229252130b60SViresh Kumar 	{
229352130b60SViresh Kumar 		.modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE | EXTENDED_MODE,
229452130b60SViresh Kumar 		.muxregs = pwm2_autoexpsmallpri_muxreg,
229552130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm2_autoexpsmallpri_muxreg),
229652130b60SViresh Kumar 	}, {
229752130b60SViresh Kumar 		.modes = EXTENDED_MODE,
229852130b60SViresh Kumar 		.muxregs = pwm2_pin_13_muxreg,
229952130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm2_pin_13_muxreg),
230052130b60SViresh Kumar 	},
230152130b60SViresh Kumar };
230252130b60SViresh Kumar static struct spear_modemux pwm2_pin_29_modemux[] = {
230352130b60SViresh Kumar 	{
230452130b60SViresh Kumar 		.modes = EXTENDED_MODE,
230552130b60SViresh Kumar 		.muxregs = pwm2_pin_29_muxreg,
230652130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm2_pin_29_muxreg),
230752130b60SViresh Kumar 	},
230852130b60SViresh Kumar };
230952130b60SViresh Kumar static struct spear_modemux pwm2_pin_34_modemux[] = {
231052130b60SViresh Kumar 	{
231152130b60SViresh Kumar 		.modes = EXTENDED_MODE,
231252130b60SViresh Kumar 		.muxregs = pwm2_pin_34_muxreg,
231352130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm2_pin_34_muxreg),
231452130b60SViresh Kumar 	},
231552130b60SViresh Kumar };
231652130b60SViresh Kumar 
231752130b60SViresh Kumar static struct spear_modemux pwm2_pin_41_modemux[] = {
231852130b60SViresh Kumar 	{
231952130b60SViresh Kumar 		.modes = EXTENDED_MODE,
232052130b60SViresh Kumar 		.muxregs = pwm2_pin_41_muxreg,
232152130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm2_pin_41_muxreg),
232252130b60SViresh Kumar 	},
232352130b60SViresh Kumar };
232452130b60SViresh Kumar 
232552130b60SViresh Kumar static struct spear_modemux pwm2_pin_58_modemux[] = {
232652130b60SViresh Kumar 	{
232752130b60SViresh Kumar 		.modes = EXTENDED_MODE,
232852130b60SViresh Kumar 		.muxregs = pwm2_pin_58_muxreg,
232952130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm2_pin_58_muxreg),
233052130b60SViresh Kumar 	},
233152130b60SViresh Kumar };
233252130b60SViresh Kumar 
233352130b60SViresh Kumar static struct spear_modemux pwm2_pin_87_modemux[] = {
233452130b60SViresh Kumar 	{
233552130b60SViresh Kumar 		.modes = EXTENDED_MODE,
233652130b60SViresh Kumar 		.muxregs = pwm2_pin_87_muxreg,
233752130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm2_pin_87_muxreg),
233852130b60SViresh Kumar 	},
233952130b60SViresh Kumar };
234052130b60SViresh Kumar 
234152130b60SViresh Kumar static struct spear_pingroup pwm2_pingroup[] = {
234252130b60SViresh Kumar 	{
234352130b60SViresh Kumar 		.name = "pwm2_pin_7_grp",
234452130b60SViresh Kumar 		.pins = pwm2_pins[0],
234552130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm2_pins[0]),
234652130b60SViresh Kumar 		.modemuxs = pwm2_pin_7_modemux,
234752130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm2_pin_7_modemux),
234852130b60SViresh Kumar 	}, {
234952130b60SViresh Kumar 		.name = "pwm2_pin_13_grp",
235052130b60SViresh Kumar 		.pins = pwm2_pins[1],
235152130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm2_pins[1]),
235252130b60SViresh Kumar 		.modemuxs = pwm2_pin_13_modemux,
235352130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm2_pin_13_modemux),
235452130b60SViresh Kumar 	}, {
235552130b60SViresh Kumar 		.name = "pwm2_pin_29_grp",
235652130b60SViresh Kumar 		.pins = pwm2_pins[2],
235752130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm2_pins[2]),
235852130b60SViresh Kumar 		.modemuxs = pwm2_pin_29_modemux,
235952130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm2_pin_29_modemux),
236052130b60SViresh Kumar 	}, {
236152130b60SViresh Kumar 		.name = "pwm2_pin_34_grp",
236252130b60SViresh Kumar 		.pins = pwm2_pins[3],
236352130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm2_pins[3]),
236452130b60SViresh Kumar 		.modemuxs = pwm2_pin_34_modemux,
236552130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm2_pin_34_modemux),
236652130b60SViresh Kumar 	}, {
236752130b60SViresh Kumar 		.name = "pwm2_pin_41_grp",
236852130b60SViresh Kumar 		.pins = pwm2_pins[4],
236952130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm2_pins[4]),
237052130b60SViresh Kumar 		.modemuxs = pwm2_pin_41_modemux,
237152130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm2_pin_41_modemux),
237252130b60SViresh Kumar 	}, {
237352130b60SViresh Kumar 		.name = "pwm2_pin_58_grp",
237452130b60SViresh Kumar 		.pins = pwm2_pins[5],
237552130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm2_pins[5]),
237652130b60SViresh Kumar 		.modemuxs = pwm2_pin_58_modemux,
237752130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm2_pin_58_modemux),
237852130b60SViresh Kumar 	}, {
237952130b60SViresh Kumar 		.name = "pwm2_pin_87_grp",
238052130b60SViresh Kumar 		.pins = pwm2_pins[6],
238152130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm2_pins[6]),
238252130b60SViresh Kumar 		.modemuxs = pwm2_pin_87_modemux,
238352130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm2_pin_87_modemux),
238452130b60SViresh Kumar 	},
238552130b60SViresh Kumar };
238652130b60SViresh Kumar 
238752130b60SViresh Kumar static const char *const pwm2_grps[] = { "pwm2_pin_7_grp", "pwm2_pin_13_grp",
238852130b60SViresh Kumar 	"pwm2_pin_29_grp", "pwm2_pin_34_grp", "pwm2_pin_41_grp",
238952130b60SViresh Kumar 	"pwm2_pin_58_grp", "pwm2_pin_87_grp" };
239052130b60SViresh Kumar static struct spear_function pwm2_function = {
239152130b60SViresh Kumar 	.name = "pwm2",
239252130b60SViresh Kumar 	.groups = pwm2_grps,
239352130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(pwm2_grps),
239452130b60SViresh Kumar };
239552130b60SViresh Kumar 
239652130b60SViresh Kumar /* Pad multiplexing for PWM3 device */
239752130b60SViresh Kumar static const unsigned pwm3_pins[][1] = { { 6 }, { 12 }, { 28 }, { 40 }, { 57 },
239852130b60SViresh Kumar 	{ 86 } };
239952130b60SViresh Kumar static struct spear_muxreg pwm3_pin_6_muxreg[] = {
240052130b60SViresh Kumar 	{
240152130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
240252130b60SViresh Kumar 		.mask = PMX_SSP_MASK,
240352130b60SViresh Kumar 		.val = 0,
240452130b60SViresh Kumar 	}, {
240552130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
240652130b60SViresh Kumar 		.mask = PMX_PL_6_MASK,
240752130b60SViresh Kumar 		.val = PMX_PWM_3_PL_6_VAL,
240852130b60SViresh Kumar 	},
240952130b60SViresh Kumar };
241052130b60SViresh Kumar 
241152130b60SViresh Kumar static struct spear_muxreg pwm3_muxreg[] = {
241252130b60SViresh Kumar 	{
241352130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
241452130b60SViresh Kumar 		.mask = PMX_MII_MASK,
241552130b60SViresh Kumar 		.val = 0,
241652130b60SViresh Kumar 	},
241752130b60SViresh Kumar };
241852130b60SViresh Kumar 
241952130b60SViresh Kumar static struct spear_muxreg pwm3_pin_12_muxreg[] = {
242052130b60SViresh Kumar 	{
242152130b60SViresh Kumar 		.reg = IP_SEL_PAD_10_19_REG,
242252130b60SViresh Kumar 		.mask = PMX_PL_12_MASK,
242352130b60SViresh Kumar 		.val = PMX_PWM3_PL_12_VAL,
242452130b60SViresh Kumar 	},
242552130b60SViresh Kumar };
242652130b60SViresh Kumar 
242752130b60SViresh Kumar static struct spear_muxreg pwm3_pin_28_muxreg[] = {
242852130b60SViresh Kumar 	{
242952130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
243052130b60SViresh Kumar 		.mask = PMX_GPIO_PIN0_MASK,
243152130b60SViresh Kumar 		.val = 0,
243252130b60SViresh Kumar 	}, {
243352130b60SViresh Kumar 		.reg = IP_SEL_PAD_20_29_REG,
243452130b60SViresh Kumar 		.mask = PMX_PL_28_MASK,
243552130b60SViresh Kumar 		.val = PMX_PWM_3_PL_28_VAL,
243652130b60SViresh Kumar 	},
243752130b60SViresh Kumar };
243852130b60SViresh Kumar 
243952130b60SViresh Kumar static struct spear_muxreg pwm3_pin_40_muxreg[] = {
244052130b60SViresh Kumar 	{
244152130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
244252130b60SViresh Kumar 		.mask = PMX_UART0_MODEM_MASK,
244352130b60SViresh Kumar 		.val = 0,
244452130b60SViresh Kumar 	}, {
244552130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
244652130b60SViresh Kumar 		.mask = PMX_PL_40_MASK,
244752130b60SViresh Kumar 		.val = PMX_PWM3_PL_40_VAL,
244852130b60SViresh Kumar 	},
244952130b60SViresh Kumar };
245052130b60SViresh Kumar 
245152130b60SViresh Kumar static struct spear_muxreg pwm3_pin_57_muxreg[] = {
245252130b60SViresh Kumar 	{
245352130b60SViresh Kumar 		.reg = IP_SEL_PAD_50_59_REG,
245452130b60SViresh Kumar 		.mask = PMX_PL_57_MASK,
245552130b60SViresh Kumar 		.val = PMX_PWM3_PL_57_VAL,
245652130b60SViresh Kumar 	},
245752130b60SViresh Kumar };
245852130b60SViresh Kumar 
245952130b60SViresh Kumar static struct spear_muxreg pwm3_pin_86_muxreg[] = {
246052130b60SViresh Kumar 	{
246152130b60SViresh Kumar 		.reg = IP_SEL_PAD_80_89_REG,
246252130b60SViresh Kumar 		.mask = PMX_PL_86_MASK,
246352130b60SViresh Kumar 		.val = PMX_PWM3_PL_86_VAL,
246452130b60SViresh Kumar 	},
246552130b60SViresh Kumar };
246652130b60SViresh Kumar 
246752130b60SViresh Kumar static struct spear_modemux pwm3_pin_6_modemux[] = {
246852130b60SViresh Kumar 	{
246952130b60SViresh Kumar 		.modes = EXTENDED_MODE,
247052130b60SViresh Kumar 		.muxregs = pwm3_pin_6_muxreg,
247152130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm3_pin_6_muxreg),
247252130b60SViresh Kumar 	},
247352130b60SViresh Kumar };
247452130b60SViresh Kumar 
247552130b60SViresh Kumar static struct spear_modemux pwm3_pin_12_modemux[] = {
247652130b60SViresh Kumar 	{
247752130b60SViresh Kumar 		.modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE |
247852130b60SViresh Kumar 			AUTO_NET_SMII_MODE | EXTENDED_MODE,
247952130b60SViresh Kumar 		.muxregs = pwm3_muxreg,
248052130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm3_muxreg),
248152130b60SViresh Kumar 	}, {
248252130b60SViresh Kumar 		.modes = EXTENDED_MODE,
248352130b60SViresh Kumar 		.muxregs = pwm3_pin_12_muxreg,
248452130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm3_pin_12_muxreg),
248552130b60SViresh Kumar 	},
248652130b60SViresh Kumar };
248752130b60SViresh Kumar 
248852130b60SViresh Kumar static struct spear_modemux pwm3_pin_28_modemux[] = {
248952130b60SViresh Kumar 	{
249052130b60SViresh Kumar 		.modes = EXTENDED_MODE,
249152130b60SViresh Kumar 		.muxregs = pwm3_pin_28_muxreg,
249252130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm3_pin_28_muxreg),
249352130b60SViresh Kumar 	},
249452130b60SViresh Kumar };
249552130b60SViresh Kumar 
249652130b60SViresh Kumar static struct spear_modemux pwm3_pin_40_modemux[] = {
249752130b60SViresh Kumar 	{
249852130b60SViresh Kumar 		.modes = EXTENDED_MODE,
249952130b60SViresh Kumar 		.muxregs = pwm3_pin_40_muxreg,
250052130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm3_pin_40_muxreg),
250152130b60SViresh Kumar 	},
250252130b60SViresh Kumar };
250352130b60SViresh Kumar 
250452130b60SViresh Kumar static struct spear_modemux pwm3_pin_57_modemux[] = {
250552130b60SViresh Kumar 	{
250652130b60SViresh Kumar 		.modes = EXTENDED_MODE,
250752130b60SViresh Kumar 		.muxregs = pwm3_pin_57_muxreg,
250852130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm3_pin_57_muxreg),
250952130b60SViresh Kumar 	},
251052130b60SViresh Kumar };
251152130b60SViresh Kumar 
251252130b60SViresh Kumar static struct spear_modemux pwm3_pin_86_modemux[] = {
251352130b60SViresh Kumar 	{
251452130b60SViresh Kumar 		.modes = EXTENDED_MODE,
251552130b60SViresh Kumar 		.muxregs = pwm3_pin_86_muxreg,
251652130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(pwm3_pin_86_muxreg),
251752130b60SViresh Kumar 	},
251852130b60SViresh Kumar };
251952130b60SViresh Kumar 
252052130b60SViresh Kumar static struct spear_pingroup pwm3_pingroup[] = {
252152130b60SViresh Kumar 	{
252252130b60SViresh Kumar 		.name = "pwm3_pin_6_grp",
252352130b60SViresh Kumar 		.pins = pwm3_pins[0],
252452130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm3_pins[0]),
252552130b60SViresh Kumar 		.modemuxs = pwm3_pin_6_modemux,
252652130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm3_pin_6_modemux),
252752130b60SViresh Kumar 	}, {
252852130b60SViresh Kumar 		.name = "pwm3_pin_12_grp",
252952130b60SViresh Kumar 		.pins = pwm3_pins[1],
253052130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm3_pins[1]),
253152130b60SViresh Kumar 		.modemuxs = pwm3_pin_12_modemux,
253252130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm3_pin_12_modemux),
253352130b60SViresh Kumar 	}, {
253452130b60SViresh Kumar 		.name = "pwm3_pin_28_grp",
253552130b60SViresh Kumar 		.pins = pwm3_pins[2],
253652130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm3_pins[2]),
253752130b60SViresh Kumar 		.modemuxs = pwm3_pin_28_modemux,
253852130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm3_pin_28_modemux),
253952130b60SViresh Kumar 	}, {
254052130b60SViresh Kumar 		.name = "pwm3_pin_40_grp",
254152130b60SViresh Kumar 		.pins = pwm3_pins[3],
254252130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm3_pins[3]),
254352130b60SViresh Kumar 		.modemuxs = pwm3_pin_40_modemux,
254452130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm3_pin_40_modemux),
254552130b60SViresh Kumar 	}, {
254652130b60SViresh Kumar 		.name = "pwm3_pin_57_grp",
254752130b60SViresh Kumar 		.pins = pwm3_pins[4],
254852130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm3_pins[4]),
254952130b60SViresh Kumar 		.modemuxs = pwm3_pin_57_modemux,
255052130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm3_pin_57_modemux),
255152130b60SViresh Kumar 	}, {
255252130b60SViresh Kumar 		.name = "pwm3_pin_86_grp",
255352130b60SViresh Kumar 		.pins = pwm3_pins[5],
255452130b60SViresh Kumar 		.npins = ARRAY_SIZE(pwm3_pins[5]),
255552130b60SViresh Kumar 		.modemuxs = pwm3_pin_86_modemux,
255652130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(pwm3_pin_86_modemux),
255752130b60SViresh Kumar 	},
255852130b60SViresh Kumar };
255952130b60SViresh Kumar 
256052130b60SViresh Kumar static const char *const pwm3_grps[] = { "pwm3_pin_6_grp", "pwm3_pin_12_grp",
256152130b60SViresh Kumar 	"pwm3_pin_28_grp", "pwm3_pin_40_grp", "pwm3_pin_57_grp",
256252130b60SViresh Kumar 	"pwm3_pin_86_grp" };
256352130b60SViresh Kumar static struct spear_function pwm3_function = {
256452130b60SViresh Kumar 	.name = "pwm3",
256552130b60SViresh Kumar 	.groups = pwm3_grps,
256652130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(pwm3_grps),
256752130b60SViresh Kumar };
256852130b60SViresh Kumar 
256952130b60SViresh Kumar /* Pad multiplexing for SSP1 device */
257052130b60SViresh Kumar static const unsigned ssp1_pins[][2] = { { 17, 20 }, { 36, 39 }, { 48, 51 },
257152130b60SViresh Kumar 	{ 65, 68 }, { 94, 97 } };
257252130b60SViresh Kumar static struct spear_muxreg ssp1_muxreg[] = {
257352130b60SViresh Kumar 	{
257452130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
257552130b60SViresh Kumar 		.mask = PMX_MII_MASK,
257652130b60SViresh Kumar 		.val = 0,
257752130b60SViresh Kumar 	},
257852130b60SViresh Kumar };
257952130b60SViresh Kumar 
258052130b60SViresh Kumar static struct spear_muxreg ssp1_ext_17_20_muxreg[] = {
258152130b60SViresh Kumar 	{
258252130b60SViresh Kumar 		.reg = IP_SEL_PAD_10_19_REG,
258352130b60SViresh Kumar 		.mask = PMX_PL_17_18_MASK | PMX_PL_19_MASK,
258452130b60SViresh Kumar 		.val = PMX_SSP1_PL_17_18_19_20_VAL,
258552130b60SViresh Kumar 	}, {
258652130b60SViresh Kumar 		.reg = IP_SEL_PAD_20_29_REG,
258752130b60SViresh Kumar 		.mask = PMX_PL_20_MASK,
258852130b60SViresh Kumar 		.val = PMX_SSP1_PL_17_18_19_20_VAL,
258952130b60SViresh Kumar 	}, {
259052130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
259152130b60SViresh Kumar 		.mask = PMX_SSP1_PORT_SEL_MASK,
259252130b60SViresh Kumar 		.val = PMX_SSP1_PORT_17_TO_20_VAL,
259352130b60SViresh Kumar 	},
259452130b60SViresh Kumar };
259552130b60SViresh Kumar 
259652130b60SViresh Kumar static struct spear_muxreg ssp1_ext_36_39_muxreg[] = {
259752130b60SViresh Kumar 	{
259852130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
259952130b60SViresh Kumar 		.mask = PMX_UART0_MODEM_MASK | PMX_SSP_CS_MASK,
260052130b60SViresh Kumar 		.val = 0,
260152130b60SViresh Kumar 	}, {
260252130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
260352130b60SViresh Kumar 		.mask = PMX_PL_36_MASK | PMX_PL_37_38_MASK | PMX_PL_39_MASK,
260452130b60SViresh Kumar 		.val = PMX_SSP1_PL_36_VAL | PMX_SSP1_PL_37_38_VAL |
260552130b60SViresh Kumar 			PMX_SSP1_PL_39_VAL,
260652130b60SViresh Kumar 	}, {
260752130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
260852130b60SViresh Kumar 		.mask = PMX_SSP1_PORT_SEL_MASK,
260952130b60SViresh Kumar 		.val = PMX_SSP1_PORT_36_TO_39_VAL,
261052130b60SViresh Kumar 	},
261152130b60SViresh Kumar };
261252130b60SViresh Kumar 
261352130b60SViresh Kumar static struct spear_muxreg ssp1_ext_48_51_muxreg[] = {
261452130b60SViresh Kumar 	{
261552130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
261652130b60SViresh Kumar 		.mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
261752130b60SViresh Kumar 		.val = 0,
261852130b60SViresh Kumar 	}, {
261952130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
262052130b60SViresh Kumar 		.mask = PMX_PL_48_49_MASK,
262152130b60SViresh Kumar 		.val = PMX_SSP1_PL_48_49_VAL,
262252130b60SViresh Kumar 	}, {
262352130b60SViresh Kumar 		.reg = IP_SEL_PAD_50_59_REG,
262452130b60SViresh Kumar 		.mask = PMX_PL_50_51_MASK,
262552130b60SViresh Kumar 		.val = PMX_SSP1_PL_50_51_VAL,
262652130b60SViresh Kumar 	}, {
262752130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
262852130b60SViresh Kumar 		.mask = PMX_SSP1_PORT_SEL_MASK,
262952130b60SViresh Kumar 		.val = PMX_SSP1_PORT_48_TO_51_VAL,
263052130b60SViresh Kumar 	},
263152130b60SViresh Kumar };
263252130b60SViresh Kumar 
263352130b60SViresh Kumar static struct spear_muxreg ssp1_ext_65_68_muxreg[] = {
263452130b60SViresh Kumar 	{
263552130b60SViresh Kumar 		.reg = IP_SEL_PAD_60_69_REG,
263652130b60SViresh Kumar 		.mask = PMX_PL_65_TO_68_MASK,
263752130b60SViresh Kumar 		.val = PMX_SSP1_PL_65_TO_68_VAL,
263852130b60SViresh Kumar 	}, {
263952130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
264052130b60SViresh Kumar 		.mask = PMX_SSP1_PORT_SEL_MASK,
264152130b60SViresh Kumar 		.val = PMX_SSP1_PORT_65_TO_68_VAL,
264252130b60SViresh Kumar 	},
264352130b60SViresh Kumar };
264452130b60SViresh Kumar 
264552130b60SViresh Kumar static struct spear_muxreg ssp1_ext_94_97_muxreg[] = {
264652130b60SViresh Kumar 	{
264752130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
264852130b60SViresh Kumar 		.mask = PMX_PL_94_95_MASK | PMX_PL_96_97_MASK,
264952130b60SViresh Kumar 		.val = PMX_SSP1_PL_94_95_VAL | PMX_SSP1_PL_96_97_VAL,
265052130b60SViresh Kumar 	}, {
265152130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
265252130b60SViresh Kumar 		.mask = PMX_SSP1_PORT_SEL_MASK,
265352130b60SViresh Kumar 		.val = PMX_SSP1_PORT_94_TO_97_VAL,
265452130b60SViresh Kumar 	},
265552130b60SViresh Kumar };
265652130b60SViresh Kumar 
265752130b60SViresh Kumar static struct spear_modemux ssp1_17_20_modemux[] = {
265852130b60SViresh Kumar 	{
265952130b60SViresh Kumar 		.modes = SMALL_PRINTERS_MODE | AUTO_NET_SMII_MODE |
266052130b60SViresh Kumar 			EXTENDED_MODE,
266152130b60SViresh Kumar 		.muxregs = ssp1_muxreg,
266252130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp1_muxreg),
266352130b60SViresh Kumar 	}, {
266452130b60SViresh Kumar 		.modes = EXTENDED_MODE,
266552130b60SViresh Kumar 		.muxregs = ssp1_ext_17_20_muxreg,
266652130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp1_ext_17_20_muxreg),
266752130b60SViresh Kumar 	},
266852130b60SViresh Kumar };
266952130b60SViresh Kumar 
267052130b60SViresh Kumar static struct spear_modemux ssp1_36_39_modemux[] = {
267152130b60SViresh Kumar 	{
267252130b60SViresh Kumar 		.modes = EXTENDED_MODE,
267352130b60SViresh Kumar 		.muxregs = ssp1_ext_36_39_muxreg,
267452130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp1_ext_36_39_muxreg),
267552130b60SViresh Kumar 	},
267652130b60SViresh Kumar };
267752130b60SViresh Kumar 
267852130b60SViresh Kumar static struct spear_modemux ssp1_48_51_modemux[] = {
267952130b60SViresh Kumar 	{
268052130b60SViresh Kumar 		.modes = EXTENDED_MODE,
268152130b60SViresh Kumar 		.muxregs = ssp1_ext_48_51_muxreg,
268252130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp1_ext_48_51_muxreg),
268352130b60SViresh Kumar 	},
268452130b60SViresh Kumar };
268552130b60SViresh Kumar static struct spear_modemux ssp1_65_68_modemux[] = {
268652130b60SViresh Kumar 	{
268752130b60SViresh Kumar 		.modes = EXTENDED_MODE,
268852130b60SViresh Kumar 		.muxregs = ssp1_ext_65_68_muxreg,
268952130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp1_ext_65_68_muxreg),
269052130b60SViresh Kumar 	},
269152130b60SViresh Kumar };
269252130b60SViresh Kumar 
269352130b60SViresh Kumar static struct spear_modemux ssp1_94_97_modemux[] = {
269452130b60SViresh Kumar 	{
269552130b60SViresh Kumar 		.modes = EXTENDED_MODE,
269652130b60SViresh Kumar 		.muxregs = ssp1_ext_94_97_muxreg,
269752130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp1_ext_94_97_muxreg),
269852130b60SViresh Kumar 	},
269952130b60SViresh Kumar };
270052130b60SViresh Kumar 
270152130b60SViresh Kumar static struct spear_pingroup ssp1_pingroup[] = {
270252130b60SViresh Kumar 	{
270352130b60SViresh Kumar 		.name = "ssp1_17_20_grp",
270452130b60SViresh Kumar 		.pins = ssp1_pins[0],
270552130b60SViresh Kumar 		.npins = ARRAY_SIZE(ssp1_pins[0]),
270652130b60SViresh Kumar 		.modemuxs = ssp1_17_20_modemux,
270752130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(ssp1_17_20_modemux),
270852130b60SViresh Kumar 	}, {
270952130b60SViresh Kumar 		.name = "ssp1_36_39_grp",
271052130b60SViresh Kumar 		.pins = ssp1_pins[1],
271152130b60SViresh Kumar 		.npins = ARRAY_SIZE(ssp1_pins[1]),
271252130b60SViresh Kumar 		.modemuxs = ssp1_36_39_modemux,
271352130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(ssp1_36_39_modemux),
271452130b60SViresh Kumar 	}, {
271552130b60SViresh Kumar 		.name = "ssp1_48_51_grp",
271652130b60SViresh Kumar 		.pins = ssp1_pins[2],
271752130b60SViresh Kumar 		.npins = ARRAY_SIZE(ssp1_pins[2]),
271852130b60SViresh Kumar 		.modemuxs = ssp1_48_51_modemux,
271952130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(ssp1_48_51_modemux),
272052130b60SViresh Kumar 	}, {
272152130b60SViresh Kumar 		.name = "ssp1_65_68_grp",
272252130b60SViresh Kumar 		.pins = ssp1_pins[3],
272352130b60SViresh Kumar 		.npins = ARRAY_SIZE(ssp1_pins[3]),
272452130b60SViresh Kumar 		.modemuxs = ssp1_65_68_modemux,
272552130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(ssp1_65_68_modemux),
272652130b60SViresh Kumar 	}, {
272752130b60SViresh Kumar 		.name = "ssp1_94_97_grp",
272852130b60SViresh Kumar 		.pins = ssp1_pins[4],
272952130b60SViresh Kumar 		.npins = ARRAY_SIZE(ssp1_pins[4]),
273052130b60SViresh Kumar 		.modemuxs = ssp1_94_97_modemux,
273152130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(ssp1_94_97_modemux),
273252130b60SViresh Kumar 	},
273352130b60SViresh Kumar };
273452130b60SViresh Kumar 
273552130b60SViresh Kumar static const char *const ssp1_grps[] = { "ssp1_17_20_grp", "ssp1_36_39_grp",
273652130b60SViresh Kumar 	"ssp1_48_51_grp", "ssp1_65_68_grp", "ssp1_94_97_grp"
273752130b60SViresh Kumar };
273852130b60SViresh Kumar static struct spear_function ssp1_function = {
273952130b60SViresh Kumar 	.name = "ssp1",
274052130b60SViresh Kumar 	.groups = ssp1_grps,
274152130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(ssp1_grps),
274252130b60SViresh Kumar };
274352130b60SViresh Kumar 
274452130b60SViresh Kumar /* Pad multiplexing for SSP2 device */
274552130b60SViresh Kumar static const unsigned ssp2_pins[][2] = { { 13, 16 }, { 32, 35 }, { 44, 47 },
274652130b60SViresh Kumar 	{ 61, 64 }, { 90, 93 } };
274752130b60SViresh Kumar static struct spear_muxreg ssp2_muxreg[] = {
274852130b60SViresh Kumar 	{
274952130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
275052130b60SViresh Kumar 		.mask = PMX_MII_MASK,
275152130b60SViresh Kumar 		.val = 0,
275252130b60SViresh Kumar 	},
275352130b60SViresh Kumar };
275452130b60SViresh Kumar 
275552130b60SViresh Kumar static struct spear_muxreg ssp2_ext_13_16_muxreg[] = {
275652130b60SViresh Kumar 	{
275752130b60SViresh Kumar 		.reg = IP_SEL_PAD_10_19_REG,
275852130b60SViresh Kumar 		.mask = PMX_PL_13_14_MASK | PMX_PL_15_16_MASK,
275952130b60SViresh Kumar 		.val = PMX_SSP2_PL_13_14_15_16_VAL,
276052130b60SViresh Kumar 	}, {
276152130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
276252130b60SViresh Kumar 		.mask = PMX_SSP2_PORT_SEL_MASK,
276352130b60SViresh Kumar 		.val = PMX_SSP2_PORT_13_TO_16_VAL,
276452130b60SViresh Kumar 	},
276552130b60SViresh Kumar };
276652130b60SViresh Kumar 
276752130b60SViresh Kumar static struct spear_muxreg ssp2_ext_32_35_muxreg[] = {
276852130b60SViresh Kumar 	{
276952130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
277052130b60SViresh Kumar 		.mask = PMX_SSP_CS_MASK | PMX_GPIO_PIN4_MASK |
277152130b60SViresh Kumar 			PMX_GPIO_PIN5_MASK,
277252130b60SViresh Kumar 		.val = 0,
277352130b60SViresh Kumar 	}, {
277452130b60SViresh Kumar 		.reg = IP_SEL_PAD_30_39_REG,
277552130b60SViresh Kumar 		.mask = PMX_PL_32_33_MASK | PMX_PL_34_MASK | PMX_PL_35_MASK,
277652130b60SViresh Kumar 		.val = PMX_SSP2_PL_32_33_VAL | PMX_SSP2_PL_34_VAL |
277752130b60SViresh Kumar 			PMX_SSP2_PL_35_VAL,
277852130b60SViresh Kumar 	}, {
277952130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
278052130b60SViresh Kumar 		.mask = PMX_SSP2_PORT_SEL_MASK,
278152130b60SViresh Kumar 		.val = PMX_SSP2_PORT_32_TO_35_VAL,
278252130b60SViresh Kumar 	},
278352130b60SViresh Kumar };
278452130b60SViresh Kumar 
278552130b60SViresh Kumar static struct spear_muxreg ssp2_ext_44_47_muxreg[] = {
278652130b60SViresh Kumar 	{
278752130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
278852130b60SViresh Kumar 		.mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
278952130b60SViresh Kumar 		.val = 0,
279052130b60SViresh Kumar 	}, {
279152130b60SViresh Kumar 		.reg = IP_SEL_PAD_40_49_REG,
279252130b60SViresh Kumar 		.mask = PMX_PL_44_45_MASK | PMX_PL_46_47_MASK,
279352130b60SViresh Kumar 		.val = PMX_SSP2_PL_44_45_VAL | PMX_SSP2_PL_46_47_VAL,
279452130b60SViresh Kumar 	}, {
279552130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
279652130b60SViresh Kumar 		.mask = PMX_SSP2_PORT_SEL_MASK,
279752130b60SViresh Kumar 		.val = PMX_SSP2_PORT_44_TO_47_VAL,
279852130b60SViresh Kumar 	},
279952130b60SViresh Kumar };
280052130b60SViresh Kumar 
280152130b60SViresh Kumar static struct spear_muxreg ssp2_ext_61_64_muxreg[] = {
280252130b60SViresh Kumar 	{
280352130b60SViresh Kumar 		.reg = IP_SEL_PAD_60_69_REG,
280452130b60SViresh Kumar 		.mask = PMX_PL_61_TO_64_MASK,
280552130b60SViresh Kumar 		.val = PMX_SSP2_PL_61_TO_64_VAL,
280652130b60SViresh Kumar 	}, {
280752130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
280852130b60SViresh Kumar 		.mask = PMX_SSP2_PORT_SEL_MASK,
280952130b60SViresh Kumar 		.val = PMX_SSP2_PORT_61_TO_64_VAL,
281052130b60SViresh Kumar 	},
281152130b60SViresh Kumar };
281252130b60SViresh Kumar 
281352130b60SViresh Kumar static struct spear_muxreg ssp2_ext_90_93_muxreg[] = {
281452130b60SViresh Kumar 	{
281552130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
281652130b60SViresh Kumar 		.mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK,
281752130b60SViresh Kumar 		.val = PMX_SSP2_PL_90_91_VAL | PMX_SSP2_PL_92_93_VAL,
281852130b60SViresh Kumar 	}, {
281952130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
282052130b60SViresh Kumar 		.mask = PMX_SSP2_PORT_SEL_MASK,
282152130b60SViresh Kumar 		.val = PMX_SSP2_PORT_90_TO_93_VAL,
282252130b60SViresh Kumar 	},
282352130b60SViresh Kumar };
282452130b60SViresh Kumar 
282552130b60SViresh Kumar static struct spear_modemux ssp2_13_16_modemux[] = {
282652130b60SViresh Kumar 	{
282752130b60SViresh Kumar 		.modes = AUTO_NET_SMII_MODE | EXTENDED_MODE,
282852130b60SViresh Kumar 		.muxregs = ssp2_muxreg,
282952130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp2_muxreg),
283052130b60SViresh Kumar 	}, {
283152130b60SViresh Kumar 		.modes = EXTENDED_MODE,
283252130b60SViresh Kumar 		.muxregs = ssp2_ext_13_16_muxreg,
283352130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp2_ext_13_16_muxreg),
283452130b60SViresh Kumar 	},
283552130b60SViresh Kumar };
283652130b60SViresh Kumar 
283752130b60SViresh Kumar static struct spear_modemux ssp2_32_35_modemux[] = {
283852130b60SViresh Kumar 	{
283952130b60SViresh Kumar 		.modes = EXTENDED_MODE,
284052130b60SViresh Kumar 		.muxregs = ssp2_ext_32_35_muxreg,
284152130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp2_ext_32_35_muxreg),
284252130b60SViresh Kumar 	},
284352130b60SViresh Kumar };
284452130b60SViresh Kumar 
284552130b60SViresh Kumar static struct spear_modemux ssp2_44_47_modemux[] = {
284652130b60SViresh Kumar 	{
284752130b60SViresh Kumar 		.modes = EXTENDED_MODE,
284852130b60SViresh Kumar 		.muxregs = ssp2_ext_44_47_muxreg,
284952130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp2_ext_44_47_muxreg),
285052130b60SViresh Kumar 	},
285152130b60SViresh Kumar };
285252130b60SViresh Kumar 
285352130b60SViresh Kumar static struct spear_modemux ssp2_61_64_modemux[] = {
285452130b60SViresh Kumar 	{
285552130b60SViresh Kumar 		.modes = EXTENDED_MODE,
285652130b60SViresh Kumar 		.muxregs = ssp2_ext_61_64_muxreg,
285752130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp2_ext_61_64_muxreg),
285852130b60SViresh Kumar 	},
285952130b60SViresh Kumar };
286052130b60SViresh Kumar 
286152130b60SViresh Kumar static struct spear_modemux ssp2_90_93_modemux[] = {
286252130b60SViresh Kumar 	{
286352130b60SViresh Kumar 		.modes = EXTENDED_MODE,
286452130b60SViresh Kumar 		.muxregs = ssp2_ext_90_93_muxreg,
286552130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp2_ext_90_93_muxreg),
286652130b60SViresh Kumar 	},
286752130b60SViresh Kumar };
286852130b60SViresh Kumar 
286952130b60SViresh Kumar static struct spear_pingroup ssp2_pingroup[] = {
287052130b60SViresh Kumar 	{
287152130b60SViresh Kumar 		.name = "ssp2_13_16_grp",
287252130b60SViresh Kumar 		.pins = ssp2_pins[0],
287352130b60SViresh Kumar 		.npins = ARRAY_SIZE(ssp2_pins[0]),
287452130b60SViresh Kumar 		.modemuxs = ssp2_13_16_modemux,
287552130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(ssp2_13_16_modemux),
287652130b60SViresh Kumar 	}, {
287752130b60SViresh Kumar 		.name = "ssp2_32_35_grp",
287852130b60SViresh Kumar 		.pins = ssp2_pins[1],
287952130b60SViresh Kumar 		.npins = ARRAY_SIZE(ssp2_pins[1]),
288052130b60SViresh Kumar 		.modemuxs = ssp2_32_35_modemux,
288152130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(ssp2_32_35_modemux),
288252130b60SViresh Kumar 	}, {
288352130b60SViresh Kumar 		.name = "ssp2_44_47_grp",
288452130b60SViresh Kumar 		.pins = ssp2_pins[2],
288552130b60SViresh Kumar 		.npins = ARRAY_SIZE(ssp2_pins[2]),
288652130b60SViresh Kumar 		.modemuxs = ssp2_44_47_modemux,
288752130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(ssp2_44_47_modemux),
288852130b60SViresh Kumar 	}, {
288952130b60SViresh Kumar 		.name = "ssp2_61_64_grp",
289052130b60SViresh Kumar 		.pins = ssp2_pins[3],
289152130b60SViresh Kumar 		.npins = ARRAY_SIZE(ssp2_pins[3]),
289252130b60SViresh Kumar 		.modemuxs = ssp2_61_64_modemux,
289352130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(ssp2_61_64_modemux),
289452130b60SViresh Kumar 	}, {
289552130b60SViresh Kumar 		.name = "ssp2_90_93_grp",
289652130b60SViresh Kumar 		.pins = ssp2_pins[4],
289752130b60SViresh Kumar 		.npins = ARRAY_SIZE(ssp2_pins[4]),
289852130b60SViresh Kumar 		.modemuxs = ssp2_90_93_modemux,
289952130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(ssp2_90_93_modemux),
290052130b60SViresh Kumar 	},
290152130b60SViresh Kumar };
290252130b60SViresh Kumar 
290352130b60SViresh Kumar static const char *const ssp2_grps[] = { "ssp2_13_16_grp", "ssp2_32_35_grp",
290452130b60SViresh Kumar 	"ssp2_44_47_grp", "ssp2_61_64_grp", "ssp2_90_93_grp" };
290552130b60SViresh Kumar static struct spear_function ssp2_function = {
290652130b60SViresh Kumar 	.name = "ssp2",
290752130b60SViresh Kumar 	.groups = ssp2_grps,
290852130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(ssp2_grps),
290952130b60SViresh Kumar };
291052130b60SViresh Kumar 
291152130b60SViresh Kumar /* Pad multiplexing for cadence mii2 as mii device */
291252130b60SViresh Kumar static const unsigned mii2_pins[] = { 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
291352130b60SViresh Kumar 	90, 91, 92, 93, 94, 95, 96, 97 };
291452130b60SViresh Kumar static struct spear_muxreg mii2_muxreg[] = {
291552130b60SViresh Kumar 	{
291652130b60SViresh Kumar 		.reg = IP_SEL_PAD_80_89_REG,
291752130b60SViresh Kumar 		.mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK |
291852130b60SViresh Kumar 			PMX_PL_88_89_MASK,
291952130b60SViresh Kumar 		.val = PMX_MII2_PL_80_TO_85_VAL | PMX_MII2_PL_86_87_VAL |
292052130b60SViresh Kumar 			PMX_MII2_PL_88_89_VAL,
292152130b60SViresh Kumar 	}, {
292252130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
292352130b60SViresh Kumar 		.mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK |
292452130b60SViresh Kumar 			PMX_PL_94_95_MASK | PMX_PL_96_97_MASK,
292552130b60SViresh Kumar 		.val = PMX_MII2_PL_90_91_VAL | PMX_MII2_PL_92_93_VAL |
292652130b60SViresh Kumar 			PMX_MII2_PL_94_95_VAL | PMX_MII2_PL_96_97_VAL,
292752130b60SViresh Kumar 	}, {
292852130b60SViresh Kumar 		.reg = EXT_CTRL_REG,
292952130b60SViresh Kumar 		.mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) |
293052130b60SViresh Kumar 			(MAC_MODE_MASK << MAC1_MODE_SHIFT) |
293152130b60SViresh Kumar 			MII_MDIO_MASK,
293252130b60SViresh Kumar 		.val = (MAC_MODE_MII << MAC2_MODE_SHIFT) |
293352130b60SViresh Kumar 			(MAC_MODE_MII << MAC1_MODE_SHIFT) |
293452130b60SViresh Kumar 			MII_MDIO_81_VAL,
293552130b60SViresh Kumar 	},
293652130b60SViresh Kumar };
293752130b60SViresh Kumar 
293852130b60SViresh Kumar static struct spear_modemux mii2_modemux[] = {
293952130b60SViresh Kumar 	{
294052130b60SViresh Kumar 		.modes = EXTENDED_MODE,
294152130b60SViresh Kumar 		.muxregs = mii2_muxreg,
294252130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(mii2_muxreg),
294352130b60SViresh Kumar 	},
294452130b60SViresh Kumar };
294552130b60SViresh Kumar 
294652130b60SViresh Kumar static struct spear_pingroup mii2_pingroup = {
294752130b60SViresh Kumar 	.name = "mii2_grp",
294852130b60SViresh Kumar 	.pins = mii2_pins,
294952130b60SViresh Kumar 	.npins = ARRAY_SIZE(mii2_pins),
295052130b60SViresh Kumar 	.modemuxs = mii2_modemux,
295152130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(mii2_modemux),
295252130b60SViresh Kumar };
295352130b60SViresh Kumar 
295452130b60SViresh Kumar static const char *const mii2_grps[] = { "mii2_grp" };
295552130b60SViresh Kumar static struct spear_function mii2_function = {
295652130b60SViresh Kumar 	.name = "mii2",
295752130b60SViresh Kumar 	.groups = mii2_grps,
295852130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(mii2_grps),
295952130b60SViresh Kumar };
296052130b60SViresh Kumar 
296152130b60SViresh Kumar /* Pad multiplexing for cadence mii 1_2 as smii or rmii device */
2962b06bf9a9SDeepak Sikri static const unsigned rmii0_1_pins[] = { 10, 11, 13, 14, 15, 16, 17, 18, 19, 20,
296352130b60SViresh Kumar 	21, 22, 23, 24, 25, 26, 27 };
2964b06bf9a9SDeepak Sikri static const unsigned smii0_1_pins[] = { 10, 11, 21, 22, 23, 24, 25, 26, 27 };
296552130b60SViresh Kumar static struct spear_muxreg mii0_1_muxreg[] = {
296652130b60SViresh Kumar 	{
296752130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
296852130b60SViresh Kumar 		.mask = PMX_MII_MASK,
296952130b60SViresh Kumar 		.val = 0,
297052130b60SViresh Kumar 	},
297152130b60SViresh Kumar };
297252130b60SViresh Kumar 
297352130b60SViresh Kumar static struct spear_muxreg smii0_1_ext_muxreg[] = {
297452130b60SViresh Kumar 	{
297552130b60SViresh Kumar 		.reg = IP_SEL_PAD_10_19_REG,
297652130b60SViresh Kumar 		.mask = PMX_PL_10_11_MASK,
297752130b60SViresh Kumar 		.val = PMX_SMII_PL_10_11_VAL,
297852130b60SViresh Kumar 	}, {
297952130b60SViresh Kumar 		.reg = IP_SEL_PAD_20_29_REG,
298052130b60SViresh Kumar 		.mask = PMX_PL_21_TO_27_MASK,
298152130b60SViresh Kumar 		.val = PMX_SMII_PL_21_TO_27_VAL,
298252130b60SViresh Kumar 	}, {
298352130b60SViresh Kumar 		.reg = EXT_CTRL_REG,
298452130b60SViresh Kumar 		.mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) |
298552130b60SViresh Kumar 			(MAC_MODE_MASK << MAC1_MODE_SHIFT) |
298652130b60SViresh Kumar 			MII_MDIO_MASK,
298752130b60SViresh Kumar 		.val = (MAC_MODE_SMII << MAC2_MODE_SHIFT)
298852130b60SViresh Kumar 			| (MAC_MODE_SMII << MAC1_MODE_SHIFT)
298952130b60SViresh Kumar 			| MII_MDIO_10_11_VAL,
299052130b60SViresh Kumar 	},
299152130b60SViresh Kumar };
299252130b60SViresh Kumar 
299352130b60SViresh Kumar static struct spear_muxreg rmii0_1_ext_muxreg[] = {
299452130b60SViresh Kumar 	{
299552130b60SViresh Kumar 		.reg = IP_SEL_PAD_10_19_REG,
299652130b60SViresh Kumar 		.mask = PMX_PL_10_11_MASK | PMX_PL_13_14_MASK |
299752130b60SViresh Kumar 			PMX_PL_15_16_MASK | PMX_PL_17_18_MASK | PMX_PL_19_MASK,
299852130b60SViresh Kumar 		.val = PMX_RMII_PL_10_11_VAL | PMX_RMII_PL_13_14_VAL |
299952130b60SViresh Kumar 			PMX_RMII_PL_15_16_VAL | PMX_RMII_PL_17_18_VAL |
300052130b60SViresh Kumar 			PMX_RMII_PL_19_VAL,
300152130b60SViresh Kumar 	}, {
300252130b60SViresh Kumar 		.reg = IP_SEL_PAD_20_29_REG,
300352130b60SViresh Kumar 		.mask = PMX_PL_20_MASK | PMX_PL_21_TO_27_MASK,
300452130b60SViresh Kumar 		.val = PMX_RMII_PL_20_VAL | PMX_RMII_PL_21_TO_27_VAL,
300552130b60SViresh Kumar 	}, {
300652130b60SViresh Kumar 		.reg = EXT_CTRL_REG,
300752130b60SViresh Kumar 		.mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) |
300852130b60SViresh Kumar 			(MAC_MODE_MASK << MAC1_MODE_SHIFT) |
300952130b60SViresh Kumar 			MII_MDIO_MASK,
301052130b60SViresh Kumar 		.val = (MAC_MODE_RMII << MAC2_MODE_SHIFT)
301152130b60SViresh Kumar 			| (MAC_MODE_RMII << MAC1_MODE_SHIFT)
301252130b60SViresh Kumar 			| MII_MDIO_10_11_VAL,
301352130b60SViresh Kumar 	},
301452130b60SViresh Kumar };
301552130b60SViresh Kumar 
301652130b60SViresh Kumar static struct spear_modemux mii0_1_modemux[][2] = {
301752130b60SViresh Kumar 	{
301852130b60SViresh Kumar 		/* configure as smii */
301952130b60SViresh Kumar 		{
302052130b60SViresh Kumar 			.modes = AUTO_NET_SMII_MODE | AUTO_EXP_MODE |
302152130b60SViresh Kumar 				SMALL_PRINTERS_MODE | EXTENDED_MODE,
302252130b60SViresh Kumar 			.muxregs = mii0_1_muxreg,
302352130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(mii0_1_muxreg),
302452130b60SViresh Kumar 		}, {
302552130b60SViresh Kumar 			.modes = EXTENDED_MODE,
302652130b60SViresh Kumar 			.muxregs = smii0_1_ext_muxreg,
302752130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(smii0_1_ext_muxreg),
302852130b60SViresh Kumar 		},
302952130b60SViresh Kumar 	}, {
303052130b60SViresh Kumar 		/* configure as rmii */
303152130b60SViresh Kumar 		{
303252130b60SViresh Kumar 			.modes = AUTO_NET_SMII_MODE | AUTO_EXP_MODE |
303352130b60SViresh Kumar 				SMALL_PRINTERS_MODE | EXTENDED_MODE,
303452130b60SViresh Kumar 			.muxregs = mii0_1_muxreg,
303552130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(mii0_1_muxreg),
303652130b60SViresh Kumar 		}, {
303752130b60SViresh Kumar 			.modes = EXTENDED_MODE,
303852130b60SViresh Kumar 			.muxregs = rmii0_1_ext_muxreg,
303952130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(rmii0_1_ext_muxreg),
304052130b60SViresh Kumar 		},
304152130b60SViresh Kumar 	},
304252130b60SViresh Kumar };
304352130b60SViresh Kumar 
304452130b60SViresh Kumar static struct spear_pingroup mii0_1_pingroup[] = {
304552130b60SViresh Kumar 	{
304652130b60SViresh Kumar 		.name = "smii0_1_grp",
304752130b60SViresh Kumar 		.pins = smii0_1_pins,
304852130b60SViresh Kumar 		.npins = ARRAY_SIZE(smii0_1_pins),
304952130b60SViresh Kumar 		.modemuxs = mii0_1_modemux[0],
305052130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(mii0_1_modemux[0]),
305152130b60SViresh Kumar 	}, {
305252130b60SViresh Kumar 		.name = "rmii0_1_grp",
305352130b60SViresh Kumar 		.pins = rmii0_1_pins,
305452130b60SViresh Kumar 		.npins = ARRAY_SIZE(rmii0_1_pins),
305552130b60SViresh Kumar 		.modemuxs = mii0_1_modemux[1],
305652130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(mii0_1_modemux[1]),
305752130b60SViresh Kumar 	},
305852130b60SViresh Kumar };
305952130b60SViresh Kumar 
306052130b60SViresh Kumar static const char *const mii0_1_grps[] = { "smii0_1_grp", "rmii0_1_grp" };
306152130b60SViresh Kumar static struct spear_function mii0_1_function = {
306252130b60SViresh Kumar 	.name = "mii0_1",
306352130b60SViresh Kumar 	.groups = mii0_1_grps,
306452130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(mii0_1_grps),
306552130b60SViresh Kumar };
306652130b60SViresh Kumar 
306752130b60SViresh Kumar /* Pad multiplexing for i2c1 device */
306852130b60SViresh Kumar static const unsigned i2c1_pins[][2] = { { 8, 9 }, { 98, 99 } };
306952130b60SViresh Kumar static struct spear_muxreg i2c1_ext_8_9_muxreg[] = {
307052130b60SViresh Kumar 	{
307152130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
307252130b60SViresh Kumar 		.mask = PMX_SSP_CS_MASK,
307352130b60SViresh Kumar 		.val = 0,
307452130b60SViresh Kumar 	}, {
307552130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
307652130b60SViresh Kumar 		.mask = PMX_PL_8_9_MASK,
307752130b60SViresh Kumar 		.val = PMX_I2C1_PL_8_9_VAL,
307852130b60SViresh Kumar 	}, {
307952130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
308052130b60SViresh Kumar 		.mask = PMX_I2C1_PORT_SEL_MASK,
308152130b60SViresh Kumar 		.val = PMX_I2C1_PORT_8_9_VAL,
308252130b60SViresh Kumar 	},
308352130b60SViresh Kumar };
308452130b60SViresh Kumar 
308552130b60SViresh Kumar static struct spear_muxreg i2c1_ext_98_99_muxreg[] = {
308652130b60SViresh Kumar 	{
308752130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
308852130b60SViresh Kumar 		.mask = PMX_PL_98_MASK | PMX_PL_99_MASK,
308952130b60SViresh Kumar 		.val = PMX_I2C1_PL_98_VAL | PMX_I2C1_PL_99_VAL,
309052130b60SViresh Kumar 	}, {
309152130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
309252130b60SViresh Kumar 		.mask = PMX_I2C1_PORT_SEL_MASK,
309352130b60SViresh Kumar 		.val = PMX_I2C1_PORT_98_99_VAL,
309452130b60SViresh Kumar 	},
309552130b60SViresh Kumar };
309652130b60SViresh Kumar 
309752130b60SViresh Kumar static struct spear_modemux i2c1_modemux[][1] = {
309852130b60SViresh Kumar 	{
309952130b60SViresh Kumar 		/* Select signals on pins 8-9 */
310052130b60SViresh Kumar 		{
310152130b60SViresh Kumar 			.modes = EXTENDED_MODE,
310252130b60SViresh Kumar 			.muxregs = i2c1_ext_8_9_muxreg,
310352130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(i2c1_ext_8_9_muxreg),
310452130b60SViresh Kumar 		},
310552130b60SViresh Kumar 	}, {
310652130b60SViresh Kumar 		/* Select signals on pins 98-99 */
310752130b60SViresh Kumar 		{
310852130b60SViresh Kumar 			.modes = EXTENDED_MODE,
310952130b60SViresh Kumar 			.muxregs = i2c1_ext_98_99_muxreg,
311052130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(i2c1_ext_98_99_muxreg),
311152130b60SViresh Kumar 		},
311252130b60SViresh Kumar 	},
311352130b60SViresh Kumar };
311452130b60SViresh Kumar 
311552130b60SViresh Kumar static struct spear_pingroup i2c1_pingroup[] = {
311652130b60SViresh Kumar 	{
311752130b60SViresh Kumar 		.name = "i2c1_8_9_grp",
311852130b60SViresh Kumar 		.pins = i2c1_pins[0],
311952130b60SViresh Kumar 		.npins = ARRAY_SIZE(i2c1_pins[0]),
312052130b60SViresh Kumar 		.modemuxs = i2c1_modemux[0],
312152130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(i2c1_modemux[0]),
312252130b60SViresh Kumar 	}, {
312352130b60SViresh Kumar 		.name = "i2c1_98_99_grp",
312452130b60SViresh Kumar 		.pins = i2c1_pins[1],
312552130b60SViresh Kumar 		.npins = ARRAY_SIZE(i2c1_pins[1]),
312652130b60SViresh Kumar 		.modemuxs = i2c1_modemux[1],
312752130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(i2c1_modemux[1]),
312852130b60SViresh Kumar 	},
312952130b60SViresh Kumar };
313052130b60SViresh Kumar 
313152130b60SViresh Kumar static const char *const i2c1_grps[] = { "i2c1_8_9_grp", "i2c1_98_99_grp" };
313252130b60SViresh Kumar static struct spear_function i2c1_function = {
313352130b60SViresh Kumar 	.name = "i2c1",
313452130b60SViresh Kumar 	.groups = i2c1_grps,
313552130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(i2c1_grps),
313652130b60SViresh Kumar };
313752130b60SViresh Kumar 
313852130b60SViresh Kumar /* Pad multiplexing for i2c2 device */
313952130b60SViresh Kumar static const unsigned i2c2_pins[][2] = { { 0, 1 }, { 2, 3 }, { 19, 20 },
314052130b60SViresh Kumar 	{ 75, 76 }, { 96, 97 } };
314152130b60SViresh Kumar static struct spear_muxreg i2c2_ext_0_1_muxreg[] = {
314252130b60SViresh Kumar 	{
314352130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
314452130b60SViresh Kumar 		.mask = PMX_FIRDA_MASK,
314552130b60SViresh Kumar 		.val = 0,
314652130b60SViresh Kumar 	}, {
314752130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
314852130b60SViresh Kumar 		.mask = PMX_PL_0_1_MASK,
314952130b60SViresh Kumar 		.val = PMX_I2C2_PL_0_1_VAL,
315052130b60SViresh Kumar 	}, {
315152130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
315252130b60SViresh Kumar 		.mask = PMX_I2C2_PORT_SEL_MASK,
315352130b60SViresh Kumar 		.val = PMX_I2C2_PORT_0_1_VAL,
315452130b60SViresh Kumar 	},
315552130b60SViresh Kumar };
315652130b60SViresh Kumar 
315752130b60SViresh Kumar static struct spear_muxreg i2c2_ext_2_3_muxreg[] = {
315852130b60SViresh Kumar 	{
315952130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
316052130b60SViresh Kumar 		.mask = PMX_UART0_MASK,
316152130b60SViresh Kumar 		.val = 0,
316252130b60SViresh Kumar 	}, {
316352130b60SViresh Kumar 		.reg = IP_SEL_PAD_0_9_REG,
316452130b60SViresh Kumar 		.mask = PMX_PL_2_3_MASK,
316552130b60SViresh Kumar 		.val = PMX_I2C2_PL_2_3_VAL,
316652130b60SViresh Kumar 	}, {
316752130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
316852130b60SViresh Kumar 		.mask = PMX_I2C2_PORT_SEL_MASK,
316952130b60SViresh Kumar 		.val = PMX_I2C2_PORT_2_3_VAL,
317052130b60SViresh Kumar 	},
317152130b60SViresh Kumar };
317252130b60SViresh Kumar 
317352130b60SViresh Kumar static struct spear_muxreg i2c2_ext_19_20_muxreg[] = {
317452130b60SViresh Kumar 	{
317552130b60SViresh Kumar 		.reg = PMX_CONFIG_REG,
317652130b60SViresh Kumar 		.mask = PMX_MII_MASK,
317752130b60SViresh Kumar 		.val = 0,
317852130b60SViresh Kumar 	}, {
317952130b60SViresh Kumar 		.reg = IP_SEL_PAD_10_19_REG,
318052130b60SViresh Kumar 		.mask = PMX_PL_19_MASK,
318152130b60SViresh Kumar 		.val = PMX_I2C2_PL_19_VAL,
318252130b60SViresh Kumar 	}, {
318352130b60SViresh Kumar 		.reg = IP_SEL_PAD_20_29_REG,
318452130b60SViresh Kumar 		.mask = PMX_PL_20_MASK,
318552130b60SViresh Kumar 		.val = PMX_I2C2_PL_20_VAL,
318652130b60SViresh Kumar 	}, {
318752130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
318852130b60SViresh Kumar 		.mask = PMX_I2C2_PORT_SEL_MASK,
318952130b60SViresh Kumar 		.val = PMX_I2C2_PORT_19_20_VAL,
319052130b60SViresh Kumar 	},
319152130b60SViresh Kumar };
319252130b60SViresh Kumar 
319352130b60SViresh Kumar static struct spear_muxreg i2c2_ext_75_76_muxreg[] = {
319452130b60SViresh Kumar 	{
319552130b60SViresh Kumar 		.reg = IP_SEL_PAD_70_79_REG,
319652130b60SViresh Kumar 		.mask = PMX_PL_75_76_MASK,
319752130b60SViresh Kumar 		.val = PMX_I2C2_PL_75_76_VAL,
319852130b60SViresh Kumar 	}, {
319952130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
320052130b60SViresh Kumar 		.mask = PMX_I2C2_PORT_SEL_MASK,
320152130b60SViresh Kumar 		.val = PMX_I2C2_PORT_75_76_VAL,
320252130b60SViresh Kumar 	},
320352130b60SViresh Kumar };
320452130b60SViresh Kumar 
320552130b60SViresh Kumar static struct spear_muxreg i2c2_ext_96_97_muxreg[] = {
320652130b60SViresh Kumar 	{
320752130b60SViresh Kumar 		.reg = IP_SEL_PAD_90_99_REG,
320852130b60SViresh Kumar 		.mask = PMX_PL_96_97_MASK,
320952130b60SViresh Kumar 		.val = PMX_I2C2_PL_96_97_VAL,
321052130b60SViresh Kumar 	}, {
321152130b60SViresh Kumar 		.reg = IP_SEL_MIX_PAD_REG,
321252130b60SViresh Kumar 		.mask = PMX_I2C2_PORT_SEL_MASK,
321352130b60SViresh Kumar 		.val = PMX_I2C2_PORT_96_97_VAL,
321452130b60SViresh Kumar 	},
321552130b60SViresh Kumar };
321652130b60SViresh Kumar 
321752130b60SViresh Kumar static struct spear_modemux i2c2_modemux[][1] = {
321852130b60SViresh Kumar 	{
321952130b60SViresh Kumar 		/* Select signals on pins 0_1 */
322052130b60SViresh Kumar 		{
322152130b60SViresh Kumar 			.modes = EXTENDED_MODE,
322252130b60SViresh Kumar 			.muxregs = i2c2_ext_0_1_muxreg,
322352130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(i2c2_ext_0_1_muxreg),
322452130b60SViresh Kumar 		},
322552130b60SViresh Kumar 	}, {
322652130b60SViresh Kumar 		/* Select signals on pins 2_3 */
322752130b60SViresh Kumar 		{
322852130b60SViresh Kumar 			.modes = EXTENDED_MODE,
322952130b60SViresh Kumar 			.muxregs = i2c2_ext_2_3_muxreg,
323052130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(i2c2_ext_2_3_muxreg),
323152130b60SViresh Kumar 		},
323252130b60SViresh Kumar 	}, {
323352130b60SViresh Kumar 		/* Select signals on pins 19_20 */
323452130b60SViresh Kumar 		{
323552130b60SViresh Kumar 			.modes = EXTENDED_MODE,
323652130b60SViresh Kumar 			.muxregs = i2c2_ext_19_20_muxreg,
323752130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(i2c2_ext_19_20_muxreg),
323852130b60SViresh Kumar 		},
323952130b60SViresh Kumar 	}, {
324052130b60SViresh Kumar 		/* Select signals on pins 75_76 */
324152130b60SViresh Kumar 		{
324252130b60SViresh Kumar 			.modes = EXTENDED_MODE,
324352130b60SViresh Kumar 			.muxregs = i2c2_ext_75_76_muxreg,
324452130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(i2c2_ext_75_76_muxreg),
324552130b60SViresh Kumar 		},
324652130b60SViresh Kumar 	}, {
324752130b60SViresh Kumar 		/* Select signals on pins 96_97 */
324852130b60SViresh Kumar 		{
324952130b60SViresh Kumar 			.modes = EXTENDED_MODE,
325052130b60SViresh Kumar 			.muxregs = i2c2_ext_96_97_muxreg,
325152130b60SViresh Kumar 			.nmuxregs = ARRAY_SIZE(i2c2_ext_96_97_muxreg),
325252130b60SViresh Kumar 		},
325352130b60SViresh Kumar 	},
325452130b60SViresh Kumar };
325552130b60SViresh Kumar 
325652130b60SViresh Kumar static struct spear_pingroup i2c2_pingroup[] = {
325752130b60SViresh Kumar 	{
325852130b60SViresh Kumar 		.name = "i2c2_0_1_grp",
325952130b60SViresh Kumar 		.pins = i2c2_pins[0],
326052130b60SViresh Kumar 		.npins = ARRAY_SIZE(i2c2_pins[0]),
326152130b60SViresh Kumar 		.modemuxs = i2c2_modemux[0],
326252130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(i2c2_modemux[0]),
326352130b60SViresh Kumar 	}, {
326452130b60SViresh Kumar 		.name = "i2c2_2_3_grp",
326552130b60SViresh Kumar 		.pins = i2c2_pins[1],
326652130b60SViresh Kumar 		.npins = ARRAY_SIZE(i2c2_pins[1]),
326752130b60SViresh Kumar 		.modemuxs = i2c2_modemux[1],
326852130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(i2c2_modemux[1]),
326952130b60SViresh Kumar 	}, {
327052130b60SViresh Kumar 		.name = "i2c2_19_20_grp",
327152130b60SViresh Kumar 		.pins = i2c2_pins[2],
327252130b60SViresh Kumar 		.npins = ARRAY_SIZE(i2c2_pins[2]),
327352130b60SViresh Kumar 		.modemuxs = i2c2_modemux[2],
327452130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(i2c2_modemux[2]),
327552130b60SViresh Kumar 	}, {
327652130b60SViresh Kumar 		.name = "i2c2_75_76_grp",
327752130b60SViresh Kumar 		.pins = i2c2_pins[3],
327852130b60SViresh Kumar 		.npins = ARRAY_SIZE(i2c2_pins[3]),
327952130b60SViresh Kumar 		.modemuxs = i2c2_modemux[3],
328052130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(i2c2_modemux[3]),
328152130b60SViresh Kumar 	}, {
328252130b60SViresh Kumar 		.name = "i2c2_96_97_grp",
328352130b60SViresh Kumar 		.pins = i2c2_pins[4],
328452130b60SViresh Kumar 		.npins = ARRAY_SIZE(i2c2_pins[4]),
328552130b60SViresh Kumar 		.modemuxs = i2c2_modemux[4],
328652130b60SViresh Kumar 		.nmodemuxs = ARRAY_SIZE(i2c2_modemux[4]),
328752130b60SViresh Kumar 	},
328852130b60SViresh Kumar };
328952130b60SViresh Kumar 
329052130b60SViresh Kumar static const char *const i2c2_grps[] = { "i2c2_0_1_grp", "i2c2_2_3_grp",
329152130b60SViresh Kumar 	"i2c2_19_20_grp", "i2c2_75_76_grp", "i2c2_96_97_grp" };
329252130b60SViresh Kumar static struct spear_function i2c2_function = {
329352130b60SViresh Kumar 	.name = "i2c2",
329452130b60SViresh Kumar 	.groups = i2c2_grps,
329552130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(i2c2_grps),
329652130b60SViresh Kumar };
329752130b60SViresh Kumar 
329852130b60SViresh Kumar /* pingroups */
329952130b60SViresh Kumar static struct spear_pingroup *spear320_pingroups[] = {
330052130b60SViresh Kumar 	SPEAR3XX_COMMON_PINGROUPS,
330152130b60SViresh Kumar 	&clcd_pingroup,
330252130b60SViresh Kumar 	&emi_pingroup,
330352130b60SViresh Kumar 	&fsmc_8bit_pingroup,
330452130b60SViresh Kumar 	&fsmc_16bit_pingroup,
330552130b60SViresh Kumar 	&spp_pingroup,
330652130b60SViresh Kumar 	&sdhci_led_pingroup,
330752130b60SViresh Kumar 	&sdhci_pingroup[0],
330852130b60SViresh Kumar 	&sdhci_pingroup[1],
330952130b60SViresh Kumar 	&i2s_pingroup,
331052130b60SViresh Kumar 	&uart1_pingroup,
331152130b60SViresh Kumar 	&uart1_modem_pingroup[0],
331252130b60SViresh Kumar 	&uart1_modem_pingroup[1],
331352130b60SViresh Kumar 	&uart1_modem_pingroup[2],
331452130b60SViresh Kumar 	&uart1_modem_pingroup[3],
331552130b60SViresh Kumar 	&uart2_pingroup,
331652130b60SViresh Kumar 	&uart3_pingroup[0],
331752130b60SViresh Kumar 	&uart3_pingroup[1],
331852130b60SViresh Kumar 	&uart3_pingroup[2],
331952130b60SViresh Kumar 	&uart3_pingroup[3],
332052130b60SViresh Kumar 	&uart3_pingroup[4],
332152130b60SViresh Kumar 	&uart3_pingroup[5],
332252130b60SViresh Kumar 	&uart3_pingroup[6],
332352130b60SViresh Kumar 	&uart4_pingroup[0],
332452130b60SViresh Kumar 	&uart4_pingroup[1],
332552130b60SViresh Kumar 	&uart4_pingroup[2],
332652130b60SViresh Kumar 	&uart4_pingroup[3],
332752130b60SViresh Kumar 	&uart4_pingroup[4],
332852130b60SViresh Kumar 	&uart4_pingroup[5],
332952130b60SViresh Kumar 	&uart5_pingroup[0],
333052130b60SViresh Kumar 	&uart5_pingroup[1],
333152130b60SViresh Kumar 	&uart5_pingroup[2],
333252130b60SViresh Kumar 	&uart5_pingroup[3],
333352130b60SViresh Kumar 	&uart6_pingroup[0],
333452130b60SViresh Kumar 	&uart6_pingroup[1],
333552130b60SViresh Kumar 	&rs485_pingroup,
333652130b60SViresh Kumar 	&touchscreen_pingroup,
333752130b60SViresh Kumar 	&can0_pingroup,
333852130b60SViresh Kumar 	&can1_pingroup,
333952130b60SViresh Kumar 	&pwm0_1_pingroup[0],
334052130b60SViresh Kumar 	&pwm0_1_pingroup[1],
334152130b60SViresh Kumar 	&pwm0_1_pingroup[2],
334252130b60SViresh Kumar 	&pwm0_1_pingroup[3],
334352130b60SViresh Kumar 	&pwm0_1_pingroup[4],
334452130b60SViresh Kumar 	&pwm0_1_pingroup[5],
334552130b60SViresh Kumar 	&pwm0_1_pingroup[6],
334652130b60SViresh Kumar 	&pwm2_pingroup[0],
334752130b60SViresh Kumar 	&pwm2_pingroup[1],
334852130b60SViresh Kumar 	&pwm2_pingroup[2],
334952130b60SViresh Kumar 	&pwm2_pingroup[3],
335052130b60SViresh Kumar 	&pwm2_pingroup[4],
335152130b60SViresh Kumar 	&pwm2_pingroup[5],
335252130b60SViresh Kumar 	&pwm2_pingroup[6],
335352130b60SViresh Kumar 	&pwm3_pingroup[0],
335452130b60SViresh Kumar 	&pwm3_pingroup[1],
335552130b60SViresh Kumar 	&pwm3_pingroup[2],
335652130b60SViresh Kumar 	&pwm3_pingroup[3],
335752130b60SViresh Kumar 	&pwm3_pingroup[4],
335852130b60SViresh Kumar 	&pwm3_pingroup[5],
335952130b60SViresh Kumar 	&ssp1_pingroup[0],
336052130b60SViresh Kumar 	&ssp1_pingroup[1],
336152130b60SViresh Kumar 	&ssp1_pingroup[2],
336252130b60SViresh Kumar 	&ssp1_pingroup[3],
336352130b60SViresh Kumar 	&ssp1_pingroup[4],
336452130b60SViresh Kumar 	&ssp2_pingroup[0],
336552130b60SViresh Kumar 	&ssp2_pingroup[1],
336652130b60SViresh Kumar 	&ssp2_pingroup[2],
336752130b60SViresh Kumar 	&ssp2_pingroup[3],
336852130b60SViresh Kumar 	&ssp2_pingroup[4],
336952130b60SViresh Kumar 	&mii2_pingroup,
337052130b60SViresh Kumar 	&mii0_1_pingroup[0],
337152130b60SViresh Kumar 	&mii0_1_pingroup[1],
337252130b60SViresh Kumar 	&i2c1_pingroup[0],
337352130b60SViresh Kumar 	&i2c1_pingroup[1],
337452130b60SViresh Kumar 	&i2c2_pingroup[0],
337552130b60SViresh Kumar 	&i2c2_pingroup[1],
337652130b60SViresh Kumar 	&i2c2_pingroup[2],
337752130b60SViresh Kumar 	&i2c2_pingroup[3],
337852130b60SViresh Kumar 	&i2c2_pingroup[4],
337952130b60SViresh Kumar };
338052130b60SViresh Kumar 
338152130b60SViresh Kumar /* functions */
338252130b60SViresh Kumar static struct spear_function *spear320_functions[] = {
338352130b60SViresh Kumar 	SPEAR3XX_COMMON_FUNCTIONS,
338452130b60SViresh Kumar 	&clcd_function,
338552130b60SViresh Kumar 	&emi_function,
338652130b60SViresh Kumar 	&fsmc_function,
338752130b60SViresh Kumar 	&spp_function,
338852130b60SViresh Kumar 	&sdhci_function,
338952130b60SViresh Kumar 	&i2s_function,
339052130b60SViresh Kumar 	&uart1_function,
339152130b60SViresh Kumar 	&uart1_modem_function,
339252130b60SViresh Kumar 	&uart2_function,
339352130b60SViresh Kumar 	&uart3_function,
339452130b60SViresh Kumar 	&uart4_function,
339552130b60SViresh Kumar 	&uart5_function,
339652130b60SViresh Kumar 	&uart6_function,
339752130b60SViresh Kumar 	&rs485_function,
339852130b60SViresh Kumar 	&touchscreen_function,
339952130b60SViresh Kumar 	&can0_function,
340052130b60SViresh Kumar 	&can1_function,
340152130b60SViresh Kumar 	&pwm0_1_function,
340252130b60SViresh Kumar 	&pwm2_function,
340352130b60SViresh Kumar 	&pwm3_function,
340452130b60SViresh Kumar 	&ssp1_function,
340552130b60SViresh Kumar 	&ssp2_function,
340652130b60SViresh Kumar 	&mii2_function,
340752130b60SViresh Kumar 	&mii0_1_function,
340852130b60SViresh Kumar 	&i2c1_function,
340952130b60SViresh Kumar 	&i2c2_function,
341052130b60SViresh Kumar };
341152130b60SViresh Kumar 
34125dfe10b4SKiran Padwal static const struct of_device_id spear320_pinctrl_of_match[] = {
341352130b60SViresh Kumar 	{
341452130b60SViresh Kumar 		.compatible = "st,spear320-pinmux",
341552130b60SViresh Kumar 	},
341652130b60SViresh Kumar 	{},
341752130b60SViresh Kumar };
341852130b60SViresh Kumar 
spear320_pinctrl_probe(struct platform_device * pdev)3419150632b0SGreg Kroah-Hartman static int spear320_pinctrl_probe(struct platform_device *pdev)
342052130b60SViresh Kumar {
342152130b60SViresh Kumar 	spear3xx_machdata.groups = spear320_pingroups;
342252130b60SViresh Kumar 	spear3xx_machdata.ngroups = ARRAY_SIZE(spear320_pingroups);
342352130b60SViresh Kumar 	spear3xx_machdata.functions = spear320_functions;
342452130b60SViresh Kumar 	spear3xx_machdata.nfunctions = ARRAY_SIZE(spear320_functions);
342552130b60SViresh Kumar 
342652130b60SViresh Kumar 	spear3xx_machdata.modes_supported = true;
342752130b60SViresh Kumar 	spear3xx_machdata.pmx_modes = spear320_pmx_modes;
342852130b60SViresh Kumar 	spear3xx_machdata.npmx_modes = ARRAY_SIZE(spear320_pmx_modes);
342952130b60SViresh Kumar 
343052130b60SViresh Kumar 	pmx_init_addr(&spear3xx_machdata, PMX_CONFIG_REG);
3431f4f8e563SViresh Kumar 	pmx_init_gpio_pingroup_addr(spear3xx_machdata.gpio_pingroups,
3432f4f8e563SViresh Kumar 			spear3xx_machdata.ngpio_pingroups, PMX_CONFIG_REG);
343352130b60SViresh Kumar 
343456082156SQinglang Miao 	return spear_pinctrl_probe(pdev, &spear3xx_machdata);
343552130b60SViresh Kumar }
343652130b60SViresh Kumar 
343752130b60SViresh Kumar static struct platform_driver spear320_pinctrl_driver = {
343852130b60SViresh Kumar 	.driver = {
343952130b60SViresh Kumar 		.name = DRIVER_NAME,
344052130b60SViresh Kumar 		.of_match_table = spear320_pinctrl_of_match,
344152130b60SViresh Kumar 	},
344252130b60SViresh Kumar 	.probe = spear320_pinctrl_probe,
344352130b60SViresh Kumar };
344452130b60SViresh Kumar 
spear320_pinctrl_init(void)344552130b60SViresh Kumar static int __init spear320_pinctrl_init(void)
344652130b60SViresh Kumar {
344752130b60SViresh Kumar 	return platform_driver_register(&spear320_pinctrl_driver);
344852130b60SViresh Kumar }
344952130b60SViresh Kumar arch_initcall(spear320_pinctrl_init);
3450