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