xref: /openbmc/linux/drivers/pinctrl/spear/pinctrl-spear3xx.c (revision 52130b6033c580c27d968f64cd73209c9609e4e0)
1*52130b60SViresh Kumar /*
2*52130b60SViresh Kumar  * Driver for the ST Microelectronics SPEAr3xx pinmux
3*52130b60SViresh Kumar  *
4*52130b60SViresh Kumar  * Copyright (C) 2012 ST Microelectronics
5*52130b60SViresh Kumar  * Viresh Kumar <viresh.kumar@st.com>
6*52130b60SViresh Kumar  *
7*52130b60SViresh Kumar  * This file is licensed under the terms of the GNU General Public
8*52130b60SViresh Kumar  * License version 2. This program is licensed "as is" without any
9*52130b60SViresh Kumar  * warranty of any kind, whether express or implied.
10*52130b60SViresh Kumar  */
11*52130b60SViresh Kumar 
12*52130b60SViresh Kumar #include <linux/pinctrl/pinctrl.h>
13*52130b60SViresh Kumar 
14*52130b60SViresh Kumar #include "pinctrl-spear3xx.h"
15*52130b60SViresh Kumar 
16*52130b60SViresh Kumar /* pins */
17*52130b60SViresh Kumar static const struct pinctrl_pin_desc spear3xx_pins[] = {
18*52130b60SViresh Kumar 	PINCTRL_PIN(0, "PLGPIO0"),
19*52130b60SViresh Kumar 	PINCTRL_PIN(1, "PLGPIO1"),
20*52130b60SViresh Kumar 	PINCTRL_PIN(2, "PLGPIO2"),
21*52130b60SViresh Kumar 	PINCTRL_PIN(3, "PLGPIO3"),
22*52130b60SViresh Kumar 	PINCTRL_PIN(4, "PLGPIO4"),
23*52130b60SViresh Kumar 	PINCTRL_PIN(5, "PLGPIO5"),
24*52130b60SViresh Kumar 	PINCTRL_PIN(6, "PLGPIO6"),
25*52130b60SViresh Kumar 	PINCTRL_PIN(7, "PLGPIO7"),
26*52130b60SViresh Kumar 	PINCTRL_PIN(8, "PLGPIO8"),
27*52130b60SViresh Kumar 	PINCTRL_PIN(9, "PLGPIO9"),
28*52130b60SViresh Kumar 	PINCTRL_PIN(10, "PLGPIO10"),
29*52130b60SViresh Kumar 	PINCTRL_PIN(11, "PLGPIO11"),
30*52130b60SViresh Kumar 	PINCTRL_PIN(12, "PLGPIO12"),
31*52130b60SViresh Kumar 	PINCTRL_PIN(13, "PLGPIO13"),
32*52130b60SViresh Kumar 	PINCTRL_PIN(14, "PLGPIO14"),
33*52130b60SViresh Kumar 	PINCTRL_PIN(15, "PLGPIO15"),
34*52130b60SViresh Kumar 	PINCTRL_PIN(16, "PLGPIO16"),
35*52130b60SViresh Kumar 	PINCTRL_PIN(17, "PLGPIO17"),
36*52130b60SViresh Kumar 	PINCTRL_PIN(18, "PLGPIO18"),
37*52130b60SViresh Kumar 	PINCTRL_PIN(19, "PLGPIO19"),
38*52130b60SViresh Kumar 	PINCTRL_PIN(20, "PLGPIO20"),
39*52130b60SViresh Kumar 	PINCTRL_PIN(21, "PLGPIO21"),
40*52130b60SViresh Kumar 	PINCTRL_PIN(22, "PLGPIO22"),
41*52130b60SViresh Kumar 	PINCTRL_PIN(23, "PLGPIO23"),
42*52130b60SViresh Kumar 	PINCTRL_PIN(24, "PLGPIO24"),
43*52130b60SViresh Kumar 	PINCTRL_PIN(25, "PLGPIO25"),
44*52130b60SViresh Kumar 	PINCTRL_PIN(26, "PLGPIO26"),
45*52130b60SViresh Kumar 	PINCTRL_PIN(27, "PLGPIO27"),
46*52130b60SViresh Kumar 	PINCTRL_PIN(28, "PLGPIO28"),
47*52130b60SViresh Kumar 	PINCTRL_PIN(29, "PLGPIO29"),
48*52130b60SViresh Kumar 	PINCTRL_PIN(30, "PLGPIO30"),
49*52130b60SViresh Kumar 	PINCTRL_PIN(31, "PLGPIO31"),
50*52130b60SViresh Kumar 	PINCTRL_PIN(32, "PLGPIO32"),
51*52130b60SViresh Kumar 	PINCTRL_PIN(33, "PLGPIO33"),
52*52130b60SViresh Kumar 	PINCTRL_PIN(34, "PLGPIO34"),
53*52130b60SViresh Kumar 	PINCTRL_PIN(35, "PLGPIO35"),
54*52130b60SViresh Kumar 	PINCTRL_PIN(36, "PLGPIO36"),
55*52130b60SViresh Kumar 	PINCTRL_PIN(37, "PLGPIO37"),
56*52130b60SViresh Kumar 	PINCTRL_PIN(38, "PLGPIO38"),
57*52130b60SViresh Kumar 	PINCTRL_PIN(39, "PLGPIO39"),
58*52130b60SViresh Kumar 	PINCTRL_PIN(40, "PLGPIO40"),
59*52130b60SViresh Kumar 	PINCTRL_PIN(41, "PLGPIO41"),
60*52130b60SViresh Kumar 	PINCTRL_PIN(42, "PLGPIO42"),
61*52130b60SViresh Kumar 	PINCTRL_PIN(43, "PLGPIO43"),
62*52130b60SViresh Kumar 	PINCTRL_PIN(44, "PLGPIO44"),
63*52130b60SViresh Kumar 	PINCTRL_PIN(45, "PLGPIO45"),
64*52130b60SViresh Kumar 	PINCTRL_PIN(46, "PLGPIO46"),
65*52130b60SViresh Kumar 	PINCTRL_PIN(47, "PLGPIO47"),
66*52130b60SViresh Kumar 	PINCTRL_PIN(48, "PLGPIO48"),
67*52130b60SViresh Kumar 	PINCTRL_PIN(49, "PLGPIO49"),
68*52130b60SViresh Kumar 	PINCTRL_PIN(50, "PLGPIO50"),
69*52130b60SViresh Kumar 	PINCTRL_PIN(51, "PLGPIO51"),
70*52130b60SViresh Kumar 	PINCTRL_PIN(52, "PLGPIO52"),
71*52130b60SViresh Kumar 	PINCTRL_PIN(53, "PLGPIO53"),
72*52130b60SViresh Kumar 	PINCTRL_PIN(54, "PLGPIO54"),
73*52130b60SViresh Kumar 	PINCTRL_PIN(55, "PLGPIO55"),
74*52130b60SViresh Kumar 	PINCTRL_PIN(56, "PLGPIO56"),
75*52130b60SViresh Kumar 	PINCTRL_PIN(57, "PLGPIO57"),
76*52130b60SViresh Kumar 	PINCTRL_PIN(58, "PLGPIO58"),
77*52130b60SViresh Kumar 	PINCTRL_PIN(59, "PLGPIO59"),
78*52130b60SViresh Kumar 	PINCTRL_PIN(60, "PLGPIO60"),
79*52130b60SViresh Kumar 	PINCTRL_PIN(61, "PLGPIO61"),
80*52130b60SViresh Kumar 	PINCTRL_PIN(62, "PLGPIO62"),
81*52130b60SViresh Kumar 	PINCTRL_PIN(63, "PLGPIO63"),
82*52130b60SViresh Kumar 	PINCTRL_PIN(64, "PLGPIO64"),
83*52130b60SViresh Kumar 	PINCTRL_PIN(65, "PLGPIO65"),
84*52130b60SViresh Kumar 	PINCTRL_PIN(66, "PLGPIO66"),
85*52130b60SViresh Kumar 	PINCTRL_PIN(67, "PLGPIO67"),
86*52130b60SViresh Kumar 	PINCTRL_PIN(68, "PLGPIO68"),
87*52130b60SViresh Kumar 	PINCTRL_PIN(69, "PLGPIO69"),
88*52130b60SViresh Kumar 	PINCTRL_PIN(70, "PLGPIO70"),
89*52130b60SViresh Kumar 	PINCTRL_PIN(71, "PLGPIO71"),
90*52130b60SViresh Kumar 	PINCTRL_PIN(72, "PLGPIO72"),
91*52130b60SViresh Kumar 	PINCTRL_PIN(73, "PLGPIO73"),
92*52130b60SViresh Kumar 	PINCTRL_PIN(74, "PLGPIO74"),
93*52130b60SViresh Kumar 	PINCTRL_PIN(75, "PLGPIO75"),
94*52130b60SViresh Kumar 	PINCTRL_PIN(76, "PLGPIO76"),
95*52130b60SViresh Kumar 	PINCTRL_PIN(77, "PLGPIO77"),
96*52130b60SViresh Kumar 	PINCTRL_PIN(78, "PLGPIO78"),
97*52130b60SViresh Kumar 	PINCTRL_PIN(79, "PLGPIO79"),
98*52130b60SViresh Kumar 	PINCTRL_PIN(80, "PLGPIO80"),
99*52130b60SViresh Kumar 	PINCTRL_PIN(81, "PLGPIO81"),
100*52130b60SViresh Kumar 	PINCTRL_PIN(82, "PLGPIO82"),
101*52130b60SViresh Kumar 	PINCTRL_PIN(83, "PLGPIO83"),
102*52130b60SViresh Kumar 	PINCTRL_PIN(84, "PLGPIO84"),
103*52130b60SViresh Kumar 	PINCTRL_PIN(85, "PLGPIO85"),
104*52130b60SViresh Kumar 	PINCTRL_PIN(86, "PLGPIO86"),
105*52130b60SViresh Kumar 	PINCTRL_PIN(87, "PLGPIO87"),
106*52130b60SViresh Kumar 	PINCTRL_PIN(88, "PLGPIO88"),
107*52130b60SViresh Kumar 	PINCTRL_PIN(89, "PLGPIO89"),
108*52130b60SViresh Kumar 	PINCTRL_PIN(90, "PLGPIO90"),
109*52130b60SViresh Kumar 	PINCTRL_PIN(91, "PLGPIO91"),
110*52130b60SViresh Kumar 	PINCTRL_PIN(92, "PLGPIO92"),
111*52130b60SViresh Kumar 	PINCTRL_PIN(93, "PLGPIO93"),
112*52130b60SViresh Kumar 	PINCTRL_PIN(94, "PLGPIO94"),
113*52130b60SViresh Kumar 	PINCTRL_PIN(95, "PLGPIO95"),
114*52130b60SViresh Kumar 	PINCTRL_PIN(96, "PLGPIO96"),
115*52130b60SViresh Kumar 	PINCTRL_PIN(97, "PLGPIO97"),
116*52130b60SViresh Kumar 	PINCTRL_PIN(98, "PLGPIO98"),
117*52130b60SViresh Kumar 	PINCTRL_PIN(99, "PLGPIO99"),
118*52130b60SViresh Kumar 	PINCTRL_PIN(100, "PLGPIO100"),
119*52130b60SViresh Kumar 	PINCTRL_PIN(101, "PLGPIO101"),
120*52130b60SViresh Kumar };
121*52130b60SViresh Kumar 
122*52130b60SViresh Kumar /* firda_pins */
123*52130b60SViresh Kumar static const unsigned firda_pins[] = { 0, 1 };
124*52130b60SViresh Kumar static struct spear_muxreg firda_muxreg[] = {
125*52130b60SViresh Kumar 	{
126*52130b60SViresh Kumar 		.reg = -1,
127*52130b60SViresh Kumar 		.mask = PMX_FIRDA_MASK,
128*52130b60SViresh Kumar 		.val = PMX_FIRDA_MASK,
129*52130b60SViresh Kumar 	},
130*52130b60SViresh Kumar };
131*52130b60SViresh Kumar 
132*52130b60SViresh Kumar static struct spear_modemux firda_modemux[] = {
133*52130b60SViresh Kumar 	{
134*52130b60SViresh Kumar 		.modes = ~0,
135*52130b60SViresh Kumar 		.muxregs = firda_muxreg,
136*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(firda_muxreg),
137*52130b60SViresh Kumar 	},
138*52130b60SViresh Kumar };
139*52130b60SViresh Kumar 
140*52130b60SViresh Kumar struct spear_pingroup spear3xx_firda_pingroup = {
141*52130b60SViresh Kumar 	.name = "firda_grp",
142*52130b60SViresh Kumar 	.pins = firda_pins,
143*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(firda_pins),
144*52130b60SViresh Kumar 	.modemuxs = firda_modemux,
145*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(firda_modemux),
146*52130b60SViresh Kumar };
147*52130b60SViresh Kumar 
148*52130b60SViresh Kumar static const char *const firda_grps[] = { "firda_grp" };
149*52130b60SViresh Kumar struct spear_function spear3xx_firda_function = {
150*52130b60SViresh Kumar 	.name = "firda",
151*52130b60SViresh Kumar 	.groups = firda_grps,
152*52130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(firda_grps),
153*52130b60SViresh Kumar };
154*52130b60SViresh Kumar 
155*52130b60SViresh Kumar /* i2c_pins */
156*52130b60SViresh Kumar static const unsigned i2c_pins[] = { 4, 5 };
157*52130b60SViresh Kumar static struct spear_muxreg i2c_muxreg[] = {
158*52130b60SViresh Kumar 	{
159*52130b60SViresh Kumar 		.reg = -1,
160*52130b60SViresh Kumar 		.mask = PMX_I2C_MASK,
161*52130b60SViresh Kumar 		.val = PMX_I2C_MASK,
162*52130b60SViresh Kumar 	},
163*52130b60SViresh Kumar };
164*52130b60SViresh Kumar 
165*52130b60SViresh Kumar static struct spear_modemux i2c_modemux[] = {
166*52130b60SViresh Kumar 	{
167*52130b60SViresh Kumar 		.modes = ~0,
168*52130b60SViresh Kumar 		.muxregs = i2c_muxreg,
169*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(i2c_muxreg),
170*52130b60SViresh Kumar 	},
171*52130b60SViresh Kumar };
172*52130b60SViresh Kumar 
173*52130b60SViresh Kumar struct spear_pingroup spear3xx_i2c_pingroup = {
174*52130b60SViresh Kumar 	.name = "i2c0_grp",
175*52130b60SViresh Kumar 	.pins = i2c_pins,
176*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(i2c_pins),
177*52130b60SViresh Kumar 	.modemuxs = i2c_modemux,
178*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(i2c_modemux),
179*52130b60SViresh Kumar };
180*52130b60SViresh Kumar 
181*52130b60SViresh Kumar static const char *const i2c_grps[] = { "i2c0_grp" };
182*52130b60SViresh Kumar struct spear_function spear3xx_i2c_function = {
183*52130b60SViresh Kumar 	.name = "i2c0",
184*52130b60SViresh Kumar 	.groups = i2c_grps,
185*52130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(i2c_grps),
186*52130b60SViresh Kumar };
187*52130b60SViresh Kumar 
188*52130b60SViresh Kumar /* ssp_cs_pins */
189*52130b60SViresh Kumar static const unsigned ssp_cs_pins[] = { 34, 35, 36 };
190*52130b60SViresh Kumar static struct spear_muxreg ssp_cs_muxreg[] = {
191*52130b60SViresh Kumar 	{
192*52130b60SViresh Kumar 		.reg = -1,
193*52130b60SViresh Kumar 		.mask = PMX_SSP_CS_MASK,
194*52130b60SViresh Kumar 		.val = PMX_SSP_CS_MASK,
195*52130b60SViresh Kumar 	},
196*52130b60SViresh Kumar };
197*52130b60SViresh Kumar 
198*52130b60SViresh Kumar static struct spear_modemux ssp_cs_modemux[] = {
199*52130b60SViresh Kumar 	{
200*52130b60SViresh Kumar 		.modes = ~0,
201*52130b60SViresh Kumar 		.muxregs = ssp_cs_muxreg,
202*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp_cs_muxreg),
203*52130b60SViresh Kumar 	},
204*52130b60SViresh Kumar };
205*52130b60SViresh Kumar 
206*52130b60SViresh Kumar struct spear_pingroup spear3xx_ssp_cs_pingroup = {
207*52130b60SViresh Kumar 	.name = "ssp_cs_grp",
208*52130b60SViresh Kumar 	.pins = ssp_cs_pins,
209*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(ssp_cs_pins),
210*52130b60SViresh Kumar 	.modemuxs = ssp_cs_modemux,
211*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(ssp_cs_modemux),
212*52130b60SViresh Kumar };
213*52130b60SViresh Kumar 
214*52130b60SViresh Kumar static const char *const ssp_cs_grps[] = { "ssp_cs_grp" };
215*52130b60SViresh Kumar struct spear_function spear3xx_ssp_cs_function = {
216*52130b60SViresh Kumar 	.name = "ssp_cs",
217*52130b60SViresh Kumar 	.groups = ssp_cs_grps,
218*52130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(ssp_cs_grps),
219*52130b60SViresh Kumar };
220*52130b60SViresh Kumar 
221*52130b60SViresh Kumar /* ssp_pins */
222*52130b60SViresh Kumar static const unsigned ssp_pins[] = { 6, 7, 8, 9 };
223*52130b60SViresh Kumar static struct spear_muxreg ssp_muxreg[] = {
224*52130b60SViresh Kumar 	{
225*52130b60SViresh Kumar 		.reg = -1,
226*52130b60SViresh Kumar 		.mask = PMX_SSP_MASK,
227*52130b60SViresh Kumar 		.val = PMX_SSP_MASK,
228*52130b60SViresh Kumar 	},
229*52130b60SViresh Kumar };
230*52130b60SViresh Kumar 
231*52130b60SViresh Kumar static struct spear_modemux ssp_modemux[] = {
232*52130b60SViresh Kumar 	{
233*52130b60SViresh Kumar 		.modes = ~0,
234*52130b60SViresh Kumar 		.muxregs = ssp_muxreg,
235*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(ssp_muxreg),
236*52130b60SViresh Kumar 	},
237*52130b60SViresh Kumar };
238*52130b60SViresh Kumar 
239*52130b60SViresh Kumar struct spear_pingroup spear3xx_ssp_pingroup = {
240*52130b60SViresh Kumar 	.name = "ssp0_grp",
241*52130b60SViresh Kumar 	.pins = ssp_pins,
242*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(ssp_pins),
243*52130b60SViresh Kumar 	.modemuxs = ssp_modemux,
244*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(ssp_modemux),
245*52130b60SViresh Kumar };
246*52130b60SViresh Kumar 
247*52130b60SViresh Kumar static const char *const ssp_grps[] = { "ssp0_grp" };
248*52130b60SViresh Kumar struct spear_function spear3xx_ssp_function = {
249*52130b60SViresh Kumar 	.name = "ssp0",
250*52130b60SViresh Kumar 	.groups = ssp_grps,
251*52130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(ssp_grps),
252*52130b60SViresh Kumar };
253*52130b60SViresh Kumar 
254*52130b60SViresh Kumar /* mii_pins */
255*52130b60SViresh Kumar static const unsigned mii_pins[] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
256*52130b60SViresh Kumar 	21, 22, 23, 24, 25, 26, 27 };
257*52130b60SViresh Kumar static struct spear_muxreg mii_muxreg[] = {
258*52130b60SViresh Kumar 	{
259*52130b60SViresh Kumar 		.reg = -1,
260*52130b60SViresh Kumar 		.mask = PMX_MII_MASK,
261*52130b60SViresh Kumar 		.val = PMX_MII_MASK,
262*52130b60SViresh Kumar 	},
263*52130b60SViresh Kumar };
264*52130b60SViresh Kumar 
265*52130b60SViresh Kumar static struct spear_modemux mii_modemux[] = {
266*52130b60SViresh Kumar 	{
267*52130b60SViresh Kumar 		.modes = ~0,
268*52130b60SViresh Kumar 		.muxregs = mii_muxreg,
269*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(mii_muxreg),
270*52130b60SViresh Kumar 	},
271*52130b60SViresh Kumar };
272*52130b60SViresh Kumar 
273*52130b60SViresh Kumar struct spear_pingroup spear3xx_mii_pingroup = {
274*52130b60SViresh Kumar 	.name = "mii0_grp",
275*52130b60SViresh Kumar 	.pins = mii_pins,
276*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(mii_pins),
277*52130b60SViresh Kumar 	.modemuxs = mii_modemux,
278*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(mii_modemux),
279*52130b60SViresh Kumar };
280*52130b60SViresh Kumar 
281*52130b60SViresh Kumar static const char *const mii_grps[] = { "mii0_grp" };
282*52130b60SViresh Kumar struct spear_function spear3xx_mii_function = {
283*52130b60SViresh Kumar 	.name = "mii0",
284*52130b60SViresh Kumar 	.groups = mii_grps,
285*52130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(mii_grps),
286*52130b60SViresh Kumar };
287*52130b60SViresh Kumar 
288*52130b60SViresh Kumar /* gpio0_pin0_pins */
289*52130b60SViresh Kumar static const unsigned gpio0_pin0_pins[] = { 28 };
290*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin0_muxreg[] = {
291*52130b60SViresh Kumar 	{
292*52130b60SViresh Kumar 		.reg = -1,
293*52130b60SViresh Kumar 		.mask = PMX_GPIO_PIN0_MASK,
294*52130b60SViresh Kumar 		.val = PMX_GPIO_PIN0_MASK,
295*52130b60SViresh Kumar 	},
296*52130b60SViresh Kumar };
297*52130b60SViresh Kumar 
298*52130b60SViresh Kumar static struct spear_modemux gpio0_pin0_modemux[] = {
299*52130b60SViresh Kumar 	{
300*52130b60SViresh Kumar 		.modes = ~0,
301*52130b60SViresh Kumar 		.muxregs = gpio0_pin0_muxreg,
302*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(gpio0_pin0_muxreg),
303*52130b60SViresh Kumar 	},
304*52130b60SViresh Kumar };
305*52130b60SViresh Kumar 
306*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin0_pingroup = {
307*52130b60SViresh Kumar 	.name = "gpio0_pin0_grp",
308*52130b60SViresh Kumar 	.pins = gpio0_pin0_pins,
309*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(gpio0_pin0_pins),
310*52130b60SViresh Kumar 	.modemuxs = gpio0_pin0_modemux,
311*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(gpio0_pin0_modemux),
312*52130b60SViresh Kumar };
313*52130b60SViresh Kumar 
314*52130b60SViresh Kumar /* gpio0_pin1_pins */
315*52130b60SViresh Kumar static const unsigned gpio0_pin1_pins[] = { 29 };
316*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin1_muxreg[] = {
317*52130b60SViresh Kumar 	{
318*52130b60SViresh Kumar 		.reg = -1,
319*52130b60SViresh Kumar 		.mask = PMX_GPIO_PIN1_MASK,
320*52130b60SViresh Kumar 		.val = PMX_GPIO_PIN1_MASK,
321*52130b60SViresh Kumar 	},
322*52130b60SViresh Kumar };
323*52130b60SViresh Kumar 
324*52130b60SViresh Kumar static struct spear_modemux gpio0_pin1_modemux[] = {
325*52130b60SViresh Kumar 	{
326*52130b60SViresh Kumar 		.modes = ~0,
327*52130b60SViresh Kumar 		.muxregs = gpio0_pin1_muxreg,
328*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(gpio0_pin1_muxreg),
329*52130b60SViresh Kumar 	},
330*52130b60SViresh Kumar };
331*52130b60SViresh Kumar 
332*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin1_pingroup = {
333*52130b60SViresh Kumar 	.name = "gpio0_pin1_grp",
334*52130b60SViresh Kumar 	.pins = gpio0_pin1_pins,
335*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(gpio0_pin1_pins),
336*52130b60SViresh Kumar 	.modemuxs = gpio0_pin1_modemux,
337*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(gpio0_pin1_modemux),
338*52130b60SViresh Kumar };
339*52130b60SViresh Kumar 
340*52130b60SViresh Kumar /* gpio0_pin2_pins */
341*52130b60SViresh Kumar static const unsigned gpio0_pin2_pins[] = { 30 };
342*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin2_muxreg[] = {
343*52130b60SViresh Kumar 	{
344*52130b60SViresh Kumar 		.reg = -1,
345*52130b60SViresh Kumar 		.mask = PMX_GPIO_PIN2_MASK,
346*52130b60SViresh Kumar 		.val = PMX_GPIO_PIN2_MASK,
347*52130b60SViresh Kumar 	},
348*52130b60SViresh Kumar };
349*52130b60SViresh Kumar 
350*52130b60SViresh Kumar static struct spear_modemux gpio0_pin2_modemux[] = {
351*52130b60SViresh Kumar 	{
352*52130b60SViresh Kumar 		.modes = ~0,
353*52130b60SViresh Kumar 		.muxregs = gpio0_pin2_muxreg,
354*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(gpio0_pin2_muxreg),
355*52130b60SViresh Kumar 	},
356*52130b60SViresh Kumar };
357*52130b60SViresh Kumar 
358*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin2_pingroup = {
359*52130b60SViresh Kumar 	.name = "gpio0_pin2_grp",
360*52130b60SViresh Kumar 	.pins = gpio0_pin2_pins,
361*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(gpio0_pin2_pins),
362*52130b60SViresh Kumar 	.modemuxs = gpio0_pin2_modemux,
363*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(gpio0_pin2_modemux),
364*52130b60SViresh Kumar };
365*52130b60SViresh Kumar 
366*52130b60SViresh Kumar /* gpio0_pin3_pins */
367*52130b60SViresh Kumar static const unsigned gpio0_pin3_pins[] = { 31 };
368*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin3_muxreg[] = {
369*52130b60SViresh Kumar 	{
370*52130b60SViresh Kumar 		.reg = -1,
371*52130b60SViresh Kumar 		.mask = PMX_GPIO_PIN3_MASK,
372*52130b60SViresh Kumar 		.val = PMX_GPIO_PIN3_MASK,
373*52130b60SViresh Kumar 	},
374*52130b60SViresh Kumar };
375*52130b60SViresh Kumar 
376*52130b60SViresh Kumar static struct spear_modemux gpio0_pin3_modemux[] = {
377*52130b60SViresh Kumar 	{
378*52130b60SViresh Kumar 		.modes = ~0,
379*52130b60SViresh Kumar 		.muxregs = gpio0_pin3_muxreg,
380*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(gpio0_pin3_muxreg),
381*52130b60SViresh Kumar 	},
382*52130b60SViresh Kumar };
383*52130b60SViresh Kumar 
384*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin3_pingroup = {
385*52130b60SViresh Kumar 	.name = "gpio0_pin3_grp",
386*52130b60SViresh Kumar 	.pins = gpio0_pin3_pins,
387*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(gpio0_pin3_pins),
388*52130b60SViresh Kumar 	.modemuxs = gpio0_pin3_modemux,
389*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(gpio0_pin3_modemux),
390*52130b60SViresh Kumar };
391*52130b60SViresh Kumar 
392*52130b60SViresh Kumar /* gpio0_pin4_pins */
393*52130b60SViresh Kumar static const unsigned gpio0_pin4_pins[] = { 32 };
394*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin4_muxreg[] = {
395*52130b60SViresh Kumar 	{
396*52130b60SViresh Kumar 		.reg = -1,
397*52130b60SViresh Kumar 		.mask = PMX_GPIO_PIN4_MASK,
398*52130b60SViresh Kumar 		.val = PMX_GPIO_PIN4_MASK,
399*52130b60SViresh Kumar 	},
400*52130b60SViresh Kumar };
401*52130b60SViresh Kumar 
402*52130b60SViresh Kumar static struct spear_modemux gpio0_pin4_modemux[] = {
403*52130b60SViresh Kumar 	{
404*52130b60SViresh Kumar 		.modes = ~0,
405*52130b60SViresh Kumar 		.muxregs = gpio0_pin4_muxreg,
406*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(gpio0_pin4_muxreg),
407*52130b60SViresh Kumar 	},
408*52130b60SViresh Kumar };
409*52130b60SViresh Kumar 
410*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin4_pingroup = {
411*52130b60SViresh Kumar 	.name = "gpio0_pin4_grp",
412*52130b60SViresh Kumar 	.pins = gpio0_pin4_pins,
413*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(gpio0_pin4_pins),
414*52130b60SViresh Kumar 	.modemuxs = gpio0_pin4_modemux,
415*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(gpio0_pin4_modemux),
416*52130b60SViresh Kumar };
417*52130b60SViresh Kumar 
418*52130b60SViresh Kumar /* gpio0_pin5_pins */
419*52130b60SViresh Kumar static const unsigned gpio0_pin5_pins[] = { 33 };
420*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin5_muxreg[] = {
421*52130b60SViresh Kumar 	{
422*52130b60SViresh Kumar 		.reg = -1,
423*52130b60SViresh Kumar 		.mask = PMX_GPIO_PIN5_MASK,
424*52130b60SViresh Kumar 		.val = PMX_GPIO_PIN5_MASK,
425*52130b60SViresh Kumar 	},
426*52130b60SViresh Kumar };
427*52130b60SViresh Kumar 
428*52130b60SViresh Kumar static struct spear_modemux gpio0_pin5_modemux[] = {
429*52130b60SViresh Kumar 	{
430*52130b60SViresh Kumar 		.modes = ~0,
431*52130b60SViresh Kumar 		.muxregs = gpio0_pin5_muxreg,
432*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(gpio0_pin5_muxreg),
433*52130b60SViresh Kumar 	},
434*52130b60SViresh Kumar };
435*52130b60SViresh Kumar 
436*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin5_pingroup = {
437*52130b60SViresh Kumar 	.name = "gpio0_pin5_grp",
438*52130b60SViresh Kumar 	.pins = gpio0_pin5_pins,
439*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(gpio0_pin5_pins),
440*52130b60SViresh Kumar 	.modemuxs = gpio0_pin5_modemux,
441*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(gpio0_pin5_modemux),
442*52130b60SViresh Kumar };
443*52130b60SViresh Kumar 
444*52130b60SViresh Kumar static const char *const gpio0_grps[] = { "gpio0_pin0_grp", "gpio0_pin1_grp",
445*52130b60SViresh Kumar 	"gpio0_pin2_grp", "gpio0_pin3_grp", "gpio0_pin4_grp", "gpio0_pin5_grp",
446*52130b60SViresh Kumar };
447*52130b60SViresh Kumar struct spear_function spear3xx_gpio0_function = {
448*52130b60SViresh Kumar 	.name = "gpio0",
449*52130b60SViresh Kumar 	.groups = gpio0_grps,
450*52130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(gpio0_grps),
451*52130b60SViresh Kumar };
452*52130b60SViresh Kumar 
453*52130b60SViresh Kumar /* uart0_ext_pins */
454*52130b60SViresh Kumar static const unsigned uart0_ext_pins[] = { 37, 38, 39, 40, 41, 42 };
455*52130b60SViresh Kumar static struct spear_muxreg uart0_ext_muxreg[] = {
456*52130b60SViresh Kumar 	{
457*52130b60SViresh Kumar 		.reg = -1,
458*52130b60SViresh Kumar 		.mask = PMX_UART0_MODEM_MASK,
459*52130b60SViresh Kumar 		.val = PMX_UART0_MODEM_MASK,
460*52130b60SViresh Kumar 	},
461*52130b60SViresh Kumar };
462*52130b60SViresh Kumar 
463*52130b60SViresh Kumar static struct spear_modemux uart0_ext_modemux[] = {
464*52130b60SViresh Kumar 	{
465*52130b60SViresh Kumar 		.modes = ~0,
466*52130b60SViresh Kumar 		.muxregs = uart0_ext_muxreg,
467*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart0_ext_muxreg),
468*52130b60SViresh Kumar 	},
469*52130b60SViresh Kumar };
470*52130b60SViresh Kumar 
471*52130b60SViresh Kumar struct spear_pingroup spear3xx_uart0_ext_pingroup = {
472*52130b60SViresh Kumar 	.name = "uart0_ext_grp",
473*52130b60SViresh Kumar 	.pins = uart0_ext_pins,
474*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(uart0_ext_pins),
475*52130b60SViresh Kumar 	.modemuxs = uart0_ext_modemux,
476*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(uart0_ext_modemux),
477*52130b60SViresh Kumar };
478*52130b60SViresh Kumar 
479*52130b60SViresh Kumar static const char *const uart0_ext_grps[] = { "uart0_ext_grp" };
480*52130b60SViresh Kumar struct spear_function spear3xx_uart0_ext_function = {
481*52130b60SViresh Kumar 	.name = "uart0_ext",
482*52130b60SViresh Kumar 	.groups = uart0_ext_grps,
483*52130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(uart0_ext_grps),
484*52130b60SViresh Kumar };
485*52130b60SViresh Kumar 
486*52130b60SViresh Kumar /* uart0_pins */
487*52130b60SViresh Kumar static const unsigned uart0_pins[] = { 2, 3 };
488*52130b60SViresh Kumar static struct spear_muxreg uart0_muxreg[] = {
489*52130b60SViresh Kumar 	{
490*52130b60SViresh Kumar 		.reg = -1,
491*52130b60SViresh Kumar 		.mask = PMX_UART0_MASK,
492*52130b60SViresh Kumar 		.val = PMX_UART0_MASK,
493*52130b60SViresh Kumar 	},
494*52130b60SViresh Kumar };
495*52130b60SViresh Kumar 
496*52130b60SViresh Kumar static struct spear_modemux uart0_modemux[] = {
497*52130b60SViresh Kumar 	{
498*52130b60SViresh Kumar 		.modes = ~0,
499*52130b60SViresh Kumar 		.muxregs = uart0_muxreg,
500*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(uart0_muxreg),
501*52130b60SViresh Kumar 	},
502*52130b60SViresh Kumar };
503*52130b60SViresh Kumar 
504*52130b60SViresh Kumar struct spear_pingroup spear3xx_uart0_pingroup = {
505*52130b60SViresh Kumar 	.name = "uart0_grp",
506*52130b60SViresh Kumar 	.pins = uart0_pins,
507*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(uart0_pins),
508*52130b60SViresh Kumar 	.modemuxs = uart0_modemux,
509*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(uart0_modemux),
510*52130b60SViresh Kumar };
511*52130b60SViresh Kumar 
512*52130b60SViresh Kumar static const char *const uart0_grps[] = { "uart0_grp" };
513*52130b60SViresh Kumar struct spear_function spear3xx_uart0_function = {
514*52130b60SViresh Kumar 	.name = "uart0",
515*52130b60SViresh Kumar 	.groups = uart0_grps,
516*52130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(uart0_grps),
517*52130b60SViresh Kumar };
518*52130b60SViresh Kumar 
519*52130b60SViresh Kumar /* timer_0_1_pins */
520*52130b60SViresh Kumar static const unsigned timer_0_1_pins[] = { 43, 44, 47, 48 };
521*52130b60SViresh Kumar static struct spear_muxreg timer_0_1_muxreg[] = {
522*52130b60SViresh Kumar 	{
523*52130b60SViresh Kumar 		.reg = -1,
524*52130b60SViresh Kumar 		.mask = PMX_TIMER_0_1_MASK,
525*52130b60SViresh Kumar 		.val = PMX_TIMER_0_1_MASK,
526*52130b60SViresh Kumar 	},
527*52130b60SViresh Kumar };
528*52130b60SViresh Kumar 
529*52130b60SViresh Kumar static struct spear_modemux timer_0_1_modemux[] = {
530*52130b60SViresh Kumar 	{
531*52130b60SViresh Kumar 		.modes = ~0,
532*52130b60SViresh Kumar 		.muxregs = timer_0_1_muxreg,
533*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(timer_0_1_muxreg),
534*52130b60SViresh Kumar 	},
535*52130b60SViresh Kumar };
536*52130b60SViresh Kumar 
537*52130b60SViresh Kumar struct spear_pingroup spear3xx_timer_0_1_pingroup = {
538*52130b60SViresh Kumar 	.name = "timer_0_1_grp",
539*52130b60SViresh Kumar 	.pins = timer_0_1_pins,
540*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(timer_0_1_pins),
541*52130b60SViresh Kumar 	.modemuxs = timer_0_1_modemux,
542*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(timer_0_1_modemux),
543*52130b60SViresh Kumar };
544*52130b60SViresh Kumar 
545*52130b60SViresh Kumar static const char *const timer_0_1_grps[] = { "timer_0_1_grp" };
546*52130b60SViresh Kumar struct spear_function spear3xx_timer_0_1_function = {
547*52130b60SViresh Kumar 	.name = "timer_0_1",
548*52130b60SViresh Kumar 	.groups = timer_0_1_grps,
549*52130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(timer_0_1_grps),
550*52130b60SViresh Kumar };
551*52130b60SViresh Kumar 
552*52130b60SViresh Kumar /* timer_2_3_pins */
553*52130b60SViresh Kumar static const unsigned timer_2_3_pins[] = { 45, 46, 49, 50 };
554*52130b60SViresh Kumar static struct spear_muxreg timer_2_3_muxreg[] = {
555*52130b60SViresh Kumar 	{
556*52130b60SViresh Kumar 		.reg = -1,
557*52130b60SViresh Kumar 		.mask = PMX_TIMER_2_3_MASK,
558*52130b60SViresh Kumar 		.val = PMX_TIMER_2_3_MASK,
559*52130b60SViresh Kumar 	},
560*52130b60SViresh Kumar };
561*52130b60SViresh Kumar 
562*52130b60SViresh Kumar static struct spear_modemux timer_2_3_modemux[] = {
563*52130b60SViresh Kumar 	{
564*52130b60SViresh Kumar 		.modes = ~0,
565*52130b60SViresh Kumar 		.muxregs = timer_2_3_muxreg,
566*52130b60SViresh Kumar 		.nmuxregs = ARRAY_SIZE(timer_2_3_muxreg),
567*52130b60SViresh Kumar 	},
568*52130b60SViresh Kumar };
569*52130b60SViresh Kumar 
570*52130b60SViresh Kumar struct spear_pingroup spear3xx_timer_2_3_pingroup = {
571*52130b60SViresh Kumar 	.name = "timer_2_3_grp",
572*52130b60SViresh Kumar 	.pins = timer_2_3_pins,
573*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(timer_2_3_pins),
574*52130b60SViresh Kumar 	.modemuxs = timer_2_3_modemux,
575*52130b60SViresh Kumar 	.nmodemuxs = ARRAY_SIZE(timer_2_3_modemux),
576*52130b60SViresh Kumar };
577*52130b60SViresh Kumar 
578*52130b60SViresh Kumar static const char *const timer_2_3_grps[] = { "timer_2_3_grp" };
579*52130b60SViresh Kumar struct spear_function spear3xx_timer_2_3_function = {
580*52130b60SViresh Kumar 	.name = "timer_2_3",
581*52130b60SViresh Kumar 	.groups = timer_2_3_grps,
582*52130b60SViresh Kumar 	.ngroups = ARRAY_SIZE(timer_2_3_grps),
583*52130b60SViresh Kumar };
584*52130b60SViresh Kumar 
585*52130b60SViresh Kumar struct spear_pinctrl_machdata spear3xx_machdata = {
586*52130b60SViresh Kumar 	.pins = spear3xx_pins,
587*52130b60SViresh Kumar 	.npins = ARRAY_SIZE(spear3xx_pins),
588*52130b60SViresh Kumar };
589