1#include <linux/kernel.h>
2#include <linux/pinctrl/pinctrl.h>
3#include "pinctrl-nomadik.h"
4
5/* All the pins that can be used for GPIO and some other functions */
6#define _GPIO(offset)		(offset)
7
8#define DB8500_PIN_AJ5		_GPIO(0)
9#define DB8500_PIN_AJ3		_GPIO(1)
10#define DB8500_PIN_AH4		_GPIO(2)
11#define DB8500_PIN_AH3		_GPIO(3)
12#define DB8500_PIN_AH6		_GPIO(4)
13#define DB8500_PIN_AG6		_GPIO(5)
14#define DB8500_PIN_AF6		_GPIO(6)
15#define DB8500_PIN_AG5		_GPIO(7)
16#define DB8500_PIN_AD5		_GPIO(8)
17#define DB8500_PIN_AE4		_GPIO(9)
18#define DB8500_PIN_AF5		_GPIO(10)
19#define DB8500_PIN_AG4		_GPIO(11)
20#define DB8500_PIN_AC4		_GPIO(12)
21#define DB8500_PIN_AF3		_GPIO(13)
22#define DB8500_PIN_AE3		_GPIO(14)
23#define DB8500_PIN_AC3		_GPIO(15)
24#define DB8500_PIN_AD3		_GPIO(16)
25#define DB8500_PIN_AD4		_GPIO(17)
26#define DB8500_PIN_AC2		_GPIO(18)
27#define DB8500_PIN_AC1		_GPIO(19)
28#define DB8500_PIN_AB4		_GPIO(20)
29#define DB8500_PIN_AB3		_GPIO(21)
30#define DB8500_PIN_AA3		_GPIO(22)
31#define DB8500_PIN_AA4		_GPIO(23)
32#define DB8500_PIN_AB2		_GPIO(24)
33#define DB8500_PIN_Y4		_GPIO(25)
34#define DB8500_PIN_Y2		_GPIO(26)
35#define DB8500_PIN_AA2		_GPIO(27)
36#define DB8500_PIN_AA1		_GPIO(28)
37#define DB8500_PIN_W2		_GPIO(29)
38#define DB8500_PIN_W3		_GPIO(30)
39#define DB8500_PIN_V3		_GPIO(31)
40#define DB8500_PIN_V2		_GPIO(32)
41#define DB8500_PIN_AF2		_GPIO(33)
42#define DB8500_PIN_AE1		_GPIO(34)
43#define DB8500_PIN_AE2		_GPIO(35)
44#define DB8500_PIN_AG2		_GPIO(36)
45/* Hole */
46#define DB8500_PIN_F3		_GPIO(64)
47#define DB8500_PIN_F1		_GPIO(65)
48#define DB8500_PIN_G3		_GPIO(66)
49#define DB8500_PIN_G2		_GPIO(67)
50#define DB8500_PIN_E1		_GPIO(68)
51#define DB8500_PIN_E2		_GPIO(69)
52#define DB8500_PIN_G5		_GPIO(70)
53#define DB8500_PIN_G4		_GPIO(71)
54#define DB8500_PIN_H4		_GPIO(72)
55#define DB8500_PIN_H3		_GPIO(73)
56#define DB8500_PIN_J3		_GPIO(74)
57#define DB8500_PIN_H2		_GPIO(75)
58#define DB8500_PIN_J2		_GPIO(76)
59#define DB8500_PIN_H1		_GPIO(77)
60#define DB8500_PIN_F4		_GPIO(78)
61#define DB8500_PIN_E3		_GPIO(79)
62#define DB8500_PIN_E4		_GPIO(80)
63#define DB8500_PIN_D2		_GPIO(81)
64#define DB8500_PIN_C1		_GPIO(82)
65#define DB8500_PIN_D3		_GPIO(83)
66#define DB8500_PIN_C2		_GPIO(84)
67#define DB8500_PIN_D5		_GPIO(85)
68#define DB8500_PIN_C6		_GPIO(86)
69#define DB8500_PIN_B3		_GPIO(87)
70#define DB8500_PIN_C4		_GPIO(88)
71#define DB8500_PIN_E6		_GPIO(89)
72#define DB8500_PIN_A3		_GPIO(90)
73#define DB8500_PIN_B6		_GPIO(91)
74#define DB8500_PIN_D6		_GPIO(92)
75#define DB8500_PIN_B7		_GPIO(93)
76#define DB8500_PIN_D7		_GPIO(94)
77#define DB8500_PIN_E8		_GPIO(95)
78#define DB8500_PIN_D8		_GPIO(96)
79#define DB8500_PIN_D9		_GPIO(97)
80/* Hole */
81#define DB8500_PIN_A5		_GPIO(128)
82#define DB8500_PIN_B4		_GPIO(129)
83#define DB8500_PIN_C8		_GPIO(130)
84#define DB8500_PIN_A12		_GPIO(131)
85#define DB8500_PIN_C10		_GPIO(132)
86#define DB8500_PIN_B10		_GPIO(133)
87#define DB8500_PIN_B9		_GPIO(134)
88#define DB8500_PIN_A9		_GPIO(135)
89#define DB8500_PIN_C7		_GPIO(136)
90#define DB8500_PIN_A7		_GPIO(137)
91#define DB8500_PIN_C5		_GPIO(138)
92#define DB8500_PIN_C9		_GPIO(139)
93#define DB8500_PIN_B11		_GPIO(140)
94#define DB8500_PIN_C12		_GPIO(141)
95#define DB8500_PIN_C11		_GPIO(142)
96#define DB8500_PIN_D12		_GPIO(143)
97#define DB8500_PIN_B13		_GPIO(144)
98#define DB8500_PIN_C13		_GPIO(145)
99#define DB8500_PIN_D13		_GPIO(146)
100#define DB8500_PIN_C15		_GPIO(147)
101#define DB8500_PIN_B16		_GPIO(148)
102#define DB8500_PIN_B14		_GPIO(149)
103#define DB8500_PIN_C14		_GPIO(150)
104#define DB8500_PIN_D17		_GPIO(151)
105#define DB8500_PIN_D16		_GPIO(152)
106#define DB8500_PIN_B17		_GPIO(153)
107#define DB8500_PIN_C16		_GPIO(154)
108#define DB8500_PIN_C19		_GPIO(155)
109#define DB8500_PIN_C17		_GPIO(156)
110#define DB8500_PIN_A18		_GPIO(157)
111#define DB8500_PIN_C18		_GPIO(158)
112#define DB8500_PIN_B19		_GPIO(159)
113#define DB8500_PIN_B20		_GPIO(160)
114#define DB8500_PIN_D21		_GPIO(161)
115#define DB8500_PIN_D20		_GPIO(162)
116#define DB8500_PIN_C20		_GPIO(163)
117#define DB8500_PIN_B21		_GPIO(164)
118#define DB8500_PIN_C21		_GPIO(165)
119#define DB8500_PIN_A22		_GPIO(166)
120#define DB8500_PIN_B24		_GPIO(167)
121#define DB8500_PIN_C22		_GPIO(168)
122#define DB8500_PIN_D22		_GPIO(169)
123#define DB8500_PIN_C23		_GPIO(170)
124#define DB8500_PIN_D23		_GPIO(171)
125/* Hole */
126#define DB8500_PIN_AJ27		_GPIO(192)
127#define DB8500_PIN_AH27		_GPIO(193)
128#define DB8500_PIN_AF27		_GPIO(194)
129#define DB8500_PIN_AG28		_GPIO(195)
130#define DB8500_PIN_AG26		_GPIO(196)
131#define DB8500_PIN_AH24		_GPIO(197)
132#define DB8500_PIN_AG25		_GPIO(198)
133#define DB8500_PIN_AH23		_GPIO(199)
134#define DB8500_PIN_AH26		_GPIO(200)
135#define DB8500_PIN_AF24		_GPIO(201)
136#define DB8500_PIN_AF25		_GPIO(202)
137#define DB8500_PIN_AE23		_GPIO(203)
138#define DB8500_PIN_AF23		_GPIO(204)
139#define DB8500_PIN_AG23		_GPIO(205)
140#define DB8500_PIN_AG24		_GPIO(206)
141#define DB8500_PIN_AJ23		_GPIO(207)
142#define DB8500_PIN_AH16		_GPIO(208)
143#define DB8500_PIN_AG15		_GPIO(209)
144#define DB8500_PIN_AJ15		_GPIO(210)
145#define DB8500_PIN_AG14		_GPIO(211)
146#define DB8500_PIN_AF13		_GPIO(212)
147#define DB8500_PIN_AG13		_GPIO(213)
148#define DB8500_PIN_AH15		_GPIO(214)
149#define DB8500_PIN_AH13		_GPIO(215)
150#define DB8500_PIN_AG12		_GPIO(216)
151#define DB8500_PIN_AH12		_GPIO(217)
152#define DB8500_PIN_AH11		_GPIO(218)
153#define DB8500_PIN_AG10		_GPIO(219)
154#define DB8500_PIN_AH10		_GPIO(220)
155#define DB8500_PIN_AJ11		_GPIO(221)
156#define DB8500_PIN_AJ9		_GPIO(222)
157#define DB8500_PIN_AH9		_GPIO(223)
158#define DB8500_PIN_AG9		_GPIO(224)
159#define DB8500_PIN_AG8		_GPIO(225)
160#define DB8500_PIN_AF8		_GPIO(226)
161#define DB8500_PIN_AH7		_GPIO(227)
162#define DB8500_PIN_AJ6		_GPIO(228)
163#define DB8500_PIN_AG7		_GPIO(229)
164#define DB8500_PIN_AF7		_GPIO(230)
165/* Hole */
166#define DB8500_PIN_AF28		_GPIO(256)
167#define DB8500_PIN_AE29		_GPIO(257)
168#define DB8500_PIN_AD29		_GPIO(258)
169#define DB8500_PIN_AC29		_GPIO(259)
170#define DB8500_PIN_AD28		_GPIO(260)
171#define DB8500_PIN_AD26		_GPIO(261)
172#define DB8500_PIN_AE26		_GPIO(262)
173#define DB8500_PIN_AG29		_GPIO(263)
174#define DB8500_PIN_AE27		_GPIO(264)
175#define DB8500_PIN_AD27		_GPIO(265)
176#define DB8500_PIN_AC28		_GPIO(266)
177#define DB8500_PIN_AC27		_GPIO(267)
178
179/*
180 * The names of the pins are denoted by GPIO number and ball name, even
181 * though they can be used for other things than GPIO, this is the first
182 * column in the table of the data sheet and often used on schematics and
183 * such.
184 */
185static const struct pinctrl_pin_desc nmk_db8500_pins[] = {
186	PINCTRL_PIN(DB8500_PIN_AJ5, "GPIO0_AJ5"),
187	PINCTRL_PIN(DB8500_PIN_AJ3, "GPIO1_AJ3"),
188	PINCTRL_PIN(DB8500_PIN_AH4, "GPIO2_AH4"),
189	PINCTRL_PIN(DB8500_PIN_AH3, "GPIO3_AH3"),
190	PINCTRL_PIN(DB8500_PIN_AH6, "GPIO4_AH6"),
191	PINCTRL_PIN(DB8500_PIN_AG6, "GPIO5_AG6"),
192	PINCTRL_PIN(DB8500_PIN_AF6, "GPIO6_AF6"),
193	PINCTRL_PIN(DB8500_PIN_AG5, "GPIO7_AG5"),
194	PINCTRL_PIN(DB8500_PIN_AD5, "GPIO8_AD5"),
195	PINCTRL_PIN(DB8500_PIN_AE4, "GPIO9_AE4"),
196	PINCTRL_PIN(DB8500_PIN_AF5, "GPIO10_AF5"),
197	PINCTRL_PIN(DB8500_PIN_AG4, "GPIO11_AG4"),
198	PINCTRL_PIN(DB8500_PIN_AC4, "GPIO12_AC4"),
199	PINCTRL_PIN(DB8500_PIN_AF3, "GPIO13_AF3"),
200	PINCTRL_PIN(DB8500_PIN_AE3, "GPIO14_AE3"),
201	PINCTRL_PIN(DB8500_PIN_AC3, "GPIO15_AC3"),
202	PINCTRL_PIN(DB8500_PIN_AD3, "GPIO16_AD3"),
203	PINCTRL_PIN(DB8500_PIN_AD4, "GPIO17_AD4"),
204	PINCTRL_PIN(DB8500_PIN_AC2, "GPIO18_AC2"),
205	PINCTRL_PIN(DB8500_PIN_AC1, "GPIO19_AC1"),
206	PINCTRL_PIN(DB8500_PIN_AB4, "GPIO20_AB4"),
207	PINCTRL_PIN(DB8500_PIN_AB3, "GPIO21_AB3"),
208	PINCTRL_PIN(DB8500_PIN_AA3, "GPIO22_AA3"),
209	PINCTRL_PIN(DB8500_PIN_AA4, "GPIO23_AA4"),
210	PINCTRL_PIN(DB8500_PIN_AB2, "GPIO24_AB2"),
211	PINCTRL_PIN(DB8500_PIN_Y4, "GPIO25_Y4"),
212	PINCTRL_PIN(DB8500_PIN_Y2, "GPIO26_Y2"),
213	PINCTRL_PIN(DB8500_PIN_AA2, "GPIO27_AA2"),
214	PINCTRL_PIN(DB8500_PIN_AA1, "GPIO28_AA1"),
215	PINCTRL_PIN(DB8500_PIN_W2, "GPIO29_W2"),
216	PINCTRL_PIN(DB8500_PIN_W3, "GPIO30_W3"),
217	PINCTRL_PIN(DB8500_PIN_V3, "GPIO31_V3"),
218	PINCTRL_PIN(DB8500_PIN_V2, "GPIO32_V2"),
219	PINCTRL_PIN(DB8500_PIN_AF2, "GPIO33_AF2"),
220	PINCTRL_PIN(DB8500_PIN_AE1, "GPIO34_AE1"),
221	PINCTRL_PIN(DB8500_PIN_AE2, "GPIO35_AE2"),
222	PINCTRL_PIN(DB8500_PIN_AG2, "GPIO36_AG2"),
223	/* Hole */
224	PINCTRL_PIN(DB8500_PIN_F3, "GPIO64_F3"),
225	PINCTRL_PIN(DB8500_PIN_F1, "GPIO65_F1"),
226	PINCTRL_PIN(DB8500_PIN_G3, "GPIO66_G3"),
227	PINCTRL_PIN(DB8500_PIN_G2, "GPIO67_G2"),
228	PINCTRL_PIN(DB8500_PIN_E1, "GPIO68_E1"),
229	PINCTRL_PIN(DB8500_PIN_E2, "GPIO69_E2"),
230	PINCTRL_PIN(DB8500_PIN_G5, "GPIO70_G5"),
231	PINCTRL_PIN(DB8500_PIN_G4, "GPIO71_G4"),
232	PINCTRL_PIN(DB8500_PIN_H4, "GPIO72_H4"),
233	PINCTRL_PIN(DB8500_PIN_H3, "GPIO73_H3"),
234	PINCTRL_PIN(DB8500_PIN_J3, "GPIO74_J3"),
235	PINCTRL_PIN(DB8500_PIN_H2, "GPIO75_H2"),
236	PINCTRL_PIN(DB8500_PIN_J2, "GPIO76_J2"),
237	PINCTRL_PIN(DB8500_PIN_H1, "GPIO77_H1"),
238	PINCTRL_PIN(DB8500_PIN_F4, "GPIO78_F4"),
239	PINCTRL_PIN(DB8500_PIN_E3, "GPIO79_E3"),
240	PINCTRL_PIN(DB8500_PIN_E4, "GPIO80_E4"),
241	PINCTRL_PIN(DB8500_PIN_D2, "GPIO81_D2"),
242	PINCTRL_PIN(DB8500_PIN_C1, "GPIO82_C1"),
243	PINCTRL_PIN(DB8500_PIN_D3, "GPIO83_D3"),
244	PINCTRL_PIN(DB8500_PIN_C2, "GPIO84_C2"),
245	PINCTRL_PIN(DB8500_PIN_D5, "GPIO85_D5"),
246	PINCTRL_PIN(DB8500_PIN_C6, "GPIO86_C6"),
247	PINCTRL_PIN(DB8500_PIN_B3, "GPIO87_B3"),
248	PINCTRL_PIN(DB8500_PIN_C4, "GPIO88_C4"),
249	PINCTRL_PIN(DB8500_PIN_E6, "GPIO89_E6"),
250	PINCTRL_PIN(DB8500_PIN_A3, "GPIO90_A3"),
251	PINCTRL_PIN(DB8500_PIN_B6, "GPIO91_B6"),
252	PINCTRL_PIN(DB8500_PIN_D6, "GPIO92_D6"),
253	PINCTRL_PIN(DB8500_PIN_B7, "GPIO93_B7"),
254	PINCTRL_PIN(DB8500_PIN_D7, "GPIO94_D7"),
255	PINCTRL_PIN(DB8500_PIN_E8, "GPIO95_E8"),
256	PINCTRL_PIN(DB8500_PIN_D8, "GPIO96_D8"),
257	PINCTRL_PIN(DB8500_PIN_D9, "GPIO97_D9"),
258	/* Hole */
259	PINCTRL_PIN(DB8500_PIN_A5, "GPIO128_A5"),
260	PINCTRL_PIN(DB8500_PIN_B4, "GPIO129_B4"),
261	PINCTRL_PIN(DB8500_PIN_C8, "GPIO130_C8"),
262	PINCTRL_PIN(DB8500_PIN_A12, "GPIO131_A12"),
263	PINCTRL_PIN(DB8500_PIN_C10, "GPIO132_C10"),
264	PINCTRL_PIN(DB8500_PIN_B10, "GPIO133_B10"),
265	PINCTRL_PIN(DB8500_PIN_B9, "GPIO134_B9"),
266	PINCTRL_PIN(DB8500_PIN_A9, "GPIO135_A9"),
267	PINCTRL_PIN(DB8500_PIN_C7, "GPIO136_C7"),
268	PINCTRL_PIN(DB8500_PIN_A7, "GPIO137_A7"),
269	PINCTRL_PIN(DB8500_PIN_C5, "GPIO138_C5"),
270	PINCTRL_PIN(DB8500_PIN_C9, "GPIO139_C9"),
271	PINCTRL_PIN(DB8500_PIN_B11, "GPIO140_B11"),
272	PINCTRL_PIN(DB8500_PIN_C12, "GPIO141_C12"),
273	PINCTRL_PIN(DB8500_PIN_C11, "GPIO142_C11"),
274	PINCTRL_PIN(DB8500_PIN_D12, "GPIO143_D12"),
275	PINCTRL_PIN(DB8500_PIN_B13, "GPIO144_B13"),
276	PINCTRL_PIN(DB8500_PIN_C13, "GPIO145_C13"),
277	PINCTRL_PIN(DB8500_PIN_D13, "GPIO146_D13"),
278	PINCTRL_PIN(DB8500_PIN_C15, "GPIO147_C15"),
279	PINCTRL_PIN(DB8500_PIN_B16, "GPIO148_B16"),
280	PINCTRL_PIN(DB8500_PIN_B14, "GPIO149_B14"),
281	PINCTRL_PIN(DB8500_PIN_C14, "GPIO150_C14"),
282	PINCTRL_PIN(DB8500_PIN_D17, "GPIO151_D17"),
283	PINCTRL_PIN(DB8500_PIN_D16, "GPIO152_D16"),
284	PINCTRL_PIN(DB8500_PIN_B17, "GPIO153_B17"),
285	PINCTRL_PIN(DB8500_PIN_C16, "GPIO154_C16"),
286	PINCTRL_PIN(DB8500_PIN_C19, "GPIO155_C19"),
287	PINCTRL_PIN(DB8500_PIN_C17, "GPIO156_C17"),
288	PINCTRL_PIN(DB8500_PIN_A18, "GPIO157_A18"),
289	PINCTRL_PIN(DB8500_PIN_C18, "GPIO158_C18"),
290	PINCTRL_PIN(DB8500_PIN_B19, "GPIO159_B19"),
291	PINCTRL_PIN(DB8500_PIN_B20, "GPIO160_B20"),
292	PINCTRL_PIN(DB8500_PIN_D21, "GPIO161_D21"),
293	PINCTRL_PIN(DB8500_PIN_D20, "GPIO162_D20"),
294	PINCTRL_PIN(DB8500_PIN_C20, "GPIO163_C20"),
295	PINCTRL_PIN(DB8500_PIN_B21, "GPIO164_B21"),
296	PINCTRL_PIN(DB8500_PIN_C21, "GPIO165_C21"),
297	PINCTRL_PIN(DB8500_PIN_A22, "GPIO166_A22"),
298	PINCTRL_PIN(DB8500_PIN_B24, "GPIO167_B24"),
299	PINCTRL_PIN(DB8500_PIN_C22, "GPIO168_C22"),
300	PINCTRL_PIN(DB8500_PIN_D22, "GPIO169_D22"),
301	PINCTRL_PIN(DB8500_PIN_C23, "GPIO170_C23"),
302	PINCTRL_PIN(DB8500_PIN_D23, "GPIO171_D23"),
303	/* Hole */
304	PINCTRL_PIN(DB8500_PIN_AJ27, "GPIO192_AJ27"),
305	PINCTRL_PIN(DB8500_PIN_AH27, "GPIO193_AH27"),
306	PINCTRL_PIN(DB8500_PIN_AF27, "GPIO194_AF27"),
307	PINCTRL_PIN(DB8500_PIN_AG28, "GPIO195_AG28"),
308	PINCTRL_PIN(DB8500_PIN_AG26, "GPIO196_AG26"),
309	PINCTRL_PIN(DB8500_PIN_AH24, "GPIO197_AH24"),
310	PINCTRL_PIN(DB8500_PIN_AG25, "GPIO198_AG25"),
311	PINCTRL_PIN(DB8500_PIN_AH23, "GPIO199_AH23"),
312	PINCTRL_PIN(DB8500_PIN_AH26, "GPIO200_AH26"),
313	PINCTRL_PIN(DB8500_PIN_AF24, "GPIO201_AF24"),
314	PINCTRL_PIN(DB8500_PIN_AF25, "GPIO202_AF25"),
315	PINCTRL_PIN(DB8500_PIN_AE23, "GPIO203_AE23"),
316	PINCTRL_PIN(DB8500_PIN_AF23, "GPIO204_AF23"),
317	PINCTRL_PIN(DB8500_PIN_AG23, "GPIO205_AG23"),
318	PINCTRL_PIN(DB8500_PIN_AG24, "GPIO206_AG24"),
319	PINCTRL_PIN(DB8500_PIN_AJ23, "GPIO207_AJ23"),
320	PINCTRL_PIN(DB8500_PIN_AH16, "GPIO208_AH16"),
321	PINCTRL_PIN(DB8500_PIN_AG15, "GPIO209_AG15"),
322	PINCTRL_PIN(DB8500_PIN_AJ15, "GPIO210_AJ15"),
323	PINCTRL_PIN(DB8500_PIN_AG14, "GPIO211_AG14"),
324	PINCTRL_PIN(DB8500_PIN_AF13, "GPIO212_AF13"),
325	PINCTRL_PIN(DB8500_PIN_AG13, "GPIO213_AG13"),
326	PINCTRL_PIN(DB8500_PIN_AH15, "GPIO214_AH15"),
327	PINCTRL_PIN(DB8500_PIN_AH13, "GPIO215_AH13"),
328	PINCTRL_PIN(DB8500_PIN_AG12, "GPIO216_AG12"),
329	PINCTRL_PIN(DB8500_PIN_AH12, "GPIO217_AH12"),
330	PINCTRL_PIN(DB8500_PIN_AH11, "GPIO218_AH11"),
331	PINCTRL_PIN(DB8500_PIN_AG10, "GPIO219_AG10"),
332	PINCTRL_PIN(DB8500_PIN_AH10, "GPIO220_AH10"),
333	PINCTRL_PIN(DB8500_PIN_AJ11, "GPIO221_AJ11"),
334	PINCTRL_PIN(DB8500_PIN_AJ9, "GPIO222_AJ9"),
335	PINCTRL_PIN(DB8500_PIN_AH9, "GPIO223_AH9"),
336	PINCTRL_PIN(DB8500_PIN_AG9, "GPIO224_AG9"),
337	PINCTRL_PIN(DB8500_PIN_AG8, "GPIO225_AG8"),
338	PINCTRL_PIN(DB8500_PIN_AF8, "GPIO226_AF8"),
339	PINCTRL_PIN(DB8500_PIN_AH7, "GPIO227_AH7"),
340	PINCTRL_PIN(DB8500_PIN_AJ6, "GPIO228_AJ6"),
341	PINCTRL_PIN(DB8500_PIN_AG7, "GPIO229_AG7"),
342	PINCTRL_PIN(DB8500_PIN_AF7, "GPIO230_AF7"),
343	/* Hole */
344	PINCTRL_PIN(DB8500_PIN_AF28, "GPIO256_AF28"),
345	PINCTRL_PIN(DB8500_PIN_AE29, "GPIO257_AE29"),
346	PINCTRL_PIN(DB8500_PIN_AD29, "GPIO258_AD29"),
347	PINCTRL_PIN(DB8500_PIN_AC29, "GPIO259_AC29"),
348	PINCTRL_PIN(DB8500_PIN_AD28, "GPIO260_AD28"),
349	PINCTRL_PIN(DB8500_PIN_AD26, "GPIO261_AD26"),
350	PINCTRL_PIN(DB8500_PIN_AE26, "GPIO262_AE26"),
351	PINCTRL_PIN(DB8500_PIN_AG29, "GPIO263_AG29"),
352	PINCTRL_PIN(DB8500_PIN_AE27, "GPIO264_AE27"),
353	PINCTRL_PIN(DB8500_PIN_AD27, "GPIO265_AD27"),
354	PINCTRL_PIN(DB8500_PIN_AC28, "GPIO266_AC28"),
355	PINCTRL_PIN(DB8500_PIN_AC27, "GPIO267_AC27"),
356};
357
358#define DB8500_GPIO_RANGE(a, b, c) { .name = "DB8500", .id = a, .base = b, \
359			.pin_base = b, .npins = c }
360
361/*
362 * This matches the 32-pin gpio chips registered by the GPIO portion. This
363 * cannot be const since we assign the struct gpio_chip * pointer at runtime.
364 */
365static struct pinctrl_gpio_range nmk_db8500_ranges[] = {
366	DB8500_GPIO_RANGE(0, 0, 32),
367	DB8500_GPIO_RANGE(1, 32, 5),
368	DB8500_GPIO_RANGE(2, 64, 32),
369	DB8500_GPIO_RANGE(3, 96, 2),
370	DB8500_GPIO_RANGE(4, 128, 32),
371	DB8500_GPIO_RANGE(5, 160, 12),
372	DB8500_GPIO_RANGE(6, 192, 32),
373	DB8500_GPIO_RANGE(7, 224, 7),
374	DB8500_GPIO_RANGE(8, 256, 12),
375};
376
377/*
378 * Read the pin group names like this:
379 * u0_a_1    = first groups of pins for uart0 on alt function a
380 * i2c2_b_2  = second group of pins for i2c2 on alt function b
381 *
382 * The groups are arranged as sets per altfunction column, so we can
383 * mux in one group at a time by selecting the same altfunction for them
384 * all. When functions require pins on different altfunctions, you need
385 * to combine several groups.
386 */
387
388/* Altfunction A column */
389static const unsigned u0_a_1_pins[] = { DB8500_PIN_AJ5, DB8500_PIN_AJ3,
390					DB8500_PIN_AH4, DB8500_PIN_AH3 };
391static const unsigned u1rxtx_a_1_pins[] = { DB8500_PIN_AH6, DB8500_PIN_AG6 };
392static const unsigned u1ctsrts_a_1_pins[] = { DB8500_PIN_AF6, DB8500_PIN_AG5 };
393/* Image processor I2C line, this is driven by image processor firmware */
394static const unsigned ipi2c_a_1_pins[] = { DB8500_PIN_AD5, DB8500_PIN_AE4 };
395static const unsigned ipi2c_a_2_pins[] = { DB8500_PIN_AF5, DB8500_PIN_AG4 };
396/* MSP0 can only be on these pins, but TXD and RXD can be flipped */
397static const unsigned msp0txrx_a_1_pins[] = { DB8500_PIN_AC4, DB8500_PIN_AC3 };
398static const unsigned msp0tfstck_a_1_pins[] = { DB8500_PIN_AF3, DB8500_PIN_AE3 };
399static const unsigned msp0rfsrck_a_1_pins[] = { DB8500_PIN_AD3, DB8500_PIN_AD4 };
400/* Basic pins of the MMC/SD card 0 interface */
401static const unsigned mc0_a_1_pins[] = { DB8500_PIN_AC2, DB8500_PIN_AC1,
402	DB8500_PIN_AB4, DB8500_PIN_AA3, DB8500_PIN_AA4, DB8500_PIN_AB2,
403	DB8500_PIN_Y4, DB8500_PIN_Y2, DB8500_PIN_AA2, DB8500_PIN_AA1 };
404/* Often only 4 bits are used, then these are not needed (only used for MMC) */
405static const unsigned mc0_dat47_a_1_pins[] = { DB8500_PIN_W2, DB8500_PIN_W3,
406	DB8500_PIN_V3, DB8500_PIN_V2};
407static const unsigned mc0dat31dir_a_1_pins[] = { DB8500_PIN_AB3 };
408/* MSP1 can only be on these pins, but TXD and RXD can be flipped */
409static const unsigned msp1txrx_a_1_pins[] = { DB8500_PIN_AF2, DB8500_PIN_AG2 };
410static const unsigned msp1_a_1_pins[] = { DB8500_PIN_AE1, DB8500_PIN_AE2 };
411/* LCD interface */
412static const unsigned lcdb_a_1_pins[] = { DB8500_PIN_F3, DB8500_PIN_F1,
413					  DB8500_PIN_G3, DB8500_PIN_G2 };
414static const unsigned lcdvsi0_a_1_pins[] = { DB8500_PIN_E1 };
415static const unsigned lcdvsi1_a_1_pins[] = { DB8500_PIN_E2 };
416static const unsigned lcd_d0_d7_a_1_pins[] = {
417	DB8500_PIN_G5, DB8500_PIN_G4, DB8500_PIN_H4, DB8500_PIN_H3,
418	DB8500_PIN_J3, DB8500_PIN_H2, DB8500_PIN_J2, DB8500_PIN_H1 };
419/* D8 thru D11 often used as TVOUT lines */
420static const unsigned lcd_d8_d11_a_1_pins[] = { DB8500_PIN_F4,
421	DB8500_PIN_E3, DB8500_PIN_E4, DB8500_PIN_D2 };
422static const unsigned lcd_d12_d23_a_1_pins[] = {
423	DB8500_PIN_C1, DB8500_PIN_D3, DB8500_PIN_C2, DB8500_PIN_D5,
424	DB8500_PIN_C6, DB8500_PIN_B3, DB8500_PIN_C4, DB8500_PIN_E6,
425	DB8500_PIN_A3, DB8500_PIN_B6, DB8500_PIN_D6, DB8500_PIN_B7 };
426static const unsigned kp_a_1_pins[] = { DB8500_PIN_D7, DB8500_PIN_E8,
427	DB8500_PIN_D8, DB8500_PIN_D9 };
428static const unsigned kpskaskb_a_1_pins[] = { DB8500_PIN_D17, DB8500_PIN_D16 };
429static const unsigned kp_a_2_pins[] = {
430	DB8500_PIN_B17, DB8500_PIN_C16, DB8500_PIN_C19, DB8500_PIN_C17,
431	DB8500_PIN_A18, DB8500_PIN_C18, DB8500_PIN_B19, DB8500_PIN_B20,
432	DB8500_PIN_D21, DB8500_PIN_D20, DB8500_PIN_C20, DB8500_PIN_B21,
433	DB8500_PIN_C21, DB8500_PIN_A22, DB8500_PIN_B24, DB8500_PIN_C22 };
434/* MC2 has 8 data lines and no direction control, so only for (e)MMC */
435static const unsigned mc2_a_1_pins[] = { DB8500_PIN_A5, DB8500_PIN_B4,
436	DB8500_PIN_C8, DB8500_PIN_A12, DB8500_PIN_C10, DB8500_PIN_B10,
437	DB8500_PIN_B9, DB8500_PIN_A9, DB8500_PIN_C7, DB8500_PIN_A7,
438	DB8500_PIN_C5 };
439static const unsigned ssp1_a_1_pins[] = { DB8500_PIN_C9, DB8500_PIN_B11,
440					  DB8500_PIN_C12, DB8500_PIN_C11 };
441static const unsigned ssp0_a_1_pins[] = { DB8500_PIN_D12, DB8500_PIN_B13,
442					  DB8500_PIN_C13, DB8500_PIN_D13 };
443static const unsigned i2c0_a_1_pins[] = { DB8500_PIN_C15, DB8500_PIN_B16 };
444/*
445 * Image processor GPIO pins are named "ipgpio" and have their own
446 * numberspace
447 */
448static const unsigned ipgpio0_a_1_pins[] = { DB8500_PIN_B14 };
449static const unsigned ipgpio1_a_1_pins[] = { DB8500_PIN_C14 };
450/* Three modem pins named RF_PURn, MODEM_STATE and MODEM_PWREN */
451static const unsigned modem_a_1_pins[] = { DB8500_PIN_D22, DB8500_PIN_C23,
452					   DB8500_PIN_D23 };
453/*
454 * This MSP cannot switch RX and TX, SCK in a separate group since this
455 * seems to be optional.
456 */
457static const unsigned msp2sck_a_1_pins[] = { DB8500_PIN_AJ27 };
458static const unsigned msp2_a_1_pins[] = { DB8500_PIN_AH27, DB8500_PIN_AF27,
459					  DB8500_PIN_AG28, DB8500_PIN_AG26 };
460static const unsigned mc4_a_1_pins[] = { DB8500_PIN_AH24, DB8500_PIN_AG25,
461	DB8500_PIN_AH23, DB8500_PIN_AH26, DB8500_PIN_AF24, DB8500_PIN_AF25,
462	DB8500_PIN_AE23, DB8500_PIN_AF23, DB8500_PIN_AG23, DB8500_PIN_AG24,
463	DB8500_PIN_AJ23 };
464/* MC1 has only 4 data pins, designed for SD or SDIO exclusively */
465static const unsigned mc1_a_1_pins[] = { DB8500_PIN_AH16, DB8500_PIN_AG15,
466	DB8500_PIN_AJ15, DB8500_PIN_AG14, DB8500_PIN_AF13, DB8500_PIN_AG13,
467	DB8500_PIN_AH15 };
468static const unsigned mc1_a_2_pins[] = { DB8500_PIN_AH16, DB8500_PIN_AJ15,
469	DB8500_PIN_AG14, DB8500_PIN_AF13, DB8500_PIN_AG13, DB8500_PIN_AH15 };
470static const unsigned mc1dir_a_1_pins[] = { DB8500_PIN_AH13, DB8500_PIN_AG12,
471	DB8500_PIN_AH12, DB8500_PIN_AH11 };
472static const unsigned hsir_a_1_pins[] = { DB8500_PIN_AG10, DB8500_PIN_AH10,
473	DB8500_PIN_AJ11 };
474static const unsigned hsit_a_1_pins[] = { DB8500_PIN_AJ9, DB8500_PIN_AH9,
475	DB8500_PIN_AG9, DB8500_PIN_AG8, DB8500_PIN_AF8 };
476static const unsigned hsit_a_2_pins[] = { DB8500_PIN_AJ9, DB8500_PIN_AH9,
477	DB8500_PIN_AG9, DB8500_PIN_AG8 };
478static const unsigned clkout1_a_1_pins[] = { DB8500_PIN_AH7 };
479static const unsigned clkout1_a_2_pins[] = { DB8500_PIN_AG7 };
480static const unsigned clkout2_a_1_pins[] = { DB8500_PIN_AJ6 };
481static const unsigned clkout2_a_2_pins[] = { DB8500_PIN_AF7 };
482static const unsigned usb_a_1_pins[] = { DB8500_PIN_AF28, DB8500_PIN_AE29,
483	DB8500_PIN_AD29, DB8500_PIN_AC29, DB8500_PIN_AD28, DB8500_PIN_AD26,
484	DB8500_PIN_AE26, DB8500_PIN_AG29, DB8500_PIN_AE27, DB8500_PIN_AD27,
485	DB8500_PIN_AC28, DB8500_PIN_AC27 };
486
487/* Altfunction B column */
488static const unsigned trig_b_1_pins[] = { DB8500_PIN_AJ5, DB8500_PIN_AJ3 };
489static const unsigned i2c4_b_1_pins[] = { DB8500_PIN_AH6, DB8500_PIN_AG6 };
490static const unsigned i2c1_b_1_pins[] = { DB8500_PIN_AF6, DB8500_PIN_AG5 };
491static const unsigned i2c2_b_1_pins[] = { DB8500_PIN_AD5, DB8500_PIN_AE4 };
492static const unsigned i2c2_b_2_pins[] = { DB8500_PIN_AF5, DB8500_PIN_AG4 };
493static const unsigned msp0txrx_b_1_pins[] = { DB8500_PIN_AC4, DB8500_PIN_AC3 };
494static const unsigned i2c1_b_2_pins[] = { DB8500_PIN_AD3, DB8500_PIN_AD4 };
495/* Just RX and TX for UART2 */
496static const unsigned u2rxtx_b_1_pins[] = { DB8500_PIN_AC2, DB8500_PIN_AC1 };
497static const unsigned uartmodtx_b_1_pins[] = { DB8500_PIN_AB4 };
498static const unsigned msp0sck_b_1_pins[] = { DB8500_PIN_AB3 };
499static const unsigned uartmodrx_b_1_pins[] = { DB8500_PIN_AA3 };
500static const unsigned stmmod_b_1_pins[] = { DB8500_PIN_AA4, DB8500_PIN_Y4,
501	DB8500_PIN_Y2, DB8500_PIN_AA2, DB8500_PIN_AA1 };
502static const unsigned uartmodrx_b_2_pins[] = { DB8500_PIN_AB2 };
503static const unsigned spi3_b_1_pins[] = { DB8500_PIN_W2, DB8500_PIN_W3,
504					  DB8500_PIN_V3, DB8500_PIN_V2 };
505static const unsigned msp1txrx_b_1_pins[] = { DB8500_PIN_AF2, DB8500_PIN_AG2 };
506static const unsigned kp_b_1_pins[] = { DB8500_PIN_F3, DB8500_PIN_F1,
507	DB8500_PIN_G3, DB8500_PIN_G2, DB8500_PIN_E1, DB8500_PIN_E2,
508	DB8500_PIN_G5, DB8500_PIN_G4, DB8500_PIN_H4, DB8500_PIN_H3,
509	DB8500_PIN_J3, DB8500_PIN_H2, DB8500_PIN_J2, DB8500_PIN_H1,
510	DB8500_PIN_F4, DB8500_PIN_E3, DB8500_PIN_E4, DB8500_PIN_D2,
511	DB8500_PIN_C1, DB8500_PIN_D3, DB8500_PIN_C2, DB8500_PIN_D5 };
512static const unsigned kp_b_2_pins[] = { DB8500_PIN_F3, DB8500_PIN_F1,
513	DB8500_PIN_G3, DB8500_PIN_G2, DB8500_PIN_F4, DB8500_PIN_E3};
514static const unsigned sm_b_1_pins[] = { DB8500_PIN_C6, DB8500_PIN_B3,
515	DB8500_PIN_C4, DB8500_PIN_E6, DB8500_PIN_A3, DB8500_PIN_B6,
516	DB8500_PIN_D6, DB8500_PIN_B7, DB8500_PIN_D7, DB8500_PIN_D8,
517	DB8500_PIN_D9, DB8500_PIN_A5, DB8500_PIN_B4, DB8500_PIN_C8,
518	DB8500_PIN_A12, DB8500_PIN_C10, DB8500_PIN_B10, DB8500_PIN_B9,
519	DB8500_PIN_A9, DB8500_PIN_C7, DB8500_PIN_A7, DB8500_PIN_C5,
520	DB8500_PIN_C9 };
521/* This chip select pin can be "ps0" in alt C so have it separately */
522static const unsigned smcs0_b_1_pins[] = { DB8500_PIN_E8 };
523/* This chip select pin can be "ps1" in alt C so have it separately */
524static const unsigned smcs1_b_1_pins[] = { DB8500_PIN_B14 };
525static const unsigned ipgpio7_b_1_pins[] = { DB8500_PIN_B11 };
526static const unsigned ipgpio2_b_1_pins[] = { DB8500_PIN_C12 };
527static const unsigned ipgpio3_b_1_pins[] = { DB8500_PIN_C11 };
528static const unsigned lcdaclk_b_1_pins[] = { DB8500_PIN_C14 };
529static const unsigned lcda_b_1_pins[] = { DB8500_PIN_D22,
530	DB8500_PIN_C23, DB8500_PIN_D23 };
531static const unsigned lcd_b_1_pins[] = { DB8500_PIN_D17, DB8500_PIN_D16,
532	DB8500_PIN_B17, DB8500_PIN_C16, DB8500_PIN_C19, DB8500_PIN_C17,
533	DB8500_PIN_A18, DB8500_PIN_C18, DB8500_PIN_B19, DB8500_PIN_B20,
534	DB8500_PIN_D21, DB8500_PIN_D20, DB8500_PIN_C20, DB8500_PIN_B21,
535	DB8500_PIN_C21, DB8500_PIN_A22, DB8500_PIN_B24, DB8500_PIN_C22 };
536static const unsigned ddrtrig_b_1_pins[] = { DB8500_PIN_AJ27 };
537static const unsigned pwl_b_1_pins[] = { DB8500_PIN_AF25 };
538static const unsigned spi1_b_1_pins[] = { DB8500_PIN_AG15, DB8500_PIN_AF13,
539					  DB8500_PIN_AG13, DB8500_PIN_AH15 };
540static const unsigned mc3_b_1_pins[] = { DB8500_PIN_AH13, DB8500_PIN_AG12,
541	DB8500_PIN_AH12, DB8500_PIN_AH11, DB8500_PIN_AG10, DB8500_PIN_AH10,
542	DB8500_PIN_AJ11, DB8500_PIN_AJ9, DB8500_PIN_AH9, DB8500_PIN_AG9,
543	DB8500_PIN_AG8 };
544static const unsigned pwl_b_2_pins[] = { DB8500_PIN_AF8 };
545static const unsigned pwl_b_3_pins[] = { DB8500_PIN_AG7 };
546static const unsigned pwl_b_4_pins[] = { DB8500_PIN_AF7 };
547
548/* Altfunction C column */
549static const unsigned ipjtag_c_1_pins[] = { DB8500_PIN_AJ5, DB8500_PIN_AJ3,
550	DB8500_PIN_AH4, DB8500_PIN_AH3, DB8500_PIN_AH6 };
551static const unsigned ipgpio6_c_1_pins[] = { DB8500_PIN_AG6 };
552static const unsigned ipgpio0_c_1_pins[] = { DB8500_PIN_AF6 };
553static const unsigned ipgpio1_c_1_pins[] = { DB8500_PIN_AG5 };
554static const unsigned ipgpio3_c_1_pins[] = { DB8500_PIN_AF5 };
555static const unsigned ipgpio2_c_1_pins[] = { DB8500_PIN_AG4 };
556static const unsigned slim0_c_1_pins[] = { DB8500_PIN_AD3, DB8500_PIN_AD4 };
557/* Optional 4-bit Memory Stick interface */
558static const unsigned ms_c_1_pins[] = { DB8500_PIN_AC2, DB8500_PIN_AC1,
559	DB8500_PIN_AB3, DB8500_PIN_AA3, DB8500_PIN_AA4, DB8500_PIN_AB2,
560	DB8500_PIN_Y4, DB8500_PIN_Y2, DB8500_PIN_AA2, DB8500_PIN_AA1 };
561static const unsigned iptrigout_c_1_pins[] = { DB8500_PIN_AB4 };
562static const unsigned u2rxtx_c_1_pins[] = { DB8500_PIN_W2, DB8500_PIN_W3 };
563static const unsigned u2ctsrts_c_1_pins[] = { DB8500_PIN_V3, DB8500_PIN_V2 };
564static const unsigned u0_c_1_pins[] = { DB8500_PIN_AF2, DB8500_PIN_AE1,
565					DB8500_PIN_AE2, DB8500_PIN_AG2 };
566static const unsigned ipgpio4_c_1_pins[] = { DB8500_PIN_F3 };
567static const unsigned ipgpio5_c_1_pins[] = { DB8500_PIN_F1 };
568static const unsigned ipgpio6_c_2_pins[] = { DB8500_PIN_G3 };
569static const unsigned ipgpio7_c_1_pins[] = { DB8500_PIN_G2 };
570static const unsigned smcleale_c_1_pins[] = { DB8500_PIN_E1, DB8500_PIN_E2 };
571static const unsigned stmape_c_1_pins[] = { DB8500_PIN_G5, DB8500_PIN_G4,
572	DB8500_PIN_H4, DB8500_PIN_H3, DB8500_PIN_J3 };
573static const unsigned u2rxtx_c_2_pins[] = { DB8500_PIN_H2, DB8500_PIN_J2 };
574static const unsigned ipgpio2_c_2_pins[] = { DB8500_PIN_F4 };
575static const unsigned ipgpio3_c_2_pins[] = { DB8500_PIN_E3 };
576static const unsigned ipgpio4_c_2_pins[] = { DB8500_PIN_E4 };
577static const unsigned ipgpio5_c_2_pins[] = { DB8500_PIN_D2 };
578static const unsigned mc5_c_1_pins[] = { DB8500_PIN_C6, DB8500_PIN_B3,
579	DB8500_PIN_C4, DB8500_PIN_E6, DB8500_PIN_A3, DB8500_PIN_B6,
580	DB8500_PIN_D6, DB8500_PIN_B7, DB8500_PIN_D7, DB8500_PIN_D8,
581	DB8500_PIN_D9 };
582static const unsigned mc2rstn_c_1_pins[] = { DB8500_PIN_C8 };
583static const unsigned kp_c_1_pins[] = { DB8500_PIN_C9, DB8500_PIN_B11,
584	DB8500_PIN_C12, DB8500_PIN_C11, DB8500_PIN_D17, DB8500_PIN_D16,
585	DB8500_PIN_C23, DB8500_PIN_D23 };
586static const unsigned smps0_c_1_pins[] = { DB8500_PIN_E8 };
587static const unsigned smps1_c_1_pins[] = { DB8500_PIN_B14 };
588static const unsigned u2rxtx_c_3_pins[] = { DB8500_PIN_B17, DB8500_PIN_C16 };
589static const unsigned stmape_c_2_pins[] = { DB8500_PIN_C19, DB8500_PIN_C17,
590	DB8500_PIN_A18, DB8500_PIN_C18, DB8500_PIN_B19 };
591static const unsigned uartmodrx_c_1_pins[] = { DB8500_PIN_D21 };
592static const unsigned uartmodtx_c_1_pins[] = { DB8500_PIN_D20 };
593static const unsigned stmmod_c_1_pins[] = { DB8500_PIN_C20, DB8500_PIN_B21,
594	DB8500_PIN_C21, DB8500_PIN_A22, DB8500_PIN_B24 };
595static const unsigned usbsim_c_1_pins[] = { DB8500_PIN_D22 };
596static const unsigned mc4rstn_c_1_pins[] = { DB8500_PIN_AF25 };
597static const unsigned clkout1_c_1_pins[] = { DB8500_PIN_AH13 };
598static const unsigned clkout2_c_1_pins[] = { DB8500_PIN_AH12 };
599static const unsigned i2c3_c_1_pins[] = { DB8500_PIN_AG12, DB8500_PIN_AH11 };
600static const unsigned spi0_c_1_pins[] = { DB8500_PIN_AH10, DB8500_PIN_AH9,
601					  DB8500_PIN_AG9, DB8500_PIN_AG8 };
602static const unsigned usbsim_c_2_pins[] = { DB8500_PIN_AF8 };
603static const unsigned i2c3_c_2_pins[] = { DB8500_PIN_AG7, DB8500_PIN_AF7 };
604
605/* Other C1 column */
606static const unsigned u2rx_oc1_1_pins[] = { DB8500_PIN_AB2 };
607static const unsigned stmape_oc1_1_pins[] = { DB8500_PIN_AA4, DB8500_PIN_Y4,
608	DB8500_PIN_Y2, DB8500_PIN_AA2, DB8500_PIN_AA1 };
609static const unsigned remap0_oc1_1_pins[] = { DB8500_PIN_E1 };
610static const unsigned remap1_oc1_1_pins[] = { DB8500_PIN_E2 };
611static const unsigned ptma9_oc1_1_pins[] = { DB8500_PIN_G5, DB8500_PIN_G4,
612	DB8500_PIN_H4, DB8500_PIN_H3, DB8500_PIN_J3, DB8500_PIN_H2,
613	DB8500_PIN_J2, DB8500_PIN_H1 };
614static const unsigned kp_oc1_1_pins[] = { DB8500_PIN_C6, DB8500_PIN_B3,
615	DB8500_PIN_C4, DB8500_PIN_E6, DB8500_PIN_A3, DB8500_PIN_B6,
616	DB8500_PIN_D6, DB8500_PIN_B7 };
617static const unsigned rf_oc1_1_pins[] = { DB8500_PIN_D8, DB8500_PIN_D9 };
618static const unsigned hxclk_oc1_1_pins[] = { DB8500_PIN_D16 };
619static const unsigned uartmodrx_oc1_1_pins[] = { DB8500_PIN_B17 };
620static const unsigned uartmodtx_oc1_1_pins[] = { DB8500_PIN_C16 };
621static const unsigned stmmod_oc1_1_pins[] = { DB8500_PIN_C19, DB8500_PIN_C17,
622	DB8500_PIN_A18, DB8500_PIN_C18, DB8500_PIN_B19 };
623static const unsigned hxgpio_oc1_1_pins[] = { DB8500_PIN_D21, DB8500_PIN_D20,
624	DB8500_PIN_C20, DB8500_PIN_B21, DB8500_PIN_C21, DB8500_PIN_A22,
625	DB8500_PIN_B24, DB8500_PIN_C22 };
626static const unsigned rf_oc1_2_pins[] = { DB8500_PIN_C23, DB8500_PIN_D23 };
627static const unsigned spi2_oc1_1_pins[] = { DB8500_PIN_AH13, DB8500_PIN_AG12,
628	DB8500_PIN_AH12, DB8500_PIN_AH11 };
629static const unsigned spi2_oc1_2_pins[] = { DB8500_PIN_AH13, DB8500_PIN_AH12,
630	DB8500_PIN_AH11 };
631
632/* Other C2 column */
633static const unsigned sbag_oc2_1_pins[] = { DB8500_PIN_AA4, DB8500_PIN_AB2,
634	DB8500_PIN_Y4, DB8500_PIN_Y2, DB8500_PIN_AA2, DB8500_PIN_AA1 };
635static const unsigned etmr4_oc2_1_pins[] = { DB8500_PIN_G5, DB8500_PIN_G4,
636	DB8500_PIN_H4, DB8500_PIN_H3, DB8500_PIN_J3, DB8500_PIN_H2,
637	DB8500_PIN_J2, DB8500_PIN_H1 };
638static const unsigned ptma9_oc2_1_pins[] = { DB8500_PIN_D17, DB8500_PIN_D16,
639	DB8500_PIN_B17, DB8500_PIN_C16, DB8500_PIN_C19, DB8500_PIN_C17,
640	DB8500_PIN_A18, DB8500_PIN_C18, DB8500_PIN_B19, DB8500_PIN_B20,
641	DB8500_PIN_D21, DB8500_PIN_D20,	DB8500_PIN_C20, DB8500_PIN_B21,
642	DB8500_PIN_C21, DB8500_PIN_A22, DB8500_PIN_B24, DB8500_PIN_C22 };
643
644/* Other C3 column */
645static const unsigned stmmod_oc3_1_pins[] = { DB8500_PIN_AB2, DB8500_PIN_W2,
646	DB8500_PIN_W3, DB8500_PIN_V3, DB8500_PIN_V2 };
647static const unsigned stmmod_oc3_2_pins[] = { DB8500_PIN_G5, DB8500_PIN_G4,
648	DB8500_PIN_H4, DB8500_PIN_H3, DB8500_PIN_J3 };
649static const unsigned uartmodrx_oc3_1_pins[] = { DB8500_PIN_H2 };
650static const unsigned uartmodtx_oc3_1_pins[] = { DB8500_PIN_J2 };
651static const unsigned etmr4_oc3_1_pins[] = { DB8500_PIN_D17, DB8500_PIN_D16,
652	DB8500_PIN_B17, DB8500_PIN_C16, DB8500_PIN_C19, DB8500_PIN_C17,
653	DB8500_PIN_A18, DB8500_PIN_C18, DB8500_PIN_B19, DB8500_PIN_B20,
654	DB8500_PIN_D21, DB8500_PIN_D20,	DB8500_PIN_C20, DB8500_PIN_B21,
655	DB8500_PIN_C21, DB8500_PIN_A22, DB8500_PIN_B24, DB8500_PIN_C22 };
656
657/* Other C4 column */
658static const unsigned sbag_oc4_1_pins[] = { DB8500_PIN_G5, DB8500_PIN_G4,
659	DB8500_PIN_H4, DB8500_PIN_H3, DB8500_PIN_J3, DB8500_PIN_H1 };
660static const unsigned hwobs_oc4_1_pins[] = { DB8500_PIN_D17, DB8500_PIN_D16,
661	DB8500_PIN_B17, DB8500_PIN_C16, DB8500_PIN_C19, DB8500_PIN_C17,
662	DB8500_PIN_A18, DB8500_PIN_C18, DB8500_PIN_B19, DB8500_PIN_B20,
663	DB8500_PIN_D21, DB8500_PIN_D20,	DB8500_PIN_C20, DB8500_PIN_B21,
664	DB8500_PIN_C21, DB8500_PIN_A22, DB8500_PIN_B24, DB8500_PIN_C22 };
665
666#define DB8500_PIN_GROUP(a, b) { .name = #a, .pins = a##_pins,		\
667			.npins = ARRAY_SIZE(a##_pins), .altsetting = b }
668
669static const struct nmk_pingroup nmk_db8500_groups[] = {
670	/* Altfunction A column */
671	DB8500_PIN_GROUP(u0_a_1, NMK_GPIO_ALT_A),
672	DB8500_PIN_GROUP(u1rxtx_a_1, NMK_GPIO_ALT_A),
673	DB8500_PIN_GROUP(u1ctsrts_a_1, NMK_GPIO_ALT_A),
674	DB8500_PIN_GROUP(ipi2c_a_1, NMK_GPIO_ALT_A),
675	DB8500_PIN_GROUP(ipi2c_a_2, NMK_GPIO_ALT_A),
676	DB8500_PIN_GROUP(msp0txrx_a_1, NMK_GPIO_ALT_A),
677	DB8500_PIN_GROUP(msp0tfstck_a_1, NMK_GPIO_ALT_A),
678	DB8500_PIN_GROUP(msp0rfsrck_a_1, NMK_GPIO_ALT_A),
679	DB8500_PIN_GROUP(mc0_a_1, NMK_GPIO_ALT_A),
680	DB8500_PIN_GROUP(mc0_dat47_a_1, NMK_GPIO_ALT_A),
681	DB8500_PIN_GROUP(mc0dat31dir_a_1, NMK_GPIO_ALT_A),
682	DB8500_PIN_GROUP(msp1txrx_a_1, NMK_GPIO_ALT_A),
683	DB8500_PIN_GROUP(msp1_a_1, NMK_GPIO_ALT_A),
684	DB8500_PIN_GROUP(lcdb_a_1, NMK_GPIO_ALT_A),
685	DB8500_PIN_GROUP(lcdvsi0_a_1, NMK_GPIO_ALT_A),
686	DB8500_PIN_GROUP(lcdvsi1_a_1, NMK_GPIO_ALT_A),
687	DB8500_PIN_GROUP(lcd_d0_d7_a_1, NMK_GPIO_ALT_A),
688	DB8500_PIN_GROUP(lcd_d8_d11_a_1, NMK_GPIO_ALT_A),
689	DB8500_PIN_GROUP(lcd_d12_d23_a_1, NMK_GPIO_ALT_A),
690	DB8500_PIN_GROUP(kp_a_1, NMK_GPIO_ALT_A),
691	DB8500_PIN_GROUP(mc2_a_1, NMK_GPIO_ALT_A),
692	DB8500_PIN_GROUP(ssp1_a_1, NMK_GPIO_ALT_A),
693	DB8500_PIN_GROUP(ssp0_a_1, NMK_GPIO_ALT_A),
694	DB8500_PIN_GROUP(i2c0_a_1, NMK_GPIO_ALT_A),
695	DB8500_PIN_GROUP(ipgpio0_a_1, NMK_GPIO_ALT_A),
696	DB8500_PIN_GROUP(ipgpio1_a_1, NMK_GPIO_ALT_A),
697	DB8500_PIN_GROUP(kp_a_2, NMK_GPIO_ALT_A),
698	DB8500_PIN_GROUP(msp2sck_a_1, NMK_GPIO_ALT_A),
699	DB8500_PIN_GROUP(msp2_a_1, NMK_GPIO_ALT_A),
700	DB8500_PIN_GROUP(mc4_a_1, NMK_GPIO_ALT_A),
701	DB8500_PIN_GROUP(mc1_a_1, NMK_GPIO_ALT_A),
702	DB8500_PIN_GROUP(mc1_a_2, NMK_GPIO_ALT_A),
703	DB8500_PIN_GROUP(hsir_a_1, NMK_GPIO_ALT_A),
704	DB8500_PIN_GROUP(hsit_a_1, NMK_GPIO_ALT_A),
705	DB8500_PIN_GROUP(hsit_a_2, NMK_GPIO_ALT_A),
706	DB8500_PIN_GROUP(clkout1_a_1, NMK_GPIO_ALT_A),
707	DB8500_PIN_GROUP(clkout1_a_2, NMK_GPIO_ALT_A),
708	DB8500_PIN_GROUP(clkout2_a_1, NMK_GPIO_ALT_A),
709	DB8500_PIN_GROUP(clkout2_a_2, NMK_GPIO_ALT_A),
710	DB8500_PIN_GROUP(usb_a_1, NMK_GPIO_ALT_A),
711	/* Altfunction B column */
712	DB8500_PIN_GROUP(trig_b_1, NMK_GPIO_ALT_B),
713	DB8500_PIN_GROUP(i2c4_b_1, NMK_GPIO_ALT_B),
714	DB8500_PIN_GROUP(i2c1_b_1, NMK_GPIO_ALT_B),
715	DB8500_PIN_GROUP(i2c2_b_1, NMK_GPIO_ALT_B),
716	DB8500_PIN_GROUP(i2c2_b_2, NMK_GPIO_ALT_B),
717	DB8500_PIN_GROUP(msp0txrx_b_1, NMK_GPIO_ALT_B),
718	DB8500_PIN_GROUP(i2c1_b_2, NMK_GPIO_ALT_B),
719	DB8500_PIN_GROUP(u2rxtx_b_1, NMK_GPIO_ALT_B),
720	DB8500_PIN_GROUP(uartmodtx_b_1, NMK_GPIO_ALT_B),
721	DB8500_PIN_GROUP(msp0sck_b_1, NMK_GPIO_ALT_B),
722	DB8500_PIN_GROUP(uartmodrx_b_1, NMK_GPIO_ALT_B),
723	DB8500_PIN_GROUP(stmmod_b_1, NMK_GPIO_ALT_B),
724	DB8500_PIN_GROUP(uartmodrx_b_2, NMK_GPIO_ALT_B),
725	DB8500_PIN_GROUP(spi3_b_1, NMK_GPIO_ALT_B),
726	DB8500_PIN_GROUP(msp1txrx_b_1, NMK_GPIO_ALT_B),
727	DB8500_PIN_GROUP(kp_b_1, NMK_GPIO_ALT_B),
728	DB8500_PIN_GROUP(kp_b_2, NMK_GPIO_ALT_B),
729	DB8500_PIN_GROUP(sm_b_1, NMK_GPIO_ALT_B),
730	DB8500_PIN_GROUP(smcs0_b_1, NMK_GPIO_ALT_B),
731	DB8500_PIN_GROUP(smcs1_b_1, NMK_GPIO_ALT_B),
732	DB8500_PIN_GROUP(ipgpio7_b_1, NMK_GPIO_ALT_B),
733	DB8500_PIN_GROUP(ipgpio2_b_1, NMK_GPIO_ALT_B),
734	DB8500_PIN_GROUP(ipgpio3_b_1, NMK_GPIO_ALT_B),
735	DB8500_PIN_GROUP(lcdaclk_b_1, NMK_GPIO_ALT_B),
736	DB8500_PIN_GROUP(lcda_b_1, NMK_GPIO_ALT_B),
737	DB8500_PIN_GROUP(lcd_b_1, NMK_GPIO_ALT_B),
738	DB8500_PIN_GROUP(ddrtrig_b_1, NMK_GPIO_ALT_B),
739	DB8500_PIN_GROUP(pwl_b_1, NMK_GPIO_ALT_B),
740	DB8500_PIN_GROUP(spi1_b_1, NMK_GPIO_ALT_B),
741	DB8500_PIN_GROUP(mc3_b_1, NMK_GPIO_ALT_B),
742	DB8500_PIN_GROUP(pwl_b_2, NMK_GPIO_ALT_B),
743	DB8500_PIN_GROUP(pwl_b_3, NMK_GPIO_ALT_B),
744	DB8500_PIN_GROUP(pwl_b_4, NMK_GPIO_ALT_B),
745	/* Altfunction C column */
746	DB8500_PIN_GROUP(ipjtag_c_1, NMK_GPIO_ALT_C),
747	DB8500_PIN_GROUP(ipgpio6_c_1, NMK_GPIO_ALT_C),
748	DB8500_PIN_GROUP(ipgpio0_c_1, NMK_GPIO_ALT_C),
749	DB8500_PIN_GROUP(ipgpio1_c_1, NMK_GPIO_ALT_C),
750	DB8500_PIN_GROUP(ipgpio3_c_1, NMK_GPIO_ALT_C),
751	DB8500_PIN_GROUP(ipgpio2_c_1, NMK_GPIO_ALT_C),
752	DB8500_PIN_GROUP(slim0_c_1, NMK_GPIO_ALT_C),
753	DB8500_PIN_GROUP(ms_c_1, NMK_GPIO_ALT_C),
754	DB8500_PIN_GROUP(iptrigout_c_1, NMK_GPIO_ALT_C),
755	DB8500_PIN_GROUP(u2rxtx_c_1, NMK_GPIO_ALT_C),
756	DB8500_PIN_GROUP(u2ctsrts_c_1, NMK_GPIO_ALT_C),
757	DB8500_PIN_GROUP(u0_c_1, NMK_GPIO_ALT_C),
758	DB8500_PIN_GROUP(ipgpio4_c_1, NMK_GPIO_ALT_C),
759	DB8500_PIN_GROUP(ipgpio5_c_1, NMK_GPIO_ALT_C),
760	DB8500_PIN_GROUP(ipgpio6_c_1, NMK_GPIO_ALT_C),
761	DB8500_PIN_GROUP(ipgpio7_c_1, NMK_GPIO_ALT_C),
762	DB8500_PIN_GROUP(smcleale_c_1, NMK_GPIO_ALT_C),
763	DB8500_PIN_GROUP(stmape_c_1, NMK_GPIO_ALT_C),
764	DB8500_PIN_GROUP(u2rxtx_c_2, NMK_GPIO_ALT_C),
765	DB8500_PIN_GROUP(ipgpio2_c_2, NMK_GPIO_ALT_C),
766	DB8500_PIN_GROUP(ipgpio3_c_2, NMK_GPIO_ALT_C),
767	DB8500_PIN_GROUP(ipgpio4_c_2, NMK_GPIO_ALT_C),
768	DB8500_PIN_GROUP(ipgpio5_c_2, NMK_GPIO_ALT_C),
769	DB8500_PIN_GROUP(mc5_c_1, NMK_GPIO_ALT_C),
770	DB8500_PIN_GROUP(mc2rstn_c_1, NMK_GPIO_ALT_C),
771	DB8500_PIN_GROUP(kp_c_1, NMK_GPIO_ALT_C),
772	DB8500_PIN_GROUP(smps0_c_1, NMK_GPIO_ALT_C),
773	DB8500_PIN_GROUP(smps1_c_1, NMK_GPIO_ALT_C),
774	DB8500_PIN_GROUP(u2rxtx_c_3, NMK_GPIO_ALT_C),
775	DB8500_PIN_GROUP(stmape_c_2, NMK_GPIO_ALT_C),
776	DB8500_PIN_GROUP(uartmodrx_c_1, NMK_GPIO_ALT_C),
777	DB8500_PIN_GROUP(uartmodtx_c_1, NMK_GPIO_ALT_C),
778	DB8500_PIN_GROUP(stmmod_c_1, NMK_GPIO_ALT_C),
779	DB8500_PIN_GROUP(usbsim_c_1, NMK_GPIO_ALT_C),
780	DB8500_PIN_GROUP(mc4rstn_c_1, NMK_GPIO_ALT_C),
781	DB8500_PIN_GROUP(clkout1_c_1, NMK_GPIO_ALT_C),
782	DB8500_PIN_GROUP(clkout2_c_1, NMK_GPIO_ALT_C),
783	DB8500_PIN_GROUP(i2c3_c_1, NMK_GPIO_ALT_C),
784	DB8500_PIN_GROUP(spi0_c_1, NMK_GPIO_ALT_C),
785	DB8500_PIN_GROUP(usbsim_c_2, NMK_GPIO_ALT_C),
786	DB8500_PIN_GROUP(i2c3_c_2, NMK_GPIO_ALT_C),
787	/* Other alt C1 column */
788	DB8500_PIN_GROUP(u2rx_oc1_1, NMK_GPIO_ALT_C1),
789	DB8500_PIN_GROUP(stmape_oc1_1, NMK_GPIO_ALT_C1),
790	DB8500_PIN_GROUP(remap0_oc1_1, NMK_GPIO_ALT_C1),
791	DB8500_PIN_GROUP(remap1_oc1_1, NMK_GPIO_ALT_C1),
792	DB8500_PIN_GROUP(ptma9_oc1_1, NMK_GPIO_ALT_C1),
793	DB8500_PIN_GROUP(kp_oc1_1, NMK_GPIO_ALT_C1),
794	DB8500_PIN_GROUP(rf_oc1_1, NMK_GPIO_ALT_C1),
795	DB8500_PIN_GROUP(hxclk_oc1_1, NMK_GPIO_ALT_C1),
796	DB8500_PIN_GROUP(uartmodrx_oc1_1, NMK_GPIO_ALT_C1),
797	DB8500_PIN_GROUP(uartmodtx_oc1_1, NMK_GPIO_ALT_C1),
798	DB8500_PIN_GROUP(stmmod_oc1_1, NMK_GPIO_ALT_C1),
799	DB8500_PIN_GROUP(hxgpio_oc1_1, NMK_GPIO_ALT_C1),
800	DB8500_PIN_GROUP(rf_oc1_2, NMK_GPIO_ALT_C1),
801	DB8500_PIN_GROUP(spi2_oc1_1, NMK_GPIO_ALT_C1),
802	DB8500_PIN_GROUP(spi2_oc1_2, NMK_GPIO_ALT_C1),
803	/* Other alt C2 column */
804	DB8500_PIN_GROUP(sbag_oc2_1, NMK_GPIO_ALT_C2),
805	DB8500_PIN_GROUP(etmr4_oc2_1, NMK_GPIO_ALT_C2),
806	DB8500_PIN_GROUP(ptma9_oc2_1, NMK_GPIO_ALT_C2),
807	/* Other alt C3 column */
808	DB8500_PIN_GROUP(stmmod_oc3_1, NMK_GPIO_ALT_C3),
809	DB8500_PIN_GROUP(stmmod_oc3_2, NMK_GPIO_ALT_C3),
810	DB8500_PIN_GROUP(uartmodrx_oc3_1, NMK_GPIO_ALT_C3),
811	DB8500_PIN_GROUP(uartmodtx_oc3_1, NMK_GPIO_ALT_C3),
812	DB8500_PIN_GROUP(etmr4_oc3_1, NMK_GPIO_ALT_C3),
813	/* Other alt C4 column */
814	DB8500_PIN_GROUP(sbag_oc4_1, NMK_GPIO_ALT_C4),
815	DB8500_PIN_GROUP(hwobs_oc4_1, NMK_GPIO_ALT_C4),
816};
817
818/* We use this macro to define the groups applicable to a function */
819#define DB8500_FUNC_GROUPS(a, b...)	   \
820static const char * const a##_groups[] = { b };
821
822DB8500_FUNC_GROUPS(u0, "u0_a_1", "u0_c_1");
823DB8500_FUNC_GROUPS(u1, "u1rxtx_a_1", "u1ctsrts_a_1");
824/*
825 * UART2 can be muxed out with just RX/TX in four places, CTS+RTS is however
826 * only available on two pins in alternative function C
827 */
828DB8500_FUNC_GROUPS(u2, "u2rxtx_b_1", "u2rxtx_c_1", "u2ctsrts_c_1",
829		   "u2rxtx_c_2", "u2rxtx_c_3", "u2rx_oc1_1");
830DB8500_FUNC_GROUPS(ipi2c, "ipi2c_a_1", "ipi2c_a_2");
831/*
832 * MSP0 can only be on a certain set of pins, but the TX/RX pins can be
833 * switched around by selecting the altfunction A or B. The SCK pin is
834 * only available on the altfunction B.
835 */
836DB8500_FUNC_GROUPS(msp0, "msp0txrx_a_1", "msp0tfstck_a_1", "msp0rfstck_a_1",
837		   "msp0txrx_b_1", "msp0sck_b_1");
838DB8500_FUNC_GROUPS(mc0, "mc0_a_1", "mc0_dat47_a_1", "mc0dat31dir_a_1");
839/* MSP0 can swap RX/TX like MSP0 but has no SCK pin available */
840DB8500_FUNC_GROUPS(msp1, "msp1txrx_a_1", "msp1_a_1", "msp1txrx_b_1");
841DB8500_FUNC_GROUPS(lcdb, "lcdb_a_1");
842DB8500_FUNC_GROUPS(lcd, "lcdvsi0_a_1", "lcdvsi1_a_1", "lcd_d0_d7_a_1",
843	"lcd_d8_d11_a_1", "lcd_d12_d23_a_1", "lcd_b_1");
844DB8500_FUNC_GROUPS(kp, "kp_a_1", "kp_a_2", "kp_b_1", "kp_b_2", "kp_c_1", "kp_oc1_1");
845DB8500_FUNC_GROUPS(mc2, "mc2_a_1", "mc2rstn_c_1");
846DB8500_FUNC_GROUPS(ssp1, "ssp1_a_1");
847DB8500_FUNC_GROUPS(ssp0, "ssp0_a_1");
848DB8500_FUNC_GROUPS(i2c0, "i2c0_a_1");
849/* The image processor has 8 GPIO pins that can be muxed out */
850DB8500_FUNC_GROUPS(ipgpio, "ipgpio0_a_1", "ipgpio1_a_1", "ipgpio7_b_1",
851	"ipgpio2_b_1", "ipgpio3_b_1", "ipgpio6_c_1", "ipgpio0_c_1",
852	"ipgpio1_c_1", "ipgpio3_c_1", "ipgpio2_c_1", "ipgpio4_c_1",
853	"ipgpio5_c_1", "ipgpio6_c_2", "ipgpio7_c_1", "ipgpio2_c_2",
854	"ipgpio3_c_2", "ipgpio4_c_2", "ipgpio5_c_2");
855/* MSP2 can not invert the RX/TX pins but has the optional SCK pin */
856DB8500_FUNC_GROUPS(msp2, "msp2sck_a_1", "msp2_a_1");
857DB8500_FUNC_GROUPS(mc4, "mc4_a_1", "mc4rstn_c_1");
858DB8500_FUNC_GROUPS(mc1, "mc1_a_1", "mc1_a_2", "mc1dir_a_1");
859DB8500_FUNC_GROUPS(hsi, "hsir_a_1", "hsit_a_1", "hsit_a_2");
860DB8500_FUNC_GROUPS(clkout, "clkout1_a_1", "clkout1_a_2", "clkout1_c_1",
861		"clkout2_a_1", "clkout2_a_2", "clkout2_c_1");
862DB8500_FUNC_GROUPS(usb, "usb_a_1");
863DB8500_FUNC_GROUPS(trig, "trig_b_1");
864DB8500_FUNC_GROUPS(i2c4, "i2c4_b_1");
865DB8500_FUNC_GROUPS(i2c1, "i2c1_b_1", "i2c1_b_2");
866DB8500_FUNC_GROUPS(i2c2, "i2c2_b_1", "i2c2_b_2");
867/*
868 * The modem UART can output its RX and TX pins in some different places,
869 * so select one of each.
870 */
871DB8500_FUNC_GROUPS(uartmod, "uartmodtx_b_1", "uartmodrx_b_1", "uartmodrx_b_2",
872		"uartmodrx_c_1", "uartmod_tx_c_1", "uartmodrx_oc1_1",
873		"uartmodtx_oc1_1", "uartmodrx_oc3_1", "uartmodtx_oc3_1");
874DB8500_FUNC_GROUPS(stmmod, "stmmod_b_1", "stmmod_c_1", "stmmod_oc1_1",
875		"stmmod_oc3_1", "stmmod_oc3_2");
876DB8500_FUNC_GROUPS(spi3, "spi3_b_1");
877/* Select between CS0 on alt B or PS1 on alt C */
878DB8500_FUNC_GROUPS(sm, "sm_b_1", "smcs0_b_1", "smcs1_b_1", "smcleale_c_1",
879		   "smps0_c_1", "smps1_c_1");
880DB8500_FUNC_GROUPS(lcda, "lcdaclk_b_1", "lcda_b_1");
881DB8500_FUNC_GROUPS(ddrtrig, "ddrtrig_b_1");
882DB8500_FUNC_GROUPS(pwl, "pwl_b_1", "pwl_b_2", "pwl_b_3", "pwl_b_4");
883DB8500_FUNC_GROUPS(spi1, "spi1_b_1");
884DB8500_FUNC_GROUPS(mc3, "mc3_b_1");
885DB8500_FUNC_GROUPS(ipjtag, "ipjtag_c_1");
886DB8500_FUNC_GROUPS(slim0, "slim0_c_1");
887DB8500_FUNC_GROUPS(ms, "ms_c_1");
888DB8500_FUNC_GROUPS(iptrigout, "iptrigout_c_1");
889DB8500_FUNC_GROUPS(stmape, "stmape_c_1", "stmape_c_2", "stmape_oc1_1");
890DB8500_FUNC_GROUPS(mc5, "mc5_c_1");
891DB8500_FUNC_GROUPS(usbsim, "usbsim_c_1", "usbsim_c_2");
892DB8500_FUNC_GROUPS(i2c3, "i2c3_c_1", "i2c3_c_2");
893DB8500_FUNC_GROUPS(spi0, "spi0_c_1");
894DB8500_FUNC_GROUPS(spi2, "spi2_oc1_1", "spi2_oc1_2");
895DB8500_FUNC_GROUPS(remap, "remap0_oc1_1", "remap1_oc1_1");
896DB8500_FUNC_GROUPS(sbag, "sbag_oc2_1", "sbag_oc4_1");
897DB8500_FUNC_GROUPS(ptm, "ptma9_oc1_1", "ptma9_oc2_1");
898DB8500_FUNC_GROUPS(rf, "rf_oc1_1", "rf_oc1_2");
899DB8500_FUNC_GROUPS(hx, "hxclk_oc1_1", "hxgpio_oc1_1");
900DB8500_FUNC_GROUPS(etm, "etmr4_oc2_1", "etmr4_oc3_1");
901DB8500_FUNC_GROUPS(hwobs, "hwobs_oc4_1");
902#define FUNCTION(fname)					\
903	{						\
904		.name = #fname,				\
905		.groups = fname##_groups,		\
906		.ngroups = ARRAY_SIZE(fname##_groups),	\
907	}
908
909static const struct nmk_function nmk_db8500_functions[] = {
910	FUNCTION(u0),
911	FUNCTION(u1),
912	FUNCTION(u2),
913	FUNCTION(ipi2c),
914	FUNCTION(msp0),
915	FUNCTION(mc0),
916	FUNCTION(msp1),
917	FUNCTION(lcdb),
918	FUNCTION(lcd),
919	FUNCTION(kp),
920	FUNCTION(mc2),
921	FUNCTION(ssp1),
922	FUNCTION(ssp0),
923	FUNCTION(i2c0),
924	FUNCTION(ipgpio),
925	FUNCTION(msp2),
926	FUNCTION(mc4),
927	FUNCTION(mc1),
928	FUNCTION(hsi),
929	FUNCTION(clkout),
930	FUNCTION(usb),
931	FUNCTION(trig),
932	FUNCTION(i2c4),
933	FUNCTION(i2c1),
934	FUNCTION(i2c2),
935	FUNCTION(uartmod),
936	FUNCTION(stmmod),
937	FUNCTION(spi3),
938	FUNCTION(sm),
939	FUNCTION(lcda),
940	FUNCTION(ddrtrig),
941	FUNCTION(pwl),
942	FUNCTION(spi1),
943	FUNCTION(mc3),
944	FUNCTION(ipjtag),
945	FUNCTION(slim0),
946	FUNCTION(ms),
947	FUNCTION(iptrigout),
948	FUNCTION(stmape),
949	FUNCTION(mc5),
950	FUNCTION(usbsim),
951	FUNCTION(i2c3),
952	FUNCTION(spi0),
953	FUNCTION(spi2),
954	FUNCTION(remap),
955	FUNCTION(ptm),
956	FUNCTION(rf),
957	FUNCTION(hx),
958	FUNCTION(etm),
959	FUNCTION(hwobs),
960};
961
962static const struct prcm_gpiocr_altcx_pin_desc db8500_altcx_pins[] = {
963	PRCM_GPIOCR_ALTCX(23,	true, PRCM_IDX_GPIOCR1, 9,	/* STMAPE_CLK_a */
964				true, PRCM_IDX_GPIOCR1, 7,	/* SBAG_CLK_a */
965				false, 0, 0,
966				false, 0, 0
967	),
968	PRCM_GPIOCR_ALTCX(24,	true, PRCM_IDX_GPIOCR1, 9,	/* STMAPE or U2_RXD ??? */
969				true, PRCM_IDX_GPIOCR1, 7,	/* SBAG_VAL_a */
970				true, PRCM_IDX_GPIOCR1, 10,	/* STM_MOD_CMD0 */
971				false, 0, 0
972	),
973	PRCM_GPIOCR_ALTCX(25,	true, PRCM_IDX_GPIOCR1, 9,	/* STMAPE_DAT_a[0] */
974				true, PRCM_IDX_GPIOCR1, 7,	/* SBAG_D_a[0] */
975				false, 0, 0,
976				false, 0, 0
977	),
978	PRCM_GPIOCR_ALTCX(26,	true, PRCM_IDX_GPIOCR1, 9,	/* STMAPE_DAT_a[1] */
979				true, PRCM_IDX_GPIOCR1, 7,	/* SBAG_D_a[1] */
980				false, 0, 0,
981				false, 0, 0
982	),
983	PRCM_GPIOCR_ALTCX(27,	true, PRCM_IDX_GPIOCR1, 9,	/* STMAPE_DAT_a[2] */
984				true, PRCM_IDX_GPIOCR1, 7,	/* SBAG_D_a[2] */
985				false, 0, 0,
986				false, 0, 0
987	),
988	PRCM_GPIOCR_ALTCX(28,	true, PRCM_IDX_GPIOCR1, 9,	/* STMAPE_DAT_a[3] */
989				true, PRCM_IDX_GPIOCR1, 7,	/* SBAG_D_a[3] */
990				false, 0, 0,
991				false, 0, 0
992	),
993	PRCM_GPIOCR_ALTCX(29,	false, 0, 0,
994				false, 0, 0,
995				true, PRCM_IDX_GPIOCR1, 10,	/* STM_MOD_CMD0 */
996				false, 0, 0
997	),
998	PRCM_GPIOCR_ALTCX(30,	false, 0, 0,
999				false, 0, 0,
1000				true, PRCM_IDX_GPIOCR1, 10,	/* STM_MOD_CMD0 */
1001				false, 0, 0
1002	),
1003	PRCM_GPIOCR_ALTCX(31,	false, 0, 0,
1004				false, 0, 0,
1005				true, PRCM_IDX_GPIOCR1, 10,	/* STM_MOD_CMD0 */
1006				false, 0, 0
1007	),
1008	PRCM_GPIOCR_ALTCX(32,	false, 0, 0,
1009				false, 0, 0,
1010				true, PRCM_IDX_GPIOCR1, 10,	/* STM_MOD_CMD0 */
1011				false, 0, 0
1012	),
1013	PRCM_GPIOCR_ALTCX(68,	true, PRCM_IDX_GPIOCR1, 18,	/* REMAP_SELECT_ON */
1014				false, 0, 0,
1015				false, 0, 0,
1016				false, 0, 0
1017	),
1018	PRCM_GPIOCR_ALTCX(69,	true, PRCM_IDX_GPIOCR1, 18,	/* REMAP_SELECT_ON */
1019				false, 0, 0,
1020				false, 0, 0,
1021				false, 0, 0
1022	),
1023	PRCM_GPIOCR_ALTCX(70,	true, PRCM_IDX_GPIOCR1, 5,	/* PTM_A9_D23 */
1024				true, PRCM_IDX_GPIOCR2, 2,	/* DBG_ETM_R4_CMD0 */
1025				true, PRCM_IDX_GPIOCR1, 11,	/* STM_MOD_CMD1 */
1026				true, PRCM_IDX_GPIOCR1, 8	/* SBAG_CLK */
1027	),
1028	PRCM_GPIOCR_ALTCX(71,	true, PRCM_IDX_GPIOCR1, 5,	/* PTM_A9_D22 */
1029				true, PRCM_IDX_GPIOCR2, 2,	/* DBG_ETM_R4_CMD0 */
1030				true, PRCM_IDX_GPIOCR1, 11,	/* STM_MOD_CMD1 */
1031				true, PRCM_IDX_GPIOCR1, 8	/* SBAG_D3 */
1032	),
1033	PRCM_GPIOCR_ALTCX(72,	true, PRCM_IDX_GPIOCR1, 5,	/* PTM_A9_D21 */
1034				true, PRCM_IDX_GPIOCR2, 2,	/* DBG_ETM_R4_CMD0 */
1035				true, PRCM_IDX_GPIOCR1, 11,	/* STM_MOD_CMD1 */
1036				true, PRCM_IDX_GPIOCR1, 8	/* SBAG_D2 */
1037	),
1038	PRCM_GPIOCR_ALTCX(73,	true, PRCM_IDX_GPIOCR1, 5,	/* PTM_A9_D20 */
1039				true, PRCM_IDX_GPIOCR2, 2,	/* DBG_ETM_R4_CMD0 */
1040				true, PRCM_IDX_GPIOCR1, 11,	/* STM_MOD_CMD1 */
1041				true, PRCM_IDX_GPIOCR1, 8	/* SBAG_D1 */
1042	),
1043	PRCM_GPIOCR_ALTCX(74,	true, PRCM_IDX_GPIOCR1, 5,	/* PTM_A9_D19 */
1044				true, PRCM_IDX_GPIOCR2, 2,	/* DBG_ETM_R4_CMD0 */
1045				true, PRCM_IDX_GPIOCR1, 11,	/* STM_MOD_CMD1 */
1046				true, PRCM_IDX_GPIOCR1, 8	/* SBAG_D0 */
1047	),
1048	PRCM_GPIOCR_ALTCX(75,	true, PRCM_IDX_GPIOCR1, 5,	/* PTM_A9_D18 */
1049				true, PRCM_IDX_GPIOCR2, 2,	/* DBG_ETM_R4_CMD0 */
1050				true, PRCM_IDX_GPIOCR1, 0,	/* DBG_UARTMOD_CMD0 */
1051				false, 0, 0
1052	),
1053	PRCM_GPIOCR_ALTCX(76,	true, PRCM_IDX_GPIOCR1, 5,	/* PTM_A9_D17 */
1054				true, PRCM_IDX_GPIOCR2, 2,	/* DBG_ETM_R4_CMD0 */
1055				true, PRCM_IDX_GPIOCR1, 0,	/* DBG_UARTMOD_CMD0 */
1056				false, 0, 0
1057	),
1058	PRCM_GPIOCR_ALTCX(77,	true, PRCM_IDX_GPIOCR1, 5,	/* PTM_A9_D16 */
1059				true, PRCM_IDX_GPIOCR2, 2,	/* DBG_ETM_R4_CMD0 */
1060				false, 0, 0,
1061				true, PRCM_IDX_GPIOCR1, 8	/* SBAG_VAL */
1062	),
1063	PRCM_GPIOCR_ALTCX(86,	true, PRCM_IDX_GPIOCR1, 12,	/* KP_O3 */
1064				false, 0, 0,
1065				false, 0, 0,
1066				false, 0, 0
1067	),
1068	PRCM_GPIOCR_ALTCX(87,	true, PRCM_IDX_GPIOCR1, 12,	/* KP_O2 */
1069				false, 0, 0,
1070				false, 0, 0,
1071				false, 0, 0
1072	),
1073	PRCM_GPIOCR_ALTCX(88,	true, PRCM_IDX_GPIOCR1, 12,	/* KP_I3 */
1074				false, 0, 0,
1075				false, 0, 0,
1076				false, 0, 0
1077	),
1078	PRCM_GPIOCR_ALTCX(89,	true, PRCM_IDX_GPIOCR1, 12,	/* KP_I2 */
1079				false, 0, 0,
1080				false, 0, 0,
1081				false, 0, 0
1082	),
1083	PRCM_GPIOCR_ALTCX(90,	true, PRCM_IDX_GPIOCR1, 12,	/* KP_O1 */
1084				false, 0, 0,
1085				false, 0, 0,
1086				false, 0, 0
1087	),
1088	PRCM_GPIOCR_ALTCX(91,	true, PRCM_IDX_GPIOCR1, 12,	/* KP_O0 */
1089				false, 0, 0,
1090				false, 0, 0,
1091				false, 0, 0
1092	),
1093	PRCM_GPIOCR_ALTCX(92,	true, PRCM_IDX_GPIOCR1, 12,	/* KP_I1 */
1094				false, 0, 0,
1095				false, 0, 0,
1096				false, 0, 0
1097	),
1098	PRCM_GPIOCR_ALTCX(93,	true, PRCM_IDX_GPIOCR1, 12,	/* KP_I0 */
1099				false, 0, 0,
1100				false, 0, 0,
1101				false, 0, 0
1102	),
1103	PRCM_GPIOCR_ALTCX(96,	true, PRCM_IDX_GPIOCR2, 3,	/* RF_INT */
1104				false, 0, 0,
1105				false, 0, 0,
1106				false, 0, 0
1107	),
1108	PRCM_GPIOCR_ALTCX(97,	true, PRCM_IDX_GPIOCR2, 1,	/* RF_CTRL */
1109				false, 0, 0,
1110				false, 0, 0,
1111				false, 0, 0
1112	),
1113	PRCM_GPIOCR_ALTCX(151,	false, 0, 0,
1114				true, PRCM_IDX_GPIOCR1, 6,	/* PTM_A9_CTL */
1115				true, PRCM_IDX_GPIOCR1, 15,	/* DBG_ETM_R4_CMD1*/
1116				true, PRCM_IDX_GPIOCR1, 25	/* HW_OBS17 */
1117	),
1118	PRCM_GPIOCR_ALTCX(152,	true, PRCM_IDX_GPIOCR1, 4,	/* Hx_CLK */
1119				true, PRCM_IDX_GPIOCR1, 6,	/* PTM_A9_CLK */
1120				true, PRCM_IDX_GPIOCR1, 15,	/* DBG_ETM_R4_CMD1*/
1121				true, PRCM_IDX_GPIOCR1, 25	/* HW_OBS16 */
1122	),
1123	PRCM_GPIOCR_ALTCX(153,	true, PRCM_IDX_GPIOCR1, 1,	/* UARTMOD_CMD1 */
1124				true, PRCM_IDX_GPIOCR1, 14,	/* PTM_A9_D15 */
1125				true, PRCM_IDX_GPIOCR1, 19,	/* DBG_ETM_R4_CMD2 */
1126				true, PRCM_IDX_GPIOCR1, 25	/* HW_OBS15 */
1127	),
1128	PRCM_GPIOCR_ALTCX(154,	true, PRCM_IDX_GPIOCR1, 1,	/* UARTMOD_CMD1 */
1129				true, PRCM_IDX_GPIOCR1, 14,	/* PTM_A9_D14 */
1130				true, PRCM_IDX_GPIOCR1, 19,	/* DBG_ETM_R4_CMD2 */
1131				true, PRCM_IDX_GPIOCR1, 25	/* HW_OBS14 */
1132	),
1133	PRCM_GPIOCR_ALTCX(155,	true, PRCM_IDX_GPIOCR1, 13,	/* STM_MOD_CMD2 */
1134				true, PRCM_IDX_GPIOCR1, 14,	/* PTM_A9_D13 */
1135				true, PRCM_IDX_GPIOCR1, 19,	/* DBG_ETM_R4_CMD2 */
1136				true, PRCM_IDX_GPIOCR1, 25	/* HW_OBS13 */
1137	),
1138	PRCM_GPIOCR_ALTCX(156,	true, PRCM_IDX_GPIOCR1, 13,	/* STM_MOD_CMD2 */
1139				true, PRCM_IDX_GPIOCR1, 14,	/* PTM_A9_D12 */
1140				true, PRCM_IDX_GPIOCR1, 19,	/* DBG_ETM_R4_CMD2 */
1141				true, PRCM_IDX_GPIOCR1, 25	/* HW_OBS12 */
1142	),
1143	PRCM_GPIOCR_ALTCX(157,	true, PRCM_IDX_GPIOCR1, 13,	/* STM_MOD_CMD2 */
1144				true, PRCM_IDX_GPIOCR1, 14,	/* PTM_A9_D11 */
1145				true, PRCM_IDX_GPIOCR1, 19,	/* DBG_ETM_R4_CMD2 */
1146				true, PRCM_IDX_GPIOCR1, 25	/* HW_OBS11 */
1147	),
1148	PRCM_GPIOCR_ALTCX(158,	true, PRCM_IDX_GPIOCR1, 13,	/* STM_MOD_CMD2 */
1149				true, PRCM_IDX_GPIOCR1, 14,	/* PTM_A9_D10 */
1150				true, PRCM_IDX_GPIOCR1, 19,	/* DBG_ETM_R4_CMD2 */
1151				true, PRCM_IDX_GPIOCR1, 25	/* HW_OBS10 */
1152	),
1153	PRCM_GPIOCR_ALTCX(159,	true, PRCM_IDX_GPIOCR1, 13,	/* STM_MOD_CMD2 */
1154				true, PRCM_IDX_GPIOCR1, 14,	/* PTM_A9_D9 */
1155				true, PRCM_IDX_GPIOCR1, 19,	/* DBG_ETM_R4_CMD2 */
1156				true, PRCM_IDX_GPIOCR1, 25	/* HW_OBS9 */
1157	),
1158	PRCM_GPIOCR_ALTCX(160,	false, 0, 0,
1159				true, PRCM_IDX_GPIOCR1, 14,	/* PTM_A9_D8 */
1160				true, PRCM_IDX_GPIOCR1, 19,	/* DBG_ETM_R4_CMD2 */
1161				true, PRCM_IDX_GPIOCR1, 25	/* HW_OBS8 */
1162	),
1163	PRCM_GPIOCR_ALTCX(161,	true, PRCM_IDX_GPIOCR1, 4,	/* Hx_GPIO7 */
1164				true, PRCM_IDX_GPIOCR1, 6,	/* PTM_A9_D7 */
1165				true, PRCM_IDX_GPIOCR1, 15,	/* DBG_ETM_R4_CMD1*/
1166				true, PRCM_IDX_GPIOCR1, 24	/* HW_OBS7 */
1167	),
1168	PRCM_GPIOCR_ALTCX(162,	true, PRCM_IDX_GPIOCR1, 4,	/* Hx_GPIO6 */
1169				true, PRCM_IDX_GPIOCR1, 6,	/* PTM_A9_D6 */
1170				true, PRCM_IDX_GPIOCR1, 15,	/* DBG_ETM_R4_CMD1*/
1171				true, PRCM_IDX_GPIOCR1, 24	/* HW_OBS6 */
1172	),
1173	PRCM_GPIOCR_ALTCX(163,	true, PRCM_IDX_GPIOCR1, 4,	/* Hx_GPIO5 */
1174				true, PRCM_IDX_GPIOCR1, 6,	/* PTM_A9_D5 */
1175				true, PRCM_IDX_GPIOCR1, 15,	/* DBG_ETM_R4_CMD1*/
1176				true, PRCM_IDX_GPIOCR1, 24	/* HW_OBS5 */
1177	),
1178	PRCM_GPIOCR_ALTCX(164,	true, PRCM_IDX_GPIOCR1, 4,	/* Hx_GPIO4 */
1179				true, PRCM_IDX_GPIOCR1, 6,	/* PTM_A9_D4 */
1180				true, PRCM_IDX_GPIOCR1, 15,	/* DBG_ETM_R4_CMD1*/
1181				true, PRCM_IDX_GPIOCR1, 24	/* HW_OBS4 */
1182	),
1183	PRCM_GPIOCR_ALTCX(165,	true, PRCM_IDX_GPIOCR1, 4,	/* Hx_GPIO3 */
1184				true, PRCM_IDX_GPIOCR1, 6,	/* PTM_A9_D3 */
1185				true, PRCM_IDX_GPIOCR1, 15,	/* DBG_ETM_R4_CMD1*/
1186				true, PRCM_IDX_GPIOCR1, 24	/* HW_OBS3 */
1187	),
1188	PRCM_GPIOCR_ALTCX(166,	true, PRCM_IDX_GPIOCR1, 4,	/* Hx_GPIO2 */
1189				true, PRCM_IDX_GPIOCR1, 6,	/* PTM_A9_D2 */
1190				true, PRCM_IDX_GPIOCR1, 15,	/* DBG_ETM_R4_CMD1*/
1191				true, PRCM_IDX_GPIOCR1, 24	/* HW_OBS2 */
1192	),
1193	PRCM_GPIOCR_ALTCX(167,	true, PRCM_IDX_GPIOCR1, 4,	/* Hx_GPIO1 */
1194				true, PRCM_IDX_GPIOCR1, 6,	/* PTM_A9_D1 */
1195				true, PRCM_IDX_GPIOCR1, 15,	/* DBG_ETM_R4_CMD1*/
1196				true, PRCM_IDX_GPIOCR1, 24	/* HW_OBS1 */
1197	),
1198	PRCM_GPIOCR_ALTCX(168,	true, PRCM_IDX_GPIOCR1, 4,	/* Hx_GPIO0 */
1199				true, PRCM_IDX_GPIOCR1, 6,	/* PTM_A9_D0 */
1200				true, PRCM_IDX_GPIOCR1, 15,	/* DBG_ETM_R4_CMD1*/
1201				true, PRCM_IDX_GPIOCR1, 24	/* HW_OBS0 */
1202	),
1203	PRCM_GPIOCR_ALTCX(170,	true, PRCM_IDX_GPIOCR2, 2,	/* RF_INT */
1204				false, 0, 0,
1205				false, 0, 0,
1206				false, 0, 0
1207	),
1208	PRCM_GPIOCR_ALTCX(171,	true, PRCM_IDX_GPIOCR2, 0,	/* RF_CTRL */
1209				false, 0, 0,
1210				false, 0, 0,
1211				false, 0, 0
1212	),
1213	PRCM_GPIOCR_ALTCX(215,	true, PRCM_IDX_GPIOCR1, 23,	/* SPI2_TXD */
1214				false, 0, 0,
1215				false, 0, 0,
1216				false, 0, 0
1217	),
1218	PRCM_GPIOCR_ALTCX(216,	true, PRCM_IDX_GPIOCR1, 23,	/* SPI2_FRM */
1219				false, 0, 0,
1220				false, 0, 0,
1221				false, 0, 0
1222	),
1223	PRCM_GPIOCR_ALTCX(217,	true, PRCM_IDX_GPIOCR1, 23,	/* SPI2_CLK */
1224				false, 0, 0,
1225				false, 0, 0,
1226				false, 0, 0
1227	),
1228	PRCM_GPIOCR_ALTCX(218,	true, PRCM_IDX_GPIOCR1, 23,	/* SPI2_RXD */
1229				false, 0, 0,
1230				false, 0, 0,
1231				false, 0, 0
1232	),
1233};
1234
1235static const u16 db8500_prcm_gpiocr_regs[] = {
1236	[PRCM_IDX_GPIOCR1] = 0x138,
1237	[PRCM_IDX_GPIOCR2] = 0x574,
1238};
1239
1240static const struct nmk_pinctrl_soc_data nmk_db8500_soc = {
1241	.gpio_ranges = nmk_db8500_ranges,
1242	.gpio_num_ranges = ARRAY_SIZE(nmk_db8500_ranges),
1243	.pins = nmk_db8500_pins,
1244	.npins = ARRAY_SIZE(nmk_db8500_pins),
1245	.functions = nmk_db8500_functions,
1246	.nfunctions = ARRAY_SIZE(nmk_db8500_functions),
1247	.groups = nmk_db8500_groups,
1248	.ngroups = ARRAY_SIZE(nmk_db8500_groups),
1249	.altcx_pins = db8500_altcx_pins,
1250	.npins_altcx = ARRAY_SIZE(db8500_altcx_pins),
1251	.prcm_gpiocr_registers = db8500_prcm_gpiocr_regs,
1252};
1253
1254void nmk_pinctrl_db8500_init(const struct nmk_pinctrl_soc_data **soc)
1255{
1256	*soc = &nmk_db8500_soc;
1257}
1258