1 /*
2 * Driver for the ST Microelectronics SPEAr320 pinmux
3 *
4 * Copyright (C) 2012 ST Microelectronics
5 * Viresh Kumar <vireshk@kernel.org>
6 *
7 * This file is licensed under the terms of the GNU General Public
8 * License version 2. This program is licensed "as is" without any
9 * warranty of any kind, whether express or implied.
10 */
11
12 #include <linux/err.h>
13 #include <linux/init.h>
14 #include <linux/platform_device.h>
15 #include "pinctrl-spear3xx.h"
16
17 #define DRIVER_NAME "spear320-pinmux"
18
19 /* addresses */
20 #define PMX_CONFIG_REG 0x0C
21 #define MODE_CONFIG_REG 0x10
22 #define MODE_EXT_CONFIG_REG 0x18
23
24 /* modes */
25 #define AUTO_NET_SMII_MODE (1 << 0)
26 #define AUTO_NET_MII_MODE (1 << 1)
27 #define AUTO_EXP_MODE (1 << 2)
28 #define SMALL_PRINTERS_MODE (1 << 3)
29 #define EXTENDED_MODE (1 << 4)
30
31 static struct spear_pmx_mode pmx_mode_auto_net_smii = {
32 .name = "Automation Networking SMII mode",
33 .mode = AUTO_NET_SMII_MODE,
34 .reg = MODE_CONFIG_REG,
35 .mask = 0x00000007,
36 .val = 0x0,
37 };
38
39 static struct spear_pmx_mode pmx_mode_auto_net_mii = {
40 .name = "Automation Networking MII mode",
41 .mode = AUTO_NET_MII_MODE,
42 .reg = MODE_CONFIG_REG,
43 .mask = 0x00000007,
44 .val = 0x1,
45 };
46
47 static struct spear_pmx_mode pmx_mode_auto_exp = {
48 .name = "Automation Expanded mode",
49 .mode = AUTO_EXP_MODE,
50 .reg = MODE_CONFIG_REG,
51 .mask = 0x00000007,
52 .val = 0x2,
53 };
54
55 static struct spear_pmx_mode pmx_mode_small_printers = {
56 .name = "Small Printers mode",
57 .mode = SMALL_PRINTERS_MODE,
58 .reg = MODE_CONFIG_REG,
59 .mask = 0x00000007,
60 .val = 0x3,
61 };
62
63 static struct spear_pmx_mode pmx_mode_extended = {
64 .name = "extended mode",
65 .mode = EXTENDED_MODE,
66 .reg = MODE_EXT_CONFIG_REG,
67 .mask = 0x00000001,
68 .val = 0x1,
69 };
70
71 static struct spear_pmx_mode *spear320_pmx_modes[] = {
72 &pmx_mode_auto_net_smii,
73 &pmx_mode_auto_net_mii,
74 &pmx_mode_auto_exp,
75 &pmx_mode_small_printers,
76 &pmx_mode_extended,
77 };
78
79 /* Extended mode registers and their offsets */
80 #define EXT_CTRL_REG 0x0018
81 #define MII_MDIO_MASK (1 << 4)
82 #define MII_MDIO_10_11_VAL 0
83 #define MII_MDIO_81_VAL (1 << 4)
84 #define EMI_FSMC_DYNAMIC_MUX_MASK (1 << 5)
85 #define MAC_MODE_MII 0
86 #define MAC_MODE_RMII 1
87 #define MAC_MODE_SMII 2
88 #define MAC_MODE_SS_SMII 3
89 #define MAC_MODE_MASK 0x3
90 #define MAC1_MODE_SHIFT 16
91 #define MAC2_MODE_SHIFT 18
92
93 #define IP_SEL_PAD_0_9_REG 0x00A4
94 #define PMX_PL_0_1_MASK (0x3F << 0)
95 #define PMX_UART2_PL_0_1_VAL 0x0
96 #define PMX_I2C2_PL_0_1_VAL (0x4 | (0x4 << 3))
97
98 #define PMX_PL_2_3_MASK (0x3F << 6)
99 #define PMX_I2C2_PL_2_3_VAL 0x0
100 #define PMX_UART6_PL_2_3_VAL ((0x1 << 6) | (0x1 << 9))
101 #define PMX_UART1_ENH_PL_2_3_VAL ((0x4 << 6) | (0x4 << 9))
102
103 #define PMX_PL_4_5_MASK (0x3F << 12)
104 #define PMX_UART5_PL_4_5_VAL ((0x1 << 12) | (0x1 << 15))
105 #define PMX_UART1_ENH_PL_4_5_VAL ((0x4 << 12) | (0x4 << 15))
106 #define PMX_PL_5_MASK (0x7 << 15)
107 #define PMX_TOUCH_Y_PL_5_VAL 0x0
108
109 #define PMX_PL_6_7_MASK (0x3F << 18)
110 #define PMX_PL_6_MASK (0x7 << 18)
111 #define PMX_PL_7_MASK (0x7 << 21)
112 #define PMX_UART4_PL_6_7_VAL ((0x1 << 18) | (0x1 << 21))
113 #define PMX_PWM_3_PL_6_VAL (0x2 << 18)
114 #define PMX_PWM_2_PL_7_VAL (0x2 << 21)
115 #define PMX_UART1_ENH_PL_6_7_VAL ((0x4 << 18) | (0x4 << 21))
116
117 #define PMX_PL_8_9_MASK (0x3F << 24)
118 #define PMX_UART3_PL_8_9_VAL ((0x1 << 24) | (0x1 << 27))
119 #define PMX_PWM_0_1_PL_8_9_VAL ((0x2 << 24) | (0x2 << 27))
120 #define PMX_I2C1_PL_8_9_VAL ((0x4 << 24) | (0x4 << 27))
121
122 #define IP_SEL_PAD_10_19_REG 0x00A8
123 #define PMX_PL_10_11_MASK (0x3F << 0)
124 #define PMX_SMII_PL_10_11_VAL 0
125 #define PMX_RMII_PL_10_11_VAL ((0x4 << 0) | (0x4 << 3))
126
127 #define PMX_PL_12_MASK (0x7 << 6)
128 #define PMX_PWM3_PL_12_VAL 0
129 #define PMX_SDHCI_CD_PL_12_VAL (0x4 << 6)
130
131 #define PMX_PL_13_14_MASK (0x3F << 9)
132 #define PMX_PL_13_MASK (0x7 << 9)
133 #define PMX_PL_14_MASK (0x7 << 12)
134 #define PMX_SSP2_PL_13_14_15_16_VAL 0
135 #define PMX_UART4_PL_13_14_VAL ((0x1 << 9) | (0x1 << 12))
136 #define PMX_RMII_PL_13_14_VAL ((0x4 << 9) | (0x4 << 12))
137 #define PMX_PWM2_PL_13_VAL (0x2 << 9)
138 #define PMX_PWM1_PL_14_VAL (0x2 << 12)
139
140 #define PMX_PL_15_MASK (0x7 << 15)
141 #define PMX_PWM0_PL_15_VAL (0x2 << 15)
142 #define PMX_PL_15_16_MASK (0x3F << 15)
143 #define PMX_UART3_PL_15_16_VAL ((0x1 << 15) | (0x1 << 18))
144 #define PMX_RMII_PL_15_16_VAL ((0x4 << 15) | (0x4 << 18))
145
146 #define PMX_PL_17_18_MASK (0x3F << 21)
147 #define PMX_SSP1_PL_17_18_19_20_VAL 0
148 #define PMX_RMII_PL_17_18_VAL ((0x4 << 21) | (0x4 << 24))
149
150 #define PMX_PL_19_MASK (0x7 << 27)
151 #define PMX_I2C2_PL_19_VAL (0x1 << 27)
152 #define PMX_RMII_PL_19_VAL (0x4 << 27)
153
154 #define IP_SEL_PAD_20_29_REG 0x00AC
155 #define PMX_PL_20_MASK (0x7 << 0)
156 #define PMX_I2C2_PL_20_VAL (0x1 << 0)
157 #define PMX_RMII_PL_20_VAL (0x4 << 0)
158
159 #define PMX_PL_21_TO_27_MASK (0x1FFFFF << 3)
160 #define PMX_SMII_PL_21_TO_27_VAL 0
161 #define PMX_RMII_PL_21_TO_27_VAL ((0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12) | (0x4 << 15) | (0x4 << 18) | (0x4 << 21))
162
163 #define PMX_PL_28_29_MASK (0x3F << 24)
164 #define PMX_PL_28_MASK (0x7 << 24)
165 #define PMX_PL_29_MASK (0x7 << 27)
166 #define PMX_UART1_PL_28_29_VAL 0
167 #define PMX_PWM_3_PL_28_VAL (0x4 << 24)
168 #define PMX_PWM_2_PL_29_VAL (0x4 << 27)
169
170 #define IP_SEL_PAD_30_39_REG 0x00B0
171 #define PMX_PL_30_31_MASK (0x3F << 0)
172 #define PMX_CAN1_PL_30_31_VAL (0)
173 #define PMX_PL_30_MASK (0x7 << 0)
174 #define PMX_PL_31_MASK (0x7 << 3)
175 #define PMX_PWM1_EXT_PL_30_VAL (0x4 << 0)
176 #define PMX_PWM0_EXT_PL_31_VAL (0x4 << 3)
177 #define PMX_UART1_ENH_PL_31_VAL (0x3 << 3)
178
179 #define PMX_PL_32_33_MASK (0x3F << 6)
180 #define PMX_CAN0_PL_32_33_VAL 0
181 #define PMX_UART1_ENH_PL_32_33_VAL ((0x3 << 6) | (0x3 << 9))
182 #define PMX_SSP2_PL_32_33_VAL ((0x4 << 6) | (0x4 << 9))
183
184 #define PMX_PL_34_MASK (0x7 << 12)
185 #define PMX_PWM2_PL_34_VAL 0
186 #define PMX_UART1_ENH_PL_34_VAL (0x2 << 12)
187 #define PMX_SSP2_PL_34_VAL (0x4 << 12)
188
189 #define PMX_PL_35_MASK (0x7 << 15)
190 #define PMX_I2S_REF_CLK_PL_35_VAL 0
191 #define PMX_UART1_ENH_PL_35_VAL (0x2 << 15)
192 #define PMX_SSP2_PL_35_VAL (0x4 << 15)
193
194 #define PMX_PL_36_MASK (0x7 << 18)
195 #define PMX_TOUCH_X_PL_36_VAL 0
196 #define PMX_UART1_ENH_PL_36_VAL (0x2 << 18)
197 #define PMX_SSP1_PL_36_VAL (0x4 << 18)
198
199 #define PMX_PL_37_38_MASK (0x3F << 21)
200 #define PMX_PWM0_1_PL_37_38_VAL 0
201 #define PMX_UART5_PL_37_38_VAL ((0x2 << 21) | (0x2 << 24))
202 #define PMX_SSP1_PL_37_38_VAL ((0x4 << 21) | (0x4 << 24))
203
204 #define PMX_PL_39_MASK (0x7 << 27)
205 #define PMX_I2S_PL_39_VAL 0
206 #define PMX_UART4_PL_39_VAL (0x2 << 27)
207 #define PMX_SSP1_PL_39_VAL (0x4 << 27)
208
209 #define IP_SEL_PAD_40_49_REG 0x00B4
210 #define PMX_PL_40_MASK (0x7 << 0)
211 #define PMX_I2S_PL_40_VAL 0
212 #define PMX_UART4_PL_40_VAL (0x2 << 0)
213 #define PMX_PWM3_PL_40_VAL (0x4 << 0)
214
215 #define PMX_PL_41_42_MASK (0x3F << 3)
216 #define PMX_PL_41_MASK (0x7 << 3)
217 #define PMX_PL_42_MASK (0x7 << 6)
218 #define PMX_I2S_PL_41_42_VAL 0
219 #define PMX_UART3_PL_41_42_VAL ((0x2 << 3) | (0x2 << 6))
220 #define PMX_PWM2_PL_41_VAL (0x4 << 3)
221 #define PMX_PWM1_PL_42_VAL (0x4 << 6)
222
223 #define PMX_PL_43_MASK (0x7 << 9)
224 #define PMX_SDHCI_PL_43_VAL 0
225 #define PMX_UART1_ENH_PL_43_VAL (0x2 << 9)
226 #define PMX_PWM0_PL_43_VAL (0x4 << 9)
227
228 #define PMX_PL_44_45_MASK (0x3F << 12)
229 #define PMX_SDHCI_PL_44_45_VAL 0
230 #define PMX_UART1_ENH_PL_44_45_VAL ((0x2 << 12) | (0x2 << 15))
231 #define PMX_SSP2_PL_44_45_VAL ((0x4 << 12) | (0x4 << 15))
232
233 #define PMX_PL_46_47_MASK (0x3F << 18)
234 #define PMX_SDHCI_PL_46_47_VAL 0
235 #define PMX_FSMC_EMI_PL_46_47_VAL ((0x2 << 18) | (0x2 << 21))
236 #define PMX_SSP2_PL_46_47_VAL ((0x4 << 18) | (0x4 << 21))
237
238 #define PMX_PL_48_49_MASK (0x3F << 24)
239 #define PMX_SDHCI_PL_48_49_VAL 0
240 #define PMX_FSMC_EMI_PL_48_49_VAL ((0x2 << 24) | (0x2 << 27))
241 #define PMX_SSP1_PL_48_49_VAL ((0x4 << 24) | (0x4 << 27))
242
243 #define IP_SEL_PAD_50_59_REG 0x00B8
244 #define PMX_PL_50_51_MASK (0x3F << 0)
245 #define PMX_EMI_PL_50_51_VAL ((0x2 << 0) | (0x2 << 3))
246 #define PMX_SSP1_PL_50_51_VAL ((0x4 << 0) | (0x4 << 3))
247 #define PMX_PL_50_MASK (0x7 << 0)
248 #define PMX_PL_51_MASK (0x7 << 3)
249 #define PMX_SDHCI_PL_50_VAL 0
250 #define PMX_SDHCI_CD_PL_51_VAL 0
251
252 #define PMX_PL_52_53_MASK (0x3F << 6)
253 #define PMX_FSMC_PL_52_53_VAL 0
254 #define PMX_EMI_PL_52_53_VAL ((0x2 << 6) | (0x2 << 9))
255 #define PMX_UART3_PL_52_53_VAL ((0x4 << 6) | (0x4 << 9))
256
257 #define PMX_PL_54_55_56_MASK (0x1FF << 12)
258 #define PMX_FSMC_EMI_PL_54_55_56_VAL ((0x2 << 12) | (0x2 << 15) | (0x2 << 18))
259
260 #define PMX_PL_57_MASK (0x7 << 21)
261 #define PMX_FSMC_PL_57_VAL 0
262 #define PMX_PWM3_PL_57_VAL (0x4 << 21)
263
264 #define PMX_PL_58_59_MASK (0x3F << 24)
265 #define PMX_PL_58_MASK (0x7 << 24)
266 #define PMX_PL_59_MASK (0x7 << 27)
267 #define PMX_FSMC_EMI_PL_58_59_VAL ((0x2 << 24) | (0x2 << 27))
268 #define PMX_PWM2_PL_58_VAL (0x4 << 24)
269 #define PMX_PWM1_PL_59_VAL (0x4 << 27)
270
271 #define IP_SEL_PAD_60_69_REG 0x00BC
272 #define PMX_PL_60_MASK (0x7 << 0)
273 #define PMX_FSMC_PL_60_VAL 0
274 #define PMX_PWM0_PL_60_VAL (0x4 << 0)
275
276 #define PMX_PL_61_TO_64_MASK (0xFFF << 3)
277 #define PMX_FSMC_PL_61_TO_64_VAL ((0x2 << 3) | (0x2 << 6) | (0x2 << 9) | (0x2 << 12))
278 #define PMX_SSP2_PL_61_TO_64_VAL ((0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12))
279
280 #define PMX_PL_65_TO_68_MASK (0xFFF << 15)
281 #define PMX_FSMC_PL_65_TO_68_VAL ((0x2 << 15) | (0x2 << 18) | (0x2 << 21) | (0x2 << 24))
282 #define PMX_SSP1_PL_65_TO_68_VAL ((0x4 << 15) | (0x4 << 18) | (0x4 << 21) | (0x4 << 24))
283
284 #define PMX_PL_69_MASK (0x7 << 27)
285 #define PMX_CLCD_PL_69_VAL (0)
286 #define PMX_EMI_PL_69_VAL (0x2 << 27)
287 #define PMX_SPP_PL_69_VAL (0x3 << 27)
288 #define PMX_UART5_PL_69_VAL (0x4 << 27)
289
290 #define IP_SEL_PAD_70_79_REG 0x00C0
291 #define PMX_PL_70_MASK (0x7 << 0)
292 #define PMX_CLCD_PL_70_VAL (0)
293 #define PMX_FSMC_EMI_PL_70_VAL (0x2 << 0)
294 #define PMX_SPP_PL_70_VAL (0x3 << 0)
295 #define PMX_UART5_PL_70_VAL (0x4 << 0)
296
297 #define PMX_PL_71_72_MASK (0x3F << 3)
298 #define PMX_CLCD_PL_71_72_VAL (0)
299 #define PMX_FSMC_EMI_PL_71_72_VAL ((0x2 << 3) | (0x2 << 6))
300 #define PMX_SPP_PL_71_72_VAL ((0x3 << 3) | (0x3 << 6))
301 #define PMX_UART4_PL_71_72_VAL ((0x4 << 3) | (0x4 << 6))
302
303 #define PMX_PL_73_MASK (0x7 << 9)
304 #define PMX_CLCD_PL_73_VAL (0)
305 #define PMX_FSMC_EMI_PL_73_VAL (0x2 << 9)
306 #define PMX_SPP_PL_73_VAL (0x3 << 9)
307 #define PMX_UART3_PL_73_VAL (0x4 << 9)
308
309 #define PMX_PL_74_MASK (0x7 << 12)
310 #define PMX_CLCD_PL_74_VAL (0)
311 #define PMX_EMI_PL_74_VAL (0x2 << 12)
312 #define PMX_SPP_PL_74_VAL (0x3 << 12)
313 #define PMX_UART3_PL_74_VAL (0x4 << 12)
314
315 #define PMX_PL_75_76_MASK (0x3F << 15)
316 #define PMX_CLCD_PL_75_76_VAL (0)
317 #define PMX_EMI_PL_75_76_VAL ((0x2 << 15) | (0x2 << 18))
318 #define PMX_SPP_PL_75_76_VAL ((0x3 << 15) | (0x3 << 18))
319 #define PMX_I2C2_PL_75_76_VAL ((0x4 << 15) | (0x4 << 18))
320
321 #define PMX_PL_77_78_79_MASK (0x1FF << 21)
322 #define PMX_CLCD_PL_77_78_79_VAL (0)
323 #define PMX_EMI_PL_77_78_79_VAL ((0x2 << 21) | (0x2 << 24) | (0x2 << 27))
324 #define PMX_SPP_PL_77_78_79_VAL ((0x3 << 21) | (0x3 << 24) | (0x3 << 27))
325 #define PMX_RS485_PL_77_78_79_VAL ((0x4 << 21) | (0x4 << 24) | (0x4 << 27))
326
327 #define IP_SEL_PAD_80_89_REG 0x00C4
328 #define PMX_PL_80_TO_85_MASK (0x3FFFF << 0)
329 #define PMX_CLCD_PL_80_TO_85_VAL 0
330 #define PMX_MII2_PL_80_TO_85_VAL ((0x1 << 0) | (0x1 << 3) | (0x1 << 6) | (0x1 << 9) | (0x1 << 12) | (0x1 << 15))
331 #define PMX_EMI_PL_80_TO_85_VAL ((0x2 << 0) | (0x2 << 3) | (0x2 << 6) | (0x2 << 9) | (0x2 << 12) | (0x2 << 15))
332 #define PMX_SPP_PL_80_TO_85_VAL ((0x3 << 0) | (0x3 << 3) | (0x3 << 6) | (0x3 << 9) | (0x3 << 12) | (0x3 << 15))
333 #define PMX_UART1_ENH_PL_80_TO_85_VAL ((0x4 << 0) | (0x4 << 3) | (0x4 << 6) | (0x4 << 9) | (0x4 << 12) | (0x4 << 15))
334
335 #define PMX_PL_86_87_MASK (0x3F << 18)
336 #define PMX_PL_86_MASK (0x7 << 18)
337 #define PMX_PL_87_MASK (0x7 << 21)
338 #define PMX_CLCD_PL_86_87_VAL 0
339 #define PMX_MII2_PL_86_87_VAL ((0x1 << 18) | (0x1 << 21))
340 #define PMX_EMI_PL_86_87_VAL ((0x2 << 18) | (0x2 << 21))
341 #define PMX_PWM3_PL_86_VAL (0x4 << 18)
342 #define PMX_PWM2_PL_87_VAL (0x4 << 21)
343
344 #define PMX_PL_88_89_MASK (0x3F << 24)
345 #define PMX_CLCD_PL_88_89_VAL 0
346 #define PMX_MII2_PL_88_89_VAL ((0x1 << 24) | (0x1 << 27))
347 #define PMX_EMI_PL_88_89_VAL ((0x2 << 24) | (0x2 << 27))
348 #define PMX_UART6_PL_88_89_VAL ((0x3 << 24) | (0x3 << 27))
349 #define PMX_PWM0_1_PL_88_89_VAL ((0x4 << 24) | (0x4 << 27))
350
351 #define IP_SEL_PAD_90_99_REG 0x00C8
352 #define PMX_PL_90_91_MASK (0x3F << 0)
353 #define PMX_CLCD_PL_90_91_VAL 0
354 #define PMX_MII2_PL_90_91_VAL ((0x1 << 0) | (0x1 << 3))
355 #define PMX_EMI1_PL_90_91_VAL ((0x2 << 0) | (0x2 << 3))
356 #define PMX_UART5_PL_90_91_VAL ((0x3 << 0) | (0x3 << 3))
357 #define PMX_SSP2_PL_90_91_VAL ((0x4 << 0) | (0x4 << 3))
358
359 #define PMX_PL_92_93_MASK (0x3F << 6)
360 #define PMX_CLCD_PL_92_93_VAL 0
361 #define PMX_MII2_PL_92_93_VAL ((0x1 << 6) | (0x1 << 9))
362 #define PMX_EMI1_PL_92_93_VAL ((0x2 << 6) | (0x2 << 9))
363 #define PMX_UART4_PL_92_93_VAL ((0x3 << 6) | (0x3 << 9))
364 #define PMX_SSP2_PL_92_93_VAL ((0x4 << 6) | (0x4 << 9))
365
366 #define PMX_PL_94_95_MASK (0x3F << 12)
367 #define PMX_CLCD_PL_94_95_VAL 0
368 #define PMX_MII2_PL_94_95_VAL ((0x1 << 12) | (0x1 << 15))
369 #define PMX_EMI1_PL_94_95_VAL ((0x2 << 12) | (0x2 << 15))
370 #define PMX_UART3_PL_94_95_VAL ((0x3 << 12) | (0x3 << 15))
371 #define PMX_SSP1_PL_94_95_VAL ((0x4 << 12) | (0x4 << 15))
372
373 #define PMX_PL_96_97_MASK (0x3F << 18)
374 #define PMX_CLCD_PL_96_97_VAL 0
375 #define PMX_MII2_PL_96_97_VAL ((0x1 << 18) | (0x1 << 21))
376 #define PMX_EMI1_PL_96_97_VAL ((0x2 << 18) | (0x2 << 21))
377 #define PMX_I2C2_PL_96_97_VAL ((0x3 << 18) | (0x3 << 21))
378 #define PMX_SSP1_PL_96_97_VAL ((0x4 << 18) | (0x4 << 21))
379
380 #define PMX_PL_98_MASK (0x7 << 24)
381 #define PMX_CLCD_PL_98_VAL 0
382 #define PMX_I2C1_PL_98_VAL (0x2 << 24)
383 #define PMX_UART3_PL_98_VAL (0x4 << 24)
384
385 #define PMX_PL_99_MASK (0x7 << 27)
386 #define PMX_SDHCI_PL_99_VAL 0
387 #define PMX_I2C1_PL_99_VAL (0x2 << 27)
388 #define PMX_UART3_PL_99_VAL (0x4 << 27)
389
390 #define IP_SEL_MIX_PAD_REG 0x00CC
391 #define PMX_PL_100_101_MASK (0x3F << 0)
392 #define PMX_SDHCI_PL_100_101_VAL 0
393 #define PMX_UART4_PL_100_101_VAL ((0x4 << 0) | (0x4 << 3))
394
395 #define PMX_SSP1_PORT_SEL_MASK (0x7 << 8)
396 #define PMX_SSP1_PORT_94_TO_97_VAL 0
397 #define PMX_SSP1_PORT_65_TO_68_VAL (0x1 << 8)
398 #define PMX_SSP1_PORT_48_TO_51_VAL (0x2 << 8)
399 #define PMX_SSP1_PORT_36_TO_39_VAL (0x3 << 8)
400 #define PMX_SSP1_PORT_17_TO_20_VAL (0x4 << 8)
401
402 #define PMX_SSP2_PORT_SEL_MASK (0x7 << 11)
403 #define PMX_SSP2_PORT_90_TO_93_VAL 0
404 #define PMX_SSP2_PORT_61_TO_64_VAL (0x1 << 11)
405 #define PMX_SSP2_PORT_44_TO_47_VAL (0x2 << 11)
406 #define PMX_SSP2_PORT_32_TO_35_VAL (0x3 << 11)
407 #define PMX_SSP2_PORT_13_TO_16_VAL (0x4 << 11)
408
409 #define PMX_UART1_ENH_PORT_SEL_MASK (0x3 << 14)
410 #define PMX_UART1_ENH_PORT_81_TO_85_VAL 0
411 #define PMX_UART1_ENH_PORT_44_45_34_36_VAL (0x1 << 14)
412 #define PMX_UART1_ENH_PORT_32_TO_34_36_VAL (0x2 << 14)
413 #define PMX_UART1_ENH_PORT_3_TO_5_7_VAL (0x3 << 14)
414
415 #define PMX_UART3_PORT_SEL_MASK (0x7 << 16)
416 #define PMX_UART3_PORT_94_VAL 0
417 #define PMX_UART3_PORT_73_VAL (0x1 << 16)
418 #define PMX_UART3_PORT_52_VAL (0x2 << 16)
419 #define PMX_UART3_PORT_41_VAL (0x3 << 16)
420 #define PMX_UART3_PORT_15_VAL (0x4 << 16)
421 #define PMX_UART3_PORT_8_VAL (0x5 << 16)
422 #define PMX_UART3_PORT_99_VAL (0x6 << 16)
423
424 #define PMX_UART4_PORT_SEL_MASK (0x7 << 19)
425 #define PMX_UART4_PORT_92_VAL 0
426 #define PMX_UART4_PORT_71_VAL (0x1 << 19)
427 #define PMX_UART4_PORT_39_VAL (0x2 << 19)
428 #define PMX_UART4_PORT_13_VAL (0x3 << 19)
429 #define PMX_UART4_PORT_6_VAL (0x4 << 19)
430 #define PMX_UART4_PORT_101_VAL (0x5 << 19)
431
432 #define PMX_UART5_PORT_SEL_MASK (0x3 << 22)
433 #define PMX_UART5_PORT_90_VAL 0
434 #define PMX_UART5_PORT_69_VAL (0x1 << 22)
435 #define PMX_UART5_PORT_37_VAL (0x2 << 22)
436 #define PMX_UART5_PORT_4_VAL (0x3 << 22)
437
438 #define PMX_UART6_PORT_SEL_MASK (0x1 << 24)
439 #define PMX_UART6_PORT_88_VAL 0
440 #define PMX_UART6_PORT_2_VAL (0x1 << 24)
441
442 #define PMX_I2C1_PORT_SEL_MASK (0x1 << 25)
443 #define PMX_I2C1_PORT_8_9_VAL 0
444 #define PMX_I2C1_PORT_98_99_VAL (0x1 << 25)
445
446 #define PMX_I2C2_PORT_SEL_MASK (0x3 << 26)
447 #define PMX_I2C2_PORT_96_97_VAL 0
448 #define PMX_I2C2_PORT_75_76_VAL (0x1 << 26)
449 #define PMX_I2C2_PORT_19_20_VAL (0x2 << 26)
450 #define PMX_I2C2_PORT_2_3_VAL (0x3 << 26)
451 #define PMX_I2C2_PORT_0_1_VAL (0x4 << 26)
452
453 #define PMX_SDHCI_CD_PORT_SEL_MASK (0x1 << 29)
454 #define PMX_SDHCI_CD_PORT_12_VAL 0
455 #define PMX_SDHCI_CD_PORT_51_VAL (0x1 << 29)
456
457 /* Pad multiplexing for CLCD device */
458 static const unsigned clcd_pins[] = { 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
459 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
460 97 };
461 static struct spear_muxreg clcd_muxreg[] = {
462 {
463 .reg = IP_SEL_PAD_60_69_REG,
464 .mask = PMX_PL_69_MASK,
465 .val = PMX_CLCD_PL_69_VAL,
466 }, {
467 .reg = IP_SEL_PAD_70_79_REG,
468 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK |
469 PMX_PL_74_MASK | PMX_PL_75_76_MASK |
470 PMX_PL_77_78_79_MASK,
471 .val = PMX_CLCD_PL_70_VAL | PMX_CLCD_PL_71_72_VAL |
472 PMX_CLCD_PL_73_VAL | PMX_CLCD_PL_74_VAL |
473 PMX_CLCD_PL_75_76_VAL | PMX_CLCD_PL_77_78_79_VAL,
474 }, {
475 .reg = IP_SEL_PAD_80_89_REG,
476 .mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK |
477 PMX_PL_88_89_MASK,
478 .val = PMX_CLCD_PL_80_TO_85_VAL | PMX_CLCD_PL_86_87_VAL |
479 PMX_CLCD_PL_88_89_VAL,
480 }, {
481 .reg = IP_SEL_PAD_90_99_REG,
482 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK |
483 PMX_PL_94_95_MASK | PMX_PL_96_97_MASK | PMX_PL_98_MASK,
484 .val = PMX_CLCD_PL_90_91_VAL | PMX_CLCD_PL_92_93_VAL |
485 PMX_CLCD_PL_94_95_VAL | PMX_CLCD_PL_96_97_VAL |
486 PMX_CLCD_PL_98_VAL,
487 },
488 };
489
490 static struct spear_modemux clcd_modemux[] = {
491 {
492 .modes = EXTENDED_MODE,
493 .muxregs = clcd_muxreg,
494 .nmuxregs = ARRAY_SIZE(clcd_muxreg),
495 },
496 };
497
498 static struct spear_pingroup clcd_pingroup = {
499 .name = "clcd_grp",
500 .pins = clcd_pins,
501 .npins = ARRAY_SIZE(clcd_pins),
502 .modemuxs = clcd_modemux,
503 .nmodemuxs = ARRAY_SIZE(clcd_modemux),
504 };
505
506 static const char *const clcd_grps[] = { "clcd_grp" };
507 static struct spear_function clcd_function = {
508 .name = "clcd",
509 .groups = clcd_grps,
510 .ngroups = ARRAY_SIZE(clcd_grps),
511 };
512
513 /* Pad multiplexing for EMI (Parallel NOR flash) device */
514 static const unsigned emi_pins[] = { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
515 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
516 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
517 93, 94, 95, 96, 97 };
518 static struct spear_muxreg emi_muxreg[] = {
519 {
520 .reg = PMX_CONFIG_REG,
521 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
522 .val = 0,
523 },
524 };
525
526 static struct spear_muxreg emi_ext_muxreg[] = {
527 {
528 .reg = IP_SEL_PAD_40_49_REG,
529 .mask = PMX_PL_46_47_MASK | PMX_PL_48_49_MASK,
530 .val = PMX_FSMC_EMI_PL_46_47_VAL | PMX_FSMC_EMI_PL_48_49_VAL,
531 }, {
532 .reg = IP_SEL_PAD_50_59_REG,
533 .mask = PMX_PL_50_51_MASK | PMX_PL_52_53_MASK |
534 PMX_PL_54_55_56_MASK | PMX_PL_58_59_MASK,
535 .val = PMX_EMI_PL_50_51_VAL | PMX_EMI_PL_52_53_VAL |
536 PMX_FSMC_EMI_PL_54_55_56_VAL |
537 PMX_FSMC_EMI_PL_58_59_VAL,
538 }, {
539 .reg = IP_SEL_PAD_60_69_REG,
540 .mask = PMX_PL_69_MASK,
541 .val = PMX_EMI_PL_69_VAL,
542 }, {
543 .reg = IP_SEL_PAD_70_79_REG,
544 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK |
545 PMX_PL_74_MASK | PMX_PL_75_76_MASK |
546 PMX_PL_77_78_79_MASK,
547 .val = PMX_FSMC_EMI_PL_70_VAL | PMX_FSMC_EMI_PL_71_72_VAL |
548 PMX_FSMC_EMI_PL_73_VAL | PMX_EMI_PL_74_VAL |
549 PMX_EMI_PL_75_76_VAL | PMX_EMI_PL_77_78_79_VAL,
550 }, {
551 .reg = IP_SEL_PAD_80_89_REG,
552 .mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK |
553 PMX_PL_88_89_MASK,
554 .val = PMX_EMI_PL_80_TO_85_VAL | PMX_EMI_PL_86_87_VAL |
555 PMX_EMI_PL_88_89_VAL,
556 }, {
557 .reg = IP_SEL_PAD_90_99_REG,
558 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK |
559 PMX_PL_94_95_MASK | PMX_PL_96_97_MASK,
560 .val = PMX_EMI1_PL_90_91_VAL | PMX_EMI1_PL_92_93_VAL |
561 PMX_EMI1_PL_94_95_VAL | PMX_EMI1_PL_96_97_VAL,
562 }, {
563 .reg = EXT_CTRL_REG,
564 .mask = EMI_FSMC_DYNAMIC_MUX_MASK,
565 .val = EMI_FSMC_DYNAMIC_MUX_MASK,
566 },
567 };
568
569 static struct spear_modemux emi_modemux[] = {
570 {
571 .modes = AUTO_EXP_MODE | EXTENDED_MODE,
572 .muxregs = emi_muxreg,
573 .nmuxregs = ARRAY_SIZE(emi_muxreg),
574 }, {
575 .modes = EXTENDED_MODE,
576 .muxregs = emi_ext_muxreg,
577 .nmuxregs = ARRAY_SIZE(emi_ext_muxreg),
578 },
579 };
580
581 static struct spear_pingroup emi_pingroup = {
582 .name = "emi_grp",
583 .pins = emi_pins,
584 .npins = ARRAY_SIZE(emi_pins),
585 .modemuxs = emi_modemux,
586 .nmodemuxs = ARRAY_SIZE(emi_modemux),
587 };
588
589 static const char *const emi_grps[] = { "emi_grp" };
590 static struct spear_function emi_function = {
591 .name = "emi",
592 .groups = emi_grps,
593 .ngroups = ARRAY_SIZE(emi_grps),
594 };
595
596 /* Pad multiplexing for FSMC (NAND flash) device */
597 static const unsigned fsmc_8bit_pins[] = { 52, 53, 54, 55, 56, 57, 58, 59, 60,
598 61, 62, 63, 64, 65, 66, 67, 68 };
599 static struct spear_muxreg fsmc_8bit_muxreg[] = {
600 {
601 .reg = IP_SEL_PAD_50_59_REG,
602 .mask = PMX_PL_52_53_MASK | PMX_PL_54_55_56_MASK |
603 PMX_PL_57_MASK | PMX_PL_58_59_MASK,
604 .val = PMX_FSMC_PL_52_53_VAL | PMX_FSMC_EMI_PL_54_55_56_VAL |
605 PMX_FSMC_PL_57_VAL | PMX_FSMC_EMI_PL_58_59_VAL,
606 }, {
607 .reg = IP_SEL_PAD_60_69_REG,
608 .mask = PMX_PL_60_MASK | PMX_PL_61_TO_64_MASK |
609 PMX_PL_65_TO_68_MASK,
610 .val = PMX_FSMC_PL_60_VAL | PMX_FSMC_PL_61_TO_64_VAL |
611 PMX_FSMC_PL_65_TO_68_VAL,
612 }, {
613 .reg = EXT_CTRL_REG,
614 .mask = EMI_FSMC_DYNAMIC_MUX_MASK,
615 .val = EMI_FSMC_DYNAMIC_MUX_MASK,
616 },
617 };
618
619 static struct spear_modemux fsmc_8bit_modemux[] = {
620 {
621 .modes = EXTENDED_MODE,
622 .muxregs = fsmc_8bit_muxreg,
623 .nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg),
624 },
625 };
626
627 static struct spear_pingroup fsmc_8bit_pingroup = {
628 .name = "fsmc_8bit_grp",
629 .pins = fsmc_8bit_pins,
630 .npins = ARRAY_SIZE(fsmc_8bit_pins),
631 .modemuxs = fsmc_8bit_modemux,
632 .nmodemuxs = ARRAY_SIZE(fsmc_8bit_modemux),
633 };
634
635 static const unsigned fsmc_16bit_pins[] = { 46, 47, 48, 49, 52, 53, 54, 55, 56,
636 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73 };
637 static struct spear_muxreg fsmc_16bit_autoexp_muxreg[] = {
638 {
639 .reg = PMX_CONFIG_REG,
640 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
641 .val = 0,
642 },
643 };
644
645 static struct spear_muxreg fsmc_16bit_muxreg[] = {
646 {
647 .reg = IP_SEL_PAD_40_49_REG,
648 .mask = PMX_PL_46_47_MASK | PMX_PL_48_49_MASK,
649 .val = PMX_FSMC_EMI_PL_46_47_VAL | PMX_FSMC_EMI_PL_48_49_VAL,
650 }, {
651 .reg = IP_SEL_PAD_70_79_REG,
652 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK,
653 .val = PMX_FSMC_EMI_PL_70_VAL | PMX_FSMC_EMI_PL_71_72_VAL |
654 PMX_FSMC_EMI_PL_73_VAL,
655 }
656 };
657
658 static struct spear_modemux fsmc_16bit_modemux[] = {
659 {
660 .modes = EXTENDED_MODE,
661 .muxregs = fsmc_8bit_muxreg,
662 .nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg),
663 }, {
664 .modes = AUTO_EXP_MODE | EXTENDED_MODE,
665 .muxregs = fsmc_16bit_autoexp_muxreg,
666 .nmuxregs = ARRAY_SIZE(fsmc_16bit_autoexp_muxreg),
667 }, {
668 .modes = EXTENDED_MODE,
669 .muxregs = fsmc_16bit_muxreg,
670 .nmuxregs = ARRAY_SIZE(fsmc_16bit_muxreg),
671 },
672 };
673
674 static struct spear_pingroup fsmc_16bit_pingroup = {
675 .name = "fsmc_16bit_grp",
676 .pins = fsmc_16bit_pins,
677 .npins = ARRAY_SIZE(fsmc_16bit_pins),
678 .modemuxs = fsmc_16bit_modemux,
679 .nmodemuxs = ARRAY_SIZE(fsmc_16bit_modemux),
680 };
681
682 static const char *const fsmc_grps[] = { "fsmc_8bit_grp", "fsmc_16bit_grp" };
683 static struct spear_function fsmc_function = {
684 .name = "fsmc",
685 .groups = fsmc_grps,
686 .ngroups = ARRAY_SIZE(fsmc_grps),
687 };
688
689 /* Pad multiplexing for SPP device */
690 static const unsigned spp_pins[] = { 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
691 80, 81, 82, 83, 84, 85 };
692 static struct spear_muxreg spp_muxreg[] = {
693 {
694 .reg = IP_SEL_PAD_60_69_REG,
695 .mask = PMX_PL_69_MASK,
696 .val = PMX_SPP_PL_69_VAL,
697 }, {
698 .reg = IP_SEL_PAD_70_79_REG,
699 .mask = PMX_PL_70_MASK | PMX_PL_71_72_MASK | PMX_PL_73_MASK |
700 PMX_PL_74_MASK | PMX_PL_75_76_MASK |
701 PMX_PL_77_78_79_MASK,
702 .val = PMX_SPP_PL_70_VAL | PMX_SPP_PL_71_72_VAL |
703 PMX_SPP_PL_73_VAL | PMX_SPP_PL_74_VAL |
704 PMX_SPP_PL_75_76_VAL | PMX_SPP_PL_77_78_79_VAL,
705 }, {
706 .reg = IP_SEL_PAD_80_89_REG,
707 .mask = PMX_PL_80_TO_85_MASK,
708 .val = PMX_SPP_PL_80_TO_85_VAL,
709 },
710 };
711
712 static struct spear_modemux spp_modemux[] = {
713 {
714 .modes = EXTENDED_MODE,
715 .muxregs = spp_muxreg,
716 .nmuxregs = ARRAY_SIZE(spp_muxreg),
717 },
718 };
719
720 static struct spear_pingroup spp_pingroup = {
721 .name = "spp_grp",
722 .pins = spp_pins,
723 .npins = ARRAY_SIZE(spp_pins),
724 .modemuxs = spp_modemux,
725 .nmodemuxs = ARRAY_SIZE(spp_modemux),
726 };
727
728 static const char *const spp_grps[] = { "spp_grp" };
729 static struct spear_function spp_function = {
730 .name = "spp",
731 .groups = spp_grps,
732 .ngroups = ARRAY_SIZE(spp_grps),
733 };
734
735 /* Pad multiplexing for SDHCI device */
736 static const unsigned sdhci_led_pins[] = { 34 };
737 static struct spear_muxreg sdhci_led_muxreg[] = {
738 {
739 .reg = PMX_CONFIG_REG,
740 .mask = PMX_SSP_CS_MASK,
741 .val = 0,
742 },
743 };
744
745 static struct spear_muxreg sdhci_led_ext_muxreg[] = {
746 {
747 .reg = IP_SEL_PAD_30_39_REG,
748 .mask = PMX_PL_34_MASK,
749 .val = PMX_PWM2_PL_34_VAL,
750 },
751 };
752
753 static struct spear_modemux sdhci_led_modemux[] = {
754 {
755 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
756 .muxregs = sdhci_led_muxreg,
757 .nmuxregs = ARRAY_SIZE(sdhci_led_muxreg),
758 }, {
759 .modes = EXTENDED_MODE,
760 .muxregs = sdhci_led_ext_muxreg,
761 .nmuxregs = ARRAY_SIZE(sdhci_led_ext_muxreg),
762 },
763 };
764
765 static struct spear_pingroup sdhci_led_pingroup = {
766 .name = "sdhci_led_grp",
767 .pins = sdhci_led_pins,
768 .npins = ARRAY_SIZE(sdhci_led_pins),
769 .modemuxs = sdhci_led_modemux,
770 .nmodemuxs = ARRAY_SIZE(sdhci_led_modemux),
771 };
772
773 static const unsigned sdhci_cd_12_pins[] = { 12, 43, 44, 45, 46, 47, 48, 49,
774 50};
775 static const unsigned sdhci_cd_51_pins[] = { 43, 44, 45, 46, 47, 48, 49, 50, 51
776 };
777 static struct spear_muxreg sdhci_muxreg[] = {
778 {
779 .reg = PMX_CONFIG_REG,
780 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
781 .val = 0,
782 },
783 };
784
785 static struct spear_muxreg sdhci_ext_muxreg[] = {
786 {
787 .reg = IP_SEL_PAD_40_49_REG,
788 .mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK | PMX_PL_46_47_MASK |
789 PMX_PL_48_49_MASK,
790 .val = PMX_SDHCI_PL_43_VAL | PMX_SDHCI_PL_44_45_VAL |
791 PMX_SDHCI_PL_46_47_VAL | PMX_SDHCI_PL_48_49_VAL,
792 }, {
793 .reg = IP_SEL_PAD_50_59_REG,
794 .mask = PMX_PL_50_MASK,
795 .val = PMX_SDHCI_PL_50_VAL,
796 }, {
797 .reg = IP_SEL_PAD_90_99_REG,
798 .mask = PMX_PL_99_MASK,
799 .val = PMX_SDHCI_PL_99_VAL,
800 }, {
801 .reg = IP_SEL_MIX_PAD_REG,
802 .mask = PMX_PL_100_101_MASK,
803 .val = PMX_SDHCI_PL_100_101_VAL,
804 },
805 };
806
807 static struct spear_muxreg sdhci_cd_12_muxreg[] = {
808 {
809 .reg = PMX_CONFIG_REG,
810 .mask = PMX_MII_MASK,
811 .val = 0,
812 }, {
813 .reg = IP_SEL_PAD_10_19_REG,
814 .mask = PMX_PL_12_MASK,
815 .val = PMX_SDHCI_CD_PL_12_VAL,
816 }, {
817 .reg = IP_SEL_MIX_PAD_REG,
818 .mask = PMX_SDHCI_CD_PORT_SEL_MASK,
819 .val = PMX_SDHCI_CD_PORT_12_VAL,
820 },
821 };
822
823 static struct spear_muxreg sdhci_cd_51_muxreg[] = {
824 {
825 .reg = IP_SEL_PAD_50_59_REG,
826 .mask = PMX_PL_51_MASK,
827 .val = PMX_SDHCI_CD_PL_51_VAL,
828 }, {
829 .reg = IP_SEL_MIX_PAD_REG,
830 .mask = PMX_SDHCI_CD_PORT_SEL_MASK,
831 .val = PMX_SDHCI_CD_PORT_51_VAL,
832 },
833 };
834
835 #define pmx_sdhci_common_modemux \
836 { \
837 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | \
838 SMALL_PRINTERS_MODE | EXTENDED_MODE, \
839 .muxregs = sdhci_muxreg, \
840 .nmuxregs = ARRAY_SIZE(sdhci_muxreg), \
841 }, { \
842 .modes = EXTENDED_MODE, \
843 .muxregs = sdhci_ext_muxreg, \
844 .nmuxregs = ARRAY_SIZE(sdhci_ext_muxreg), \
845 }
846
847 static struct spear_modemux sdhci_modemux[][3] = {
848 {
849 /* select pin 12 for cd */
850 pmx_sdhci_common_modemux,
851 {
852 .modes = EXTENDED_MODE,
853 .muxregs = sdhci_cd_12_muxreg,
854 .nmuxregs = ARRAY_SIZE(sdhci_cd_12_muxreg),
855 },
856 }, {
857 /* select pin 51 for cd */
858 pmx_sdhci_common_modemux,
859 {
860 .modes = EXTENDED_MODE,
861 .muxregs = sdhci_cd_51_muxreg,
862 .nmuxregs = ARRAY_SIZE(sdhci_cd_51_muxreg),
863 },
864 }
865 };
866
867 static struct spear_pingroup sdhci_pingroup[] = {
868 {
869 .name = "sdhci_cd_12_grp",
870 .pins = sdhci_cd_12_pins,
871 .npins = ARRAY_SIZE(sdhci_cd_12_pins),
872 .modemuxs = sdhci_modemux[0],
873 .nmodemuxs = ARRAY_SIZE(sdhci_modemux[0]),
874 }, {
875 .name = "sdhci_cd_51_grp",
876 .pins = sdhci_cd_51_pins,
877 .npins = ARRAY_SIZE(sdhci_cd_51_pins),
878 .modemuxs = sdhci_modemux[1],
879 .nmodemuxs = ARRAY_SIZE(sdhci_modemux[1]),
880 },
881 };
882
883 static const char *const sdhci_grps[] = { "sdhci_cd_12_grp", "sdhci_cd_51_grp",
884 "sdhci_led_grp" };
885
886 static struct spear_function sdhci_function = {
887 .name = "sdhci",
888 .groups = sdhci_grps,
889 .ngroups = ARRAY_SIZE(sdhci_grps),
890 };
891
892 /* Pad multiplexing for I2S device */
893 static const unsigned i2s_pins[] = { 35, 39, 40, 41, 42 };
894 static struct spear_muxreg i2s_muxreg[] = {
895 {
896 .reg = PMX_CONFIG_REG,
897 .mask = PMX_SSP_CS_MASK,
898 .val = 0,
899 }, {
900 .reg = PMX_CONFIG_REG,
901 .mask = PMX_UART0_MODEM_MASK,
902 .val = 0,
903 },
904 };
905
906 static struct spear_muxreg i2s_ext_muxreg[] = {
907 {
908 .reg = IP_SEL_PAD_30_39_REG,
909 .mask = PMX_PL_35_MASK | PMX_PL_39_MASK,
910 .val = PMX_I2S_REF_CLK_PL_35_VAL | PMX_I2S_PL_39_VAL,
911 }, {
912 .reg = IP_SEL_PAD_40_49_REG,
913 .mask = PMX_PL_40_MASK | PMX_PL_41_42_MASK,
914 .val = PMX_I2S_PL_40_VAL | PMX_I2S_PL_41_42_VAL,
915 },
916 };
917
918 static struct spear_modemux i2s_modemux[] = {
919 {
920 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
921 .muxregs = i2s_muxreg,
922 .nmuxregs = ARRAY_SIZE(i2s_muxreg),
923 }, {
924 .modes = EXTENDED_MODE,
925 .muxregs = i2s_ext_muxreg,
926 .nmuxregs = ARRAY_SIZE(i2s_ext_muxreg),
927 },
928 };
929
930 static struct spear_pingroup i2s_pingroup = {
931 .name = "i2s_grp",
932 .pins = i2s_pins,
933 .npins = ARRAY_SIZE(i2s_pins),
934 .modemuxs = i2s_modemux,
935 .nmodemuxs = ARRAY_SIZE(i2s_modemux),
936 };
937
938 static const char *const i2s_grps[] = { "i2s_grp" };
939 static struct spear_function i2s_function = {
940 .name = "i2s",
941 .groups = i2s_grps,
942 .ngroups = ARRAY_SIZE(i2s_grps),
943 };
944
945 /* Pad multiplexing for UART1 device */
946 static const unsigned uart1_pins[] = { 28, 29 };
947 static struct spear_muxreg uart1_muxreg[] = {
948 {
949 .reg = PMX_CONFIG_REG,
950 .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK,
951 .val = 0,
952 },
953 };
954
955 static struct spear_muxreg uart1_ext_muxreg[] = {
956 {
957 .reg = IP_SEL_PAD_20_29_REG,
958 .mask = PMX_PL_28_29_MASK,
959 .val = PMX_UART1_PL_28_29_VAL,
960 },
961 };
962
963 static struct spear_modemux uart1_modemux[] = {
964 {
965 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
966 | SMALL_PRINTERS_MODE | EXTENDED_MODE,
967 .muxregs = uart1_muxreg,
968 .nmuxregs = ARRAY_SIZE(uart1_muxreg),
969 }, {
970 .modes = EXTENDED_MODE,
971 .muxregs = uart1_ext_muxreg,
972 .nmuxregs = ARRAY_SIZE(uart1_ext_muxreg),
973 },
974 };
975
976 static struct spear_pingroup uart1_pingroup = {
977 .name = "uart1_grp",
978 .pins = uart1_pins,
979 .npins = ARRAY_SIZE(uart1_pins),
980 .modemuxs = uart1_modemux,
981 .nmodemuxs = ARRAY_SIZE(uart1_modemux),
982 };
983
984 static const char *const uart1_grps[] = { "uart1_grp" };
985 static struct spear_function uart1_function = {
986 .name = "uart1",
987 .groups = uart1_grps,
988 .ngroups = ARRAY_SIZE(uart1_grps),
989 };
990
991 /* Pad multiplexing for UART1 Modem device */
992 static const unsigned uart1_modem_2_to_7_pins[] = { 2, 3, 4, 5, 6, 7 };
993 static const unsigned uart1_modem_31_to_36_pins[] = { 31, 32, 33, 34, 35, 36 };
994 static const unsigned uart1_modem_34_to_45_pins[] = { 34, 35, 36, 43, 44, 45 };
995 static const unsigned uart1_modem_80_to_85_pins[] = { 80, 81, 82, 83, 84, 85 };
996
997 static struct spear_muxreg uart1_modem_ext_2_to_7_muxreg[] = {
998 {
999 .reg = PMX_CONFIG_REG,
1000 .mask = PMX_UART0_MASK | PMX_I2C_MASK | PMX_SSP_MASK,
1001 .val = 0,
1002 }, {
1003 .reg = IP_SEL_PAD_0_9_REG,
1004 .mask = PMX_PL_2_3_MASK | PMX_PL_6_7_MASK,
1005 .val = PMX_UART1_ENH_PL_2_3_VAL | PMX_UART1_ENH_PL_4_5_VAL |
1006 PMX_UART1_ENH_PL_6_7_VAL,
1007 }, {
1008 .reg = IP_SEL_MIX_PAD_REG,
1009 .mask = PMX_UART1_ENH_PORT_SEL_MASK,
1010 .val = PMX_UART1_ENH_PORT_3_TO_5_7_VAL,
1011 },
1012 };
1013
1014 static struct spear_muxreg uart1_modem_31_to_36_muxreg[] = {
1015 {
1016 .reg = PMX_CONFIG_REG,
1017 .mask = PMX_GPIO_PIN3_MASK | PMX_GPIO_PIN4_MASK |
1018 PMX_GPIO_PIN5_MASK | PMX_SSP_CS_MASK,
1019 .val = 0,
1020 },
1021 };
1022
1023 static struct spear_muxreg uart1_modem_ext_31_to_36_muxreg[] = {
1024 {
1025 .reg = IP_SEL_PAD_30_39_REG,
1026 .mask = PMX_PL_31_MASK | PMX_PL_32_33_MASK | PMX_PL_34_MASK |
1027 PMX_PL_35_MASK | PMX_PL_36_MASK,
1028 .val = PMX_UART1_ENH_PL_31_VAL | PMX_UART1_ENH_PL_32_33_VAL |
1029 PMX_UART1_ENH_PL_34_VAL | PMX_UART1_ENH_PL_35_VAL |
1030 PMX_UART1_ENH_PL_36_VAL,
1031 }, {
1032 .reg = IP_SEL_MIX_PAD_REG,
1033 .mask = PMX_UART1_ENH_PORT_SEL_MASK,
1034 .val = PMX_UART1_ENH_PORT_32_TO_34_36_VAL,
1035 },
1036 };
1037
1038 static struct spear_muxreg uart1_modem_34_to_45_muxreg[] = {
1039 {
1040 .reg = PMX_CONFIG_REG,
1041 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK |
1042 PMX_SSP_CS_MASK,
1043 .val = 0,
1044 },
1045 };
1046
1047 static struct spear_muxreg uart1_modem_ext_34_to_45_muxreg[] = {
1048 {
1049 .reg = IP_SEL_PAD_30_39_REG,
1050 .mask = PMX_PL_34_MASK | PMX_PL_35_MASK | PMX_PL_36_MASK,
1051 .val = PMX_UART1_ENH_PL_34_VAL | PMX_UART1_ENH_PL_35_VAL |
1052 PMX_UART1_ENH_PL_36_VAL,
1053 }, {
1054 .reg = IP_SEL_PAD_40_49_REG,
1055 .mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK,
1056 .val = PMX_UART1_ENH_PL_43_VAL | PMX_UART1_ENH_PL_44_45_VAL,
1057 }, {
1058 .reg = IP_SEL_MIX_PAD_REG,
1059 .mask = PMX_UART1_ENH_PORT_SEL_MASK,
1060 .val = PMX_UART1_ENH_PORT_44_45_34_36_VAL,
1061 },
1062 };
1063
1064 static struct spear_muxreg uart1_modem_ext_80_to_85_muxreg[] = {
1065 {
1066 .reg = IP_SEL_PAD_80_89_REG,
1067 .mask = PMX_PL_80_TO_85_MASK,
1068 .val = PMX_UART1_ENH_PL_80_TO_85_VAL,
1069 }, {
1070 .reg = IP_SEL_PAD_40_49_REG,
1071 .mask = PMX_PL_43_MASK | PMX_PL_44_45_MASK,
1072 .val = PMX_UART1_ENH_PL_43_VAL | PMX_UART1_ENH_PL_44_45_VAL,
1073 }, {
1074 .reg = IP_SEL_MIX_PAD_REG,
1075 .mask = PMX_UART1_ENH_PORT_SEL_MASK,
1076 .val = PMX_UART1_ENH_PORT_81_TO_85_VAL,
1077 },
1078 };
1079
1080 static struct spear_modemux uart1_modem_2_to_7_modemux[] = {
1081 {
1082 .modes = EXTENDED_MODE,
1083 .muxregs = uart1_modem_ext_2_to_7_muxreg,
1084 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_2_to_7_muxreg),
1085 },
1086 };
1087
1088 static struct spear_modemux uart1_modem_31_to_36_modemux[] = {
1089 {
1090 .modes = SMALL_PRINTERS_MODE | EXTENDED_MODE,
1091 .muxregs = uart1_modem_31_to_36_muxreg,
1092 .nmuxregs = ARRAY_SIZE(uart1_modem_31_to_36_muxreg),
1093 }, {
1094 .modes = EXTENDED_MODE,
1095 .muxregs = uart1_modem_ext_31_to_36_muxreg,
1096 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_31_to_36_muxreg),
1097 },
1098 };
1099
1100 static struct spear_modemux uart1_modem_34_to_45_modemux[] = {
1101 {
1102 .modes = AUTO_EXP_MODE | EXTENDED_MODE,
1103 .muxregs = uart1_modem_34_to_45_muxreg,
1104 .nmuxregs = ARRAY_SIZE(uart1_modem_34_to_45_muxreg),
1105 }, {
1106 .modes = EXTENDED_MODE,
1107 .muxregs = uart1_modem_ext_34_to_45_muxreg,
1108 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_34_to_45_muxreg),
1109 },
1110 };
1111
1112 static struct spear_modemux uart1_modem_80_to_85_modemux[] = {
1113 {
1114 .modes = EXTENDED_MODE,
1115 .muxregs = uart1_modem_ext_80_to_85_muxreg,
1116 .nmuxregs = ARRAY_SIZE(uart1_modem_ext_80_to_85_muxreg),
1117 },
1118 };
1119
1120 static struct spear_pingroup uart1_modem_pingroup[] = {
1121 {
1122 .name = "uart1_modem_2_to_7_grp",
1123 .pins = uart1_modem_2_to_7_pins,
1124 .npins = ARRAY_SIZE(uart1_modem_2_to_7_pins),
1125 .modemuxs = uart1_modem_2_to_7_modemux,
1126 .nmodemuxs = ARRAY_SIZE(uart1_modem_2_to_7_modemux),
1127 }, {
1128 .name = "uart1_modem_31_to_36_grp",
1129 .pins = uart1_modem_31_to_36_pins,
1130 .npins = ARRAY_SIZE(uart1_modem_31_to_36_pins),
1131 .modemuxs = uart1_modem_31_to_36_modemux,
1132 .nmodemuxs = ARRAY_SIZE(uart1_modem_31_to_36_modemux),
1133 }, {
1134 .name = "uart1_modem_34_to_45_grp",
1135 .pins = uart1_modem_34_to_45_pins,
1136 .npins = ARRAY_SIZE(uart1_modem_34_to_45_pins),
1137 .modemuxs = uart1_modem_34_to_45_modemux,
1138 .nmodemuxs = ARRAY_SIZE(uart1_modem_34_to_45_modemux),
1139 }, {
1140 .name = "uart1_modem_80_to_85_grp",
1141 .pins = uart1_modem_80_to_85_pins,
1142 .npins = ARRAY_SIZE(uart1_modem_80_to_85_pins),
1143 .modemuxs = uart1_modem_80_to_85_modemux,
1144 .nmodemuxs = ARRAY_SIZE(uart1_modem_80_to_85_modemux),
1145 },
1146 };
1147
1148 static const char *const uart1_modem_grps[] = { "uart1_modem_2_to_7_grp",
1149 "uart1_modem_31_to_36_grp", "uart1_modem_34_to_45_grp",
1150 "uart1_modem_80_to_85_grp" };
1151 static struct spear_function uart1_modem_function = {
1152 .name = "uart1_modem",
1153 .groups = uart1_modem_grps,
1154 .ngroups = ARRAY_SIZE(uart1_modem_grps),
1155 };
1156
1157 /* Pad multiplexing for UART2 device */
1158 static const unsigned uart2_pins[] = { 0, 1 };
1159 static struct spear_muxreg uart2_muxreg[] = {
1160 {
1161 .reg = PMX_CONFIG_REG,
1162 .mask = PMX_FIRDA_MASK,
1163 .val = 0,
1164 },
1165 };
1166
1167 static struct spear_muxreg uart2_ext_muxreg[] = {
1168 {
1169 .reg = IP_SEL_PAD_0_9_REG,
1170 .mask = PMX_PL_0_1_MASK,
1171 .val = PMX_UART2_PL_0_1_VAL,
1172 },
1173 };
1174
1175 static struct spear_modemux uart2_modemux[] = {
1176 {
1177 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
1178 | SMALL_PRINTERS_MODE | EXTENDED_MODE,
1179 .muxregs = uart2_muxreg,
1180 .nmuxregs = ARRAY_SIZE(uart2_muxreg),
1181 }, {
1182 .modes = EXTENDED_MODE,
1183 .muxregs = uart2_ext_muxreg,
1184 .nmuxregs = ARRAY_SIZE(uart2_ext_muxreg),
1185 },
1186 };
1187
1188 static struct spear_pingroup uart2_pingroup = {
1189 .name = "uart2_grp",
1190 .pins = uart2_pins,
1191 .npins = ARRAY_SIZE(uart2_pins),
1192 .modemuxs = uart2_modemux,
1193 .nmodemuxs = ARRAY_SIZE(uart2_modemux),
1194 };
1195
1196 static const char *const uart2_grps[] = { "uart2_grp" };
1197 static struct spear_function uart2_function = {
1198 .name = "uart2",
1199 .groups = uart2_grps,
1200 .ngroups = ARRAY_SIZE(uart2_grps),
1201 };
1202
1203 /* Pad multiplexing for uart3 device */
1204 static const unsigned uart3_pins[][2] = { { 8, 9 }, { 15, 16 }, { 41, 42 },
1205 { 52, 53 }, { 73, 74 }, { 94, 95 }, { 98, 99 } };
1206
1207 static struct spear_muxreg uart3_ext_8_9_muxreg[] = {
1208 {
1209 .reg = PMX_CONFIG_REG,
1210 .mask = PMX_SSP_MASK,
1211 .val = 0,
1212 }, {
1213 .reg = IP_SEL_PAD_0_9_REG,
1214 .mask = PMX_PL_8_9_MASK,
1215 .val = PMX_UART3_PL_8_9_VAL,
1216 }, {
1217 .reg = IP_SEL_MIX_PAD_REG,
1218 .mask = PMX_UART3_PORT_SEL_MASK,
1219 .val = PMX_UART3_PORT_8_VAL,
1220 },
1221 };
1222
1223 static struct spear_muxreg uart3_ext_15_16_muxreg[] = {
1224 {
1225 .reg = PMX_CONFIG_REG,
1226 .mask = PMX_MII_MASK,
1227 .val = 0,
1228 }, {
1229 .reg = IP_SEL_PAD_10_19_REG,
1230 .mask = PMX_PL_15_16_MASK,
1231 .val = PMX_UART3_PL_15_16_VAL,
1232 }, {
1233 .reg = IP_SEL_MIX_PAD_REG,
1234 .mask = PMX_UART3_PORT_SEL_MASK,
1235 .val = PMX_UART3_PORT_15_VAL,
1236 },
1237 };
1238
1239 static struct spear_muxreg uart3_ext_41_42_muxreg[] = {
1240 {
1241 .reg = PMX_CONFIG_REG,
1242 .mask = PMX_UART0_MODEM_MASK,
1243 .val = 0,
1244 }, {
1245 .reg = IP_SEL_PAD_40_49_REG,
1246 .mask = PMX_PL_41_42_MASK,
1247 .val = PMX_UART3_PL_41_42_VAL,
1248 }, {
1249 .reg = IP_SEL_MIX_PAD_REG,
1250 .mask = PMX_UART3_PORT_SEL_MASK,
1251 .val = PMX_UART3_PORT_41_VAL,
1252 },
1253 };
1254
1255 static struct spear_muxreg uart3_ext_52_53_muxreg[] = {
1256 {
1257 .reg = IP_SEL_PAD_50_59_REG,
1258 .mask = PMX_PL_52_53_MASK,
1259 .val = PMX_UART3_PL_52_53_VAL,
1260 }, {
1261 .reg = IP_SEL_MIX_PAD_REG,
1262 .mask = PMX_UART3_PORT_SEL_MASK,
1263 .val = PMX_UART3_PORT_52_VAL,
1264 },
1265 };
1266
1267 static struct spear_muxreg uart3_ext_73_74_muxreg[] = {
1268 {
1269 .reg = IP_SEL_PAD_70_79_REG,
1270 .mask = PMX_PL_73_MASK | PMX_PL_74_MASK,
1271 .val = PMX_UART3_PL_73_VAL | PMX_UART3_PL_74_VAL,
1272 }, {
1273 .reg = IP_SEL_MIX_PAD_REG,
1274 .mask = PMX_UART3_PORT_SEL_MASK,
1275 .val = PMX_UART3_PORT_73_VAL,
1276 },
1277 };
1278
1279 static struct spear_muxreg uart3_ext_94_95_muxreg[] = {
1280 {
1281 .reg = IP_SEL_PAD_90_99_REG,
1282 .mask = PMX_PL_94_95_MASK,
1283 .val = PMX_UART3_PL_94_95_VAL,
1284 }, {
1285 .reg = IP_SEL_MIX_PAD_REG,
1286 .mask = PMX_UART3_PORT_SEL_MASK,
1287 .val = PMX_UART3_PORT_94_VAL,
1288 },
1289 };
1290
1291 static struct spear_muxreg uart3_ext_98_99_muxreg[] = {
1292 {
1293 .reg = IP_SEL_PAD_90_99_REG,
1294 .mask = PMX_PL_98_MASK | PMX_PL_99_MASK,
1295 .val = PMX_UART3_PL_98_VAL | PMX_UART3_PL_99_VAL,
1296 }, {
1297 .reg = IP_SEL_MIX_PAD_REG,
1298 .mask = PMX_UART3_PORT_SEL_MASK,
1299 .val = PMX_UART3_PORT_99_VAL,
1300 },
1301 };
1302
1303 static struct spear_modemux uart3_modemux[][1] = {
1304 {
1305 /* Select signals on pins 8_9 */
1306 {
1307 .modes = EXTENDED_MODE,
1308 .muxregs = uart3_ext_8_9_muxreg,
1309 .nmuxregs = ARRAY_SIZE(uart3_ext_8_9_muxreg),
1310 },
1311 }, {
1312 /* Select signals on pins 15_16 */
1313 {
1314 .modes = EXTENDED_MODE,
1315 .muxregs = uart3_ext_15_16_muxreg,
1316 .nmuxregs = ARRAY_SIZE(uart3_ext_15_16_muxreg),
1317 },
1318 }, {
1319 /* Select signals on pins 41_42 */
1320 {
1321 .modes = EXTENDED_MODE,
1322 .muxregs = uart3_ext_41_42_muxreg,
1323 .nmuxregs = ARRAY_SIZE(uart3_ext_41_42_muxreg),
1324 },
1325 }, {
1326 /* Select signals on pins 52_53 */
1327 {
1328 .modes = EXTENDED_MODE,
1329 .muxregs = uart3_ext_52_53_muxreg,
1330 .nmuxregs = ARRAY_SIZE(uart3_ext_52_53_muxreg),
1331 },
1332 }, {
1333 /* Select signals on pins 73_74 */
1334 {
1335 .modes = EXTENDED_MODE,
1336 .muxregs = uart3_ext_73_74_muxreg,
1337 .nmuxregs = ARRAY_SIZE(uart3_ext_73_74_muxreg),
1338 },
1339 }, {
1340 /* Select signals on pins 94_95 */
1341 {
1342 .modes = EXTENDED_MODE,
1343 .muxregs = uart3_ext_94_95_muxreg,
1344 .nmuxregs = ARRAY_SIZE(uart3_ext_94_95_muxreg),
1345 },
1346 }, {
1347 /* Select signals on pins 98_99 */
1348 {
1349 .modes = EXTENDED_MODE,
1350 .muxregs = uart3_ext_98_99_muxreg,
1351 .nmuxregs = ARRAY_SIZE(uart3_ext_98_99_muxreg),
1352 },
1353 },
1354 };
1355
1356 static struct spear_pingroup uart3_pingroup[] = {
1357 {
1358 .name = "uart3_8_9_grp",
1359 .pins = uart3_pins[0],
1360 .npins = ARRAY_SIZE(uart3_pins[0]),
1361 .modemuxs = uart3_modemux[0],
1362 .nmodemuxs = ARRAY_SIZE(uart3_modemux[0]),
1363 }, {
1364 .name = "uart3_15_16_grp",
1365 .pins = uart3_pins[1],
1366 .npins = ARRAY_SIZE(uart3_pins[1]),
1367 .modemuxs = uart3_modemux[1],
1368 .nmodemuxs = ARRAY_SIZE(uart3_modemux[1]),
1369 }, {
1370 .name = "uart3_41_42_grp",
1371 .pins = uart3_pins[2],
1372 .npins = ARRAY_SIZE(uart3_pins[2]),
1373 .modemuxs = uart3_modemux[2],
1374 .nmodemuxs = ARRAY_SIZE(uart3_modemux[2]),
1375 }, {
1376 .name = "uart3_52_53_grp",
1377 .pins = uart3_pins[3],
1378 .npins = ARRAY_SIZE(uart3_pins[3]),
1379 .modemuxs = uart3_modemux[3],
1380 .nmodemuxs = ARRAY_SIZE(uart3_modemux[3]),
1381 }, {
1382 .name = "uart3_73_74_grp",
1383 .pins = uart3_pins[4],
1384 .npins = ARRAY_SIZE(uart3_pins[4]),
1385 .modemuxs = uart3_modemux[4],
1386 .nmodemuxs = ARRAY_SIZE(uart3_modemux[4]),
1387 }, {
1388 .name = "uart3_94_95_grp",
1389 .pins = uart3_pins[5],
1390 .npins = ARRAY_SIZE(uart3_pins[5]),
1391 .modemuxs = uart3_modemux[5],
1392 .nmodemuxs = ARRAY_SIZE(uart3_modemux[5]),
1393 }, {
1394 .name = "uart3_98_99_grp",
1395 .pins = uart3_pins[6],
1396 .npins = ARRAY_SIZE(uart3_pins[6]),
1397 .modemuxs = uart3_modemux[6],
1398 .nmodemuxs = ARRAY_SIZE(uart3_modemux[6]),
1399 },
1400 };
1401
1402 static const char *const uart3_grps[] = { "uart3_8_9_grp", "uart3_15_16_grp",
1403 "uart3_41_42_grp", "uart3_52_53_grp", "uart3_73_74_grp",
1404 "uart3_94_95_grp", "uart3_98_99_grp" };
1405
1406 static struct spear_function uart3_function = {
1407 .name = "uart3",
1408 .groups = uart3_grps,
1409 .ngroups = ARRAY_SIZE(uart3_grps),
1410 };
1411
1412 /* Pad multiplexing for uart4 device */
1413 static const unsigned uart4_pins[][2] = { { 6, 7 }, { 13, 14 }, { 39, 40 },
1414 { 71, 72 }, { 92, 93 }, { 100, 101 } };
1415
1416 static struct spear_muxreg uart4_ext_6_7_muxreg[] = {
1417 {
1418 .reg = PMX_CONFIG_REG,
1419 .mask = PMX_SSP_MASK,
1420 .val = 0,
1421 }, {
1422 .reg = IP_SEL_PAD_0_9_REG,
1423 .mask = PMX_PL_6_7_MASK,
1424 .val = PMX_UART4_PL_6_7_VAL,
1425 }, {
1426 .reg = IP_SEL_MIX_PAD_REG,
1427 .mask = PMX_UART4_PORT_SEL_MASK,
1428 .val = PMX_UART4_PORT_6_VAL,
1429 },
1430 };
1431
1432 static struct spear_muxreg uart4_ext_13_14_muxreg[] = {
1433 {
1434 .reg = PMX_CONFIG_REG,
1435 .mask = PMX_MII_MASK,
1436 .val = 0,
1437 }, {
1438 .reg = IP_SEL_PAD_10_19_REG,
1439 .mask = PMX_PL_13_14_MASK,
1440 .val = PMX_UART4_PL_13_14_VAL,
1441 }, {
1442 .reg = IP_SEL_MIX_PAD_REG,
1443 .mask = PMX_UART4_PORT_SEL_MASK,
1444 .val = PMX_UART4_PORT_13_VAL,
1445 },
1446 };
1447
1448 static struct spear_muxreg uart4_ext_39_40_muxreg[] = {
1449 {
1450 .reg = PMX_CONFIG_REG,
1451 .mask = PMX_UART0_MODEM_MASK,
1452 .val = 0,
1453 }, {
1454 .reg = IP_SEL_PAD_30_39_REG,
1455 .mask = PMX_PL_39_MASK,
1456 .val = PMX_UART4_PL_39_VAL,
1457 }, {
1458 .reg = IP_SEL_PAD_40_49_REG,
1459 .mask = PMX_PL_40_MASK,
1460 .val = PMX_UART4_PL_40_VAL,
1461 }, {
1462 .reg = IP_SEL_MIX_PAD_REG,
1463 .mask = PMX_UART4_PORT_SEL_MASK,
1464 .val = PMX_UART4_PORT_39_VAL,
1465 },
1466 };
1467
1468 static struct spear_muxreg uart4_ext_71_72_muxreg[] = {
1469 {
1470 .reg = IP_SEL_PAD_70_79_REG,
1471 .mask = PMX_PL_71_72_MASK,
1472 .val = PMX_UART4_PL_71_72_VAL,
1473 }, {
1474 .reg = IP_SEL_MIX_PAD_REG,
1475 .mask = PMX_UART4_PORT_SEL_MASK,
1476 .val = PMX_UART4_PORT_71_VAL,
1477 },
1478 };
1479
1480 static struct spear_muxreg uart4_ext_92_93_muxreg[] = {
1481 {
1482 .reg = IP_SEL_PAD_90_99_REG,
1483 .mask = PMX_PL_92_93_MASK,
1484 .val = PMX_UART4_PL_92_93_VAL,
1485 }, {
1486 .reg = IP_SEL_MIX_PAD_REG,
1487 .mask = PMX_UART4_PORT_SEL_MASK,
1488 .val = PMX_UART4_PORT_92_VAL,
1489 },
1490 };
1491
1492 static struct spear_muxreg uart4_ext_100_101_muxreg[] = {
1493 {
1494 .reg = IP_SEL_MIX_PAD_REG,
1495 .mask = PMX_PL_100_101_MASK |
1496 PMX_UART4_PORT_SEL_MASK,
1497 .val = PMX_UART4_PL_100_101_VAL |
1498 PMX_UART4_PORT_101_VAL,
1499 },
1500 };
1501
1502 static struct spear_modemux uart4_modemux[][1] = {
1503 {
1504 /* Select signals on pins 6_7 */
1505 {
1506 .modes = EXTENDED_MODE,
1507 .muxregs = uart4_ext_6_7_muxreg,
1508 .nmuxregs = ARRAY_SIZE(uart4_ext_6_7_muxreg),
1509 },
1510 }, {
1511 /* Select signals on pins 13_14 */
1512 {
1513 .modes = EXTENDED_MODE,
1514 .muxregs = uart4_ext_13_14_muxreg,
1515 .nmuxregs = ARRAY_SIZE(uart4_ext_13_14_muxreg),
1516 },
1517 }, {
1518 /* Select signals on pins 39_40 */
1519 {
1520 .modes = EXTENDED_MODE,
1521 .muxregs = uart4_ext_39_40_muxreg,
1522 .nmuxregs = ARRAY_SIZE(uart4_ext_39_40_muxreg),
1523 },
1524 }, {
1525 /* Select signals on pins 71_72 */
1526 {
1527 .modes = EXTENDED_MODE,
1528 .muxregs = uart4_ext_71_72_muxreg,
1529 .nmuxregs = ARRAY_SIZE(uart4_ext_71_72_muxreg),
1530 },
1531 }, {
1532 /* Select signals on pins 92_93 */
1533 {
1534 .modes = EXTENDED_MODE,
1535 .muxregs = uart4_ext_92_93_muxreg,
1536 .nmuxregs = ARRAY_SIZE(uart4_ext_92_93_muxreg),
1537 },
1538 }, {
1539 /* Select signals on pins 100_101_ */
1540 {
1541 .modes = EXTENDED_MODE,
1542 .muxregs = uart4_ext_100_101_muxreg,
1543 .nmuxregs = ARRAY_SIZE(uart4_ext_100_101_muxreg),
1544 },
1545 },
1546 };
1547
1548 static struct spear_pingroup uart4_pingroup[] = {
1549 {
1550 .name = "uart4_6_7_grp",
1551 .pins = uart4_pins[0],
1552 .npins = ARRAY_SIZE(uart4_pins[0]),
1553 .modemuxs = uart4_modemux[0],
1554 .nmodemuxs = ARRAY_SIZE(uart4_modemux[0]),
1555 }, {
1556 .name = "uart4_13_14_grp",
1557 .pins = uart4_pins[1],
1558 .npins = ARRAY_SIZE(uart4_pins[1]),
1559 .modemuxs = uart4_modemux[1],
1560 .nmodemuxs = ARRAY_SIZE(uart4_modemux[1]),
1561 }, {
1562 .name = "uart4_39_40_grp",
1563 .pins = uart4_pins[2],
1564 .npins = ARRAY_SIZE(uart4_pins[2]),
1565 .modemuxs = uart4_modemux[2],
1566 .nmodemuxs = ARRAY_SIZE(uart4_modemux[2]),
1567 }, {
1568 .name = "uart4_71_72_grp",
1569 .pins = uart4_pins[3],
1570 .npins = ARRAY_SIZE(uart4_pins[3]),
1571 .modemuxs = uart4_modemux[3],
1572 .nmodemuxs = ARRAY_SIZE(uart4_modemux[3]),
1573 }, {
1574 .name = "uart4_92_93_grp",
1575 .pins = uart4_pins[4],
1576 .npins = ARRAY_SIZE(uart4_pins[4]),
1577 .modemuxs = uart4_modemux[4],
1578 .nmodemuxs = ARRAY_SIZE(uart4_modemux[4]),
1579 }, {
1580 .name = "uart4_100_101_grp",
1581 .pins = uart4_pins[5],
1582 .npins = ARRAY_SIZE(uart4_pins[5]),
1583 .modemuxs = uart4_modemux[5],
1584 .nmodemuxs = ARRAY_SIZE(uart4_modemux[5]),
1585 },
1586 };
1587
1588 static const char *const uart4_grps[] = { "uart4_6_7_grp", "uart4_13_14_grp",
1589 "uart4_39_40_grp", "uart4_71_72_grp", "uart4_92_93_grp",
1590 "uart4_100_101_grp" };
1591
1592 static struct spear_function uart4_function = {
1593 .name = "uart4",
1594 .groups = uart4_grps,
1595 .ngroups = ARRAY_SIZE(uart4_grps),
1596 };
1597
1598 /* Pad multiplexing for uart5 device */
1599 static const unsigned uart5_pins[][2] = { { 4, 5 }, { 37, 38 }, { 69, 70 },
1600 { 90, 91 } };
1601
1602 static struct spear_muxreg uart5_ext_4_5_muxreg[] = {
1603 {
1604 .reg = PMX_CONFIG_REG,
1605 .mask = PMX_I2C_MASK,
1606 .val = 0,
1607 }, {
1608 .reg = IP_SEL_PAD_0_9_REG,
1609 .mask = PMX_PL_4_5_MASK,
1610 .val = PMX_UART5_PL_4_5_VAL,
1611 }, {
1612 .reg = IP_SEL_MIX_PAD_REG,
1613 .mask = PMX_UART5_PORT_SEL_MASK,
1614 .val = PMX_UART5_PORT_4_VAL,
1615 },
1616 };
1617
1618 static struct spear_muxreg uart5_ext_37_38_muxreg[] = {
1619 {
1620 .reg = PMX_CONFIG_REG,
1621 .mask = PMX_UART0_MODEM_MASK,
1622 .val = 0,
1623 }, {
1624 .reg = IP_SEL_PAD_30_39_REG,
1625 .mask = PMX_PL_37_38_MASK,
1626 .val = PMX_UART5_PL_37_38_VAL,
1627 }, {
1628 .reg = IP_SEL_MIX_PAD_REG,
1629 .mask = PMX_UART5_PORT_SEL_MASK,
1630 .val = PMX_UART5_PORT_37_VAL,
1631 },
1632 };
1633
1634 static struct spear_muxreg uart5_ext_69_70_muxreg[] = {
1635 {
1636 .reg = IP_SEL_PAD_60_69_REG,
1637 .mask = PMX_PL_69_MASK,
1638 .val = PMX_UART5_PL_69_VAL,
1639 }, {
1640 .reg = IP_SEL_PAD_70_79_REG,
1641 .mask = PMX_PL_70_MASK,
1642 .val = PMX_UART5_PL_70_VAL,
1643 }, {
1644 .reg = IP_SEL_MIX_PAD_REG,
1645 .mask = PMX_UART5_PORT_SEL_MASK,
1646 .val = PMX_UART5_PORT_69_VAL,
1647 },
1648 };
1649
1650 static struct spear_muxreg uart5_ext_90_91_muxreg[] = {
1651 {
1652 .reg = IP_SEL_PAD_90_99_REG,
1653 .mask = PMX_PL_90_91_MASK,
1654 .val = PMX_UART5_PL_90_91_VAL,
1655 }, {
1656 .reg = IP_SEL_MIX_PAD_REG,
1657 .mask = PMX_UART5_PORT_SEL_MASK,
1658 .val = PMX_UART5_PORT_90_VAL,
1659 },
1660 };
1661
1662 static struct spear_modemux uart5_modemux[][1] = {
1663 {
1664 /* Select signals on pins 4_5 */
1665 {
1666 .modes = EXTENDED_MODE,
1667 .muxregs = uart5_ext_4_5_muxreg,
1668 .nmuxregs = ARRAY_SIZE(uart5_ext_4_5_muxreg),
1669 },
1670 }, {
1671 /* Select signals on pins 37_38 */
1672 {
1673 .modes = EXTENDED_MODE,
1674 .muxregs = uart5_ext_37_38_muxreg,
1675 .nmuxregs = ARRAY_SIZE(uart5_ext_37_38_muxreg),
1676 },
1677 }, {
1678 /* Select signals on pins 69_70 */
1679 {
1680 .modes = EXTENDED_MODE,
1681 .muxregs = uart5_ext_69_70_muxreg,
1682 .nmuxregs = ARRAY_SIZE(uart5_ext_69_70_muxreg),
1683 },
1684 }, {
1685 /* Select signals on pins 90_91 */
1686 {
1687 .modes = EXTENDED_MODE,
1688 .muxregs = uart5_ext_90_91_muxreg,
1689 .nmuxregs = ARRAY_SIZE(uart5_ext_90_91_muxreg),
1690 },
1691 },
1692 };
1693
1694 static struct spear_pingroup uart5_pingroup[] = {
1695 {
1696 .name = "uart5_4_5_grp",
1697 .pins = uart5_pins[0],
1698 .npins = ARRAY_SIZE(uart5_pins[0]),
1699 .modemuxs = uart5_modemux[0],
1700 .nmodemuxs = ARRAY_SIZE(uart5_modemux[0]),
1701 }, {
1702 .name = "uart5_37_38_grp",
1703 .pins = uart5_pins[1],
1704 .npins = ARRAY_SIZE(uart5_pins[1]),
1705 .modemuxs = uart5_modemux[1],
1706 .nmodemuxs = ARRAY_SIZE(uart5_modemux[1]),
1707 }, {
1708 .name = "uart5_69_70_grp",
1709 .pins = uart5_pins[2],
1710 .npins = ARRAY_SIZE(uart5_pins[2]),
1711 .modemuxs = uart5_modemux[2],
1712 .nmodemuxs = ARRAY_SIZE(uart5_modemux[2]),
1713 }, {
1714 .name = "uart5_90_91_grp",
1715 .pins = uart5_pins[3],
1716 .npins = ARRAY_SIZE(uart5_pins[3]),
1717 .modemuxs = uart5_modemux[3],
1718 .nmodemuxs = ARRAY_SIZE(uart5_modemux[3]),
1719 },
1720 };
1721
1722 static const char *const uart5_grps[] = { "uart5_4_5_grp", "uart5_37_38_grp",
1723 "uart5_69_70_grp", "uart5_90_91_grp" };
1724 static struct spear_function uart5_function = {
1725 .name = "uart5",
1726 .groups = uart5_grps,
1727 .ngroups = ARRAY_SIZE(uart5_grps),
1728 };
1729
1730 /* Pad multiplexing for uart6 device */
1731 static const unsigned uart6_pins[][2] = { { 2, 3 }, { 88, 89 } };
1732 static struct spear_muxreg uart6_ext_2_3_muxreg[] = {
1733 {
1734 .reg = PMX_CONFIG_REG,
1735 .mask = PMX_UART0_MASK,
1736 .val = 0,
1737 }, {
1738 .reg = IP_SEL_PAD_0_9_REG,
1739 .mask = PMX_PL_2_3_MASK,
1740 .val = PMX_UART6_PL_2_3_VAL,
1741 }, {
1742 .reg = IP_SEL_MIX_PAD_REG,
1743 .mask = PMX_UART6_PORT_SEL_MASK,
1744 .val = PMX_UART6_PORT_2_VAL,
1745 },
1746 };
1747
1748 static struct spear_muxreg uart6_ext_88_89_muxreg[] = {
1749 {
1750 .reg = IP_SEL_PAD_80_89_REG,
1751 .mask = PMX_PL_88_89_MASK,
1752 .val = PMX_UART6_PL_88_89_VAL,
1753 }, {
1754 .reg = IP_SEL_MIX_PAD_REG,
1755 .mask = PMX_UART6_PORT_SEL_MASK,
1756 .val = PMX_UART6_PORT_88_VAL,
1757 },
1758 };
1759
1760 static struct spear_modemux uart6_modemux[][1] = {
1761 {
1762 /* Select signals on pins 2_3 */
1763 {
1764 .modes = EXTENDED_MODE,
1765 .muxregs = uart6_ext_2_3_muxreg,
1766 .nmuxregs = ARRAY_SIZE(uart6_ext_2_3_muxreg),
1767 },
1768 }, {
1769 /* Select signals on pins 88_89 */
1770 {
1771 .modes = EXTENDED_MODE,
1772 .muxregs = uart6_ext_88_89_muxreg,
1773 .nmuxregs = ARRAY_SIZE(uart6_ext_88_89_muxreg),
1774 },
1775 },
1776 };
1777
1778 static struct spear_pingroup uart6_pingroup[] = {
1779 {
1780 .name = "uart6_2_3_grp",
1781 .pins = uart6_pins[0],
1782 .npins = ARRAY_SIZE(uart6_pins[0]),
1783 .modemuxs = uart6_modemux[0],
1784 .nmodemuxs = ARRAY_SIZE(uart6_modemux[0]),
1785 }, {
1786 .name = "uart6_88_89_grp",
1787 .pins = uart6_pins[1],
1788 .npins = ARRAY_SIZE(uart6_pins[1]),
1789 .modemuxs = uart6_modemux[1],
1790 .nmodemuxs = ARRAY_SIZE(uart6_modemux[1]),
1791 },
1792 };
1793
1794 static const char *const uart6_grps[] = { "uart6_2_3_grp", "uart6_88_89_grp" };
1795 static struct spear_function uart6_function = {
1796 .name = "uart6",
1797 .groups = uart6_grps,
1798 .ngroups = ARRAY_SIZE(uart6_grps),
1799 };
1800
1801 /* UART - RS485 pmx */
1802 static const unsigned rs485_pins[] = { 77, 78, 79 };
1803 static struct spear_muxreg rs485_muxreg[] = {
1804 {
1805 .reg = IP_SEL_PAD_70_79_REG,
1806 .mask = PMX_PL_77_78_79_MASK,
1807 .val = PMX_RS485_PL_77_78_79_VAL,
1808 },
1809 };
1810
1811 static struct spear_modemux rs485_modemux[] = {
1812 {
1813 .modes = EXTENDED_MODE,
1814 .muxregs = rs485_muxreg,
1815 .nmuxregs = ARRAY_SIZE(rs485_muxreg),
1816 },
1817 };
1818
1819 static struct spear_pingroup rs485_pingroup = {
1820 .name = "rs485_grp",
1821 .pins = rs485_pins,
1822 .npins = ARRAY_SIZE(rs485_pins),
1823 .modemuxs = rs485_modemux,
1824 .nmodemuxs = ARRAY_SIZE(rs485_modemux),
1825 };
1826
1827 static const char *const rs485_grps[] = { "rs485_grp" };
1828 static struct spear_function rs485_function = {
1829 .name = "rs485",
1830 .groups = rs485_grps,
1831 .ngroups = ARRAY_SIZE(rs485_grps),
1832 };
1833
1834 /* Pad multiplexing for Touchscreen device */
1835 static const unsigned touchscreen_pins[] = { 5, 36 };
1836 static struct spear_muxreg touchscreen_muxreg[] = {
1837 {
1838 .reg = PMX_CONFIG_REG,
1839 .mask = PMX_I2C_MASK | PMX_SSP_CS_MASK,
1840 .val = 0,
1841 },
1842 };
1843
1844 static struct spear_muxreg touchscreen_ext_muxreg[] = {
1845 {
1846 .reg = IP_SEL_PAD_0_9_REG,
1847 .mask = PMX_PL_5_MASK,
1848 .val = PMX_TOUCH_Y_PL_5_VAL,
1849 }, {
1850 .reg = IP_SEL_PAD_30_39_REG,
1851 .mask = PMX_PL_36_MASK,
1852 .val = PMX_TOUCH_X_PL_36_VAL,
1853 },
1854 };
1855
1856 static struct spear_modemux touchscreen_modemux[] = {
1857 {
1858 .modes = AUTO_NET_SMII_MODE | EXTENDED_MODE,
1859 .muxregs = touchscreen_muxreg,
1860 .nmuxregs = ARRAY_SIZE(touchscreen_muxreg),
1861 }, {
1862 .modes = EXTENDED_MODE,
1863 .muxregs = touchscreen_ext_muxreg,
1864 .nmuxregs = ARRAY_SIZE(touchscreen_ext_muxreg),
1865 },
1866 };
1867
1868 static struct spear_pingroup touchscreen_pingroup = {
1869 .name = "touchscreen_grp",
1870 .pins = touchscreen_pins,
1871 .npins = ARRAY_SIZE(touchscreen_pins),
1872 .modemuxs = touchscreen_modemux,
1873 .nmodemuxs = ARRAY_SIZE(touchscreen_modemux),
1874 };
1875
1876 static const char *const touchscreen_grps[] = { "touchscreen_grp" };
1877 static struct spear_function touchscreen_function = {
1878 .name = "touchscreen",
1879 .groups = touchscreen_grps,
1880 .ngroups = ARRAY_SIZE(touchscreen_grps),
1881 };
1882
1883 /* Pad multiplexing for CAN device */
1884 static const unsigned can0_pins[] = { 32, 33 };
1885 static struct spear_muxreg can0_muxreg[] = {
1886 {
1887 .reg = PMX_CONFIG_REG,
1888 .mask = PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK,
1889 .val = 0,
1890 },
1891 };
1892
1893 static struct spear_muxreg can0_ext_muxreg[] = {
1894 {
1895 .reg = IP_SEL_PAD_30_39_REG,
1896 .mask = PMX_PL_32_33_MASK,
1897 .val = PMX_CAN0_PL_32_33_VAL,
1898 },
1899 };
1900
1901 static struct spear_modemux can0_modemux[] = {
1902 {
1903 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
1904 | EXTENDED_MODE,
1905 .muxregs = can0_muxreg,
1906 .nmuxregs = ARRAY_SIZE(can0_muxreg),
1907 }, {
1908 .modes = EXTENDED_MODE,
1909 .muxregs = can0_ext_muxreg,
1910 .nmuxregs = ARRAY_SIZE(can0_ext_muxreg),
1911 },
1912 };
1913
1914 static struct spear_pingroup can0_pingroup = {
1915 .name = "can0_grp",
1916 .pins = can0_pins,
1917 .npins = ARRAY_SIZE(can0_pins),
1918 .modemuxs = can0_modemux,
1919 .nmodemuxs = ARRAY_SIZE(can0_modemux),
1920 };
1921
1922 static const char *const can0_grps[] = { "can0_grp" };
1923 static struct spear_function can0_function = {
1924 .name = "can0",
1925 .groups = can0_grps,
1926 .ngroups = ARRAY_SIZE(can0_grps),
1927 };
1928
1929 static const unsigned can1_pins[] = { 30, 31 };
1930 static struct spear_muxreg can1_muxreg[] = {
1931 {
1932 .reg = PMX_CONFIG_REG,
1933 .mask = PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK,
1934 .val = 0,
1935 },
1936 };
1937
1938 static struct spear_muxreg can1_ext_muxreg[] = {
1939 {
1940 .reg = IP_SEL_PAD_30_39_REG,
1941 .mask = PMX_PL_30_31_MASK,
1942 .val = PMX_CAN1_PL_30_31_VAL,
1943 },
1944 };
1945
1946 static struct spear_modemux can1_modemux[] = {
1947 {
1948 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE
1949 | EXTENDED_MODE,
1950 .muxregs = can1_muxreg,
1951 .nmuxregs = ARRAY_SIZE(can1_muxreg),
1952 }, {
1953 .modes = EXTENDED_MODE,
1954 .muxregs = can1_ext_muxreg,
1955 .nmuxregs = ARRAY_SIZE(can1_ext_muxreg),
1956 },
1957 };
1958
1959 static struct spear_pingroup can1_pingroup = {
1960 .name = "can1_grp",
1961 .pins = can1_pins,
1962 .npins = ARRAY_SIZE(can1_pins),
1963 .modemuxs = can1_modemux,
1964 .nmodemuxs = ARRAY_SIZE(can1_modemux),
1965 };
1966
1967 static const char *const can1_grps[] = { "can1_grp" };
1968 static struct spear_function can1_function = {
1969 .name = "can1",
1970 .groups = can1_grps,
1971 .ngroups = ARRAY_SIZE(can1_grps),
1972 };
1973
1974 /* Pad multiplexing for PWM0_1 device */
1975 static const unsigned pwm0_1_pins[][2] = { { 37, 38 }, { 14, 15 }, { 8, 9 },
1976 { 30, 31 }, { 42, 43 }, { 59, 60 }, { 88, 89 } };
1977
1978 static struct spear_muxreg pwm0_1_pin_8_9_muxreg[] = {
1979 {
1980 .reg = PMX_CONFIG_REG,
1981 .mask = PMX_SSP_MASK,
1982 .val = 0,
1983 }, {
1984 .reg = IP_SEL_PAD_0_9_REG,
1985 .mask = PMX_PL_8_9_MASK,
1986 .val = PMX_PWM_0_1_PL_8_9_VAL,
1987 },
1988 };
1989
1990 static struct spear_muxreg pwm0_1_autoexpsmallpri_muxreg[] = {
1991 {
1992 .reg = PMX_CONFIG_REG,
1993 .mask = PMX_MII_MASK,
1994 .val = 0,
1995 },
1996 };
1997
1998 static struct spear_muxreg pwm0_1_pin_14_15_muxreg[] = {
1999 {
2000 .reg = IP_SEL_PAD_10_19_REG,
2001 .mask = PMX_PL_14_MASK | PMX_PL_15_MASK,
2002 .val = PMX_PWM1_PL_14_VAL | PMX_PWM0_PL_15_VAL,
2003 },
2004 };
2005
2006 static struct spear_muxreg pwm0_1_pin_30_31_muxreg[] = {
2007 {
2008 .reg = PMX_CONFIG_REG,
2009 .mask = PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK,
2010 .val = 0,
2011 }, {
2012 .reg = IP_SEL_PAD_30_39_REG,
2013 .mask = PMX_PL_30_MASK | PMX_PL_31_MASK,
2014 .val = PMX_PWM1_EXT_PL_30_VAL | PMX_PWM0_EXT_PL_31_VAL,
2015 },
2016 };
2017
2018 static struct spear_muxreg pwm0_1_net_muxreg[] = {
2019 {
2020 .reg = PMX_CONFIG_REG,
2021 .mask = PMX_UART0_MODEM_MASK,
2022 .val = 0,
2023 },
2024 };
2025
2026 static struct spear_muxreg pwm0_1_pin_37_38_muxreg[] = {
2027 {
2028 .reg = IP_SEL_PAD_30_39_REG,
2029 .mask = PMX_PL_37_38_MASK,
2030 .val = PMX_PWM0_1_PL_37_38_VAL,
2031 },
2032 };
2033
2034 static struct spear_muxreg pwm0_1_pin_42_43_muxreg[] = {
2035 {
2036 .reg = PMX_CONFIG_REG,
2037 .mask = PMX_UART0_MODEM_MASK | PMX_TIMER_0_1_MASK ,
2038 .val = 0,
2039 }, {
2040 .reg = IP_SEL_PAD_40_49_REG,
2041 .mask = PMX_PL_42_MASK | PMX_PL_43_MASK,
2042 .val = PMX_PWM1_PL_42_VAL |
2043 PMX_PWM0_PL_43_VAL,
2044 },
2045 };
2046
2047 static struct spear_muxreg pwm0_1_pin_59_60_muxreg[] = {
2048 {
2049 .reg = IP_SEL_PAD_50_59_REG,
2050 .mask = PMX_PL_59_MASK,
2051 .val = PMX_PWM1_PL_59_VAL,
2052 }, {
2053 .reg = IP_SEL_PAD_60_69_REG,
2054 .mask = PMX_PL_60_MASK,
2055 .val = PMX_PWM0_PL_60_VAL,
2056 },
2057 };
2058
2059 static struct spear_muxreg pwm0_1_pin_88_89_muxreg[] = {
2060 {
2061 .reg = IP_SEL_PAD_80_89_REG,
2062 .mask = PMX_PL_88_89_MASK,
2063 .val = PMX_PWM0_1_PL_88_89_VAL,
2064 },
2065 };
2066
2067 static struct spear_modemux pwm0_1_pin_8_9_modemux[] = {
2068 {
2069 .modes = EXTENDED_MODE,
2070 .muxregs = pwm0_1_pin_8_9_muxreg,
2071 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_8_9_muxreg),
2072 },
2073 };
2074
2075 static struct spear_modemux pwm0_1_pin_14_15_modemux[] = {
2076 {
2077 .modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE | EXTENDED_MODE,
2078 .muxregs = pwm0_1_autoexpsmallpri_muxreg,
2079 .nmuxregs = ARRAY_SIZE(pwm0_1_autoexpsmallpri_muxreg),
2080 }, {
2081 .modes = EXTENDED_MODE,
2082 .muxregs = pwm0_1_pin_14_15_muxreg,
2083 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_14_15_muxreg),
2084 },
2085 };
2086
2087 static struct spear_modemux pwm0_1_pin_30_31_modemux[] = {
2088 {
2089 .modes = EXTENDED_MODE,
2090 .muxregs = pwm0_1_pin_30_31_muxreg,
2091 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_30_31_muxreg),
2092 },
2093 };
2094
2095 static struct spear_modemux pwm0_1_pin_37_38_modemux[] = {
2096 {
2097 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
2098 .muxregs = pwm0_1_net_muxreg,
2099 .nmuxregs = ARRAY_SIZE(pwm0_1_net_muxreg),
2100 }, {
2101 .modes = EXTENDED_MODE,
2102 .muxregs = pwm0_1_pin_37_38_muxreg,
2103 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_37_38_muxreg),
2104 },
2105 };
2106
2107 static struct spear_modemux pwm0_1_pin_42_43_modemux[] = {
2108 {
2109 .modes = EXTENDED_MODE,
2110 .muxregs = pwm0_1_pin_42_43_muxreg,
2111 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_42_43_muxreg),
2112 },
2113 };
2114
2115 static struct spear_modemux pwm0_1_pin_59_60_modemux[] = {
2116 {
2117 .modes = EXTENDED_MODE,
2118 .muxregs = pwm0_1_pin_59_60_muxreg,
2119 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_59_60_muxreg),
2120 },
2121 };
2122
2123 static struct spear_modemux pwm0_1_pin_88_89_modemux[] = {
2124 {
2125 .modes = EXTENDED_MODE,
2126 .muxregs = pwm0_1_pin_88_89_muxreg,
2127 .nmuxregs = ARRAY_SIZE(pwm0_1_pin_88_89_muxreg),
2128 },
2129 };
2130
2131 static struct spear_pingroup pwm0_1_pingroup[] = {
2132 {
2133 .name = "pwm0_1_pin_8_9_grp",
2134 .pins = pwm0_1_pins[0],
2135 .npins = ARRAY_SIZE(pwm0_1_pins[0]),
2136 .modemuxs = pwm0_1_pin_8_9_modemux,
2137 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_8_9_modemux),
2138 }, {
2139 .name = "pwm0_1_pin_14_15_grp",
2140 .pins = pwm0_1_pins[1],
2141 .npins = ARRAY_SIZE(pwm0_1_pins[1]),
2142 .modemuxs = pwm0_1_pin_14_15_modemux,
2143 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_14_15_modemux),
2144 }, {
2145 .name = "pwm0_1_pin_30_31_grp",
2146 .pins = pwm0_1_pins[2],
2147 .npins = ARRAY_SIZE(pwm0_1_pins[2]),
2148 .modemuxs = pwm0_1_pin_30_31_modemux,
2149 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_30_31_modemux),
2150 }, {
2151 .name = "pwm0_1_pin_37_38_grp",
2152 .pins = pwm0_1_pins[3],
2153 .npins = ARRAY_SIZE(pwm0_1_pins[3]),
2154 .modemuxs = pwm0_1_pin_37_38_modemux,
2155 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_37_38_modemux),
2156 }, {
2157 .name = "pwm0_1_pin_42_43_grp",
2158 .pins = pwm0_1_pins[4],
2159 .npins = ARRAY_SIZE(pwm0_1_pins[4]),
2160 .modemuxs = pwm0_1_pin_42_43_modemux,
2161 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_42_43_modemux),
2162 }, {
2163 .name = "pwm0_1_pin_59_60_grp",
2164 .pins = pwm0_1_pins[5],
2165 .npins = ARRAY_SIZE(pwm0_1_pins[5]),
2166 .modemuxs = pwm0_1_pin_59_60_modemux,
2167 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_59_60_modemux),
2168 }, {
2169 .name = "pwm0_1_pin_88_89_grp",
2170 .pins = pwm0_1_pins[6],
2171 .npins = ARRAY_SIZE(pwm0_1_pins[6]),
2172 .modemuxs = pwm0_1_pin_88_89_modemux,
2173 .nmodemuxs = ARRAY_SIZE(pwm0_1_pin_88_89_modemux),
2174 },
2175 };
2176
2177 static const char *const pwm0_1_grps[] = { "pwm0_1_pin_8_9_grp",
2178 "pwm0_1_pin_14_15_grp", "pwm0_1_pin_30_31_grp", "pwm0_1_pin_37_38_grp",
2179 "pwm0_1_pin_42_43_grp", "pwm0_1_pin_59_60_grp", "pwm0_1_pin_88_89_grp"
2180 };
2181
2182 static struct spear_function pwm0_1_function = {
2183 .name = "pwm0_1",
2184 .groups = pwm0_1_grps,
2185 .ngroups = ARRAY_SIZE(pwm0_1_grps),
2186 };
2187
2188 /* Pad multiplexing for PWM2 device */
2189 static const unsigned pwm2_pins[][1] = { { 7 }, { 13 }, { 29 }, { 34 }, { 41 },
2190 { 58 }, { 87 } };
2191 static struct spear_muxreg pwm2_net_muxreg[] = {
2192 {
2193 .reg = PMX_CONFIG_REG,
2194 .mask = PMX_SSP_CS_MASK,
2195 .val = 0,
2196 },
2197 };
2198
2199 static struct spear_muxreg pwm2_pin_7_muxreg[] = {
2200 {
2201 .reg = IP_SEL_PAD_0_9_REG,
2202 .mask = PMX_PL_7_MASK,
2203 .val = PMX_PWM_2_PL_7_VAL,
2204 },
2205 };
2206
2207 static struct spear_muxreg pwm2_autoexpsmallpri_muxreg[] = {
2208 {
2209 .reg = PMX_CONFIG_REG,
2210 .mask = PMX_MII_MASK,
2211 .val = 0,
2212 },
2213 };
2214
2215 static struct spear_muxreg pwm2_pin_13_muxreg[] = {
2216 {
2217 .reg = IP_SEL_PAD_10_19_REG,
2218 .mask = PMX_PL_13_MASK,
2219 .val = PMX_PWM2_PL_13_VAL,
2220 },
2221 };
2222
2223 static struct spear_muxreg pwm2_pin_29_muxreg[] = {
2224 {
2225 .reg = PMX_CONFIG_REG,
2226 .mask = PMX_GPIO_PIN1_MASK,
2227 .val = 0,
2228 }, {
2229 .reg = IP_SEL_PAD_20_29_REG,
2230 .mask = PMX_PL_29_MASK,
2231 .val = PMX_PWM_2_PL_29_VAL,
2232 },
2233 };
2234
2235 static struct spear_muxreg pwm2_pin_34_muxreg[] = {
2236 {
2237 .reg = PMX_CONFIG_REG,
2238 .mask = PMX_SSP_CS_MASK,
2239 .val = 0,
2240 }, {
2241 .reg = MODE_CONFIG_REG,
2242 .mask = PMX_PWM_MASK,
2243 .val = PMX_PWM_MASK,
2244 }, {
2245 .reg = IP_SEL_PAD_30_39_REG,
2246 .mask = PMX_PL_34_MASK,
2247 .val = PMX_PWM2_PL_34_VAL,
2248 },
2249 };
2250
2251 static struct spear_muxreg pwm2_pin_41_muxreg[] = {
2252 {
2253 .reg = PMX_CONFIG_REG,
2254 .mask = PMX_UART0_MODEM_MASK,
2255 .val = 0,
2256 }, {
2257 .reg = IP_SEL_PAD_40_49_REG,
2258 .mask = PMX_PL_41_MASK,
2259 .val = PMX_PWM2_PL_41_VAL,
2260 },
2261 };
2262
2263 static struct spear_muxreg pwm2_pin_58_muxreg[] = {
2264 {
2265 .reg = IP_SEL_PAD_50_59_REG,
2266 .mask = PMX_PL_58_MASK,
2267 .val = PMX_PWM2_PL_58_VAL,
2268 },
2269 };
2270
2271 static struct spear_muxreg pwm2_pin_87_muxreg[] = {
2272 {
2273 .reg = IP_SEL_PAD_80_89_REG,
2274 .mask = PMX_PL_87_MASK,
2275 .val = PMX_PWM2_PL_87_VAL,
2276 },
2277 };
2278
2279 static struct spear_modemux pwm2_pin_7_modemux[] = {
2280 {
2281 .modes = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | EXTENDED_MODE,
2282 .muxregs = pwm2_net_muxreg,
2283 .nmuxregs = ARRAY_SIZE(pwm2_net_muxreg),
2284 }, {
2285 .modes = EXTENDED_MODE,
2286 .muxregs = pwm2_pin_7_muxreg,
2287 .nmuxregs = ARRAY_SIZE(pwm2_pin_7_muxreg),
2288 },
2289 };
2290 static struct spear_modemux pwm2_pin_13_modemux[] = {
2291 {
2292 .modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE | EXTENDED_MODE,
2293 .muxregs = pwm2_autoexpsmallpri_muxreg,
2294 .nmuxregs = ARRAY_SIZE(pwm2_autoexpsmallpri_muxreg),
2295 }, {
2296 .modes = EXTENDED_MODE,
2297 .muxregs = pwm2_pin_13_muxreg,
2298 .nmuxregs = ARRAY_SIZE(pwm2_pin_13_muxreg),
2299 },
2300 };
2301 static struct spear_modemux pwm2_pin_29_modemux[] = {
2302 {
2303 .modes = EXTENDED_MODE,
2304 .muxregs = pwm2_pin_29_muxreg,
2305 .nmuxregs = ARRAY_SIZE(pwm2_pin_29_muxreg),
2306 },
2307 };
2308 static struct spear_modemux pwm2_pin_34_modemux[] = {
2309 {
2310 .modes = EXTENDED_MODE,
2311 .muxregs = pwm2_pin_34_muxreg,
2312 .nmuxregs = ARRAY_SIZE(pwm2_pin_34_muxreg),
2313 },
2314 };
2315
2316 static struct spear_modemux pwm2_pin_41_modemux[] = {
2317 {
2318 .modes = EXTENDED_MODE,
2319 .muxregs = pwm2_pin_41_muxreg,
2320 .nmuxregs = ARRAY_SIZE(pwm2_pin_41_muxreg),
2321 },
2322 };
2323
2324 static struct spear_modemux pwm2_pin_58_modemux[] = {
2325 {
2326 .modes = EXTENDED_MODE,
2327 .muxregs = pwm2_pin_58_muxreg,
2328 .nmuxregs = ARRAY_SIZE(pwm2_pin_58_muxreg),
2329 },
2330 };
2331
2332 static struct spear_modemux pwm2_pin_87_modemux[] = {
2333 {
2334 .modes = EXTENDED_MODE,
2335 .muxregs = pwm2_pin_87_muxreg,
2336 .nmuxregs = ARRAY_SIZE(pwm2_pin_87_muxreg),
2337 },
2338 };
2339
2340 static struct spear_pingroup pwm2_pingroup[] = {
2341 {
2342 .name = "pwm2_pin_7_grp",
2343 .pins = pwm2_pins[0],
2344 .npins = ARRAY_SIZE(pwm2_pins[0]),
2345 .modemuxs = pwm2_pin_7_modemux,
2346 .nmodemuxs = ARRAY_SIZE(pwm2_pin_7_modemux),
2347 }, {
2348 .name = "pwm2_pin_13_grp",
2349 .pins = pwm2_pins[1],
2350 .npins = ARRAY_SIZE(pwm2_pins[1]),
2351 .modemuxs = pwm2_pin_13_modemux,
2352 .nmodemuxs = ARRAY_SIZE(pwm2_pin_13_modemux),
2353 }, {
2354 .name = "pwm2_pin_29_grp",
2355 .pins = pwm2_pins[2],
2356 .npins = ARRAY_SIZE(pwm2_pins[2]),
2357 .modemuxs = pwm2_pin_29_modemux,
2358 .nmodemuxs = ARRAY_SIZE(pwm2_pin_29_modemux),
2359 }, {
2360 .name = "pwm2_pin_34_grp",
2361 .pins = pwm2_pins[3],
2362 .npins = ARRAY_SIZE(pwm2_pins[3]),
2363 .modemuxs = pwm2_pin_34_modemux,
2364 .nmodemuxs = ARRAY_SIZE(pwm2_pin_34_modemux),
2365 }, {
2366 .name = "pwm2_pin_41_grp",
2367 .pins = pwm2_pins[4],
2368 .npins = ARRAY_SIZE(pwm2_pins[4]),
2369 .modemuxs = pwm2_pin_41_modemux,
2370 .nmodemuxs = ARRAY_SIZE(pwm2_pin_41_modemux),
2371 }, {
2372 .name = "pwm2_pin_58_grp",
2373 .pins = pwm2_pins[5],
2374 .npins = ARRAY_SIZE(pwm2_pins[5]),
2375 .modemuxs = pwm2_pin_58_modemux,
2376 .nmodemuxs = ARRAY_SIZE(pwm2_pin_58_modemux),
2377 }, {
2378 .name = "pwm2_pin_87_grp",
2379 .pins = pwm2_pins[6],
2380 .npins = ARRAY_SIZE(pwm2_pins[6]),
2381 .modemuxs = pwm2_pin_87_modemux,
2382 .nmodemuxs = ARRAY_SIZE(pwm2_pin_87_modemux),
2383 },
2384 };
2385
2386 static const char *const pwm2_grps[] = { "pwm2_pin_7_grp", "pwm2_pin_13_grp",
2387 "pwm2_pin_29_grp", "pwm2_pin_34_grp", "pwm2_pin_41_grp",
2388 "pwm2_pin_58_grp", "pwm2_pin_87_grp" };
2389 static struct spear_function pwm2_function = {
2390 .name = "pwm2",
2391 .groups = pwm2_grps,
2392 .ngroups = ARRAY_SIZE(pwm2_grps),
2393 };
2394
2395 /* Pad multiplexing for PWM3 device */
2396 static const unsigned pwm3_pins[][1] = { { 6 }, { 12 }, { 28 }, { 40 }, { 57 },
2397 { 86 } };
2398 static struct spear_muxreg pwm3_pin_6_muxreg[] = {
2399 {
2400 .reg = PMX_CONFIG_REG,
2401 .mask = PMX_SSP_MASK,
2402 .val = 0,
2403 }, {
2404 .reg = IP_SEL_PAD_0_9_REG,
2405 .mask = PMX_PL_6_MASK,
2406 .val = PMX_PWM_3_PL_6_VAL,
2407 },
2408 };
2409
2410 static struct spear_muxreg pwm3_muxreg[] = {
2411 {
2412 .reg = PMX_CONFIG_REG,
2413 .mask = PMX_MII_MASK,
2414 .val = 0,
2415 },
2416 };
2417
2418 static struct spear_muxreg pwm3_pin_12_muxreg[] = {
2419 {
2420 .reg = IP_SEL_PAD_10_19_REG,
2421 .mask = PMX_PL_12_MASK,
2422 .val = PMX_PWM3_PL_12_VAL,
2423 },
2424 };
2425
2426 static struct spear_muxreg pwm3_pin_28_muxreg[] = {
2427 {
2428 .reg = PMX_CONFIG_REG,
2429 .mask = PMX_GPIO_PIN0_MASK,
2430 .val = 0,
2431 }, {
2432 .reg = IP_SEL_PAD_20_29_REG,
2433 .mask = PMX_PL_28_MASK,
2434 .val = PMX_PWM_3_PL_28_VAL,
2435 },
2436 };
2437
2438 static struct spear_muxreg pwm3_pin_40_muxreg[] = {
2439 {
2440 .reg = PMX_CONFIG_REG,
2441 .mask = PMX_UART0_MODEM_MASK,
2442 .val = 0,
2443 }, {
2444 .reg = IP_SEL_PAD_40_49_REG,
2445 .mask = PMX_PL_40_MASK,
2446 .val = PMX_PWM3_PL_40_VAL,
2447 },
2448 };
2449
2450 static struct spear_muxreg pwm3_pin_57_muxreg[] = {
2451 {
2452 .reg = IP_SEL_PAD_50_59_REG,
2453 .mask = PMX_PL_57_MASK,
2454 .val = PMX_PWM3_PL_57_VAL,
2455 },
2456 };
2457
2458 static struct spear_muxreg pwm3_pin_86_muxreg[] = {
2459 {
2460 .reg = IP_SEL_PAD_80_89_REG,
2461 .mask = PMX_PL_86_MASK,
2462 .val = PMX_PWM3_PL_86_VAL,
2463 },
2464 };
2465
2466 static struct spear_modemux pwm3_pin_6_modemux[] = {
2467 {
2468 .modes = EXTENDED_MODE,
2469 .muxregs = pwm3_pin_6_muxreg,
2470 .nmuxregs = ARRAY_SIZE(pwm3_pin_6_muxreg),
2471 },
2472 };
2473
2474 static struct spear_modemux pwm3_pin_12_modemux[] = {
2475 {
2476 .modes = AUTO_EXP_MODE | SMALL_PRINTERS_MODE |
2477 AUTO_NET_SMII_MODE | EXTENDED_MODE,
2478 .muxregs = pwm3_muxreg,
2479 .nmuxregs = ARRAY_SIZE(pwm3_muxreg),
2480 }, {
2481 .modes = EXTENDED_MODE,
2482 .muxregs = pwm3_pin_12_muxreg,
2483 .nmuxregs = ARRAY_SIZE(pwm3_pin_12_muxreg),
2484 },
2485 };
2486
2487 static struct spear_modemux pwm3_pin_28_modemux[] = {
2488 {
2489 .modes = EXTENDED_MODE,
2490 .muxregs = pwm3_pin_28_muxreg,
2491 .nmuxregs = ARRAY_SIZE(pwm3_pin_28_muxreg),
2492 },
2493 };
2494
2495 static struct spear_modemux pwm3_pin_40_modemux[] = {
2496 {
2497 .modes = EXTENDED_MODE,
2498 .muxregs = pwm3_pin_40_muxreg,
2499 .nmuxregs = ARRAY_SIZE(pwm3_pin_40_muxreg),
2500 },
2501 };
2502
2503 static struct spear_modemux pwm3_pin_57_modemux[] = {
2504 {
2505 .modes = EXTENDED_MODE,
2506 .muxregs = pwm3_pin_57_muxreg,
2507 .nmuxregs = ARRAY_SIZE(pwm3_pin_57_muxreg),
2508 },
2509 };
2510
2511 static struct spear_modemux pwm3_pin_86_modemux[] = {
2512 {
2513 .modes = EXTENDED_MODE,
2514 .muxregs = pwm3_pin_86_muxreg,
2515 .nmuxregs = ARRAY_SIZE(pwm3_pin_86_muxreg),
2516 },
2517 };
2518
2519 static struct spear_pingroup pwm3_pingroup[] = {
2520 {
2521 .name = "pwm3_pin_6_grp",
2522 .pins = pwm3_pins[0],
2523 .npins = ARRAY_SIZE(pwm3_pins[0]),
2524 .modemuxs = pwm3_pin_6_modemux,
2525 .nmodemuxs = ARRAY_SIZE(pwm3_pin_6_modemux),
2526 }, {
2527 .name = "pwm3_pin_12_grp",
2528 .pins = pwm3_pins[1],
2529 .npins = ARRAY_SIZE(pwm3_pins[1]),
2530 .modemuxs = pwm3_pin_12_modemux,
2531 .nmodemuxs = ARRAY_SIZE(pwm3_pin_12_modemux),
2532 }, {
2533 .name = "pwm3_pin_28_grp",
2534 .pins = pwm3_pins[2],
2535 .npins = ARRAY_SIZE(pwm3_pins[2]),
2536 .modemuxs = pwm3_pin_28_modemux,
2537 .nmodemuxs = ARRAY_SIZE(pwm3_pin_28_modemux),
2538 }, {
2539 .name = "pwm3_pin_40_grp",
2540 .pins = pwm3_pins[3],
2541 .npins = ARRAY_SIZE(pwm3_pins[3]),
2542 .modemuxs = pwm3_pin_40_modemux,
2543 .nmodemuxs = ARRAY_SIZE(pwm3_pin_40_modemux),
2544 }, {
2545 .name = "pwm3_pin_57_grp",
2546 .pins = pwm3_pins[4],
2547 .npins = ARRAY_SIZE(pwm3_pins[4]),
2548 .modemuxs = pwm3_pin_57_modemux,
2549 .nmodemuxs = ARRAY_SIZE(pwm3_pin_57_modemux),
2550 }, {
2551 .name = "pwm3_pin_86_grp",
2552 .pins = pwm3_pins[5],
2553 .npins = ARRAY_SIZE(pwm3_pins[5]),
2554 .modemuxs = pwm3_pin_86_modemux,
2555 .nmodemuxs = ARRAY_SIZE(pwm3_pin_86_modemux),
2556 },
2557 };
2558
2559 static const char *const pwm3_grps[] = { "pwm3_pin_6_grp", "pwm3_pin_12_grp",
2560 "pwm3_pin_28_grp", "pwm3_pin_40_grp", "pwm3_pin_57_grp",
2561 "pwm3_pin_86_grp" };
2562 static struct spear_function pwm3_function = {
2563 .name = "pwm3",
2564 .groups = pwm3_grps,
2565 .ngroups = ARRAY_SIZE(pwm3_grps),
2566 };
2567
2568 /* Pad multiplexing for SSP1 device */
2569 static const unsigned ssp1_pins[][2] = { { 17, 20 }, { 36, 39 }, { 48, 51 },
2570 { 65, 68 }, { 94, 97 } };
2571 static struct spear_muxreg ssp1_muxreg[] = {
2572 {
2573 .reg = PMX_CONFIG_REG,
2574 .mask = PMX_MII_MASK,
2575 .val = 0,
2576 },
2577 };
2578
2579 static struct spear_muxreg ssp1_ext_17_20_muxreg[] = {
2580 {
2581 .reg = IP_SEL_PAD_10_19_REG,
2582 .mask = PMX_PL_17_18_MASK | PMX_PL_19_MASK,
2583 .val = PMX_SSP1_PL_17_18_19_20_VAL,
2584 }, {
2585 .reg = IP_SEL_PAD_20_29_REG,
2586 .mask = PMX_PL_20_MASK,
2587 .val = PMX_SSP1_PL_17_18_19_20_VAL,
2588 }, {
2589 .reg = IP_SEL_MIX_PAD_REG,
2590 .mask = PMX_SSP1_PORT_SEL_MASK,
2591 .val = PMX_SSP1_PORT_17_TO_20_VAL,
2592 },
2593 };
2594
2595 static struct spear_muxreg ssp1_ext_36_39_muxreg[] = {
2596 {
2597 .reg = PMX_CONFIG_REG,
2598 .mask = PMX_UART0_MODEM_MASK | PMX_SSP_CS_MASK,
2599 .val = 0,
2600 }, {
2601 .reg = IP_SEL_PAD_30_39_REG,
2602 .mask = PMX_PL_36_MASK | PMX_PL_37_38_MASK | PMX_PL_39_MASK,
2603 .val = PMX_SSP1_PL_36_VAL | PMX_SSP1_PL_37_38_VAL |
2604 PMX_SSP1_PL_39_VAL,
2605 }, {
2606 .reg = IP_SEL_MIX_PAD_REG,
2607 .mask = PMX_SSP1_PORT_SEL_MASK,
2608 .val = PMX_SSP1_PORT_36_TO_39_VAL,
2609 },
2610 };
2611
2612 static struct spear_muxreg ssp1_ext_48_51_muxreg[] = {
2613 {
2614 .reg = PMX_CONFIG_REG,
2615 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
2616 .val = 0,
2617 }, {
2618 .reg = IP_SEL_PAD_40_49_REG,
2619 .mask = PMX_PL_48_49_MASK,
2620 .val = PMX_SSP1_PL_48_49_VAL,
2621 }, {
2622 .reg = IP_SEL_PAD_50_59_REG,
2623 .mask = PMX_PL_50_51_MASK,
2624 .val = PMX_SSP1_PL_50_51_VAL,
2625 }, {
2626 .reg = IP_SEL_MIX_PAD_REG,
2627 .mask = PMX_SSP1_PORT_SEL_MASK,
2628 .val = PMX_SSP1_PORT_48_TO_51_VAL,
2629 },
2630 };
2631
2632 static struct spear_muxreg ssp1_ext_65_68_muxreg[] = {
2633 {
2634 .reg = IP_SEL_PAD_60_69_REG,
2635 .mask = PMX_PL_65_TO_68_MASK,
2636 .val = PMX_SSP1_PL_65_TO_68_VAL,
2637 }, {
2638 .reg = IP_SEL_MIX_PAD_REG,
2639 .mask = PMX_SSP1_PORT_SEL_MASK,
2640 .val = PMX_SSP1_PORT_65_TO_68_VAL,
2641 },
2642 };
2643
2644 static struct spear_muxreg ssp1_ext_94_97_muxreg[] = {
2645 {
2646 .reg = IP_SEL_PAD_90_99_REG,
2647 .mask = PMX_PL_94_95_MASK | PMX_PL_96_97_MASK,
2648 .val = PMX_SSP1_PL_94_95_VAL | PMX_SSP1_PL_96_97_VAL,
2649 }, {
2650 .reg = IP_SEL_MIX_PAD_REG,
2651 .mask = PMX_SSP1_PORT_SEL_MASK,
2652 .val = PMX_SSP1_PORT_94_TO_97_VAL,
2653 },
2654 };
2655
2656 static struct spear_modemux ssp1_17_20_modemux[] = {
2657 {
2658 .modes = SMALL_PRINTERS_MODE | AUTO_NET_SMII_MODE |
2659 EXTENDED_MODE,
2660 .muxregs = ssp1_muxreg,
2661 .nmuxregs = ARRAY_SIZE(ssp1_muxreg),
2662 }, {
2663 .modes = EXTENDED_MODE,
2664 .muxregs = ssp1_ext_17_20_muxreg,
2665 .nmuxregs = ARRAY_SIZE(ssp1_ext_17_20_muxreg),
2666 },
2667 };
2668
2669 static struct spear_modemux ssp1_36_39_modemux[] = {
2670 {
2671 .modes = EXTENDED_MODE,
2672 .muxregs = ssp1_ext_36_39_muxreg,
2673 .nmuxregs = ARRAY_SIZE(ssp1_ext_36_39_muxreg),
2674 },
2675 };
2676
2677 static struct spear_modemux ssp1_48_51_modemux[] = {
2678 {
2679 .modes = EXTENDED_MODE,
2680 .muxregs = ssp1_ext_48_51_muxreg,
2681 .nmuxregs = ARRAY_SIZE(ssp1_ext_48_51_muxreg),
2682 },
2683 };
2684 static struct spear_modemux ssp1_65_68_modemux[] = {
2685 {
2686 .modes = EXTENDED_MODE,
2687 .muxregs = ssp1_ext_65_68_muxreg,
2688 .nmuxregs = ARRAY_SIZE(ssp1_ext_65_68_muxreg),
2689 },
2690 };
2691
2692 static struct spear_modemux ssp1_94_97_modemux[] = {
2693 {
2694 .modes = EXTENDED_MODE,
2695 .muxregs = ssp1_ext_94_97_muxreg,
2696 .nmuxregs = ARRAY_SIZE(ssp1_ext_94_97_muxreg),
2697 },
2698 };
2699
2700 static struct spear_pingroup ssp1_pingroup[] = {
2701 {
2702 .name = "ssp1_17_20_grp",
2703 .pins = ssp1_pins[0],
2704 .npins = ARRAY_SIZE(ssp1_pins[0]),
2705 .modemuxs = ssp1_17_20_modemux,
2706 .nmodemuxs = ARRAY_SIZE(ssp1_17_20_modemux),
2707 }, {
2708 .name = "ssp1_36_39_grp",
2709 .pins = ssp1_pins[1],
2710 .npins = ARRAY_SIZE(ssp1_pins[1]),
2711 .modemuxs = ssp1_36_39_modemux,
2712 .nmodemuxs = ARRAY_SIZE(ssp1_36_39_modemux),
2713 }, {
2714 .name = "ssp1_48_51_grp",
2715 .pins = ssp1_pins[2],
2716 .npins = ARRAY_SIZE(ssp1_pins[2]),
2717 .modemuxs = ssp1_48_51_modemux,
2718 .nmodemuxs = ARRAY_SIZE(ssp1_48_51_modemux),
2719 }, {
2720 .name = "ssp1_65_68_grp",
2721 .pins = ssp1_pins[3],
2722 .npins = ARRAY_SIZE(ssp1_pins[3]),
2723 .modemuxs = ssp1_65_68_modemux,
2724 .nmodemuxs = ARRAY_SIZE(ssp1_65_68_modemux),
2725 }, {
2726 .name = "ssp1_94_97_grp",
2727 .pins = ssp1_pins[4],
2728 .npins = ARRAY_SIZE(ssp1_pins[4]),
2729 .modemuxs = ssp1_94_97_modemux,
2730 .nmodemuxs = ARRAY_SIZE(ssp1_94_97_modemux),
2731 },
2732 };
2733
2734 static const char *const ssp1_grps[] = { "ssp1_17_20_grp", "ssp1_36_39_grp",
2735 "ssp1_48_51_grp", "ssp1_65_68_grp", "ssp1_94_97_grp"
2736 };
2737 static struct spear_function ssp1_function = {
2738 .name = "ssp1",
2739 .groups = ssp1_grps,
2740 .ngroups = ARRAY_SIZE(ssp1_grps),
2741 };
2742
2743 /* Pad multiplexing for SSP2 device */
2744 static const unsigned ssp2_pins[][2] = { { 13, 16 }, { 32, 35 }, { 44, 47 },
2745 { 61, 64 }, { 90, 93 } };
2746 static struct spear_muxreg ssp2_muxreg[] = {
2747 {
2748 .reg = PMX_CONFIG_REG,
2749 .mask = PMX_MII_MASK,
2750 .val = 0,
2751 },
2752 };
2753
2754 static struct spear_muxreg ssp2_ext_13_16_muxreg[] = {
2755 {
2756 .reg = IP_SEL_PAD_10_19_REG,
2757 .mask = PMX_PL_13_14_MASK | PMX_PL_15_16_MASK,
2758 .val = PMX_SSP2_PL_13_14_15_16_VAL,
2759 }, {
2760 .reg = IP_SEL_MIX_PAD_REG,
2761 .mask = PMX_SSP2_PORT_SEL_MASK,
2762 .val = PMX_SSP2_PORT_13_TO_16_VAL,
2763 },
2764 };
2765
2766 static struct spear_muxreg ssp2_ext_32_35_muxreg[] = {
2767 {
2768 .reg = PMX_CONFIG_REG,
2769 .mask = PMX_SSP_CS_MASK | PMX_GPIO_PIN4_MASK |
2770 PMX_GPIO_PIN5_MASK,
2771 .val = 0,
2772 }, {
2773 .reg = IP_SEL_PAD_30_39_REG,
2774 .mask = PMX_PL_32_33_MASK | PMX_PL_34_MASK | PMX_PL_35_MASK,
2775 .val = PMX_SSP2_PL_32_33_VAL | PMX_SSP2_PL_34_VAL |
2776 PMX_SSP2_PL_35_VAL,
2777 }, {
2778 .reg = IP_SEL_MIX_PAD_REG,
2779 .mask = PMX_SSP2_PORT_SEL_MASK,
2780 .val = PMX_SSP2_PORT_32_TO_35_VAL,
2781 },
2782 };
2783
2784 static struct spear_muxreg ssp2_ext_44_47_muxreg[] = {
2785 {
2786 .reg = PMX_CONFIG_REG,
2787 .mask = PMX_TIMER_0_1_MASK | PMX_TIMER_2_3_MASK,
2788 .val = 0,
2789 }, {
2790 .reg = IP_SEL_PAD_40_49_REG,
2791 .mask = PMX_PL_44_45_MASK | PMX_PL_46_47_MASK,
2792 .val = PMX_SSP2_PL_44_45_VAL | PMX_SSP2_PL_46_47_VAL,
2793 }, {
2794 .reg = IP_SEL_MIX_PAD_REG,
2795 .mask = PMX_SSP2_PORT_SEL_MASK,
2796 .val = PMX_SSP2_PORT_44_TO_47_VAL,
2797 },
2798 };
2799
2800 static struct spear_muxreg ssp2_ext_61_64_muxreg[] = {
2801 {
2802 .reg = IP_SEL_PAD_60_69_REG,
2803 .mask = PMX_PL_61_TO_64_MASK,
2804 .val = PMX_SSP2_PL_61_TO_64_VAL,
2805 }, {
2806 .reg = IP_SEL_MIX_PAD_REG,
2807 .mask = PMX_SSP2_PORT_SEL_MASK,
2808 .val = PMX_SSP2_PORT_61_TO_64_VAL,
2809 },
2810 };
2811
2812 static struct spear_muxreg ssp2_ext_90_93_muxreg[] = {
2813 {
2814 .reg = IP_SEL_PAD_90_99_REG,
2815 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK,
2816 .val = PMX_SSP2_PL_90_91_VAL | PMX_SSP2_PL_92_93_VAL,
2817 }, {
2818 .reg = IP_SEL_MIX_PAD_REG,
2819 .mask = PMX_SSP2_PORT_SEL_MASK,
2820 .val = PMX_SSP2_PORT_90_TO_93_VAL,
2821 },
2822 };
2823
2824 static struct spear_modemux ssp2_13_16_modemux[] = {
2825 {
2826 .modes = AUTO_NET_SMII_MODE | EXTENDED_MODE,
2827 .muxregs = ssp2_muxreg,
2828 .nmuxregs = ARRAY_SIZE(ssp2_muxreg),
2829 }, {
2830 .modes = EXTENDED_MODE,
2831 .muxregs = ssp2_ext_13_16_muxreg,
2832 .nmuxregs = ARRAY_SIZE(ssp2_ext_13_16_muxreg),
2833 },
2834 };
2835
2836 static struct spear_modemux ssp2_32_35_modemux[] = {
2837 {
2838 .modes = EXTENDED_MODE,
2839 .muxregs = ssp2_ext_32_35_muxreg,
2840 .nmuxregs = ARRAY_SIZE(ssp2_ext_32_35_muxreg),
2841 },
2842 };
2843
2844 static struct spear_modemux ssp2_44_47_modemux[] = {
2845 {
2846 .modes = EXTENDED_MODE,
2847 .muxregs = ssp2_ext_44_47_muxreg,
2848 .nmuxregs = ARRAY_SIZE(ssp2_ext_44_47_muxreg),
2849 },
2850 };
2851
2852 static struct spear_modemux ssp2_61_64_modemux[] = {
2853 {
2854 .modes = EXTENDED_MODE,
2855 .muxregs = ssp2_ext_61_64_muxreg,
2856 .nmuxregs = ARRAY_SIZE(ssp2_ext_61_64_muxreg),
2857 },
2858 };
2859
2860 static struct spear_modemux ssp2_90_93_modemux[] = {
2861 {
2862 .modes = EXTENDED_MODE,
2863 .muxregs = ssp2_ext_90_93_muxreg,
2864 .nmuxregs = ARRAY_SIZE(ssp2_ext_90_93_muxreg),
2865 },
2866 };
2867
2868 static struct spear_pingroup ssp2_pingroup[] = {
2869 {
2870 .name = "ssp2_13_16_grp",
2871 .pins = ssp2_pins[0],
2872 .npins = ARRAY_SIZE(ssp2_pins[0]),
2873 .modemuxs = ssp2_13_16_modemux,
2874 .nmodemuxs = ARRAY_SIZE(ssp2_13_16_modemux),
2875 }, {
2876 .name = "ssp2_32_35_grp",
2877 .pins = ssp2_pins[1],
2878 .npins = ARRAY_SIZE(ssp2_pins[1]),
2879 .modemuxs = ssp2_32_35_modemux,
2880 .nmodemuxs = ARRAY_SIZE(ssp2_32_35_modemux),
2881 }, {
2882 .name = "ssp2_44_47_grp",
2883 .pins = ssp2_pins[2],
2884 .npins = ARRAY_SIZE(ssp2_pins[2]),
2885 .modemuxs = ssp2_44_47_modemux,
2886 .nmodemuxs = ARRAY_SIZE(ssp2_44_47_modemux),
2887 }, {
2888 .name = "ssp2_61_64_grp",
2889 .pins = ssp2_pins[3],
2890 .npins = ARRAY_SIZE(ssp2_pins[3]),
2891 .modemuxs = ssp2_61_64_modemux,
2892 .nmodemuxs = ARRAY_SIZE(ssp2_61_64_modemux),
2893 }, {
2894 .name = "ssp2_90_93_grp",
2895 .pins = ssp2_pins[4],
2896 .npins = ARRAY_SIZE(ssp2_pins[4]),
2897 .modemuxs = ssp2_90_93_modemux,
2898 .nmodemuxs = ARRAY_SIZE(ssp2_90_93_modemux),
2899 },
2900 };
2901
2902 static const char *const ssp2_grps[] = { "ssp2_13_16_grp", "ssp2_32_35_grp",
2903 "ssp2_44_47_grp", "ssp2_61_64_grp", "ssp2_90_93_grp" };
2904 static struct spear_function ssp2_function = {
2905 .name = "ssp2",
2906 .groups = ssp2_grps,
2907 .ngroups = ARRAY_SIZE(ssp2_grps),
2908 };
2909
2910 /* Pad multiplexing for cadence mii2 as mii device */
2911 static const unsigned mii2_pins[] = { 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
2912 90, 91, 92, 93, 94, 95, 96, 97 };
2913 static struct spear_muxreg mii2_muxreg[] = {
2914 {
2915 .reg = IP_SEL_PAD_80_89_REG,
2916 .mask = PMX_PL_80_TO_85_MASK | PMX_PL_86_87_MASK |
2917 PMX_PL_88_89_MASK,
2918 .val = PMX_MII2_PL_80_TO_85_VAL | PMX_MII2_PL_86_87_VAL |
2919 PMX_MII2_PL_88_89_VAL,
2920 }, {
2921 .reg = IP_SEL_PAD_90_99_REG,
2922 .mask = PMX_PL_90_91_MASK | PMX_PL_92_93_MASK |
2923 PMX_PL_94_95_MASK | PMX_PL_96_97_MASK,
2924 .val = PMX_MII2_PL_90_91_VAL | PMX_MII2_PL_92_93_VAL |
2925 PMX_MII2_PL_94_95_VAL | PMX_MII2_PL_96_97_VAL,
2926 }, {
2927 .reg = EXT_CTRL_REG,
2928 .mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) |
2929 (MAC_MODE_MASK << MAC1_MODE_SHIFT) |
2930 MII_MDIO_MASK,
2931 .val = (MAC_MODE_MII << MAC2_MODE_SHIFT) |
2932 (MAC_MODE_MII << MAC1_MODE_SHIFT) |
2933 MII_MDIO_81_VAL,
2934 },
2935 };
2936
2937 static struct spear_modemux mii2_modemux[] = {
2938 {
2939 .modes = EXTENDED_MODE,
2940 .muxregs = mii2_muxreg,
2941 .nmuxregs = ARRAY_SIZE(mii2_muxreg),
2942 },
2943 };
2944
2945 static struct spear_pingroup mii2_pingroup = {
2946 .name = "mii2_grp",
2947 .pins = mii2_pins,
2948 .npins = ARRAY_SIZE(mii2_pins),
2949 .modemuxs = mii2_modemux,
2950 .nmodemuxs = ARRAY_SIZE(mii2_modemux),
2951 };
2952
2953 static const char *const mii2_grps[] = { "mii2_grp" };
2954 static struct spear_function mii2_function = {
2955 .name = "mii2",
2956 .groups = mii2_grps,
2957 .ngroups = ARRAY_SIZE(mii2_grps),
2958 };
2959
2960 /* Pad multiplexing for cadence mii 1_2 as smii or rmii device */
2961 static const unsigned rmii0_1_pins[] = { 10, 11, 13, 14, 15, 16, 17, 18, 19, 20,
2962 21, 22, 23, 24, 25, 26, 27 };
2963 static const unsigned smii0_1_pins[] = { 10, 11, 21, 22, 23, 24, 25, 26, 27 };
2964 static struct spear_muxreg mii0_1_muxreg[] = {
2965 {
2966 .reg = PMX_CONFIG_REG,
2967 .mask = PMX_MII_MASK,
2968 .val = 0,
2969 },
2970 };
2971
2972 static struct spear_muxreg smii0_1_ext_muxreg[] = {
2973 {
2974 .reg = IP_SEL_PAD_10_19_REG,
2975 .mask = PMX_PL_10_11_MASK,
2976 .val = PMX_SMII_PL_10_11_VAL,
2977 }, {
2978 .reg = IP_SEL_PAD_20_29_REG,
2979 .mask = PMX_PL_21_TO_27_MASK,
2980 .val = PMX_SMII_PL_21_TO_27_VAL,
2981 }, {
2982 .reg = EXT_CTRL_REG,
2983 .mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) |
2984 (MAC_MODE_MASK << MAC1_MODE_SHIFT) |
2985 MII_MDIO_MASK,
2986 .val = (MAC_MODE_SMII << MAC2_MODE_SHIFT)
2987 | (MAC_MODE_SMII << MAC1_MODE_SHIFT)
2988 | MII_MDIO_10_11_VAL,
2989 },
2990 };
2991
2992 static struct spear_muxreg rmii0_1_ext_muxreg[] = {
2993 {
2994 .reg = IP_SEL_PAD_10_19_REG,
2995 .mask = PMX_PL_10_11_MASK | PMX_PL_13_14_MASK |
2996 PMX_PL_15_16_MASK | PMX_PL_17_18_MASK | PMX_PL_19_MASK,
2997 .val = PMX_RMII_PL_10_11_VAL | PMX_RMII_PL_13_14_VAL |
2998 PMX_RMII_PL_15_16_VAL | PMX_RMII_PL_17_18_VAL |
2999 PMX_RMII_PL_19_VAL,
3000 }, {
3001 .reg = IP_SEL_PAD_20_29_REG,
3002 .mask = PMX_PL_20_MASK | PMX_PL_21_TO_27_MASK,
3003 .val = PMX_RMII_PL_20_VAL | PMX_RMII_PL_21_TO_27_VAL,
3004 }, {
3005 .reg = EXT_CTRL_REG,
3006 .mask = (MAC_MODE_MASK << MAC2_MODE_SHIFT) |
3007 (MAC_MODE_MASK << MAC1_MODE_SHIFT) |
3008 MII_MDIO_MASK,
3009 .val = (MAC_MODE_RMII << MAC2_MODE_SHIFT)
3010 | (MAC_MODE_RMII << MAC1_MODE_SHIFT)
3011 | MII_MDIO_10_11_VAL,
3012 },
3013 };
3014
3015 static struct spear_modemux mii0_1_modemux[][2] = {
3016 {
3017 /* configure as smii */
3018 {
3019 .modes = AUTO_NET_SMII_MODE | AUTO_EXP_MODE |
3020 SMALL_PRINTERS_MODE | EXTENDED_MODE,
3021 .muxregs = mii0_1_muxreg,
3022 .nmuxregs = ARRAY_SIZE(mii0_1_muxreg),
3023 }, {
3024 .modes = EXTENDED_MODE,
3025 .muxregs = smii0_1_ext_muxreg,
3026 .nmuxregs = ARRAY_SIZE(smii0_1_ext_muxreg),
3027 },
3028 }, {
3029 /* configure as rmii */
3030 {
3031 .modes = AUTO_NET_SMII_MODE | AUTO_EXP_MODE |
3032 SMALL_PRINTERS_MODE | EXTENDED_MODE,
3033 .muxregs = mii0_1_muxreg,
3034 .nmuxregs = ARRAY_SIZE(mii0_1_muxreg),
3035 }, {
3036 .modes = EXTENDED_MODE,
3037 .muxregs = rmii0_1_ext_muxreg,
3038 .nmuxregs = ARRAY_SIZE(rmii0_1_ext_muxreg),
3039 },
3040 },
3041 };
3042
3043 static struct spear_pingroup mii0_1_pingroup[] = {
3044 {
3045 .name = "smii0_1_grp",
3046 .pins = smii0_1_pins,
3047 .npins = ARRAY_SIZE(smii0_1_pins),
3048 .modemuxs = mii0_1_modemux[0],
3049 .nmodemuxs = ARRAY_SIZE(mii0_1_modemux[0]),
3050 }, {
3051 .name = "rmii0_1_grp",
3052 .pins = rmii0_1_pins,
3053 .npins = ARRAY_SIZE(rmii0_1_pins),
3054 .modemuxs = mii0_1_modemux[1],
3055 .nmodemuxs = ARRAY_SIZE(mii0_1_modemux[1]),
3056 },
3057 };
3058
3059 static const char *const mii0_1_grps[] = { "smii0_1_grp", "rmii0_1_grp" };
3060 static struct spear_function mii0_1_function = {
3061 .name = "mii0_1",
3062 .groups = mii0_1_grps,
3063 .ngroups = ARRAY_SIZE(mii0_1_grps),
3064 };
3065
3066 /* Pad multiplexing for i2c1 device */
3067 static const unsigned i2c1_pins[][2] = { { 8, 9 }, { 98, 99 } };
3068 static struct spear_muxreg i2c1_ext_8_9_muxreg[] = {
3069 {
3070 .reg = PMX_CONFIG_REG,
3071 .mask = PMX_SSP_CS_MASK,
3072 .val = 0,
3073 }, {
3074 .reg = IP_SEL_PAD_0_9_REG,
3075 .mask = PMX_PL_8_9_MASK,
3076 .val = PMX_I2C1_PL_8_9_VAL,
3077 }, {
3078 .reg = IP_SEL_MIX_PAD_REG,
3079 .mask = PMX_I2C1_PORT_SEL_MASK,
3080 .val = PMX_I2C1_PORT_8_9_VAL,
3081 },
3082 };
3083
3084 static struct spear_muxreg i2c1_ext_98_99_muxreg[] = {
3085 {
3086 .reg = IP_SEL_PAD_90_99_REG,
3087 .mask = PMX_PL_98_MASK | PMX_PL_99_MASK,
3088 .val = PMX_I2C1_PL_98_VAL | PMX_I2C1_PL_99_VAL,
3089 }, {
3090 .reg = IP_SEL_MIX_PAD_REG,
3091 .mask = PMX_I2C1_PORT_SEL_MASK,
3092 .val = PMX_I2C1_PORT_98_99_VAL,
3093 },
3094 };
3095
3096 static struct spear_modemux i2c1_modemux[][1] = {
3097 {
3098 /* Select signals on pins 8-9 */
3099 {
3100 .modes = EXTENDED_MODE,
3101 .muxregs = i2c1_ext_8_9_muxreg,
3102 .nmuxregs = ARRAY_SIZE(i2c1_ext_8_9_muxreg),
3103 },
3104 }, {
3105 /* Select signals on pins 98-99 */
3106 {
3107 .modes = EXTENDED_MODE,
3108 .muxregs = i2c1_ext_98_99_muxreg,
3109 .nmuxregs = ARRAY_SIZE(i2c1_ext_98_99_muxreg),
3110 },
3111 },
3112 };
3113
3114 static struct spear_pingroup i2c1_pingroup[] = {
3115 {
3116 .name = "i2c1_8_9_grp",
3117 .pins = i2c1_pins[0],
3118 .npins = ARRAY_SIZE(i2c1_pins[0]),
3119 .modemuxs = i2c1_modemux[0],
3120 .nmodemuxs = ARRAY_SIZE(i2c1_modemux[0]),
3121 }, {
3122 .name = "i2c1_98_99_grp",
3123 .pins = i2c1_pins[1],
3124 .npins = ARRAY_SIZE(i2c1_pins[1]),
3125 .modemuxs = i2c1_modemux[1],
3126 .nmodemuxs = ARRAY_SIZE(i2c1_modemux[1]),
3127 },
3128 };
3129
3130 static const char *const i2c1_grps[] = { "i2c1_8_9_grp", "i2c1_98_99_grp" };
3131 static struct spear_function i2c1_function = {
3132 .name = "i2c1",
3133 .groups = i2c1_grps,
3134 .ngroups = ARRAY_SIZE(i2c1_grps),
3135 };
3136
3137 /* Pad multiplexing for i2c2 device */
3138 static const unsigned i2c2_pins[][2] = { { 0, 1 }, { 2, 3 }, { 19, 20 },
3139 { 75, 76 }, { 96, 97 } };
3140 static struct spear_muxreg i2c2_ext_0_1_muxreg[] = {
3141 {
3142 .reg = PMX_CONFIG_REG,
3143 .mask = PMX_FIRDA_MASK,
3144 .val = 0,
3145 }, {
3146 .reg = IP_SEL_PAD_0_9_REG,
3147 .mask = PMX_PL_0_1_MASK,
3148 .val = PMX_I2C2_PL_0_1_VAL,
3149 }, {
3150 .reg = IP_SEL_MIX_PAD_REG,
3151 .mask = PMX_I2C2_PORT_SEL_MASK,
3152 .val = PMX_I2C2_PORT_0_1_VAL,
3153 },
3154 };
3155
3156 static struct spear_muxreg i2c2_ext_2_3_muxreg[] = {
3157 {
3158 .reg = PMX_CONFIG_REG,
3159 .mask = PMX_UART0_MASK,
3160 .val = 0,
3161 }, {
3162 .reg = IP_SEL_PAD_0_9_REG,
3163 .mask = PMX_PL_2_3_MASK,
3164 .val = PMX_I2C2_PL_2_3_VAL,
3165 }, {
3166 .reg = IP_SEL_MIX_PAD_REG,
3167 .mask = PMX_I2C2_PORT_SEL_MASK,
3168 .val = PMX_I2C2_PORT_2_3_VAL,
3169 },
3170 };
3171
3172 static struct spear_muxreg i2c2_ext_19_20_muxreg[] = {
3173 {
3174 .reg = PMX_CONFIG_REG,
3175 .mask = PMX_MII_MASK,
3176 .val = 0,
3177 }, {
3178 .reg = IP_SEL_PAD_10_19_REG,
3179 .mask = PMX_PL_19_MASK,
3180 .val = PMX_I2C2_PL_19_VAL,
3181 }, {
3182 .reg = IP_SEL_PAD_20_29_REG,
3183 .mask = PMX_PL_20_MASK,
3184 .val = PMX_I2C2_PL_20_VAL,
3185 }, {
3186 .reg = IP_SEL_MIX_PAD_REG,
3187 .mask = PMX_I2C2_PORT_SEL_MASK,
3188 .val = PMX_I2C2_PORT_19_20_VAL,
3189 },
3190 };
3191
3192 static struct spear_muxreg i2c2_ext_75_76_muxreg[] = {
3193 {
3194 .reg = IP_SEL_PAD_70_79_REG,
3195 .mask = PMX_PL_75_76_MASK,
3196 .val = PMX_I2C2_PL_75_76_VAL,
3197 }, {
3198 .reg = IP_SEL_MIX_PAD_REG,
3199 .mask = PMX_I2C2_PORT_SEL_MASK,
3200 .val = PMX_I2C2_PORT_75_76_VAL,
3201 },
3202 };
3203
3204 static struct spear_muxreg i2c2_ext_96_97_muxreg[] = {
3205 {
3206 .reg = IP_SEL_PAD_90_99_REG,
3207 .mask = PMX_PL_96_97_MASK,
3208 .val = PMX_I2C2_PL_96_97_VAL,
3209 }, {
3210 .reg = IP_SEL_MIX_PAD_REG,
3211 .mask = PMX_I2C2_PORT_SEL_MASK,
3212 .val = PMX_I2C2_PORT_96_97_VAL,
3213 },
3214 };
3215
3216 static struct spear_modemux i2c2_modemux[][1] = {
3217 {
3218 /* Select signals on pins 0_1 */
3219 {
3220 .modes = EXTENDED_MODE,
3221 .muxregs = i2c2_ext_0_1_muxreg,
3222 .nmuxregs = ARRAY_SIZE(i2c2_ext_0_1_muxreg),
3223 },
3224 }, {
3225 /* Select signals on pins 2_3 */
3226 {
3227 .modes = EXTENDED_MODE,
3228 .muxregs = i2c2_ext_2_3_muxreg,
3229 .nmuxregs = ARRAY_SIZE(i2c2_ext_2_3_muxreg),
3230 },
3231 }, {
3232 /* Select signals on pins 19_20 */
3233 {
3234 .modes = EXTENDED_MODE,
3235 .muxregs = i2c2_ext_19_20_muxreg,
3236 .nmuxregs = ARRAY_SIZE(i2c2_ext_19_20_muxreg),
3237 },
3238 }, {
3239 /* Select signals on pins 75_76 */
3240 {
3241 .modes = EXTENDED_MODE,
3242 .muxregs = i2c2_ext_75_76_muxreg,
3243 .nmuxregs = ARRAY_SIZE(i2c2_ext_75_76_muxreg),
3244 },
3245 }, {
3246 /* Select signals on pins 96_97 */
3247 {
3248 .modes = EXTENDED_MODE,
3249 .muxregs = i2c2_ext_96_97_muxreg,
3250 .nmuxregs = ARRAY_SIZE(i2c2_ext_96_97_muxreg),
3251 },
3252 },
3253 };
3254
3255 static struct spear_pingroup i2c2_pingroup[] = {
3256 {
3257 .name = "i2c2_0_1_grp",
3258 .pins = i2c2_pins[0],
3259 .npins = ARRAY_SIZE(i2c2_pins[0]),
3260 .modemuxs = i2c2_modemux[0],
3261 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[0]),
3262 }, {
3263 .name = "i2c2_2_3_grp",
3264 .pins = i2c2_pins[1],
3265 .npins = ARRAY_SIZE(i2c2_pins[1]),
3266 .modemuxs = i2c2_modemux[1],
3267 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[1]),
3268 }, {
3269 .name = "i2c2_19_20_grp",
3270 .pins = i2c2_pins[2],
3271 .npins = ARRAY_SIZE(i2c2_pins[2]),
3272 .modemuxs = i2c2_modemux[2],
3273 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[2]),
3274 }, {
3275 .name = "i2c2_75_76_grp",
3276 .pins = i2c2_pins[3],
3277 .npins = ARRAY_SIZE(i2c2_pins[3]),
3278 .modemuxs = i2c2_modemux[3],
3279 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[3]),
3280 }, {
3281 .name = "i2c2_96_97_grp",
3282 .pins = i2c2_pins[4],
3283 .npins = ARRAY_SIZE(i2c2_pins[4]),
3284 .modemuxs = i2c2_modemux[4],
3285 .nmodemuxs = ARRAY_SIZE(i2c2_modemux[4]),
3286 },
3287 };
3288
3289 static const char *const i2c2_grps[] = { "i2c2_0_1_grp", "i2c2_2_3_grp",
3290 "i2c2_19_20_grp", "i2c2_75_76_grp", "i2c2_96_97_grp" };
3291 static struct spear_function i2c2_function = {
3292 .name = "i2c2",
3293 .groups = i2c2_grps,
3294 .ngroups = ARRAY_SIZE(i2c2_grps),
3295 };
3296
3297 /* pingroups */
3298 static struct spear_pingroup *spear320_pingroups[] = {
3299 SPEAR3XX_COMMON_PINGROUPS,
3300 &clcd_pingroup,
3301 &emi_pingroup,
3302 &fsmc_8bit_pingroup,
3303 &fsmc_16bit_pingroup,
3304 &spp_pingroup,
3305 &sdhci_led_pingroup,
3306 &sdhci_pingroup[0],
3307 &sdhci_pingroup[1],
3308 &i2s_pingroup,
3309 &uart1_pingroup,
3310 &uart1_modem_pingroup[0],
3311 &uart1_modem_pingroup[1],
3312 &uart1_modem_pingroup[2],
3313 &uart1_modem_pingroup[3],
3314 &uart2_pingroup,
3315 &uart3_pingroup[0],
3316 &uart3_pingroup[1],
3317 &uart3_pingroup[2],
3318 &uart3_pingroup[3],
3319 &uart3_pingroup[4],
3320 &uart3_pingroup[5],
3321 &uart3_pingroup[6],
3322 &uart4_pingroup[0],
3323 &uart4_pingroup[1],
3324 &uart4_pingroup[2],
3325 &uart4_pingroup[3],
3326 &uart4_pingroup[4],
3327 &uart4_pingroup[5],
3328 &uart5_pingroup[0],
3329 &uart5_pingroup[1],
3330 &uart5_pingroup[2],
3331 &uart5_pingroup[3],
3332 &uart6_pingroup[0],
3333 &uart6_pingroup[1],
3334 &rs485_pingroup,
3335 &touchscreen_pingroup,
3336 &can0_pingroup,
3337 &can1_pingroup,
3338 &pwm0_1_pingroup[0],
3339 &pwm0_1_pingroup[1],
3340 &pwm0_1_pingroup[2],
3341 &pwm0_1_pingroup[3],
3342 &pwm0_1_pingroup[4],
3343 &pwm0_1_pingroup[5],
3344 &pwm0_1_pingroup[6],
3345 &pwm2_pingroup[0],
3346 &pwm2_pingroup[1],
3347 &pwm2_pingroup[2],
3348 &pwm2_pingroup[3],
3349 &pwm2_pingroup[4],
3350 &pwm2_pingroup[5],
3351 &pwm2_pingroup[6],
3352 &pwm3_pingroup[0],
3353 &pwm3_pingroup[1],
3354 &pwm3_pingroup[2],
3355 &pwm3_pingroup[3],
3356 &pwm3_pingroup[4],
3357 &pwm3_pingroup[5],
3358 &ssp1_pingroup[0],
3359 &ssp1_pingroup[1],
3360 &ssp1_pingroup[2],
3361 &ssp1_pingroup[3],
3362 &ssp1_pingroup[4],
3363 &ssp2_pingroup[0],
3364 &ssp2_pingroup[1],
3365 &ssp2_pingroup[2],
3366 &ssp2_pingroup[3],
3367 &ssp2_pingroup[4],
3368 &mii2_pingroup,
3369 &mii0_1_pingroup[0],
3370 &mii0_1_pingroup[1],
3371 &i2c1_pingroup[0],
3372 &i2c1_pingroup[1],
3373 &i2c2_pingroup[0],
3374 &i2c2_pingroup[1],
3375 &i2c2_pingroup[2],
3376 &i2c2_pingroup[3],
3377 &i2c2_pingroup[4],
3378 };
3379
3380 /* functions */
3381 static struct spear_function *spear320_functions[] = {
3382 SPEAR3XX_COMMON_FUNCTIONS,
3383 &clcd_function,
3384 &emi_function,
3385 &fsmc_function,
3386 &spp_function,
3387 &sdhci_function,
3388 &i2s_function,
3389 &uart1_function,
3390 &uart1_modem_function,
3391 &uart2_function,
3392 &uart3_function,
3393 &uart4_function,
3394 &uart5_function,
3395 &uart6_function,
3396 &rs485_function,
3397 &touchscreen_function,
3398 &can0_function,
3399 &can1_function,
3400 &pwm0_1_function,
3401 &pwm2_function,
3402 &pwm3_function,
3403 &ssp1_function,
3404 &ssp2_function,
3405 &mii2_function,
3406 &mii0_1_function,
3407 &i2c1_function,
3408 &i2c2_function,
3409 };
3410
3411 static const struct of_device_id spear320_pinctrl_of_match[] = {
3412 {
3413 .compatible = "st,spear320-pinmux",
3414 },
3415 {},
3416 };
3417
spear320_pinctrl_probe(struct platform_device * pdev)3418 static int spear320_pinctrl_probe(struct platform_device *pdev)
3419 {
3420 spear3xx_machdata.groups = spear320_pingroups;
3421 spear3xx_machdata.ngroups = ARRAY_SIZE(spear320_pingroups);
3422 spear3xx_machdata.functions = spear320_functions;
3423 spear3xx_machdata.nfunctions = ARRAY_SIZE(spear320_functions);
3424
3425 spear3xx_machdata.modes_supported = true;
3426 spear3xx_machdata.pmx_modes = spear320_pmx_modes;
3427 spear3xx_machdata.npmx_modes = ARRAY_SIZE(spear320_pmx_modes);
3428
3429 pmx_init_addr(&spear3xx_machdata, PMX_CONFIG_REG);
3430 pmx_init_gpio_pingroup_addr(spear3xx_machdata.gpio_pingroups,
3431 spear3xx_machdata.ngpio_pingroups, PMX_CONFIG_REG);
3432
3433 return spear_pinctrl_probe(pdev, &spear3xx_machdata);
3434 }
3435
3436 static struct platform_driver spear320_pinctrl_driver = {
3437 .driver = {
3438 .name = DRIVER_NAME,
3439 .of_match_table = spear320_pinctrl_of_match,
3440 },
3441 .probe = spear320_pinctrl_probe,
3442 };
3443
spear320_pinctrl_init(void)3444 static int __init spear320_pinctrl_init(void)
3445 {
3446 return platform_driver_register(&spear320_pinctrl_driver);
3447 }
3448 arch_initcall(spear320_pinctrl_init);
3449