xref: /OK3568_Linux_fs/kernel/drivers/pinctrl/spear/pinctrl-spear3xx.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Driver for the ST Microelectronics SPEAr3xx pinmux
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2012 ST Microelectronics
5*4882a593Smuzhiyun  * Viresh Kumar <vireshk@kernel.org>
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * This file is licensed under the terms of the GNU General Public
8*4882a593Smuzhiyun  * License version 2. This program is licensed "as is" without any
9*4882a593Smuzhiyun  * warranty of any kind, whether express or implied.
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <linux/pinctrl/pinctrl.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #include "pinctrl-spear3xx.h"
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* pins */
17*4882a593Smuzhiyun static const struct pinctrl_pin_desc spear3xx_pins[] = {
18*4882a593Smuzhiyun 	SPEAR_PIN_0_TO_101,
19*4882a593Smuzhiyun };
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun /* firda_pins */
22*4882a593Smuzhiyun static const unsigned firda_pins[] = { 0, 1 };
23*4882a593Smuzhiyun static struct spear_muxreg firda_muxreg[] = {
24*4882a593Smuzhiyun 	{
25*4882a593Smuzhiyun 		.reg = -1,
26*4882a593Smuzhiyun 		.mask = PMX_FIRDA_MASK,
27*4882a593Smuzhiyun 		.val = PMX_FIRDA_MASK,
28*4882a593Smuzhiyun 	},
29*4882a593Smuzhiyun };
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun static struct spear_modemux firda_modemux[] = {
32*4882a593Smuzhiyun 	{
33*4882a593Smuzhiyun 		.modes = ~0,
34*4882a593Smuzhiyun 		.muxregs = firda_muxreg,
35*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(firda_muxreg),
36*4882a593Smuzhiyun 	},
37*4882a593Smuzhiyun };
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun struct spear_pingroup spear3xx_firda_pingroup = {
40*4882a593Smuzhiyun 	.name = "firda_grp",
41*4882a593Smuzhiyun 	.pins = firda_pins,
42*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(firda_pins),
43*4882a593Smuzhiyun 	.modemuxs = firda_modemux,
44*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(firda_modemux),
45*4882a593Smuzhiyun };
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun static const char *const firda_grps[] = { "firda_grp" };
48*4882a593Smuzhiyun struct spear_function spear3xx_firda_function = {
49*4882a593Smuzhiyun 	.name = "firda",
50*4882a593Smuzhiyun 	.groups = firda_grps,
51*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(firda_grps),
52*4882a593Smuzhiyun };
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun /* i2c_pins */
55*4882a593Smuzhiyun static const unsigned i2c_pins[] = { 4, 5 };
56*4882a593Smuzhiyun static struct spear_muxreg i2c_muxreg[] = {
57*4882a593Smuzhiyun 	{
58*4882a593Smuzhiyun 		.reg = -1,
59*4882a593Smuzhiyun 		.mask = PMX_I2C_MASK,
60*4882a593Smuzhiyun 		.val = PMX_I2C_MASK,
61*4882a593Smuzhiyun 	},
62*4882a593Smuzhiyun };
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun static struct spear_modemux i2c_modemux[] = {
65*4882a593Smuzhiyun 	{
66*4882a593Smuzhiyun 		.modes = ~0,
67*4882a593Smuzhiyun 		.muxregs = i2c_muxreg,
68*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(i2c_muxreg),
69*4882a593Smuzhiyun 	},
70*4882a593Smuzhiyun };
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun struct spear_pingroup spear3xx_i2c_pingroup = {
73*4882a593Smuzhiyun 	.name = "i2c0_grp",
74*4882a593Smuzhiyun 	.pins = i2c_pins,
75*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(i2c_pins),
76*4882a593Smuzhiyun 	.modemuxs = i2c_modemux,
77*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(i2c_modemux),
78*4882a593Smuzhiyun };
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun static const char *const i2c_grps[] = { "i2c0_grp" };
81*4882a593Smuzhiyun struct spear_function spear3xx_i2c_function = {
82*4882a593Smuzhiyun 	.name = "i2c0",
83*4882a593Smuzhiyun 	.groups = i2c_grps,
84*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(i2c_grps),
85*4882a593Smuzhiyun };
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /* ssp_cs_pins */
88*4882a593Smuzhiyun static const unsigned ssp_cs_pins[] = { 34, 35, 36 };
89*4882a593Smuzhiyun static struct spear_muxreg ssp_cs_muxreg[] = {
90*4882a593Smuzhiyun 	{
91*4882a593Smuzhiyun 		.reg = -1,
92*4882a593Smuzhiyun 		.mask = PMX_SSP_CS_MASK,
93*4882a593Smuzhiyun 		.val = PMX_SSP_CS_MASK,
94*4882a593Smuzhiyun 	},
95*4882a593Smuzhiyun };
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun static struct spear_modemux ssp_cs_modemux[] = {
98*4882a593Smuzhiyun 	{
99*4882a593Smuzhiyun 		.modes = ~0,
100*4882a593Smuzhiyun 		.muxregs = ssp_cs_muxreg,
101*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(ssp_cs_muxreg),
102*4882a593Smuzhiyun 	},
103*4882a593Smuzhiyun };
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun struct spear_pingroup spear3xx_ssp_cs_pingroup = {
106*4882a593Smuzhiyun 	.name = "ssp_cs_grp",
107*4882a593Smuzhiyun 	.pins = ssp_cs_pins,
108*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(ssp_cs_pins),
109*4882a593Smuzhiyun 	.modemuxs = ssp_cs_modemux,
110*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(ssp_cs_modemux),
111*4882a593Smuzhiyun };
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun static const char *const ssp_cs_grps[] = { "ssp_cs_grp" };
114*4882a593Smuzhiyun struct spear_function spear3xx_ssp_cs_function = {
115*4882a593Smuzhiyun 	.name = "ssp_cs",
116*4882a593Smuzhiyun 	.groups = ssp_cs_grps,
117*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(ssp_cs_grps),
118*4882a593Smuzhiyun };
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun /* ssp_pins */
121*4882a593Smuzhiyun static const unsigned ssp_pins[] = { 6, 7, 8, 9 };
122*4882a593Smuzhiyun static struct spear_muxreg ssp_muxreg[] = {
123*4882a593Smuzhiyun 	{
124*4882a593Smuzhiyun 		.reg = -1,
125*4882a593Smuzhiyun 		.mask = PMX_SSP_MASK,
126*4882a593Smuzhiyun 		.val = PMX_SSP_MASK,
127*4882a593Smuzhiyun 	},
128*4882a593Smuzhiyun };
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun static struct spear_modemux ssp_modemux[] = {
131*4882a593Smuzhiyun 	{
132*4882a593Smuzhiyun 		.modes = ~0,
133*4882a593Smuzhiyun 		.muxregs = ssp_muxreg,
134*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(ssp_muxreg),
135*4882a593Smuzhiyun 	},
136*4882a593Smuzhiyun };
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun struct spear_pingroup spear3xx_ssp_pingroup = {
139*4882a593Smuzhiyun 	.name = "ssp0_grp",
140*4882a593Smuzhiyun 	.pins = ssp_pins,
141*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(ssp_pins),
142*4882a593Smuzhiyun 	.modemuxs = ssp_modemux,
143*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(ssp_modemux),
144*4882a593Smuzhiyun };
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun static const char *const ssp_grps[] = { "ssp0_grp" };
147*4882a593Smuzhiyun struct spear_function spear3xx_ssp_function = {
148*4882a593Smuzhiyun 	.name = "ssp0",
149*4882a593Smuzhiyun 	.groups = ssp_grps,
150*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(ssp_grps),
151*4882a593Smuzhiyun };
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun /* mii_pins */
154*4882a593Smuzhiyun static const unsigned mii_pins[] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
155*4882a593Smuzhiyun 	21, 22, 23, 24, 25, 26, 27 };
156*4882a593Smuzhiyun static struct spear_muxreg mii_muxreg[] = {
157*4882a593Smuzhiyun 	{
158*4882a593Smuzhiyun 		.reg = -1,
159*4882a593Smuzhiyun 		.mask = PMX_MII_MASK,
160*4882a593Smuzhiyun 		.val = PMX_MII_MASK,
161*4882a593Smuzhiyun 	},
162*4882a593Smuzhiyun };
163*4882a593Smuzhiyun 
164*4882a593Smuzhiyun static struct spear_modemux mii_modemux[] = {
165*4882a593Smuzhiyun 	{
166*4882a593Smuzhiyun 		.modes = ~0,
167*4882a593Smuzhiyun 		.muxregs = mii_muxreg,
168*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(mii_muxreg),
169*4882a593Smuzhiyun 	},
170*4882a593Smuzhiyun };
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun struct spear_pingroup spear3xx_mii_pingroup = {
173*4882a593Smuzhiyun 	.name = "mii0_grp",
174*4882a593Smuzhiyun 	.pins = mii_pins,
175*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(mii_pins),
176*4882a593Smuzhiyun 	.modemuxs = mii_modemux,
177*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(mii_modemux),
178*4882a593Smuzhiyun };
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun static const char *const mii_grps[] = { "mii0_grp" };
181*4882a593Smuzhiyun struct spear_function spear3xx_mii_function = {
182*4882a593Smuzhiyun 	.name = "mii0",
183*4882a593Smuzhiyun 	.groups = mii_grps,
184*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(mii_grps),
185*4882a593Smuzhiyun };
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun /* gpio0_pin0_pins */
188*4882a593Smuzhiyun static const unsigned gpio0_pin0_pins[] = { 28 };
189*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin0_muxreg[] = {
190*4882a593Smuzhiyun 	{
191*4882a593Smuzhiyun 		.reg = -1,
192*4882a593Smuzhiyun 		.mask = PMX_GPIO_PIN0_MASK,
193*4882a593Smuzhiyun 		.val = PMX_GPIO_PIN0_MASK,
194*4882a593Smuzhiyun 	},
195*4882a593Smuzhiyun };
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun static struct spear_modemux gpio0_pin0_modemux[] = {
198*4882a593Smuzhiyun 	{
199*4882a593Smuzhiyun 		.modes = ~0,
200*4882a593Smuzhiyun 		.muxregs = gpio0_pin0_muxreg,
201*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(gpio0_pin0_muxreg),
202*4882a593Smuzhiyun 	},
203*4882a593Smuzhiyun };
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin0_pingroup = {
206*4882a593Smuzhiyun 	.name = "gpio0_pin0_grp",
207*4882a593Smuzhiyun 	.pins = gpio0_pin0_pins,
208*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(gpio0_pin0_pins),
209*4882a593Smuzhiyun 	.modemuxs = gpio0_pin0_modemux,
210*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(gpio0_pin0_modemux),
211*4882a593Smuzhiyun };
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun /* gpio0_pin1_pins */
214*4882a593Smuzhiyun static const unsigned gpio0_pin1_pins[] = { 29 };
215*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin1_muxreg[] = {
216*4882a593Smuzhiyun 	{
217*4882a593Smuzhiyun 		.reg = -1,
218*4882a593Smuzhiyun 		.mask = PMX_GPIO_PIN1_MASK,
219*4882a593Smuzhiyun 		.val = PMX_GPIO_PIN1_MASK,
220*4882a593Smuzhiyun 	},
221*4882a593Smuzhiyun };
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun static struct spear_modemux gpio0_pin1_modemux[] = {
224*4882a593Smuzhiyun 	{
225*4882a593Smuzhiyun 		.modes = ~0,
226*4882a593Smuzhiyun 		.muxregs = gpio0_pin1_muxreg,
227*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(gpio0_pin1_muxreg),
228*4882a593Smuzhiyun 	},
229*4882a593Smuzhiyun };
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin1_pingroup = {
232*4882a593Smuzhiyun 	.name = "gpio0_pin1_grp",
233*4882a593Smuzhiyun 	.pins = gpio0_pin1_pins,
234*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(gpio0_pin1_pins),
235*4882a593Smuzhiyun 	.modemuxs = gpio0_pin1_modemux,
236*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(gpio0_pin1_modemux),
237*4882a593Smuzhiyun };
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun /* gpio0_pin2_pins */
240*4882a593Smuzhiyun static const unsigned gpio0_pin2_pins[] = { 30 };
241*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin2_muxreg[] = {
242*4882a593Smuzhiyun 	{
243*4882a593Smuzhiyun 		.reg = -1,
244*4882a593Smuzhiyun 		.mask = PMX_GPIO_PIN2_MASK,
245*4882a593Smuzhiyun 		.val = PMX_GPIO_PIN2_MASK,
246*4882a593Smuzhiyun 	},
247*4882a593Smuzhiyun };
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun static struct spear_modemux gpio0_pin2_modemux[] = {
250*4882a593Smuzhiyun 	{
251*4882a593Smuzhiyun 		.modes = ~0,
252*4882a593Smuzhiyun 		.muxregs = gpio0_pin2_muxreg,
253*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(gpio0_pin2_muxreg),
254*4882a593Smuzhiyun 	},
255*4882a593Smuzhiyun };
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin2_pingroup = {
258*4882a593Smuzhiyun 	.name = "gpio0_pin2_grp",
259*4882a593Smuzhiyun 	.pins = gpio0_pin2_pins,
260*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(gpio0_pin2_pins),
261*4882a593Smuzhiyun 	.modemuxs = gpio0_pin2_modemux,
262*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(gpio0_pin2_modemux),
263*4882a593Smuzhiyun };
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun /* gpio0_pin3_pins */
266*4882a593Smuzhiyun static const unsigned gpio0_pin3_pins[] = { 31 };
267*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin3_muxreg[] = {
268*4882a593Smuzhiyun 	{
269*4882a593Smuzhiyun 		.reg = -1,
270*4882a593Smuzhiyun 		.mask = PMX_GPIO_PIN3_MASK,
271*4882a593Smuzhiyun 		.val = PMX_GPIO_PIN3_MASK,
272*4882a593Smuzhiyun 	},
273*4882a593Smuzhiyun };
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun static struct spear_modemux gpio0_pin3_modemux[] = {
276*4882a593Smuzhiyun 	{
277*4882a593Smuzhiyun 		.modes = ~0,
278*4882a593Smuzhiyun 		.muxregs = gpio0_pin3_muxreg,
279*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(gpio0_pin3_muxreg),
280*4882a593Smuzhiyun 	},
281*4882a593Smuzhiyun };
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin3_pingroup = {
284*4882a593Smuzhiyun 	.name = "gpio0_pin3_grp",
285*4882a593Smuzhiyun 	.pins = gpio0_pin3_pins,
286*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(gpio0_pin3_pins),
287*4882a593Smuzhiyun 	.modemuxs = gpio0_pin3_modemux,
288*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(gpio0_pin3_modemux),
289*4882a593Smuzhiyun };
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun /* gpio0_pin4_pins */
292*4882a593Smuzhiyun static const unsigned gpio0_pin4_pins[] = { 32 };
293*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin4_muxreg[] = {
294*4882a593Smuzhiyun 	{
295*4882a593Smuzhiyun 		.reg = -1,
296*4882a593Smuzhiyun 		.mask = PMX_GPIO_PIN4_MASK,
297*4882a593Smuzhiyun 		.val = PMX_GPIO_PIN4_MASK,
298*4882a593Smuzhiyun 	},
299*4882a593Smuzhiyun };
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun static struct spear_modemux gpio0_pin4_modemux[] = {
302*4882a593Smuzhiyun 	{
303*4882a593Smuzhiyun 		.modes = ~0,
304*4882a593Smuzhiyun 		.muxregs = gpio0_pin4_muxreg,
305*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(gpio0_pin4_muxreg),
306*4882a593Smuzhiyun 	},
307*4882a593Smuzhiyun };
308*4882a593Smuzhiyun 
309*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin4_pingroup = {
310*4882a593Smuzhiyun 	.name = "gpio0_pin4_grp",
311*4882a593Smuzhiyun 	.pins = gpio0_pin4_pins,
312*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(gpio0_pin4_pins),
313*4882a593Smuzhiyun 	.modemuxs = gpio0_pin4_modemux,
314*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(gpio0_pin4_modemux),
315*4882a593Smuzhiyun };
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun /* gpio0_pin5_pins */
318*4882a593Smuzhiyun static const unsigned gpio0_pin5_pins[] = { 33 };
319*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin5_muxreg[] = {
320*4882a593Smuzhiyun 	{
321*4882a593Smuzhiyun 		.reg = -1,
322*4882a593Smuzhiyun 		.mask = PMX_GPIO_PIN5_MASK,
323*4882a593Smuzhiyun 		.val = PMX_GPIO_PIN5_MASK,
324*4882a593Smuzhiyun 	},
325*4882a593Smuzhiyun };
326*4882a593Smuzhiyun 
327*4882a593Smuzhiyun static struct spear_modemux gpio0_pin5_modemux[] = {
328*4882a593Smuzhiyun 	{
329*4882a593Smuzhiyun 		.modes = ~0,
330*4882a593Smuzhiyun 		.muxregs = gpio0_pin5_muxreg,
331*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(gpio0_pin5_muxreg),
332*4882a593Smuzhiyun 	},
333*4882a593Smuzhiyun };
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin5_pingroup = {
336*4882a593Smuzhiyun 	.name = "gpio0_pin5_grp",
337*4882a593Smuzhiyun 	.pins = gpio0_pin5_pins,
338*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(gpio0_pin5_pins),
339*4882a593Smuzhiyun 	.modemuxs = gpio0_pin5_modemux,
340*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(gpio0_pin5_modemux),
341*4882a593Smuzhiyun };
342*4882a593Smuzhiyun 
343*4882a593Smuzhiyun static const char *const gpio0_grps[] = { "gpio0_pin0_grp", "gpio0_pin1_grp",
344*4882a593Smuzhiyun 	"gpio0_pin2_grp", "gpio0_pin3_grp", "gpio0_pin4_grp", "gpio0_pin5_grp",
345*4882a593Smuzhiyun };
346*4882a593Smuzhiyun struct spear_function spear3xx_gpio0_function = {
347*4882a593Smuzhiyun 	.name = "gpio0",
348*4882a593Smuzhiyun 	.groups = gpio0_grps,
349*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(gpio0_grps),
350*4882a593Smuzhiyun };
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun /* uart0_ext_pins */
353*4882a593Smuzhiyun static const unsigned uart0_ext_pins[] = { 37, 38, 39, 40, 41, 42 };
354*4882a593Smuzhiyun static struct spear_muxreg uart0_ext_muxreg[] = {
355*4882a593Smuzhiyun 	{
356*4882a593Smuzhiyun 		.reg = -1,
357*4882a593Smuzhiyun 		.mask = PMX_UART0_MODEM_MASK,
358*4882a593Smuzhiyun 		.val = PMX_UART0_MODEM_MASK,
359*4882a593Smuzhiyun 	},
360*4882a593Smuzhiyun };
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun static struct spear_modemux uart0_ext_modemux[] = {
363*4882a593Smuzhiyun 	{
364*4882a593Smuzhiyun 		.modes = ~0,
365*4882a593Smuzhiyun 		.muxregs = uart0_ext_muxreg,
366*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(uart0_ext_muxreg),
367*4882a593Smuzhiyun 	},
368*4882a593Smuzhiyun };
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun struct spear_pingroup spear3xx_uart0_ext_pingroup = {
371*4882a593Smuzhiyun 	.name = "uart0_ext_grp",
372*4882a593Smuzhiyun 	.pins = uart0_ext_pins,
373*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(uart0_ext_pins),
374*4882a593Smuzhiyun 	.modemuxs = uart0_ext_modemux,
375*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(uart0_ext_modemux),
376*4882a593Smuzhiyun };
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun static const char *const uart0_ext_grps[] = { "uart0_ext_grp" };
379*4882a593Smuzhiyun struct spear_function spear3xx_uart0_ext_function = {
380*4882a593Smuzhiyun 	.name = "uart0_ext",
381*4882a593Smuzhiyun 	.groups = uart0_ext_grps,
382*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(uart0_ext_grps),
383*4882a593Smuzhiyun };
384*4882a593Smuzhiyun 
385*4882a593Smuzhiyun /* uart0_pins */
386*4882a593Smuzhiyun static const unsigned uart0_pins[] = { 2, 3 };
387*4882a593Smuzhiyun static struct spear_muxreg uart0_muxreg[] = {
388*4882a593Smuzhiyun 	{
389*4882a593Smuzhiyun 		.reg = -1,
390*4882a593Smuzhiyun 		.mask = PMX_UART0_MASK,
391*4882a593Smuzhiyun 		.val = PMX_UART0_MASK,
392*4882a593Smuzhiyun 	},
393*4882a593Smuzhiyun };
394*4882a593Smuzhiyun 
395*4882a593Smuzhiyun static struct spear_modemux uart0_modemux[] = {
396*4882a593Smuzhiyun 	{
397*4882a593Smuzhiyun 		.modes = ~0,
398*4882a593Smuzhiyun 		.muxregs = uart0_muxreg,
399*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(uart0_muxreg),
400*4882a593Smuzhiyun 	},
401*4882a593Smuzhiyun };
402*4882a593Smuzhiyun 
403*4882a593Smuzhiyun struct spear_pingroup spear3xx_uart0_pingroup = {
404*4882a593Smuzhiyun 	.name = "uart0_grp",
405*4882a593Smuzhiyun 	.pins = uart0_pins,
406*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(uart0_pins),
407*4882a593Smuzhiyun 	.modemuxs = uart0_modemux,
408*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(uart0_modemux),
409*4882a593Smuzhiyun };
410*4882a593Smuzhiyun 
411*4882a593Smuzhiyun static const char *const uart0_grps[] = { "uart0_grp" };
412*4882a593Smuzhiyun struct spear_function spear3xx_uart0_function = {
413*4882a593Smuzhiyun 	.name = "uart0",
414*4882a593Smuzhiyun 	.groups = uart0_grps,
415*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(uart0_grps),
416*4882a593Smuzhiyun };
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun /* timer_0_1_pins */
419*4882a593Smuzhiyun static const unsigned timer_0_1_pins[] = { 43, 44, 47, 48 };
420*4882a593Smuzhiyun static struct spear_muxreg timer_0_1_muxreg[] = {
421*4882a593Smuzhiyun 	{
422*4882a593Smuzhiyun 		.reg = -1,
423*4882a593Smuzhiyun 		.mask = PMX_TIMER_0_1_MASK,
424*4882a593Smuzhiyun 		.val = PMX_TIMER_0_1_MASK,
425*4882a593Smuzhiyun 	},
426*4882a593Smuzhiyun };
427*4882a593Smuzhiyun 
428*4882a593Smuzhiyun static struct spear_modemux timer_0_1_modemux[] = {
429*4882a593Smuzhiyun 	{
430*4882a593Smuzhiyun 		.modes = ~0,
431*4882a593Smuzhiyun 		.muxregs = timer_0_1_muxreg,
432*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(timer_0_1_muxreg),
433*4882a593Smuzhiyun 	},
434*4882a593Smuzhiyun };
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun struct spear_pingroup spear3xx_timer_0_1_pingroup = {
437*4882a593Smuzhiyun 	.name = "timer_0_1_grp",
438*4882a593Smuzhiyun 	.pins = timer_0_1_pins,
439*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(timer_0_1_pins),
440*4882a593Smuzhiyun 	.modemuxs = timer_0_1_modemux,
441*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(timer_0_1_modemux),
442*4882a593Smuzhiyun };
443*4882a593Smuzhiyun 
444*4882a593Smuzhiyun static const char *const timer_0_1_grps[] = { "timer_0_1_grp" };
445*4882a593Smuzhiyun struct spear_function spear3xx_timer_0_1_function = {
446*4882a593Smuzhiyun 	.name = "timer_0_1",
447*4882a593Smuzhiyun 	.groups = timer_0_1_grps,
448*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(timer_0_1_grps),
449*4882a593Smuzhiyun };
450*4882a593Smuzhiyun 
451*4882a593Smuzhiyun /* timer_2_3_pins */
452*4882a593Smuzhiyun static const unsigned timer_2_3_pins[] = { 45, 46, 49, 50 };
453*4882a593Smuzhiyun static struct spear_muxreg timer_2_3_muxreg[] = {
454*4882a593Smuzhiyun 	{
455*4882a593Smuzhiyun 		.reg = -1,
456*4882a593Smuzhiyun 		.mask = PMX_TIMER_2_3_MASK,
457*4882a593Smuzhiyun 		.val = PMX_TIMER_2_3_MASK,
458*4882a593Smuzhiyun 	},
459*4882a593Smuzhiyun };
460*4882a593Smuzhiyun 
461*4882a593Smuzhiyun static struct spear_modemux timer_2_3_modemux[] = {
462*4882a593Smuzhiyun 	{
463*4882a593Smuzhiyun 		.modes = ~0,
464*4882a593Smuzhiyun 		.muxregs = timer_2_3_muxreg,
465*4882a593Smuzhiyun 		.nmuxregs = ARRAY_SIZE(timer_2_3_muxreg),
466*4882a593Smuzhiyun 	},
467*4882a593Smuzhiyun };
468*4882a593Smuzhiyun 
469*4882a593Smuzhiyun struct spear_pingroup spear3xx_timer_2_3_pingroup = {
470*4882a593Smuzhiyun 	.name = "timer_2_3_grp",
471*4882a593Smuzhiyun 	.pins = timer_2_3_pins,
472*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(timer_2_3_pins),
473*4882a593Smuzhiyun 	.modemuxs = timer_2_3_modemux,
474*4882a593Smuzhiyun 	.nmodemuxs = ARRAY_SIZE(timer_2_3_modemux),
475*4882a593Smuzhiyun };
476*4882a593Smuzhiyun 
477*4882a593Smuzhiyun static const char *const timer_2_3_grps[] = { "timer_2_3_grp" };
478*4882a593Smuzhiyun struct spear_function spear3xx_timer_2_3_function = {
479*4882a593Smuzhiyun 	.name = "timer_2_3",
480*4882a593Smuzhiyun 	.groups = timer_2_3_grps,
481*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(timer_2_3_grps),
482*4882a593Smuzhiyun };
483*4882a593Smuzhiyun 
484*4882a593Smuzhiyun /* Define muxreg arrays */
485*4882a593Smuzhiyun DEFINE_MUXREG(firda_pins, 0, PMX_FIRDA_MASK, 0);
486*4882a593Smuzhiyun DEFINE_MUXREG(i2c_pins, 0, PMX_I2C_MASK, 0);
487*4882a593Smuzhiyun DEFINE_MUXREG(ssp_cs_pins, 0, PMX_SSP_CS_MASK, 0);
488*4882a593Smuzhiyun DEFINE_MUXREG(ssp_pins, 0, PMX_SSP_MASK, 0);
489*4882a593Smuzhiyun DEFINE_MUXREG(mii_pins, 0, PMX_MII_MASK, 0);
490*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin0_pins, 0, PMX_GPIO_PIN0_MASK, 0);
491*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin1_pins, 0, PMX_GPIO_PIN1_MASK, 0);
492*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin2_pins, 0, PMX_GPIO_PIN2_MASK, 0);
493*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin3_pins, 0, PMX_GPIO_PIN3_MASK, 0);
494*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin4_pins, 0, PMX_GPIO_PIN4_MASK, 0);
495*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin5_pins, 0, PMX_GPIO_PIN5_MASK, 0);
496*4882a593Smuzhiyun DEFINE_MUXREG(uart0_ext_pins, 0, PMX_UART0_MODEM_MASK, 0);
497*4882a593Smuzhiyun DEFINE_MUXREG(uart0_pins, 0, PMX_UART0_MASK, 0);
498*4882a593Smuzhiyun DEFINE_MUXREG(timer_0_1_pins, 0, PMX_TIMER_0_1_MASK, 0);
499*4882a593Smuzhiyun DEFINE_MUXREG(timer_2_3_pins, 0, PMX_TIMER_2_3_MASK, 0);
500*4882a593Smuzhiyun 
501*4882a593Smuzhiyun static struct spear_gpio_pingroup spear3xx_gpio_pingroup[] = {
502*4882a593Smuzhiyun 	GPIO_PINGROUP(firda_pins),
503*4882a593Smuzhiyun 	GPIO_PINGROUP(i2c_pins),
504*4882a593Smuzhiyun 	GPIO_PINGROUP(ssp_cs_pins),
505*4882a593Smuzhiyun 	GPIO_PINGROUP(ssp_pins),
506*4882a593Smuzhiyun 	GPIO_PINGROUP(mii_pins),
507*4882a593Smuzhiyun 	GPIO_PINGROUP(gpio0_pin0_pins),
508*4882a593Smuzhiyun 	GPIO_PINGROUP(gpio0_pin1_pins),
509*4882a593Smuzhiyun 	GPIO_PINGROUP(gpio0_pin2_pins),
510*4882a593Smuzhiyun 	GPIO_PINGROUP(gpio0_pin3_pins),
511*4882a593Smuzhiyun 	GPIO_PINGROUP(gpio0_pin4_pins),
512*4882a593Smuzhiyun 	GPIO_PINGROUP(gpio0_pin5_pins),
513*4882a593Smuzhiyun 	GPIO_PINGROUP(uart0_ext_pins),
514*4882a593Smuzhiyun 	GPIO_PINGROUP(uart0_pins),
515*4882a593Smuzhiyun 	GPIO_PINGROUP(timer_0_1_pins),
516*4882a593Smuzhiyun 	GPIO_PINGROUP(timer_2_3_pins),
517*4882a593Smuzhiyun };
518*4882a593Smuzhiyun 
519*4882a593Smuzhiyun struct spear_pinctrl_machdata spear3xx_machdata = {
520*4882a593Smuzhiyun 	.pins = spear3xx_pins,
521*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(spear3xx_pins),
522*4882a593Smuzhiyun 	.gpio_pingroups = spear3xx_gpio_pingroup,
523*4882a593Smuzhiyun 	.ngpio_pingroups = ARRAY_SIZE(spear3xx_gpio_pingroup),
524*4882a593Smuzhiyun };
525