xref: /linux/drivers/pinctrl/pinctrl-gemini.c (revision 786ebd9f68cdf512f389e5f2d0015f1beb0777d8)
1 /*
2  * Driver for the Gemini pin controller
3  *
4  * Copyright (C) 2017 Linus Walleij <linus.walleij@linaro.org>
5  *
6  * This is a group-only pin controller.
7  */
8 #include <linux/err.h>
9 #include <linux/init.h>
10 #include <linux/io.h>
11 #include <linux/mfd/syscon.h>
12 #include <linux/of.h>
13 #include <linux/pinctrl/machine.h>
14 #include <linux/pinctrl/pinctrl.h>
15 #include <linux/pinctrl/pinmux.h>
16 #include <linux/pinctrl/pinconf.h>
17 #include <linux/pinctrl/pinconf-generic.h>
18 #include <linux/platform_device.h>
19 #include <linux/slab.h>
20 #include <linux/regmap.h>
21 
22 #include "pinctrl-utils.h"
23 
24 #define DRIVER_NAME "pinctrl-gemini"
25 
26 /**
27  * struct gemini_pin_conf - information about configuring a pin
28  * @pin: the pin number
29  * @reg: config register
30  * @mask: the bits affecting the configuration of the pin
31  */
32 struct gemini_pin_conf {
33 	unsigned int pin;
34 	u32 reg;
35 	u32 mask;
36 };
37 
38 /**
39  * struct gemini_pmx - state holder for the gemini pin controller
40  * @dev: a pointer back to containing device
41  * @virtbase: the offset to the controller in virtual memory
42  * @map: regmap to access registers
43  * @is_3512: whether the SoC/package is the 3512 variant
44  * @is_3516: whether the SoC/package is the 3516 variant
45  * @flash_pin: whether the flash pin (extended pins for parallel
46  * flash) is set
47  * @confs: pin config information
48  * @nconfs: number of pin config information items
49  */
50 struct gemini_pmx {
51 	struct device *dev;
52 	struct pinctrl_dev *pctl;
53 	struct regmap *map;
54 	bool is_3512;
55 	bool is_3516;
56 	bool flash_pin;
57 	const struct gemini_pin_conf *confs;
58 	unsigned int nconfs;
59 };
60 
61 /**
62  * struct gemini_pin_group - describes a Gemini pin group
63  * @name: the name of this specific pin group
64  * @pins: an array of discrete physical pins used in this group, taken
65  *	from the driver-local pin enumeration space
66  * @num_pins: the number of pins in this group array, i.e. the number of
67  *	elements in .pins so we can iterate over that array
68  * @mask: bits to clear to enable this when doing pin muxing
69  * @value: bits to set to enable this when doing pin muxing
70  */
71 struct gemini_pin_group {
72 	const char *name;
73 	const unsigned int *pins;
74 	const unsigned int num_pins;
75 	u32 mask;
76 	u32 value;
77 };
78 
79 /* Some straight-forward control registers */
80 #define GLOBAL_WORD_ID		0x00
81 #define GLOBAL_STATUS		0x04
82 #define GLOBAL_STATUS_FLPIN	BIT(20)
83 #define GLOBAL_GMAC_CTRL_SKEW	0x1c
84 #define GLOBAL_GMAC0_DATA_SKEW	0x20
85 #define GLOBAL_GMAC1_DATA_SKEW	0x24
86 /*
87  * Global Miscellaneous Control Register
88  * This register controls all Gemini pad/pin multiplexing
89  *
90  * It is a tricky register though:
91  * - For the bits named *_ENABLE, once you DISABLE something, it simply cannot
92  *   be brought back online, so it means permanent disablement of the
93  *   corresponding pads.
94  * - For the bits named *_DISABLE, once you enable something, it cannot be
95  *   DISABLED again. So you select a flash configuration once, and then
96  *   you are stuck with it.
97  */
98 #define GLOBAL_MISC_CTRL	0x30
99 #define GEMINI_GMAC_IOSEL_MASK	GENMASK(28, 27)
100 /* Not really used */
101 #define GEMINI_GMAC_IOSEL_GMAC0_GMII	BIT(28)
102 /* Activated with GMAC1 */
103 #define GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII BIT(27)
104 /* This will be the default */
105 #define GEMINI_GMAC_IOSEL_GMAC0_RGMII_GMAC1_GPIO2 0
106 #define TVC_CLK_PAD_ENABLE	BIT(20)
107 #define PCI_CLK_PAD_ENABLE	BIT(17)
108 #define LPC_CLK_PAD_ENABLE	BIT(16)
109 #define TVC_PADS_ENABLE		BIT(9)
110 #define SSP_PADS_ENABLE		BIT(8)
111 #define LCD_PADS_ENABLE		BIT(7)
112 #define LPC_PADS_ENABLE		BIT(6)
113 #define PCI_PADS_ENABLE		BIT(5)
114 #define IDE_PADS_ENABLE		BIT(4)
115 #define DRAM_PADS_POWERDOWN	BIT(3)
116 #define NAND_PADS_DISABLE	BIT(2)
117 #define PFLASH_PADS_DISABLE	BIT(1)
118 #define SFLASH_PADS_DISABLE	BIT(0)
119 #define PADS_MASK		(GENMASK(9, 0) | BIT(16) | BIT(17) | BIT(20) | BIT(27))
120 #define PADS_MAXBIT		27
121 
122 /* Ordered by bit index */
123 static const char * const gemini_padgroups[] = {
124 	"serial flash",
125 	"parallel flash",
126 	"NAND flash",
127 	"DRAM",
128 	"IDE",
129 	"PCI",
130 	"LPC",
131 	"LCD",
132 	"SSP",
133 	"TVC",
134 	NULL, NULL, NULL, NULL, NULL, NULL,
135 	"LPC CLK",
136 	"PCI CLK",
137 	NULL, NULL,
138 	"TVC CLK",
139 	NULL, NULL, NULL, NULL, NULL,
140 	"GMAC1",
141 };
142 
143 static const struct pinctrl_pin_desc gemini_3512_pins[] = {
144 	/* Row A */
145 	PINCTRL_PIN(0, "A1 VREF CTRL"),
146 	PINCTRL_PIN(1, "A2 VCC2IO CTRL"),
147 	PINCTRL_PIN(2, "A3 DRAM CK"),
148 	PINCTRL_PIN(3, "A4 DRAM CK N"),
149 	PINCTRL_PIN(4, "A5 DRAM A5"),
150 	PINCTRL_PIN(5, "A6 DRAM CKE"),
151 	PINCTRL_PIN(6, "A7 DRAM DQ11"),
152 	PINCTRL_PIN(7, "A8 DRAM DQ0"),
153 	PINCTRL_PIN(8, "A9 DRAM DQ5"),
154 	PINCTRL_PIN(9, "A10 DRAM DQ6"),
155 	PINCTRL_PIN(10, "A11 DRAM DRAM VREF"),
156 	PINCTRL_PIN(11, "A12 DRAM BA1"),
157 	PINCTRL_PIN(12, "A13 DRAM A2"),
158 	PINCTRL_PIN(13, "A14 PCI GNT1 N"),
159 	PINCTRL_PIN(14, "A15 PCI REQ9 N"),
160 	PINCTRL_PIN(15, "A16 PCI REQ2 N"),
161 	PINCTRL_PIN(16, "A17 PCI REQ3 N"),
162 	PINCTRL_PIN(17, "A18 PCI AD31"),
163 	/* Row B */
164 	PINCTRL_PIN(18, "B1 VCCK CTRL"),
165 	PINCTRL_PIN(19, "B2 PWR EN"),
166 	PINCTRL_PIN(20, "B3 RTC CLKI"),
167 	PINCTRL_PIN(21, "B4 DRAM A4"),
168 	PINCTRL_PIN(22, "B5 DRAM A6"),
169 	PINCTRL_PIN(23, "B6 DRAM A12"),
170 	PINCTRL_PIN(24, "B7 DRAM DQS1"),
171 	PINCTRL_PIN(25, "B8 DRAM DQ15"),
172 	PINCTRL_PIN(26, "B9 DRAM DQ4"),
173 	PINCTRL_PIN(27, "B10 DRAM DQS0"),
174 	PINCTRL_PIN(28, "B11 DRAM WE N"),
175 	PINCTRL_PIN(29, "B12 DRAM A10"),
176 	PINCTRL_PIN(30, "B13 DRAM A3"),
177 	PINCTRL_PIN(31, "B14 PCI GNT0 N"),
178 	PINCTRL_PIN(32, "B15 PCI GNT3 N"),
179 	PINCTRL_PIN(33, "B16 PCI REQ1 N"),
180 	PINCTRL_PIN(34, "B17 PCI AD30"),
181 	PINCTRL_PIN(35, "B18 PCI AD29"),
182 	/* Row C */
183 	PINCTRL_PIN(36, "C1 CIR RST N"), /* REALLY? CIR is not in 3512... */
184 	PINCTRL_PIN(37, "C2 XTALI"),
185 	PINCTRL_PIN(38, "C3 PWR BTN"),
186 	PINCTRL_PIN(39, "C4 RTC CLKO"),
187 	PINCTRL_PIN(40, "C5 DRAM A7"),
188 	PINCTRL_PIN(41, "C6 DRAM A11"),
189 	PINCTRL_PIN(42, "C7 DRAM DQ10"),
190 	PINCTRL_PIN(43, "C8 DRAM DQ14"),
191 	PINCTRL_PIN(44, "C9 DRAM DQ3"),
192 	PINCTRL_PIN(45, "C10 DRAM DQ7"),
193 	PINCTRL_PIN(46, "C11 DRAM CAS N"),
194 	PINCTRL_PIN(47, "C12 DRAM A0"),
195 	PINCTRL_PIN(48, "C13 PCI INT0 N"),
196 	PINCTRL_PIN(49, "C14 EXT RESET N"),
197 	PINCTRL_PIN(50, "C15 PCI GNT2 N"),
198 	PINCTRL_PIN(51, "C16 PCI AD28"),
199 	PINCTRL_PIN(52, "C17 PCI AD27"),
200 	PINCTRL_PIN(53, "C18 PCI AD26"),
201 	/* Row D */
202 	PINCTRL_PIN(54, "D1 AVCCKHA"),
203 	PINCTRL_PIN(55, "D2 AGNDIOHA"),
204 	PINCTRL_PIN(56, "D3 XTALO"),
205 	PINCTRL_PIN(57, "D4 AVCC3IOHA"),
206 	PINCTRL_PIN(58, "D5 DRAM A8"),
207 	PINCTRL_PIN(59, "D6 DRAM A9"),
208 	PINCTRL_PIN(60, "D7 DRAM DQ9"),
209 	PINCTRL_PIN(61, "D8 DRAM DQ13"),
210 	PINCTRL_PIN(62, "D9 DRAM DQ2"),
211 	PINCTRL_PIN(63, "D10 DRAM A13"),
212 	PINCTRL_PIN(64, "D11 DRAM RAS N"),
213 	PINCTRL_PIN(65, "D12 DRAM A1"),
214 	PINCTRL_PIN(66, "D13 PCI INTC N"),
215 	PINCTRL_PIN(67, "D14 PCI CLK"),
216 	PINCTRL_PIN(68, "D15 PCI AD25"),
217 	PINCTRL_PIN(69, "D16 PCI AD24"),
218 	PINCTRL_PIN(70, "D17 PCI CBE3 N"),
219 	PINCTRL_PIN(71, "D18 PCI AD23"),
220 	/* Row E */
221 	PINCTRL_PIN(72, "E1 AVCC3IOHA"),
222 	PINCTRL_PIN(73, "E2 EBG"),
223 	PINCTRL_PIN(74, "E3 AVCC3IOHB"),
224 	PINCTRL_PIN(75, "E4 REXT"),
225 	PINCTRL_PIN(76, "E5 GND"),
226 	PINCTRL_PIN(77, "E6 DRAM DQM1"),
227 	PINCTRL_PIN(78, "E7 DRAM DQ8"),
228 	PINCTRL_PIN(79, "E8 DRAM DQ12"),
229 	PINCTRL_PIN(80, "E9 DRAM DQ1"),
230 	PINCTRL_PIN(81, "E10 DRAM DQM0"),
231 	PINCTRL_PIN(82, "E11 DRAM BA0"),
232 	PINCTRL_PIN(83, "E12 PCI INTA N"),
233 	PINCTRL_PIN(84, "E13 PCI INTB N"),
234 	PINCTRL_PIN(85, "E14 GND"),
235 	PINCTRL_PIN(86, "E15 PCI AD22"),
236 	PINCTRL_PIN(87, "E16 PCI AD21"),
237 	PINCTRL_PIN(88, "E17 PCI AD20"),
238 	PINCTRL_PIN(89, "E18 PCI AD19"),
239 	/* Row F */
240 	PINCTRL_PIN(90, "F1 SATA0 RXDP"),
241 	PINCTRL_PIN(91, "F2 SATA0 RXDN"),
242 	PINCTRL_PIN(92, "F3 AGNDK 0"),
243 	PINCTRL_PIN(93, "F4 AVCC3 S"),
244 	PINCTRL_PIN(94, "F5 AVCCK P"),
245 	PINCTRL_PIN(95, "F6 GND"),
246 	PINCTRL_PIN(96, "F7 VCC2IOHA 2"),
247 	PINCTRL_PIN(97, "F8 VCC2IOHA 2"),
248 	PINCTRL_PIN(98, "F9 V1"),
249 	PINCTRL_PIN(99, "F10 V1"),
250 	PINCTRL_PIN(100, "F11 VCC2IOHA 2"),
251 	PINCTRL_PIN(101, "F12 VCC2IOHA 2"),
252 	PINCTRL_PIN(102, "F13 GND"),
253 	PINCTRL_PIN(103, "F14 PCI AD18"),
254 	PINCTRL_PIN(104, "F15 PCI AD17"),
255 	PINCTRL_PIN(105, "F16 PCI AD16"),
256 	PINCTRL_PIN(106, "F17 PCI CBE2 N"),
257 	PINCTRL_PIN(107, "F18 PCI FRAME N"),
258 	/* Row G */
259 	PINCTRL_PIN(108, "G1 SATA0 TXDP"),
260 	PINCTRL_PIN(109, "G2 SATA0 TXDN"),
261 	PINCTRL_PIN(110, "G3 AGNDK 1"),
262 	PINCTRL_PIN(111, "G4 AVCCK 0"),
263 	PINCTRL_PIN(112, "G5 TEST CLKOUT"),
264 	PINCTRL_PIN(113, "G6 AGND"),
265 	PINCTRL_PIN(114, "G7 GND"),
266 	PINCTRL_PIN(115, "G8 VCC2IOHA 2"),
267 	PINCTRL_PIN(116, "G9 V1"),
268 	PINCTRL_PIN(117, "G10 V1"),
269 	PINCTRL_PIN(118, "G11 VCC2IOHA 2"),
270 	PINCTRL_PIN(119, "G12 GND"),
271 	PINCTRL_PIN(120, "G13 VCC3IOHA"),
272 	PINCTRL_PIN(121, "G14 PCI IRDY N"),
273 	PINCTRL_PIN(122, "G15 PCI TRDY N"),
274 	PINCTRL_PIN(123, "G16 PCI DEVSEL N"),
275 	PINCTRL_PIN(124, "G17 PCI STOP N"),
276 	PINCTRL_PIN(125, "G18 PCI PAR"),
277 	/* Row H */
278 	PINCTRL_PIN(126, "H1 SATA1 TXDP"),
279 	PINCTRL_PIN(127, "H2 SATA1 TXDN"),
280 	PINCTRL_PIN(128, "H3 AGNDK 2"),
281 	PINCTRL_PIN(129, "H4 AVCCK 1"),
282 	PINCTRL_PIN(130, "H5 AVCCK S"),
283 	PINCTRL_PIN(131, "H6 AVCCKHB"),
284 	PINCTRL_PIN(132, "H7 AGND"),
285 	PINCTRL_PIN(133, "H8 GND"),
286 	PINCTRL_PIN(134, "H9 GND"),
287 	PINCTRL_PIN(135, "H10 GND"),
288 	PINCTRL_PIN(136, "H11 GND"),
289 	PINCTRL_PIN(137, "H12 VCC3IOHA"),
290 	PINCTRL_PIN(138, "H13 VCC3IOHA"),
291 	PINCTRL_PIN(139, "H14 PCI CBE1 N"),
292 	PINCTRL_PIN(140, "H15 PCI AD15"),
293 	PINCTRL_PIN(141, "H16 PCI AD14"),
294 	PINCTRL_PIN(142, "H17 PCI AD13"),
295 	PINCTRL_PIN(143, "H18 PCI AD12"),
296 	/* Row J (for some reason I is skipped) */
297 	PINCTRL_PIN(144, "J1 SATA1 RXDP"),
298 	PINCTRL_PIN(145, "J2 SATA1 RXDN"),
299 	PINCTRL_PIN(146, "J3 AGNDK 3"),
300 	PINCTRL_PIN(147, "J4 AVCCK 2"),
301 	PINCTRL_PIN(148, "J5 IDE DA1"),
302 	PINCTRL_PIN(149, "J6 V1"),
303 	PINCTRL_PIN(150, "J7 V1"),
304 	PINCTRL_PIN(151, "J8 GND"),
305 	PINCTRL_PIN(152, "J9 GND"),
306 	PINCTRL_PIN(153, "J10 GND"),
307 	PINCTRL_PIN(154, "J11 GND"),
308 	PINCTRL_PIN(155, "J12 V1"),
309 	PINCTRL_PIN(156, "J13 V1"),
310 	PINCTRL_PIN(157, "J14 PCI AD11"),
311 	PINCTRL_PIN(158, "J15 PCI AD10"),
312 	PINCTRL_PIN(159, "J16 PCI AD9"),
313 	PINCTRL_PIN(160, "J17 PCI AD8"),
314 	PINCTRL_PIN(161, "J18 PCI CBE0 N"),
315 	/* Row K */
316 	PINCTRL_PIN(162, "K1 IDE CS1 N"),
317 	PINCTRL_PIN(163, "K2 IDE CS0 N"),
318 	PINCTRL_PIN(164, "K3 AVCCK 3"),
319 	PINCTRL_PIN(165, "K4 IDE DA2"),
320 	PINCTRL_PIN(166, "K5 IDE DA0"),
321 	PINCTRL_PIN(167, "K6 V1"),
322 	PINCTRL_PIN(168, "K7 V1"),
323 	PINCTRL_PIN(169, "K8 GND"),
324 	PINCTRL_PIN(170, "K9 GND"),
325 	PINCTRL_PIN(171, "K10 GND"),
326 	PINCTRL_PIN(172, "K11 GND"),
327 	PINCTRL_PIN(173, "K12 V1"),
328 	PINCTRL_PIN(174, "K13 V1"),
329 	PINCTRL_PIN(175, "K14 PCI AD3"),
330 	PINCTRL_PIN(176, "K15 PCI AD4"),
331 	PINCTRL_PIN(177, "K16 PCI AD5"),
332 	PINCTRL_PIN(178, "K17 PCI AD6"),
333 	PINCTRL_PIN(179, "K18 PCI AD7"),
334 	/* Row L */
335 	PINCTRL_PIN(180, "L1 IDE INTRQ"),
336 	PINCTRL_PIN(181, "L2 IDE DMACK N"),
337 	PINCTRL_PIN(182, "L3 IDE IORDY"),
338 	PINCTRL_PIN(183, "L4 IDE DIOR N"),
339 	PINCTRL_PIN(184, "L5 IDE DIOW N"),
340 	PINCTRL_PIN(185, "L6 VCC3IOHA"),
341 	PINCTRL_PIN(186, "L7 VCC3IOHA"),
342 	PINCTRL_PIN(187, "L8 GND"),
343 	PINCTRL_PIN(188, "L9 GND"),
344 	PINCTRL_PIN(189, "L10 GND"),
345 	PINCTRL_PIN(190, "L11 GND"),
346 	PINCTRL_PIN(191, "L12 VCC3IOHA"),
347 	PINCTRL_PIN(192, "L13 VCC3IOHA"),
348 	PINCTRL_PIN(193, "L14 GPIO0 30"),
349 	PINCTRL_PIN(194, "L15 GPIO0 31"),
350 	PINCTRL_PIN(195, "L16 PCI AD0"),
351 	PINCTRL_PIN(196, "L17 PCI AD1"),
352 	PINCTRL_PIN(197, "L18 PCI AD2"),
353 	/* Row M */
354 	PINCTRL_PIN(198, "M1 IDE DMARQ"),
355 	PINCTRL_PIN(199, "M2 IDE DD15"),
356 	PINCTRL_PIN(200, "M3 IDE DD0"),
357 	PINCTRL_PIN(201, "M4 IDE DD14"),
358 	PINCTRL_PIN(202, "M5 IDE DD1"),
359 	PINCTRL_PIN(203, "M6 VCC3IOHA"),
360 	PINCTRL_PIN(204, "M7 GND"),
361 	PINCTRL_PIN(205, "M8 VCC2IOHA 1"),
362 	PINCTRL_PIN(206, "M9 V1"),
363 	PINCTRL_PIN(207, "M10 V1"),
364 	PINCTRL_PIN(208, "M11 VCC3IOHA"),
365 	PINCTRL_PIN(209, "M12 GND"),
366 	PINCTRL_PIN(210, "M13 VCC3IOHA"),
367 	PINCTRL_PIN(211, "M14 GPIO0 25"),
368 	PINCTRL_PIN(212, "M15 GPIO0 26"),
369 	PINCTRL_PIN(213, "M16 GPIO0 27"),
370 	PINCTRL_PIN(214, "M17 GPIO0 28"),
371 	PINCTRL_PIN(215, "M18 GPIO0 29"),
372 	/* Row N */
373 	PINCTRL_PIN(216, "N1 IDE DD13"),
374 	PINCTRL_PIN(217, "N2 IDE DD2"),
375 	PINCTRL_PIN(218, "N3 IDE DD12"),
376 	PINCTRL_PIN(219, "N4 IDE DD3"),
377 	PINCTRL_PIN(220, "N5 IDE DD11"),
378 	PINCTRL_PIN(221, "N6 GND"),
379 	PINCTRL_PIN(222, "N7 VCC2IOHA 1"),
380 	PINCTRL_PIN(223, "N8 VCC2IOHA 1"),
381 	PINCTRL_PIN(224, "N9 V1"),
382 	PINCTRL_PIN(225, "N10 V1"),
383 	PINCTRL_PIN(226, "N11 VCC3IOHA"),
384 	PINCTRL_PIN(227, "N12 VCC3IOHA"),
385 	PINCTRL_PIN(228, "N13 GND"),
386 	PINCTRL_PIN(229, "N14 GPIO0 20"),
387 	PINCTRL_PIN(230, "N15 GPIO0 21"),
388 	PINCTRL_PIN(231, "N16 GPIO0 22"),
389 	PINCTRL_PIN(232, "N17 GPIO0 23"),
390 	PINCTRL_PIN(233, "N18 GPIO0 24"),
391 	/* Row P (for some reason O is skipped) */
392 	PINCTRL_PIN(234, "P1 IDE DD4"),
393 	PINCTRL_PIN(235, "P2 IDE DD10"),
394 	PINCTRL_PIN(236, "P3 IDE DD5"),
395 	PINCTRL_PIN(237, "P4 IDE DD9"),
396 	PINCTRL_PIN(238, "P5 GND"),
397 	PINCTRL_PIN(239, "P6 USB XSCO"),
398 	PINCTRL_PIN(240, "P7 GMAC0 TXD3"),
399 	PINCTRL_PIN(241, "P8 GMAC0 TXEN"),
400 	PINCTRL_PIN(242, "P9 GMAC0 RXD2"),
401 	PINCTRL_PIN(243, "P10 GMAC1 TXC"),
402 	PINCTRL_PIN(244, "P11 GMAC1 RXD1"),
403 	PINCTRL_PIN(245, "P12 MODE SEL 1"),
404 	PINCTRL_PIN(246, "P13 GPIO1 28"),
405 	PINCTRL_PIN(247, "P14 GND"),
406 	PINCTRL_PIN(248, "P15 GPIO0 5"),
407 	PINCTRL_PIN(249, "P16 GPIO0 17"),
408 	PINCTRL_PIN(250, "P17 GPIO0 18"),
409 	PINCTRL_PIN(251, "P18 GPIO0 19"),
410 	/* Row R (for some reason Q us skipped) */
411 	PINCTRL_PIN(252, "R1 IDE DD6"),
412 	PINCTRL_PIN(253, "R2 IDE DD8"),
413 	PINCTRL_PIN(254, "R3 IDE DD7"),
414 	PINCTRL_PIN(255, "R4 IDE RESET N"),
415 	PINCTRL_PIN(256, "R5 ICE0 DBGACK"),
416 	PINCTRL_PIN(257, "R6 USB XSCI"),
417 	PINCTRL_PIN(258, "R7 GMAC0 TXD2"),
418 	PINCTRL_PIN(259, "R8 GMAC0 RXDV"),
419 	PINCTRL_PIN(260, "R9 GMAC0 RXD3"),
420 	PINCTRL_PIN(261, "R10 GMAC1 TXD0"),
421 	PINCTRL_PIN(262, "R11 GMAC1 RXD0"),
422 	PINCTRL_PIN(263, "R12 MODE SEL 0"),
423 	PINCTRL_PIN(264, "R13 MODE SEL 3"),
424 	PINCTRL_PIN(265, "R14 GPIO0 0"),
425 	PINCTRL_PIN(266, "R15 GPIO0 4"),
426 	PINCTRL_PIN(267, "R16 GPIO0 9"),
427 	PINCTRL_PIN(268, "R17 GPIO0 15"),
428 	PINCTRL_PIN(269, "R18 GPIO0 16"),
429 	/* Row T (for some reason S is skipped) */
430 	PINCTRL_PIN(270, "T1 ICE0 DBGRQ"),
431 	PINCTRL_PIN(271, "T2 ICE0 IDO"),
432 	PINCTRL_PIN(272, "T3 ICE0 ICK"),
433 	PINCTRL_PIN(273, "T4 ICE0 IMS"),
434 	PINCTRL_PIN(274, "T5 ICE0 IDI"),
435 	PINCTRL_PIN(275, "T6 USB RREF"),
436 	PINCTRL_PIN(276, "T7 GMAC0 TXD1"),
437 	PINCTRL_PIN(277, "T8 GMAC0 RXC"),
438 	PINCTRL_PIN(278, "T9 GMAC0 CRS"),
439 	PINCTRL_PIN(279, "T10 GMAC1 TXD1"),
440 	PINCTRL_PIN(280, "T11 GMAC1 RXC"),
441 	PINCTRL_PIN(281, "T12 GMAC1 CRS"),
442 	PINCTRL_PIN(282, "T13 EXT CLK"),
443 	PINCTRL_PIN(283, "T14 GPIO1 31"),
444 	PINCTRL_PIN(284, "T15 GPIO0 3"),
445 	PINCTRL_PIN(285, "T16 GPIO0 8"),
446 	PINCTRL_PIN(286, "T17 GPIO0 12"),
447 	PINCTRL_PIN(287, "T18 GPIO0 14"),
448 	/* Row U */
449 	PINCTRL_PIN(288, "U1 ICE0 IRST N"),
450 	PINCTRL_PIN(289, "U2 USB0 VCCHSRT"),
451 	PINCTRL_PIN(290, "U3 USB0 DP"),
452 	PINCTRL_PIN(291, "U4 USB VCCA U20"),
453 	PINCTRL_PIN(292, "U5 USB1 DP"),
454 	PINCTRL_PIN(293, "U6 USB1 GNDHSRT 1"),
455 	PINCTRL_PIN(294, "U7 GMAC0 TXD0"),
456 	PINCTRL_PIN(295, "U8 GMAC0 RXD0"),
457 	PINCTRL_PIN(296, "U9 GMAC1 COL"),
458 	PINCTRL_PIN(297, "U10 GMAC1 TXD2"),
459 	PINCTRL_PIN(298, "U11 GMAC1 RXDV"),
460 	PINCTRL_PIN(299, "U12 GMAC1 RXD3"),
461 	PINCTRL_PIN(300, "U13 MODE SEL 2"),
462 	PINCTRL_PIN(301, "U14 GPIO1 30"),
463 	PINCTRL_PIN(302, "U15 GPIO0 2"),
464 	PINCTRL_PIN(303, "U16 GPIO0 7"),
465 	PINCTRL_PIN(304, "U17 GPIO0 11"),
466 	PINCTRL_PIN(305, "U18 GPIO0 13"),
467 	/* Row V */
468 	PINCTRL_PIN(306, "V1 USB0 GNDHSRT"),
469 	PINCTRL_PIN(307, "V2 USB0 DM"),
470 	PINCTRL_PIN(308, "V3 USB GNDA U20"),
471 	PINCTRL_PIN(309, "V4 USB1 DM"),
472 	PINCTRL_PIN(310, "V5 USB1 VCCHSRT1"),
473 	PINCTRL_PIN(311, "V6 GMAC0 COL"),
474 	PINCTRL_PIN(312, "V7 GMAC0 TXC"),
475 	PINCTRL_PIN(313, "V8 GMAC0 RXD1"),
476 	PINCTRL_PIN(314, "V9 REF CLK"),
477 	PINCTRL_PIN(315, "V10 GMAC1 TXD3"),
478 	PINCTRL_PIN(316, "V11 GMAC1 TXEN"),
479 	PINCTRL_PIN(317, "V12 GMAC1 RXD2"),
480 	PINCTRL_PIN(318, "V13 M30 CLK"),
481 	PINCTRL_PIN(319, "V14 GPIO1 29"),
482 	PINCTRL_PIN(320, "V15 GPIO0 1"),
483 	PINCTRL_PIN(321, "V16 GPIO0 6"),
484 	PINCTRL_PIN(322, "V17 GPIO0 10"),
485 	PINCTRL_PIN(323, "V18 SYS RESET N"),
486 };
487 
488 
489 /* Digital ground */
490 static const unsigned int gnd_3512_pins[] = {
491 	76, 85, 95, 102, 114, 119, 133, 134, 135, 136, 151, 152, 153, 154, 169,
492 	170, 171, 172, 187, 188, 189, 190, 204, 209, 221, 228, 238, 247
493 };
494 
495 static const unsigned int dram_3512_pins[] = {
496 	2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 21, 22, 23, 24, 25, 26, 27, 28, 29,
497 	30, 40, 41, 42, 43, 44, 45, 46, 47, 58, 59, 60, 61, 62, 63, 64, 65, 77,
498 	78, 79, 80, 81, 82
499 };
500 
501 static const unsigned int rtc_3512_pins[] = { 57, 20, 39 };
502 
503 static const unsigned int power_3512_pins[] = { 19, 38, 36, 55, 37, 56, 54, 72 };
504 
505 static const unsigned int system_3512_pins[] = {
506 	318, 264, 300, 245, 263, 282, 314, 323, 49,
507 };
508 
509 static const unsigned int vcontrol_3512_pins[] = { 18, 0, 1 };
510 
511 static const unsigned int ice_3512_pins[] = { 256, 270, 271, 272, 273, 274, 288 };
512 
513 static const unsigned int ide_3512_pins[] = {
514 	162, 163, 165, 166, 148, 180, 181, 182, 183, 184, 198, 199, 200, 201, 202,
515 	216, 217, 218, 219, 220, 234, 235, 236, 237, 252, 253, 254, 255
516 };
517 
518 static const unsigned int sata_3512_pins[] = {
519 	75, 74, 73, 93, 94, 131, 112, 130, 92, 91, 90, 111, 110, 109, 108, 129,
520 	128, 127, 126, 147, 146, 145, 144, 164
521 };
522 
523 static const unsigned int usb_3512_pins[] = {
524 	306, 289, 307, 290, 239, 257, 275, 308, 291, 309, 292, 310, 293
525 };
526 
527 /* GMII, ethernet pins */
528 static const unsigned int gmii_gmac0_3512_pins[] = {
529 	240, 241, 242, 258, 259, 260, 276, 277, 278, 294, 295, 311, 312, 313
530 };
531 
532 static const unsigned int gmii_gmac1_3512_pins[] = {
533 	243, 244, 261, 262, 279, 280, 281, 296, 297, 298, 299, 315, 316, 317
534 };
535 
536 static const unsigned int pci_3512_pins[] = {
537 	13, 14, 15, 16, 17, 31, 32, 33, 34, 35, 48, 50, 51, 52, 53, 66, 67, 68, 69,
538 	70, 71, 83, 84, 86, 87, 88, 89, 103, 104, 105, 106, 107, 121, 122, 123,
539 	124, 125, 139, 140, 141, 142, 143, 157, 158, 159, 160, 161, 175, 176, 177,
540 	178, 179, 195, 196, 197
541 };
542 
543 /*
544  * Apparently the LPC interface is using the PCICLK for the clocking so
545  * PCI needs to be active at the same time.
546  */
547 static const unsigned int lpc_3512_pins[] = {
548 	285, /* LPC_LAD[0] */
549 	304, /* LPC_SERIRQ */
550 	286, /* LPC_LAD[2] */
551 	305, /* LPC_LFRAME# */
552 	287, /* LPC_LAD[3] */
553 	268, /* LPC_LAD[1] */
554 };
555 
556 /* Character LCD */
557 static const unsigned int lcd_3512_pins[] = {
558 	262, 244, 317, 299, 246, 319, 301, 283, 269, 233, 211
559 };
560 
561 static const unsigned int ssp_3512_pins[] = {
562 	285, /* SSP_97RST# SSP AC97 Reset, active low */
563 	304, /* SSP_FSC */
564 	286, /* SSP_ECLK */
565 	305, /* SSP_TXD */
566 	287, /* SSP_RXD */
567 	268, /* SSP_SCLK */
568 };
569 
570 static const unsigned int uart_rxtx_3512_pins[] = {
571 	267, /* UART_SIN serial input, RX */
572 	322, /* UART_SOUT serial output, TX */
573 };
574 
575 static const unsigned int uart_modem_3512_pins[] = {
576 	285, /* UART_NDCD DCD carrier detect */
577 	304, /* UART_NDTR DTR data terminal ready */
578 	286, /* UART_NDSR DSR data set ready */
579 	305, /* UART_NRTS RTS request to send */
580 	287, /* UART_NCTS CTS clear to send */
581 	268, /* UART_NRI RI ring indicator */
582 };
583 
584 static const unsigned int tvc_3512_pins[] = {
585 	246, /* TVC_DATA[0] */
586 	319, /* TVC_DATA[1] */
587 	301, /* TVC_DATA[2] */
588 	283, /* TVC_DATA[3] */
589 	265, /* TVC_CLK */
590 	320, /* TVC_DATA[4] */
591 	302, /* TVC_DATA[5] */
592 	284, /* TVC_DATA[6] */
593 	266, /* TVC_DATA[7] */
594 };
595 
596 /* NAND flash pins */
597 static const unsigned int nflash_3512_pins[] = {
598 	199, 200, 201, 202, 216, 217, 218, 219, 220, 234, 235, 236, 237, 252,
599 	253, 254, 249, 250, 232, 233, 211, 193, 194
600 };
601 
602 /* Parallel (NOR) flash pins, D[0-15], A[16-25], CE0, CE1, RB, WE, OE, ALE */
603 static const unsigned int pflash_3512_pins[] = {
604 	162, 163, 165, 166, 148, 199, 200, 201, 202, 216, 217, 218, 219, 220,
605 	234, 235, 236, 237, 252, 253, 254, 251, 229, 232, 233, 211, 212, 213,
606 	214, 215, 193, 194
607 };
608 
609 /*
610  * The parallel flash can be set up in a 26-bit address bus mode exposing
611  * A[0-15] (A[15] takes the place of ALE), but it has the
612  * side effect of stealing pins from GMAC1 and TVC so these blocks cannot be
613  * used at the same time.
614  */
615 static const unsigned int pflash_3512_pins_extended[] = {
616 	162, 163, 165, 166, 148, 199, 200, 201, 202, 216, 217, 218, 219, 220,
617 	234, 235, 236, 237, 252, 253, 254, 251, 229, 232, 233, 211, 212, 213,
618 	214, 215, 193, 194,
619 	/* The extra pins */
620 	296, 315, 297, 279, 261, 243, 316, 298, 280, 262, 244, 317, 299, 281,
621 	265,
622 };
623 
624 /* Serial flash pins CE0, CE1, DI, DO, CK */
625 static const unsigned int sflash_3512_pins[] = { 230, 231, 232, 233, 211 };
626 
627 /* The GPIO0A (0) pin overlap with TVC and extended parallel flash */
628 static const unsigned int gpio0a_3512_pins[] = { 265 };
629 
630 /* The GPIO0B (1-4) pins overlap with TVC and ICE */
631 static const unsigned int gpio0b_3512_pins[] = { 320, 302, 284, 266 };
632 
633 /* The GPIO0C (5-7) pins overlap with ICE */
634 static const unsigned int gpio0c_3512_pins[] = { 248, 321, 303 };
635 
636 /* The GPIO0D (9,10) pins overlap with UART RX/TX */
637 static const unsigned int gpio0d_3512_pins[] = { 267, 322 };
638 
639 /* The GPIO0E (8,11-15) pins overlap with LPC, UART modem pins, SSP */
640 static const unsigned int gpio0e_3512_pins[] = { 285, 304, 286, 305, 287, 268 };
641 
642 /* The GPIO0F (16) pins overlap with LCD */
643 static const unsigned int gpio0f_3512_pins[] = { 269 };
644 
645 /* The GPIO0G (17,18) pins overlap with NAND flash CE0, CE1 */
646 static const unsigned int gpio0g_3512_pins[] = { 249, 250 };
647 
648 /* The GPIO0H (19,20) pins overlap with parallel flash CE0, CE1 */
649 static const unsigned int gpio0h_3512_pins[] = { 251, 229 };
650 
651 /* The GPIO0I (21,22) pins overlap with serial flash CE0, CE1 */
652 static const unsigned int gpio0i_3512_pins[] = { 230, 231 };
653 
654 /* The GPIO0J (23) pins overlap with all flash */
655 static const unsigned int gpio0j_3512_pins[] = { 232 };
656 
657 /* The GPIO0K (24,25) pins overlap with all flash and LCD */
658 static const unsigned int gpio0k_3512_pins[] = { 233, 211 };
659 
660 /* The GPIO0L (26-29) pins overlap with parallel flash */
661 static const unsigned int gpio0l_3512_pins[] = { 212, 213, 214, 215 };
662 
663 /* The GPIO0M (30,31) pins overlap with parallel flash and NAND flash */
664 static const unsigned int gpio0m_3512_pins[] = { 193, 194 };
665 
666 /* The GPIO1A (0-4) pins that overlap with IDE and parallel flash */
667 static const unsigned int gpio1a_3512_pins[] = { 162, 163, 165, 166, 148 };
668 
669 /* The GPIO1B (5-10, 27) pins overlap with just IDE */
670 static const unsigned int gpio1b_3512_pins[] = {
671 	180, 181, 182, 183, 184, 198, 255
672 };
673 
674 /* The GPIO1C (11-26) pins overlap with IDE, parallel flash and NAND flash */
675 static const unsigned int gpio1c_3512_pins[] = {
676 	199, 200, 201, 202, 216, 217, 218, 219, 220, 234, 235, 236, 237,
677 	252, 253, 254
678 };
679 
680 /* The GPIO1D (28-31) pins overlap with LCD and TVC */
681 static const unsigned int gpio1d_3512_pins[] = { 246, 319, 301, 283 };
682 
683 /* The GPIO2A (0-3) pins overlap with GMII GMAC1 and extended parallel flash */
684 static const unsigned int gpio2a_3512_pins[] = { 315, 297, 279, 261 };
685 
686 /* The GPIO2B (4-7) pins overlap with GMII GMAC1, extended parallel flash and LCD */
687 static const unsigned int gpio2b_3512_pins[] = { 262, 244, 317, 299 };
688 
689 /* The GPIO2C (8-31) pins overlap with PCI */
690 static const unsigned int gpio2c_3512_pins[] = {
691 	17, 34, 35, 51, 52, 53, 68, 69, 71, 86, 87, 88, 89, 103, 104, 105,
692 	140, 141, 142, 143, 157, 158, 159, 160
693 };
694 
695 /* Groups for the 3512 SoC/package */
696 static const struct gemini_pin_group gemini_3512_pin_groups[] = {
697 	{
698 		.name = "gndgrp",
699 		.pins = gnd_3512_pins,
700 		.num_pins = ARRAY_SIZE(gnd_3512_pins),
701 	},
702 	{
703 		.name = "dramgrp",
704 		.pins = dram_3512_pins,
705 		.num_pins = ARRAY_SIZE(dram_3512_pins),
706 		.mask = DRAM_PADS_POWERDOWN,
707 	},
708 	{
709 		.name = "rtcgrp",
710 		.pins = rtc_3512_pins,
711 		.num_pins = ARRAY_SIZE(rtc_3512_pins),
712 	},
713 	{
714 		.name = "powergrp",
715 		.pins = power_3512_pins,
716 		.num_pins = ARRAY_SIZE(power_3512_pins),
717 	},
718 	{
719 		.name = "systemgrp",
720 		.pins = system_3512_pins,
721 		.num_pins = ARRAY_SIZE(system_3512_pins),
722 	},
723 	{
724 		.name = "vcontrolgrp",
725 		.pins = vcontrol_3512_pins,
726 		.num_pins = ARRAY_SIZE(vcontrol_3512_pins),
727 	},
728 	{
729 		.name = "icegrp",
730 		.pins = ice_3512_pins,
731 		.num_pins = ARRAY_SIZE(ice_3512_pins),
732 		/* Conflict with some GPIO groups */
733 	},
734 	{
735 		.name = "idegrp",
736 		.pins = ide_3512_pins,
737 		.num_pins = ARRAY_SIZE(ide_3512_pins),
738 		/* Conflict with all flash usage */
739 		.value = IDE_PADS_ENABLE | NAND_PADS_DISABLE |
740 			PFLASH_PADS_DISABLE | SFLASH_PADS_DISABLE,
741 	},
742 	{
743 		.name = "satagrp",
744 		.pins = sata_3512_pins,
745 		.num_pins = ARRAY_SIZE(sata_3512_pins),
746 	},
747 	{
748 		.name = "usbgrp",
749 		.pins = usb_3512_pins,
750 		.num_pins = ARRAY_SIZE(usb_3512_pins),
751 	},
752 	{
753 		.name = "gmii_gmac0_grp",
754 		.pins = gmii_gmac0_3512_pins,
755 		.num_pins = ARRAY_SIZE(gmii_gmac0_3512_pins),
756 	},
757 	{
758 		.name = "gmii_gmac1_grp",
759 		.pins = gmii_gmac1_3512_pins,
760 		.num_pins = ARRAY_SIZE(gmii_gmac1_3512_pins),
761 		/* Bring out RGMII on the GMAC1 pins */
762 		.value = GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
763 	},
764 	{
765 		.name = "pcigrp",
766 		.pins = pci_3512_pins,
767 		.num_pins = ARRAY_SIZE(pci_3512_pins),
768 		/* Conflict only with GPIO2 */
769 		.value = PCI_PADS_ENABLE | PCI_CLK_PAD_ENABLE,
770 	},
771 	{
772 		.name = "lpcgrp",
773 		.pins = lpc_3512_pins,
774 		.num_pins = ARRAY_SIZE(lpc_3512_pins),
775 		/* Conflict with SSP and UART modem pins */
776 		.mask = SSP_PADS_ENABLE,
777 		.value = LPC_PADS_ENABLE | LPC_CLK_PAD_ENABLE,
778 	},
779 	{
780 		.name = "lcdgrp",
781 		.pins = lcd_3512_pins,
782 		.num_pins = ARRAY_SIZE(lcd_3512_pins),
783 		/* Conflict with TVC and ICE */
784 		.mask = TVC_PADS_ENABLE,
785 		.value = LCD_PADS_ENABLE,
786 	},
787 	{
788 		.name = "sspgrp",
789 		.pins = ssp_3512_pins,
790 		.num_pins = ARRAY_SIZE(ssp_3512_pins),
791 		/* Conflict with LPC and UART modem pins */
792 		.mask = LPC_PADS_ENABLE,
793 		.value = SSP_PADS_ENABLE,
794 	},
795 	{
796 		.name = "uartrxtxgrp",
797 		.pins = uart_rxtx_3512_pins,
798 		.num_pins = ARRAY_SIZE(uart_rxtx_3512_pins),
799 		/* No conflicts except GPIO */
800 	},
801 	{
802 		.name = "uartmodemgrp",
803 		.pins = uart_modem_3512_pins,
804 		.num_pins = ARRAY_SIZE(uart_modem_3512_pins),
805 		/*
806 		 * Conflict with LPC and SSP,
807 		 * so when those are both disabled, modem UART can thrive.
808 		 */
809 		.mask = LPC_PADS_ENABLE | SSP_PADS_ENABLE,
810 	},
811 	{
812 		.name = "tvcgrp",
813 		.pins = tvc_3512_pins,
814 		.num_pins = ARRAY_SIZE(tvc_3512_pins),
815 		/* Conflict with character LCD and ICE */
816 		.mask = LCD_PADS_ENABLE,
817 		.value = TVC_PADS_ENABLE | TVC_CLK_PAD_ENABLE,
818 	},
819 	/*
820 	 * The construction is done such that it is possible to use a serial
821 	 * flash together with a NAND or parallel (NOR) flash, but it is not
822 	 * possible to use NAND and parallel flash together. To use serial
823 	 * flash with one of the two others, the muxbits need to be flipped
824 	 * around before any access.
825 	 */
826 	{
827 		.name = "nflashgrp",
828 		.pins = nflash_3512_pins,
829 		.num_pins = ARRAY_SIZE(nflash_3512_pins),
830 		/* Conflict with IDE, parallel and serial flash */
831 		.mask = NAND_PADS_DISABLE | IDE_PADS_ENABLE,
832 		.value = PFLASH_PADS_DISABLE | SFLASH_PADS_DISABLE,
833 	},
834 	{
835 		.name = "pflashgrp",
836 		.pins = pflash_3512_pins,
837 		.num_pins = ARRAY_SIZE(pflash_3512_pins),
838 		/* Conflict with IDE, NAND and serial flash */
839 		.mask = PFLASH_PADS_DISABLE | IDE_PADS_ENABLE,
840 		.value = NAND_PADS_DISABLE | SFLASH_PADS_DISABLE,
841 	},
842 	{
843 		.name = "sflashgrp",
844 		.pins = sflash_3512_pins,
845 		.num_pins = ARRAY_SIZE(sflash_3512_pins),
846 		/* Conflict with IDE, NAND and parallel flash */
847 		.mask = SFLASH_PADS_DISABLE | IDE_PADS_ENABLE,
848 		.value = NAND_PADS_DISABLE | PFLASH_PADS_DISABLE,
849 	},
850 	{
851 		.name = "gpio0agrp",
852 		.pins = gpio0a_3512_pins,
853 		.num_pins = ARRAY_SIZE(gpio0a_3512_pins),
854 		/* Conflict with TVC */
855 		.mask = TVC_PADS_ENABLE,
856 	},
857 	{
858 		.name = "gpio0bgrp",
859 		.pins = gpio0b_3512_pins,
860 		.num_pins = ARRAY_SIZE(gpio0b_3512_pins),
861 		/* Conflict with TVC and ICE */
862 		.mask = TVC_PADS_ENABLE,
863 	},
864 	{
865 		.name = "gpio0cgrp",
866 		.pins = gpio0c_3512_pins,
867 		.num_pins = ARRAY_SIZE(gpio0c_3512_pins),
868 		/* Conflict with ICE */
869 	},
870 	{
871 		.name = "gpio0dgrp",
872 		.pins = gpio0d_3512_pins,
873 		.num_pins = ARRAY_SIZE(gpio0d_3512_pins),
874 		/* Conflict with UART RX/TX */
875 	},
876 	{
877 		.name = "gpio0egrp",
878 		.pins = gpio0e_3512_pins,
879 		.num_pins = ARRAY_SIZE(gpio0e_3512_pins),
880 		/* Conflict with LPC, UART modem pins, SSP */
881 		.mask = LPC_PADS_ENABLE | SSP_PADS_ENABLE,
882 	},
883 	{
884 		.name = "gpio0fgrp",
885 		.pins = gpio0f_3512_pins,
886 		.num_pins = ARRAY_SIZE(gpio0f_3512_pins),
887 		/* Conflict with LCD */
888 		.mask = LCD_PADS_ENABLE,
889 	},
890 	{
891 		.name = "gpio0ggrp",
892 		.pins = gpio0g_3512_pins,
893 		.num_pins = ARRAY_SIZE(gpio0g_3512_pins),
894 		/* Conflict with NAND flash */
895 		.value = NAND_PADS_DISABLE,
896 	},
897 	{
898 		.name = "gpio0hgrp",
899 		.pins = gpio0h_3512_pins,
900 		.num_pins = ARRAY_SIZE(gpio0h_3512_pins),
901 		/* Conflict with parallel flash */
902 		.value = PFLASH_PADS_DISABLE,
903 	},
904 	{
905 		.name = "gpio0igrp",
906 		.pins = gpio0i_3512_pins,
907 		.num_pins = ARRAY_SIZE(gpio0i_3512_pins),
908 		/* Conflict with serial flash */
909 		.value = SFLASH_PADS_DISABLE,
910 	},
911 	{
912 		.name = "gpio0jgrp",
913 		.pins = gpio0j_3512_pins,
914 		.num_pins = ARRAY_SIZE(gpio0j_3512_pins),
915 		/* Conflict with all flash */
916 		.value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE |
917 			SFLASH_PADS_DISABLE,
918 	},
919 	{
920 		.name = "gpio0kgrp",
921 		.pins = gpio0k_3512_pins,
922 		.num_pins = ARRAY_SIZE(gpio0k_3512_pins),
923 		/* Conflict with all flash and LCD */
924 		.mask = LCD_PADS_ENABLE,
925 		.value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE |
926 			SFLASH_PADS_DISABLE,
927 	},
928 	{
929 		.name = "gpio0lgrp",
930 		.pins = gpio0l_3512_pins,
931 		.num_pins = ARRAY_SIZE(gpio0l_3512_pins),
932 		/* Conflict with parallel flash */
933 		.value = PFLASH_PADS_DISABLE,
934 	},
935 	{
936 		.name = "gpio0mgrp",
937 		.pins = gpio0m_3512_pins,
938 		.num_pins = ARRAY_SIZE(gpio0m_3512_pins),
939 		/* Conflict with parallel and NAND flash */
940 		.value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE,
941 	},
942 	{
943 		.name = "gpio1agrp",
944 		.pins = gpio1a_3512_pins,
945 		.num_pins = ARRAY_SIZE(gpio1a_3512_pins),
946 		/* Conflict with IDE and parallel flash */
947 		.mask = IDE_PADS_ENABLE,
948 		.value = PFLASH_PADS_DISABLE,
949 	},
950 	{
951 		.name = "gpio1bgrp",
952 		.pins = gpio1b_3512_pins,
953 		.num_pins = ARRAY_SIZE(gpio1b_3512_pins),
954 		/* Conflict with IDE only */
955 		.mask = IDE_PADS_ENABLE,
956 	},
957 	{
958 		.name = "gpio1cgrp",
959 		.pins = gpio1c_3512_pins,
960 		.num_pins = ARRAY_SIZE(gpio1c_3512_pins),
961 		/* Conflict with IDE, parallel and NAND flash */
962 		.mask = IDE_PADS_ENABLE,
963 		.value = NAND_PADS_DISABLE | PFLASH_PADS_DISABLE,
964 	},
965 	{
966 		.name = "gpio1dgrp",
967 		.pins = gpio1d_3512_pins,
968 		.num_pins = ARRAY_SIZE(gpio1d_3512_pins),
969 		/* Conflict with LCD and TVC */
970 		.mask = LCD_PADS_ENABLE | TVC_PADS_ENABLE,
971 	},
972 	{
973 		.name = "gpio2agrp",
974 		.pins = gpio2a_3512_pins,
975 		.num_pins = ARRAY_SIZE(gpio2a_3512_pins),
976 		.mask = GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
977 		/* Conflict with GMII GMAC1 and extended parallel flash */
978 	},
979 	{
980 		.name = "gpio2bgrp",
981 		.pins = gpio2b_3512_pins,
982 		.num_pins = ARRAY_SIZE(gpio2b_3512_pins),
983 		/* Conflict with GMII GMAC1, extended parallel flash and LCD */
984 		.mask = LCD_PADS_ENABLE | GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
985 	},
986 	{
987 		.name = "gpio2cgrp",
988 		.pins = gpio2c_3512_pins,
989 		.num_pins = ARRAY_SIZE(gpio2c_3512_pins),
990 		/* Conflict with PCI */
991 		.mask = PCI_PADS_ENABLE,
992 	},
993 };
994 
995 /* Pin names for the pinmux subsystem, 3516 variant */
996 static const struct pinctrl_pin_desc gemini_3516_pins[] = {
997 	/* Row A */
998 	PINCTRL_PIN(0, "A1 AVCC3IOHA"),
999 	PINCTRL_PIN(1, "A2 DRAM CK N"),
1000 	PINCTRL_PIN(2, "A3 DRAM CK"),
1001 	PINCTRL_PIN(3, "A4 DRAM DQM1"),
1002 	PINCTRL_PIN(4, "A5 DRAM DQ9"),
1003 	PINCTRL_PIN(5, "A6 DRAM DQ13"),
1004 	PINCTRL_PIN(6, "A7 DRAM DQ1"),
1005 	PINCTRL_PIN(7, "A8 DRAM DQ2"),
1006 	PINCTRL_PIN(8, "A9 DRAM DQ4"),
1007 	PINCTRL_PIN(9, "A10 DRAM VREF"),
1008 	PINCTRL_PIN(10, "A11 DRAM DQ24"),
1009 	PINCTRL_PIN(11, "A12 DRAM DQ28"),
1010 	PINCTRL_PIN(12, "A13 DRAM DQ30"),
1011 	PINCTRL_PIN(13, "A14 DRAM DQ18"),
1012 	PINCTRL_PIN(14, "A15 DRAM DQ21"),
1013 	PINCTRL_PIN(15, "A16 DRAM CAS_N"),
1014 	PINCTRL_PIN(16, "A17 DRAM BA1"),
1015 	PINCTRL_PIN(17, "A18 PCI INTA N"),
1016 	PINCTRL_PIN(18, "A19 PCI INTB N"),
1017 	PINCTRL_PIN(19, "A20 PCI INTC N"),
1018 	/* Row B */
1019 	PINCTRL_PIN(20, "B1 PWR EN"),
1020 	PINCTRL_PIN(21, "B2 GND"),
1021 	PINCTRL_PIN(22, "B3 RTC CLKO"),
1022 	PINCTRL_PIN(23, "B4 DRAM A5"),
1023 	PINCTRL_PIN(24, "B5 DRAM A6"),
1024 	PINCTRL_PIN(25, "B6 DRAM DQS1"),
1025 	PINCTRL_PIN(26, "B7 DRAM DQ11"),
1026 	PINCTRL_PIN(27, "B8 DRAM DQ0"),
1027 	PINCTRL_PIN(28, "B9 DRAM DQS0"),
1028 	PINCTRL_PIN(29, "B10 DRAM DQ7"),
1029 	PINCTRL_PIN(30, "B11 DRAM DQS3"),
1030 	PINCTRL_PIN(31, "B12 DRAM DQ27"),
1031 	PINCTRL_PIN(32, "B13 DRAM DQ31"),
1032 	PINCTRL_PIN(33, "B14 DRAM DQ20"),
1033 	PINCTRL_PIN(34, "B15 DRAM DQS2"),
1034 	PINCTRL_PIN(35, "B16 DRAM WE N"),
1035 	PINCTRL_PIN(36, "B17 DRAM A10"),
1036 	PINCTRL_PIN(37, "B18 DRAM A2"),
1037 	PINCTRL_PIN(38, "B19 GND"),
1038 	PINCTRL_PIN(39, "B20 PCI GNT0 N"),
1039 	/* Row C */
1040 	PINCTRL_PIN(40, "C1 AGNDIOHA"),
1041 	PINCTRL_PIN(41, "C2 XTALI"),
1042 	PINCTRL_PIN(42, "C3 GND"),
1043 	PINCTRL_PIN(43, "C4 RTC CLKI"),
1044 	PINCTRL_PIN(44, "C5 DRAM A12"),
1045 	PINCTRL_PIN(45, "C6 DRAM A11"),
1046 	PINCTRL_PIN(46, "C7 DRAM DQ8"),
1047 	PINCTRL_PIN(47, "C8 DRAM DQ10"),
1048 	PINCTRL_PIN(48, "C9 DRAM DQ3"),
1049 	PINCTRL_PIN(49, "C10 DRAM DQ6"),
1050 	PINCTRL_PIN(50, "C11 DRAM DQM0"),
1051 	PINCTRL_PIN(51, "C12 DRAM DQ26"),
1052 	PINCTRL_PIN(52, "C13 DRAM DQ16"),
1053 	PINCTRL_PIN(53, "C14 DRAM DQ22"),
1054 	PINCTRL_PIN(54, "C15 DRAM DQM2"),
1055 	PINCTRL_PIN(55, "C16 DRAM BA0"),
1056 	PINCTRL_PIN(56, "C17 DRAM A3"),
1057 	PINCTRL_PIN(57, "C18 GND"),
1058 	PINCTRL_PIN(58, "C19 PCI GNT1 N"),
1059 	PINCTRL_PIN(59, "C20 PCI REQ2 N"),
1060 	/* Row D */
1061 	PINCTRL_PIN(60, "D1 AVCC3IOAHA"),
1062 	PINCTRL_PIN(61, "D2 AVCCKHA"),
1063 	PINCTRL_PIN(62, "D3 XTALO"),
1064 	PINCTRL_PIN(63, "D4 GND"),
1065 	PINCTRL_PIN(64, "D5 CIR RXD"),
1066 	PINCTRL_PIN(65, "D6 DRAM A7"),
1067 	PINCTRL_PIN(66, "D7 DRAM A4"),
1068 	PINCTRL_PIN(67, "D8 DRAM A8"),
1069 	PINCTRL_PIN(68, "D9 DRAM CKE"),
1070 	PINCTRL_PIN(69, "D10 DRAM DQ14"),
1071 	PINCTRL_PIN(70, "D11 DRAM DQ5"),
1072 	PINCTRL_PIN(71, "D12 DRAM DQ25"),
1073 	PINCTRL_PIN(72, "D13 DRAM DQ17"),
1074 	PINCTRL_PIN(73, "D14 DRAM DQ23"),
1075 	PINCTRL_PIN(74, "D15 DRAM RAS N"),
1076 	PINCTRL_PIN(75, "D16 DRAM A1"),
1077 	PINCTRL_PIN(76, "D17 GND"),
1078 	PINCTRL_PIN(77, "D18 EXT RESET N"),
1079 	PINCTRL_PIN(78, "D19 PCI REQ1 N"),
1080 	PINCTRL_PIN(79, "D20 PCI REQ3 N"),
1081 	/* Row E */
1082 	PINCTRL_PIN(80, "E1 VCC2IO CTRL"),
1083 	PINCTRL_PIN(81, "E2 VREF CTRL"),
1084 	PINCTRL_PIN(82, "E3 CIR RST N"),
1085 	PINCTRL_PIN(83, "E4 PWR BTN"),
1086 	PINCTRL_PIN(84, "E5 GND"),
1087 	PINCTRL_PIN(85, "E6 CIR TXD"),
1088 	PINCTRL_PIN(86, "E7 VCCK CTRL"),
1089 	PINCTRL_PIN(87, "E8 DRAM A9"),
1090 	PINCTRL_PIN(88, "E9 DRAM DQ12"),
1091 	PINCTRL_PIN(89, "E10 DRAM DQ15"),
1092 	PINCTRL_PIN(90, "E11 DRAM DQM3"),
1093 	PINCTRL_PIN(91, "E12 DRAM DQ29"),
1094 	PINCTRL_PIN(92, "E13 DRAM DQ19"),
1095 	PINCTRL_PIN(93, "E14 DRAM A13"),
1096 	PINCTRL_PIN(94, "E15 DRAM A0"),
1097 	PINCTRL_PIN(95, "E16 GND"),
1098 	PINCTRL_PIN(96, "E17 PCI INTD N"),
1099 	PINCTRL_PIN(97, "E18 PCI GNT3 N"),
1100 	PINCTRL_PIN(98, "E19 PCI AD29"),
1101 	PINCTRL_PIN(99, "E20 PCI AD28"),
1102 	/* Row F */
1103 	PINCTRL_PIN(100, "F1 AVCCKHB"),
1104 	PINCTRL_PIN(101, "F2 AVCCK P"),
1105 	PINCTRL_PIN(102, "F3 EBG"),
1106 	PINCTRL_PIN(103, "F4 REXT"),
1107 	PINCTRL_PIN(104, "F5 AVCC3IOHB"),
1108 	PINCTRL_PIN(105, "F6 GND"),
1109 	PINCTRL_PIN(106, "F7 VCC2IOHA 2"),
1110 	PINCTRL_PIN(107, "F8 VCC2IOHA 2"),
1111 	PINCTRL_PIN(108, "F9 VCC2IOHA 2"),
1112 	PINCTRL_PIN(109, "F10 V1"),
1113 	PINCTRL_PIN(110, "F11 V1"),
1114 	PINCTRL_PIN(111, "F12 VCC2IOHA 2"),
1115 	PINCTRL_PIN(112, "F13 VCC2IOHA 2"),
1116 	PINCTRL_PIN(113, "F14 VCC2IOHA 2"),
1117 	PINCTRL_PIN(114, "F15 GND"),
1118 	PINCTRL_PIN(115, "F16 PCI CLK"),
1119 	PINCTRL_PIN(116, "F17 PCI GNT2 N"),
1120 	PINCTRL_PIN(117, "F18 PCI AD31"),
1121 	PINCTRL_PIN(118, "F19 PCI AD26"),
1122 	PINCTRL_PIN(119, "F20 PCI CBE3 N"),
1123 	/* Row G */
1124 	PINCTRL_PIN(120, "G1 SATA0 RXDP"),
1125 	PINCTRL_PIN(121, "G2 SATA0 RXDN"),
1126 	PINCTRL_PIN(122, "G3 AGNDK 0"),
1127 	PINCTRL_PIN(123, "G4 AVCCK S"),
1128 	PINCTRL_PIN(124, "G5 AVCC3 S"),
1129 	PINCTRL_PIN(125, "G6 VCC2IOHA 2"),
1130 	PINCTRL_PIN(126, "G7 GND"),
1131 	PINCTRL_PIN(127, "G8 VCC2IOHA 2"),
1132 	PINCTRL_PIN(128, "G9 V1"),
1133 	PINCTRL_PIN(129, "G10 V1"),
1134 	PINCTRL_PIN(130, "G11 V1"),
1135 	PINCTRL_PIN(131, "G12 V1"),
1136 	PINCTRL_PIN(132, "G13 VCC2IOHA 2"),
1137 	PINCTRL_PIN(133, "G14 GND"),
1138 	PINCTRL_PIN(134, "G15 VCC3IOHA"),
1139 	PINCTRL_PIN(135, "G16 PCI REQ0 N"),
1140 	PINCTRL_PIN(136, "G17 PCI AD30"),
1141 	PINCTRL_PIN(137, "G18 PCI AD24"),
1142 	PINCTRL_PIN(138, "G19 PCI AD23"),
1143 	PINCTRL_PIN(139, "G20 PCI AD21"),
1144 	/* Row H */
1145 	PINCTRL_PIN(140, "H1 SATA0 TXDP"),
1146 	PINCTRL_PIN(141, "H2 SATA0 TXDN"),
1147 	PINCTRL_PIN(142, "H3 AGNDK 1"),
1148 	PINCTRL_PIN(143, "H4 AVCCK 0"),
1149 	PINCTRL_PIN(144, "H5 TEST CLKOUT"),
1150 	PINCTRL_PIN(145, "H6 AGND"),
1151 	PINCTRL_PIN(146, "H7 VCC2IOHA 2"),
1152 	PINCTRL_PIN(147, "H8 GND"),
1153 	PINCTRL_PIN(148, "H9 GND"),
1154 	PINCTRL_PIN(149, "H10 GDN"),
1155 	PINCTRL_PIN(150, "H11 GND"),
1156 	PINCTRL_PIN(151, "H12 GND"),
1157 	PINCTRL_PIN(152, "H13 GND"),
1158 	PINCTRL_PIN(153, "H14 VCC3IOHA"),
1159 	PINCTRL_PIN(154, "H15 VCC3IOHA"),
1160 	PINCTRL_PIN(155, "H16 PCI AD27"),
1161 	PINCTRL_PIN(156, "H17 PCI AD25"),
1162 	PINCTRL_PIN(157, "H18 PCI AD22"),
1163 	PINCTRL_PIN(158, "H19 PCI AD18"),
1164 	PINCTRL_PIN(159, "H20 PCI AD17"),
1165 	/* Row J (for some reason I is skipped) */
1166 	PINCTRL_PIN(160, "J1 SATA1 TXDP"),
1167 	PINCTRL_PIN(161, "J2 SATA1 TXDN"),
1168 	PINCTRL_PIN(162, "J3 AGNDK 2"),
1169 	PINCTRL_PIN(163, "J4 AVCCK 1"),
1170 	PINCTRL_PIN(164, "J5 AGND"),
1171 	PINCTRL_PIN(165, "J6 AGND"),
1172 	PINCTRL_PIN(166, "J7 V1"),
1173 	PINCTRL_PIN(167, "J8 GND"),
1174 	PINCTRL_PIN(168, "J9 GND"),
1175 	PINCTRL_PIN(169, "J10 GND"),
1176 	PINCTRL_PIN(170, "J11 GND"),
1177 	PINCTRL_PIN(171, "J12 GND"),
1178 	PINCTRL_PIN(172, "J13 GND"),
1179 	PINCTRL_PIN(173, "J14 V1"),
1180 	PINCTRL_PIN(174, "J15 VCC3IOHA"),
1181 	PINCTRL_PIN(175, "J16 PCI AD19"),
1182 	PINCTRL_PIN(176, "J17 PCI AD20"),
1183 	PINCTRL_PIN(177, "J18 PCI AD16"),
1184 	PINCTRL_PIN(178, "J19 PCI CBE2 N"),
1185 	PINCTRL_PIN(179, "J20 PCI FRAME N"),
1186 	/* Row K */
1187 	PINCTRL_PIN(180, "K1 SATA1 RXDP"),
1188 	PINCTRL_PIN(181, "K2 SATA1 RXDN"),
1189 	PINCTRL_PIN(182, "K3 AGNDK 3"),
1190 	PINCTRL_PIN(183, "K4 AVCCK 2"),
1191 	PINCTRL_PIN(184, "K5 AGND"),
1192 	PINCTRL_PIN(185, "K6 V1"),
1193 	PINCTRL_PIN(186, "K7 V1"),
1194 	PINCTRL_PIN(187, "K8 GND"),
1195 	PINCTRL_PIN(188, "K9 GND"),
1196 	PINCTRL_PIN(189, "K10 GND"),
1197 	PINCTRL_PIN(190, "K11 GND"),
1198 	PINCTRL_PIN(191, "K12 GND"),
1199 	PINCTRL_PIN(192, "K13 GND"),
1200 	PINCTRL_PIN(193, "K14 V1"),
1201 	PINCTRL_PIN(194, "K15 V1"),
1202 	PINCTRL_PIN(195, "K16 PCI TRDY N"),
1203 	PINCTRL_PIN(196, "K17 PCI IRDY N"),
1204 	PINCTRL_PIN(197, "K18 PCI DEVSEL N"),
1205 	PINCTRL_PIN(198, "K19 PCI STOP N"),
1206 	PINCTRL_PIN(199, "K20 PCI PAR"),
1207 	/* Row L */
1208 	PINCTRL_PIN(200, "L1 IDE CS0 N"),
1209 	PINCTRL_PIN(201, "L2 IDE DA0"),
1210 	PINCTRL_PIN(202, "L3 AVCCK 3"),
1211 	PINCTRL_PIN(203, "L4 AGND"),
1212 	PINCTRL_PIN(204, "L5 IDE DIOR N"),
1213 	PINCTRL_PIN(205, "L6 V1"),
1214 	PINCTRL_PIN(206, "L7 V1"),
1215 	PINCTRL_PIN(207, "L8 GND"),
1216 	PINCTRL_PIN(208, "L9 GND"),
1217 	PINCTRL_PIN(209, "L10 GND"),
1218 	PINCTRL_PIN(210, "L11 GND"),
1219 	PINCTRL_PIN(211, "L12 GND"),
1220 	PINCTRL_PIN(212, "L13 GND"),
1221 	PINCTRL_PIN(213, "L14 V1"),
1222 	PINCTRL_PIN(214, "L15 V1"),
1223 	PINCTRL_PIN(215, "L16 PCI AD12"),
1224 	PINCTRL_PIN(216, "L17 PCI AD13"),
1225 	PINCTRL_PIN(217, "L18 PCI AD14"),
1226 	PINCTRL_PIN(218, "L19 PCI AD15"),
1227 	PINCTRL_PIN(219, "L20 PCI CBE1 N"),
1228 	/* Row M */
1229 	PINCTRL_PIN(220, "M1 IDE DA1"),
1230 	PINCTRL_PIN(221, "M2 IDE CS1 N"),
1231 	PINCTRL_PIN(222, "M3 IDE DA2"),
1232 	PINCTRL_PIN(223, "M4 IDE DMACK N"),
1233 	PINCTRL_PIN(224, "M5 IDE DD1"),
1234 	PINCTRL_PIN(225, "M6 VCC3IOHA"),
1235 	PINCTRL_PIN(226, "M7 V1"),
1236 	PINCTRL_PIN(227, "M8 GND"),
1237 	PINCTRL_PIN(228, "M9 GND"),
1238 	PINCTRL_PIN(229, "M10 GND"),
1239 	PINCTRL_PIN(230, "M11 GND"),
1240 	PINCTRL_PIN(231, "M12 GND"),
1241 	PINCTRL_PIN(232, "M13 GND"),
1242 	PINCTRL_PIN(233, "M14 V1"),
1243 	PINCTRL_PIN(234, "M15 VCC3IOHA"),
1244 	PINCTRL_PIN(235, "M16 PCI AD7"),
1245 	PINCTRL_PIN(236, "M17 PCI AD6"),
1246 	PINCTRL_PIN(237, "M18 PCI AD9"),
1247 	PINCTRL_PIN(238, "M19 PCI AD10"),
1248 	PINCTRL_PIN(239, "M20 PCI AD11"),
1249 	/* Row N */
1250 	PINCTRL_PIN(240, "N1 IDE IORDY"),
1251 	PINCTRL_PIN(241, "N2 IDE INTRQ"),
1252 	PINCTRL_PIN(242, "N3 IDE DIOW N"),
1253 	PINCTRL_PIN(243, "N4 IDE DD15"),
1254 	PINCTRL_PIN(244, "N5 IDE DMARQ"),
1255 	PINCTRL_PIN(245, "N6 VCC3IOHA"),
1256 	PINCTRL_PIN(246, "N7 VCC3IOHA"),
1257 	PINCTRL_PIN(247, "N8 GND"),
1258 	PINCTRL_PIN(248, "N9 GND"),
1259 	PINCTRL_PIN(249, "N10 GND"),
1260 	PINCTRL_PIN(250, "N11 GND"),
1261 	PINCTRL_PIN(251, "N12 GND"),
1262 	PINCTRL_PIN(252, "N13 GND"),
1263 	PINCTRL_PIN(253, "N14 VCC3IOHA"),
1264 	PINCTRL_PIN(254, "N15 VCC3IOHA"),
1265 	PINCTRL_PIN(255, "N16 PCI CLKRUN N"),
1266 	PINCTRL_PIN(256, "N17 PCI AD0"),
1267 	PINCTRL_PIN(257, "N18 PCI AD4"),
1268 	PINCTRL_PIN(258, "N19 PCI CBE0 N"),
1269 	PINCTRL_PIN(259, "N20 PCI AD8"),
1270 	/* Row P (for some reason O is skipped) */
1271 	PINCTRL_PIN(260, "P1 IDE DD0"),
1272 	PINCTRL_PIN(261, "P2 IDE DD14"),
1273 	PINCTRL_PIN(262, "P3 IDE DD2"),
1274 	PINCTRL_PIN(263, "P4 IDE DD4"),
1275 	PINCTRL_PIN(264, "P5 IDE DD3"),
1276 	PINCTRL_PIN(265, "P6 VCC3IOHA"),
1277 	PINCTRL_PIN(266, "P7 GND"),
1278 	PINCTRL_PIN(267, "P8 VCC2IOHA 1"),
1279 	PINCTRL_PIN(268, "P9 V1"),
1280 	PINCTRL_PIN(269, "P10 V1"),
1281 	PINCTRL_PIN(270, "P11 V1"),
1282 	PINCTRL_PIN(271, "P12 V1"),
1283 	PINCTRL_PIN(272, "P13 VCC3IOHA"),
1284 	PINCTRL_PIN(273, "P14 GND"),
1285 	PINCTRL_PIN(274, "P15 VCC3IOHA"),
1286 	PINCTRL_PIN(275, "P16 GPIO0 30"),
1287 	PINCTRL_PIN(276, "P17 GPIO0 28"),
1288 	PINCTRL_PIN(277, "P18 PCI AD1"),
1289 	PINCTRL_PIN(278, "P19 PCI AD3"),
1290 	PINCTRL_PIN(279, "P20 PCI AD5"),
1291 	/* Row R (for some reason Q us skipped) */
1292 	PINCTRL_PIN(280, "R1 IDE DD13"),
1293 	PINCTRL_PIN(281, "R2 IDE DD12"),
1294 	PINCTRL_PIN(282, "R3 IDE DD10"),
1295 	PINCTRL_PIN(283, "R4 IDE DD6"),
1296 	PINCTRL_PIN(284, "R5 ICE0 IDI"),
1297 	PINCTRL_PIN(285, "R6 GND"),
1298 	PINCTRL_PIN(286, "R7 VCC2IOHA 1"),
1299 	PINCTRL_PIN(287, "R8 VCC2IOHA 1"),
1300 	PINCTRL_PIN(288, "R9 VCC2IOHA 1"),
1301 	PINCTRL_PIN(289, "R10 V1"),
1302 	PINCTRL_PIN(290, "R11 V1"),
1303 	PINCTRL_PIN(291, "R12 VCC3IOHA"),
1304 	PINCTRL_PIN(292, "R13 VCC3IOHA"),
1305 	PINCTRL_PIN(293, "R14 VCC3IOHA"),
1306 	PINCTRL_PIN(294, "R15 GND"),
1307 	PINCTRL_PIN(295, "R16 GPIO0 23"),
1308 	PINCTRL_PIN(296, "R17 GPIO0 21"),
1309 	PINCTRL_PIN(297, "R18 GPIO0 26"),
1310 	PINCTRL_PIN(298, "R19 GPIO0 31"),
1311 	PINCTRL_PIN(299, "R20 PCI AD2"),
1312 	/* Row T (for some reason S is skipped) */
1313 	PINCTRL_PIN(300, "T1 IDE DD11"),
1314 	PINCTRL_PIN(301, "T2 IDE DD5"),
1315 	PINCTRL_PIN(302, "T3 IDE DD8"),
1316 	PINCTRL_PIN(303, "T4 ICE0 IDO"),
1317 	PINCTRL_PIN(304, "T5 GND"),
1318 	PINCTRL_PIN(305, "T6 USB GNDA U20"),
1319 	PINCTRL_PIN(306, "T7 GMAC0 TXD0"),
1320 	PINCTRL_PIN(307, "T8 GMAC0 TXEN"),
1321 	PINCTRL_PIN(308, "T9 GMAC1 TXD3"),
1322 	PINCTRL_PIN(309, "T10 GMAC1 RXDV"),
1323 	PINCTRL_PIN(310, "T11 GMAC1 RXD2"),
1324 	PINCTRL_PIN(311, "T12 GPIO1 29"),
1325 	PINCTRL_PIN(312, "T13 GPIO0 3"),
1326 	PINCTRL_PIN(313, "T14 GPIO0 9"),
1327 	PINCTRL_PIN(314, "T15 GPIO0 16"),
1328 	PINCTRL_PIN(315, "T16 GND"),
1329 	PINCTRL_PIN(316, "T17 GPIO0 14"),
1330 	PINCTRL_PIN(317, "T18 GPIO0 19"),
1331 	PINCTRL_PIN(318, "T19 GPIO0 27"),
1332 	PINCTRL_PIN(319, "T20 GPIO0 29"),
1333 	/* Row U */
1334 	PINCTRL_PIN(320, "U1 IDE DD9"),
1335 	PINCTRL_PIN(321, "U2 IDE DD7"),
1336 	PINCTRL_PIN(322, "U3 ICE0 ICK"),
1337 	PINCTRL_PIN(323, "U4 GND"),
1338 	PINCTRL_PIN(324, "U5 USB XSCO"),
1339 	PINCTRL_PIN(325, "U6 GMAC0 TXD1"),
1340 	PINCTRL_PIN(326, "U7 GMAC0 TXD3"),
1341 	PINCTRL_PIN(327, "U8 GMAC0 TXC"),
1342 	PINCTRL_PIN(328, "U9 GMAC0 RXD3"),
1343 	PINCTRL_PIN(329, "U10 GMAC1 TXD0"),
1344 	PINCTRL_PIN(330, "U11 GMAC1 CRS"),
1345 	PINCTRL_PIN(331, "U12 EXT CLK"),
1346 	PINCTRL_PIN(332, "U13 DEV DEF"),
1347 	PINCTRL_PIN(333, "U14 GPIO0 0"),
1348 	PINCTRL_PIN(334, "U15 GPIO0 4"),
1349 	PINCTRL_PIN(335, "U16 GPIO0 10"),
1350 	PINCTRL_PIN(336, "U17 GND"),
1351 	PINCTRL_PIN(337, "U18 GPIO0 17"),
1352 	PINCTRL_PIN(338, "U19 GPIO0 22"),
1353 	PINCTRL_PIN(339, "U20 GPIO0 25"),
1354 	/* Row V */
1355 	PINCTRL_PIN(340, "V1 ICE0 DBGACK"),
1356 	PINCTRL_PIN(341, "V2 ICE0 DBGRQ"),
1357 	PINCTRL_PIN(342, "V3 GND"),
1358 	PINCTRL_PIN(343, "V4 ICE0 IRST N"),
1359 	PINCTRL_PIN(344, "V5 USB XSCI"),
1360 	PINCTRL_PIN(345, "V6 GMAC0 COL"),
1361 	PINCTRL_PIN(346, "V7 GMAC0 TXD2"),
1362 	PINCTRL_PIN(347, "V8 GMAC0 RXDV"),
1363 	PINCTRL_PIN(348, "V9 GMAC0 RXD1"),
1364 	PINCTRL_PIN(349, "V10 GMAC1 COL"),
1365 	PINCTRL_PIN(350, "V11 GMAC1 TXC"),
1366 	PINCTRL_PIN(351, "V12 GMAC1 RXD1"),
1367 	PINCTRL_PIN(352, "V13 MODE SEL1"),
1368 	PINCTRL_PIN(353, "V14 GPIO1 28"),
1369 	PINCTRL_PIN(354, "V15 GPIO0 1"),
1370 	PINCTRL_PIN(355, "V16 GPIO0 8"),
1371 	PINCTRL_PIN(356, "V17 GPIO0 11"),
1372 	PINCTRL_PIN(357, "V18 GND"),
1373 	PINCTRL_PIN(358, "V19 GPIO0 18"),
1374 	PINCTRL_PIN(359, "V20 GPIO0 24"),
1375 	/* Row W */
1376 	PINCTRL_PIN(360, "W1 IDE RESET N"),
1377 	PINCTRL_PIN(361, "W2 GND"),
1378 	PINCTRL_PIN(362, "W3 USB0 VCCHSRT"),
1379 	PINCTRL_PIN(363, "W4 USB0 DP"),
1380 	PINCTRL_PIN(364, "W5 USB VCCA U20"),
1381 	PINCTRL_PIN(365, "W6 USB1 DP"),
1382 	PINCTRL_PIN(366, "W7 USB1 GNDHSRT"),
1383 	PINCTRL_PIN(367, "W8 GMAC0 RXD0"),
1384 	PINCTRL_PIN(368, "W9 GMAC0 CRS"),
1385 	PINCTRL_PIN(369, "W10 GMAC1 TXD2"),
1386 	PINCTRL_PIN(370, "W11 GMAC1 TXEN"),
1387 	PINCTRL_PIN(371, "W12 GMAC1 RXD3"),
1388 	PINCTRL_PIN(372, "W13 MODE SEL0"),
1389 	PINCTRL_PIN(373, "W14 MODE SEL3"),
1390 	PINCTRL_PIN(374, "W15 GPIO1 31"),
1391 	PINCTRL_PIN(375, "W16 GPIO0 5"),
1392 	PINCTRL_PIN(376, "W17 GPIO0 7"),
1393 	PINCTRL_PIN(377, "W18 GPIO0 12"),
1394 	PINCTRL_PIN(378, "W19 GND"),
1395 	PINCTRL_PIN(379, "W20 GPIO0 20"),
1396 	/* Row Y */
1397 	PINCTRL_PIN(380, "Y1 ICE0 IMS"),
1398 	PINCTRL_PIN(381, "Y2 USB0 GNDHSRT"),
1399 	PINCTRL_PIN(382, "Y3 USB0 DM"),
1400 	PINCTRL_PIN(383, "Y4 USB RREF"),
1401 	PINCTRL_PIN(384, "Y5 USB1 DM"),
1402 	PINCTRL_PIN(385, "Y6 USB1 VCCHSRT"),
1403 	PINCTRL_PIN(386, "Y7 GMAC0 RXC"),
1404 	PINCTRL_PIN(387, "Y8 GMAC0 RXD2"),
1405 	PINCTRL_PIN(388, "Y9 REF CLK"),
1406 	PINCTRL_PIN(389, "Y10 GMAC1 TXD1"),
1407 	PINCTRL_PIN(390, "Y11 GMAC1 RXC"),
1408 	PINCTRL_PIN(391, "Y12 GMAC1 RXD0"),
1409 	PINCTRL_PIN(392, "Y13 M30 CLK"),
1410 	PINCTRL_PIN(393, "Y14 MODE SEL2"),
1411 	PINCTRL_PIN(394, "Y15 GPIO1 30"),
1412 	PINCTRL_PIN(395, "Y16 GPIO0 2"),
1413 	PINCTRL_PIN(396, "Y17 GPIO0 6"),
1414 	PINCTRL_PIN(397, "Y18 SYS RESET N"),
1415 	PINCTRL_PIN(398, "Y19 GPIO0 13"),
1416 	PINCTRL_PIN(399, "Y20 GPIO0 15"),
1417 };
1418 
1419 /* Digital ground */
1420 static const unsigned int gnd_3516_pins[] = {
1421 	21, 38, 42, 57, 63, 76, 84, 95, 105, 114, 126, 133, 147, 148, 149, 150,
1422 	151, 152, 167, 168, 169, 170, 171, 172, 187, 188, 189, 190, 191, 192,
1423 	207, 208, 209, 210, 211, 212, 227, 228, 229, 230, 231, 232, 247, 248,
1424 	249, 250, 251, 252, 266, 273, 285, 294, 304, 315, 323, 336, 342, 357,
1425 	361, 378
1426 };
1427 
1428 static const unsigned int dram_3516_pins[] = {
1429 	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 23, 24, 25, 26,
1430 	27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 44, 45, 46, 47, 48, 49, 50,
1431 	51, 52, 53, 54, 55, 56, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
1432 	87, 88, 89, 90, 91, 92, 93, 94
1433 };
1434 
1435 static const unsigned int rtc_3516_pins[] = { 0, 43, 22 };
1436 
1437 static const unsigned int power_3516_pins[] = { 20, 83, 40, 41, 60, 61, 62 };
1438 
1439 static const unsigned int cir_3516_pins[] = { 85, 64, 82 };
1440 
1441 static const unsigned int system_3516_pins[] = {
1442 	332, 392, 372, 373, 393, 352, 331, 388, 397, 77
1443 };
1444 
1445 static const unsigned int vcontrol_3516_pins[] = { 86, 81, 80 };
1446 
1447 static const unsigned int ice_3516_pins[] = { 340, 341, 303, 322, 380, 284, 343 };
1448 
1449 static const unsigned int ide_3516_pins[] = {
1450 	200, 201, 204, 220, 221, 222, 223, 224, 240, 241, 242, 243, 244, 260,
1451 	261, 262, 263, 264, 280, 281, 282, 283, 300, 301, 302, 320, 321, 360
1452 };
1453 
1454 static const unsigned int sata_3516_pins[] = {
1455 	100, 101, 102, 103, 104, 120, 121, 122, 123, 124, 140, 141, 142, 143,
1456 	144, 160, 161, 162, 163, 180, 181, 182, 183, 202
1457 };
1458 
1459 static const unsigned int usb_3516_pins[] = {
1460 	305, 324, 344, 362, 363, 364, 365, 366, 381, 382, 383, 384, 385
1461 };
1462 
1463 /* GMII, ethernet pins */
1464 static const unsigned int gmii_gmac0_3516_pins[] = {
1465 	306, 307, 325, 326, 327, 328, 345, 346, 347, 348, 367, 368, 386, 387
1466 };
1467 
1468 static const unsigned int gmii_gmac1_3516_pins[] = {
1469 	308, 309, 310, 329, 330, 349, 350, 351, 369, 370, 371, 389, 390, 391
1470 };
1471 
1472 static const unsigned int pci_3516_pins[] = {
1473 	17, 18, 19, 39, 58, 59, 78, 79, 96, 97, 98, 99, 115, 116, 117, 118,
1474 	119, 135, 136, 137, 138, 139, 155, 156, 157, 158, 159, 175, 176, 177,
1475 	178, 179, 195, 196, 197, 198, 199, 215, 216, 217, 218, 219, 235, 236,
1476 	237, 238, 239, 255, 256, 257, 258, 259, 277, 278, 279, 299
1477 };
1478 
1479 /*
1480  * Apparently the LPC interface is using the PCICLK for the clocking so
1481  * PCI needs to be active at the same time.
1482  */
1483 static const unsigned int lpc_3516_pins[] = {
1484 	355, /* LPC_LAD[0] */
1485 	356, /* LPC_SERIRQ */
1486 	377, /* LPC_LAD[2] */
1487 	398, /* LPC_LFRAME# */
1488 	316, /* LPC_LAD[3] */
1489 	399, /* LPC_LAD[1] */
1490 };
1491 
1492 /* Character LCD */
1493 static const unsigned int lcd_3516_pins[] = {
1494 	391, 351, 310, 371, 353, 311, 394, 374, 314, 359, 339
1495 };
1496 
1497 static const unsigned int ssp_3516_pins[] = {
1498 	355, /* SSP_97RST# SSP AC97 Reset, active low */
1499 	356, /* SSP_FSC */
1500 	377, /* SSP_ECLK */
1501 	398, /* SSP_TXD */
1502 	316, /* SSP_RXD */
1503 	399, /* SSP_SCLK */
1504 };
1505 
1506 static const unsigned int uart_rxtx_3516_pins[] = {
1507 	313, /* UART_SIN serial input, RX */
1508 	335, /* UART_SOUT serial output, TX */
1509 };
1510 
1511 static const unsigned int uart_modem_3516_pins[] = {
1512 	355, /* UART_NDCD DCD carrier detect */
1513 	356, /* UART_NDTR DTR data terminal ready */
1514 	377, /* UART_NDSR DSR data set ready */
1515 	398, /* UART_NRTS RTS request to send */
1516 	316, /* UART_NCTS CTS clear to send */
1517 	399, /* UART_NRI RI ring indicator */
1518 };
1519 
1520 static const unsigned int tvc_3516_pins[] = {
1521 	353, /* TVC_DATA[0] */
1522 	311, /* TVC_DATA[1] */
1523 	394, /* TVC_DATA[2] */
1524 	374, /* TVC_DATA[3] */
1525 	333, /* TVC_CLK */
1526 	354, /* TVC_DATA[4] */
1527 	395, /* TVC_DATA[5] */
1528 	312, /* TVC_DATA[6] */
1529 	334, /* TVC_DATA[7] */
1530 };
1531 
1532 /* NAND flash pins */
1533 static const unsigned int nflash_3516_pins[] = {
1534 	243, 260, 261, 224, 280, 262, 281, 264, 300, 263, 282, 301, 320, 283,
1535 	302, 321, 337, 358, 295, 359, 339, 275, 298
1536 };
1537 
1538 /* Parallel (NOR) flash pins, D[0-15], A[16-25], CE0, CE1, RB, WE, OE, ALE */
1539 static const unsigned int pflash_3516_pins[] = {
1540 	221, 200, 222, 201, 220, 243, 260, 261, 224, 280, 262, 281, 264, 300,
1541 	263, 282, 301, 320, 283, 302, 321, 317, 379, 295, 359, 339, 297, 318,
1542 	276, 319, 275, 298
1543 };
1544 
1545 /*
1546  * The parallel flash can be set up in a 26-bit address bus mode exposing
1547  * A[0-15] (A[15] takes the place of ALE), but it has the
1548  * side effect of stealing pins from GMAC1 and TVC so these blocks cannot be
1549  * used at the same time.
1550  */
1551 static const unsigned int pflash_3516_pins_extended[] = {
1552 	221, 200, 222, 201, 220, 243, 260, 261, 224, 280, 262, 281, 264, 300,
1553 	263, 282, 301, 320, 283, 302, 321, 317, 379, 295, 359, 339, 297, 318,
1554 	276, 319, 275, 298,
1555 	/* The extra pins */
1556 	349, 308, 369, 389, 329, 350, 370, 309, 390, 391, 351, 310, 371, 330,
1557 	333
1558 };
1559 
1560 /* Serial flash pins CE0, CE1, DI, DO, CK */
1561 static const unsigned int sflash_3516_pins[] = { 296, 338, 295, 359, 339 };
1562 
1563 /* The GPIO0A (0-4) pins overlap with TVC and extended parallel flash */
1564 static const unsigned int gpio0a_3516_pins[] = { 333, 354, 395, 312, 334 };
1565 
1566 /* The GPIO0B (5-7) pins overlap with ICE */
1567 static const unsigned int gpio0b_3516_pins[] = { 375, 396, 376 };
1568 
1569 /* The GPIO0C (8,11-15) pins overlap with LPC, UART and SSP */
1570 static const unsigned int gpio0c_3516_pins[] = { 355, 356, 377, 398, 316, 399 };
1571 
1572 /* The GPIO0D (9,10) pins overlap with UART RX/TX */
1573 static const unsigned int gpio0d_3516_pins[] = { 313, 335 };
1574 
1575 /* The GPIO0E (16) pins overlap with LCD */
1576 static const unsigned int gpio0e_3516_pins[] = { 314 };
1577 
1578 /* The GPIO0F (17,18) pins overlap with NAND flash CE0, CE1 */
1579 static const unsigned int gpio0f_3516_pins[] = { 337, 358 };
1580 
1581 /* The GPIO0G (19,20,26-29) pins overlap with parallel flash */
1582 static const unsigned int gpio0g_3516_pins[] = { 317, 379, 297, 318, 276, 319 };
1583 
1584 /* The GPIO0H (21,22) pins overlap with serial flash CE0, CE1 */
1585 static const unsigned int gpio0h_3516_pins[] = { 296, 338 };
1586 
1587 /* The GPIO0I (23) pins overlap with all flash */
1588 static const unsigned int gpio0i_3516_pins[] = { 295 };
1589 
1590 /* The GPIO0J (24,25) pins overlap with all flash and LCD */
1591 static const unsigned int gpio0j_3516_pins[] = { 359, 339 };
1592 
1593 /* The GPIO0K (30,31) pins overlap with NAND flash */
1594 static const unsigned int gpio0k_3516_pins[] = { 275, 298 };
1595 
1596 /* The GPIO1A (0-4) pins that overlap with IDE and parallel flash */
1597 static const unsigned int gpio1a_3516_pins[] = { 221, 200, 222, 201, 220 };
1598 
1599 /* The GPIO1B (5-10,27) pins overlap with just IDE */
1600 static const unsigned int gpio1b_3516_pins[] = { 241, 223, 240, 204, 242, 244, 360 };
1601 
1602 /* The GPIO1C (11-26) pins overlap with IDE, parallel flash and NAND flash */
1603 static const unsigned int gpio1c_3516_pins[] = {
1604 	243, 260, 261, 224, 280, 262, 281, 264, 300, 263, 282, 301, 320, 283,
1605 	302, 321
1606 };
1607 
1608 /* The GPIO1D (28-31) pins overlap with TVC */
1609 static const unsigned int gpio1d_3516_pins[] = { 353, 311, 394, 374 };
1610 
1611 /* The GPIO2A (0-3) pins overlap with GMII GMAC1 and extended parallel flash */
1612 static const unsigned int gpio2a_3516_pins[] = { 308, 369, 389, 329 };
1613 
1614 /* The GPIO2B (4-7) pins overlap with GMII GMAC1, extended parallel flash and LCD */
1615 static const unsigned int gpio2b_3516_pins[] = { 391, 351, 310, 371 };
1616 
1617 /* The GPIO2C (8-31) pins overlap with PCI */
1618 static const unsigned int gpio2c_3516_pins[] = {
1619 	259, 237, 238, 239, 215, 216, 217, 218, 177, 159, 158, 175, 176, 139,
1620 	157, 138, 137, 156, 118, 155, 99, 98, 136, 117
1621 };
1622 
1623 /* Groups for the 3516 SoC/package */
1624 static const struct gemini_pin_group gemini_3516_pin_groups[] = {
1625 	{
1626 		.name = "gndgrp",
1627 		.pins = gnd_3516_pins,
1628 		.num_pins = ARRAY_SIZE(gnd_3516_pins),
1629 	},
1630 	{
1631 		.name = "dramgrp",
1632 		.pins = dram_3516_pins,
1633 		.num_pins = ARRAY_SIZE(dram_3516_pins),
1634 		.mask = DRAM_PADS_POWERDOWN,
1635 	},
1636 	{
1637 		.name = "rtcgrp",
1638 		.pins = rtc_3516_pins,
1639 		.num_pins = ARRAY_SIZE(rtc_3516_pins),
1640 	},
1641 	{
1642 		.name = "powergrp",
1643 		.pins = power_3516_pins,
1644 		.num_pins = ARRAY_SIZE(power_3516_pins),
1645 	},
1646 	{
1647 		.name = "cirgrp",
1648 		.pins = cir_3516_pins,
1649 		.num_pins = ARRAY_SIZE(cir_3516_pins),
1650 	},
1651 	{
1652 		.name = "systemgrp",
1653 		.pins = system_3516_pins,
1654 		.num_pins = ARRAY_SIZE(system_3516_pins),
1655 	},
1656 	{
1657 		.name = "vcontrolgrp",
1658 		.pins = vcontrol_3516_pins,
1659 		.num_pins = ARRAY_SIZE(vcontrol_3516_pins),
1660 	},
1661 	{
1662 		.name = "icegrp",
1663 		.pins = ice_3516_pins,
1664 		.num_pins = ARRAY_SIZE(ice_3516_pins),
1665 		/* Conflict with some GPIO groups */
1666 	},
1667 	{
1668 		.name = "idegrp",
1669 		.pins = ide_3516_pins,
1670 		.num_pins = ARRAY_SIZE(ide_3516_pins),
1671 		/* Conflict with all flash usage */
1672 		.value = IDE_PADS_ENABLE | NAND_PADS_DISABLE |
1673 			PFLASH_PADS_DISABLE | SFLASH_PADS_DISABLE,
1674 	},
1675 	{
1676 		.name = "satagrp",
1677 		.pins = sata_3516_pins,
1678 		.num_pins = ARRAY_SIZE(sata_3516_pins),
1679 	},
1680 	{
1681 		.name = "usbgrp",
1682 		.pins = usb_3516_pins,
1683 		.num_pins = ARRAY_SIZE(usb_3516_pins),
1684 	},
1685 	{
1686 		.name = "gmii_gmac0_grp",
1687 		.pins = gmii_gmac0_3516_pins,
1688 		.num_pins = ARRAY_SIZE(gmii_gmac0_3516_pins),
1689 	},
1690 	{
1691 		.name = "gmii_gmac1_grp",
1692 		.pins = gmii_gmac1_3516_pins,
1693 		.num_pins = ARRAY_SIZE(gmii_gmac1_3516_pins),
1694 		/* Bring out RGMII on the GMAC1 pins */
1695 		.value = GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
1696 	},
1697 	{
1698 		.name = "pcigrp",
1699 		.pins = pci_3516_pins,
1700 		.num_pins = ARRAY_SIZE(pci_3516_pins),
1701 		/* Conflict only with GPIO2 */
1702 		.value = PCI_PADS_ENABLE | PCI_CLK_PAD_ENABLE,
1703 	},
1704 	{
1705 		.name = "lpcgrp",
1706 		.pins = lpc_3516_pins,
1707 		.num_pins = ARRAY_SIZE(lpc_3516_pins),
1708 		/* Conflict with SSP */
1709 		.mask = SSP_PADS_ENABLE,
1710 		.value = LPC_PADS_ENABLE | LPC_CLK_PAD_ENABLE,
1711 	},
1712 	{
1713 		.name = "lcdgrp",
1714 		.pins = lcd_3516_pins,
1715 		.num_pins = ARRAY_SIZE(lcd_3516_pins),
1716 		.mask = TVC_PADS_ENABLE,
1717 		.value = LCD_PADS_ENABLE,
1718 	},
1719 	{
1720 		.name = "sspgrp",
1721 		.pins = ssp_3516_pins,
1722 		.num_pins = ARRAY_SIZE(ssp_3516_pins),
1723 		/* Conflict with LPC */
1724 		.mask = LPC_PADS_ENABLE,
1725 		.value = SSP_PADS_ENABLE,
1726 	},
1727 	{
1728 		.name = "uartrxtxgrp",
1729 		.pins = uart_rxtx_3516_pins,
1730 		.num_pins = ARRAY_SIZE(uart_rxtx_3516_pins),
1731 		/* No conflicts except GPIO */
1732 	},
1733 	{
1734 		.name = "uartmodemgrp",
1735 		.pins = uart_modem_3516_pins,
1736 		.num_pins = ARRAY_SIZE(uart_modem_3516_pins),
1737 		/*
1738 		 * Conflict with LPC and SSP,
1739 		 * so when those are both disabled, modem UART can thrive.
1740 		 */
1741 		.mask = LPC_PADS_ENABLE | SSP_PADS_ENABLE,
1742 	},
1743 	{
1744 		.name = "tvcgrp",
1745 		.pins = tvc_3516_pins,
1746 		.num_pins = ARRAY_SIZE(tvc_3516_pins),
1747 		/* Conflict with character LCD */
1748 		.mask = LCD_PADS_ENABLE,
1749 		.value = TVC_PADS_ENABLE | TVC_CLK_PAD_ENABLE,
1750 	},
1751 	/*
1752 	 * The construction is done such that it is possible to use a serial
1753 	 * flash together with a NAND or parallel (NOR) flash, but it is not
1754 	 * possible to use NAND and parallel flash together. To use serial
1755 	 * flash with one of the two others, the muxbits need to be flipped
1756 	 * around before any access.
1757 	 */
1758 	{
1759 		.name = "nflashgrp",
1760 		.pins = nflash_3516_pins,
1761 		.num_pins = ARRAY_SIZE(nflash_3516_pins),
1762 		/* Conflict with IDE, parallel and serial flash */
1763 		.mask = NAND_PADS_DISABLE | IDE_PADS_ENABLE,
1764 		.value = PFLASH_PADS_DISABLE | SFLASH_PADS_DISABLE,
1765 	},
1766 	{
1767 		.name = "pflashgrp",
1768 		.pins = pflash_3516_pins,
1769 		.num_pins = ARRAY_SIZE(pflash_3516_pins),
1770 		/* Conflict with IDE, NAND and serial flash */
1771 		.mask = PFLASH_PADS_DISABLE | IDE_PADS_ENABLE,
1772 		.value = NAND_PADS_DISABLE | SFLASH_PADS_DISABLE,
1773 	},
1774 	{
1775 		.name = "sflashgrp",
1776 		.pins = sflash_3516_pins,
1777 		.num_pins = ARRAY_SIZE(sflash_3516_pins),
1778 		/* Conflict with IDE, NAND and parallel flash */
1779 		.mask = SFLASH_PADS_DISABLE | IDE_PADS_ENABLE,
1780 		.value = NAND_PADS_DISABLE | PFLASH_PADS_DISABLE,
1781 	},
1782 	{
1783 		.name = "gpio0agrp",
1784 		.pins = gpio0a_3516_pins,
1785 		.num_pins = ARRAY_SIZE(gpio0a_3516_pins),
1786 		/* Conflict with TVC and ICE */
1787 		.mask = TVC_PADS_ENABLE,
1788 	},
1789 	{
1790 		.name = "gpio0bgrp",
1791 		.pins = gpio0b_3516_pins,
1792 		.num_pins = ARRAY_SIZE(gpio0b_3516_pins),
1793 		/* Conflict with ICE */
1794 	},
1795 	{
1796 		.name = "gpio0cgrp",
1797 		.pins = gpio0c_3516_pins,
1798 		.num_pins = ARRAY_SIZE(gpio0c_3516_pins),
1799 		/* Conflict with LPC, UART and SSP */
1800 		.mask = LPC_PADS_ENABLE | SSP_PADS_ENABLE,
1801 	},
1802 	{
1803 		.name = "gpio0dgrp",
1804 		.pins = gpio0d_3516_pins,
1805 		.num_pins = ARRAY_SIZE(gpio0d_3516_pins),
1806 		/* Conflict with UART */
1807 	},
1808 	{
1809 		.name = "gpio0egrp",
1810 		.pins = gpio0e_3516_pins,
1811 		.num_pins = ARRAY_SIZE(gpio0e_3516_pins),
1812 		/* Conflict with LCD */
1813 		.mask = LCD_PADS_ENABLE,
1814 	},
1815 	{
1816 		.name = "gpio0fgrp",
1817 		.pins = gpio0f_3516_pins,
1818 		.num_pins = ARRAY_SIZE(gpio0f_3516_pins),
1819 		/* Conflict with NAND flash */
1820 		.value = NAND_PADS_DISABLE,
1821 	},
1822 	{
1823 		.name = "gpio0ggrp",
1824 		.pins = gpio0g_3516_pins,
1825 		.num_pins = ARRAY_SIZE(gpio0g_3516_pins),
1826 		/* Conflict with parallel flash */
1827 		.value = PFLASH_PADS_DISABLE,
1828 	},
1829 	{
1830 		.name = "gpio0hgrp",
1831 		.pins = gpio0h_3516_pins,
1832 		.num_pins = ARRAY_SIZE(gpio0h_3516_pins),
1833 		/* Conflict with serial flash */
1834 		.value = SFLASH_PADS_DISABLE,
1835 	},
1836 	{
1837 		.name = "gpio0igrp",
1838 		.pins = gpio0i_3516_pins,
1839 		.num_pins = ARRAY_SIZE(gpio0i_3516_pins),
1840 		/* Conflict with all flash */
1841 		.value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE |
1842 			SFLASH_PADS_DISABLE,
1843 	},
1844 	{
1845 		.name = "gpio0jgrp",
1846 		.pins = gpio0j_3516_pins,
1847 		.num_pins = ARRAY_SIZE(gpio0j_3516_pins),
1848 		/* Conflict with all flash and LCD */
1849 		.mask = LCD_PADS_ENABLE,
1850 		.value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE |
1851 			SFLASH_PADS_DISABLE,
1852 	},
1853 	{
1854 		.name = "gpio0kgrp",
1855 		.pins = gpio0k_3516_pins,
1856 		.num_pins = ARRAY_SIZE(gpio0k_3516_pins),
1857 		/* Conflict with parallel and NAND flash */
1858 		.value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE,
1859 	},
1860 	{
1861 		.name = "gpio1agrp",
1862 		.pins = gpio1a_3516_pins,
1863 		.num_pins = ARRAY_SIZE(gpio1a_3516_pins),
1864 		/* Conflict with IDE and parallel flash */
1865 		.mask = IDE_PADS_ENABLE,
1866 		.value = PFLASH_PADS_DISABLE,
1867 	},
1868 	{
1869 		.name = "gpio1bgrp",
1870 		.pins = gpio1b_3516_pins,
1871 		.num_pins = ARRAY_SIZE(gpio1b_3516_pins),
1872 		/* Conflict with IDE only */
1873 		.mask = IDE_PADS_ENABLE,
1874 	},
1875 	{
1876 		.name = "gpio1cgrp",
1877 		.pins = gpio1c_3516_pins,
1878 		.num_pins = ARRAY_SIZE(gpio1c_3516_pins),
1879 		/* Conflict with IDE, parallel and NAND flash */
1880 		.mask = IDE_PADS_ENABLE,
1881 		.value = NAND_PADS_DISABLE | PFLASH_PADS_DISABLE,
1882 	},
1883 	{
1884 		.name = "gpio1dgrp",
1885 		.pins = gpio1d_3516_pins,
1886 		.num_pins = ARRAY_SIZE(gpio1d_3516_pins),
1887 		/* Conflict with TVC */
1888 		.mask = TVC_PADS_ENABLE,
1889 	},
1890 	{
1891 		.name = "gpio2agrp",
1892 		.pins = gpio2a_3516_pins,
1893 		.num_pins = ARRAY_SIZE(gpio2a_3516_pins),
1894 		.mask = GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
1895 		/* Conflict with GMII GMAC1 and extended parallel flash */
1896 	},
1897 	{
1898 		.name = "gpio2bgrp",
1899 		.pins = gpio2b_3516_pins,
1900 		.num_pins = ARRAY_SIZE(gpio2b_3516_pins),
1901 		/* Conflict with GMII GMAC1, extended parallel flash and LCD */
1902 		.mask = LCD_PADS_ENABLE | GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
1903 	},
1904 	{
1905 		.name = "gpio2cgrp",
1906 		.pins = gpio2c_3516_pins,
1907 		.num_pins = ARRAY_SIZE(gpio2c_3516_pins),
1908 		/* Conflict with PCI */
1909 		.mask = PCI_PADS_ENABLE,
1910 	},
1911 };
1912 
1913 static int gemini_get_groups_count(struct pinctrl_dev *pctldev)
1914 {
1915 	struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1916 
1917 	if (pmx->is_3512)
1918 		return ARRAY_SIZE(gemini_3512_pin_groups);
1919 	if (pmx->is_3516)
1920 		return ARRAY_SIZE(gemini_3516_pin_groups);
1921 	return 0;
1922 }
1923 
1924 static const char *gemini_get_group_name(struct pinctrl_dev *pctldev,
1925 					 unsigned int selector)
1926 {
1927 	struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1928 
1929 	if (pmx->is_3512)
1930 		return gemini_3512_pin_groups[selector].name;
1931 	if (pmx->is_3516)
1932 		return gemini_3516_pin_groups[selector].name;
1933 	return NULL;
1934 }
1935 
1936 static int gemini_get_group_pins(struct pinctrl_dev *pctldev,
1937 				 unsigned int selector,
1938 				 const unsigned int **pins,
1939 				 unsigned int *num_pins)
1940 {
1941 	struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1942 
1943 	/* The special case with the 3516 flash pin */
1944 	if (pmx->flash_pin &&
1945 	    pmx->is_3512 &&
1946 	    !strcmp(gemini_3512_pin_groups[selector].name, "pflashgrp")) {
1947 		*pins = pflash_3512_pins_extended;
1948 		*num_pins = ARRAY_SIZE(pflash_3512_pins_extended);
1949 		return 0;
1950 	}
1951 	if (pmx->flash_pin &&
1952 	    pmx->is_3516 &&
1953 	    !strcmp(gemini_3516_pin_groups[selector].name, "pflashgrp")) {
1954 		*pins = pflash_3516_pins_extended;
1955 		*num_pins = ARRAY_SIZE(pflash_3516_pins_extended);
1956 		return 0;
1957 	}
1958 	if (pmx->is_3512) {
1959 		*pins = gemini_3512_pin_groups[selector].pins;
1960 		*num_pins = gemini_3512_pin_groups[selector].num_pins;
1961 	}
1962 	if (pmx->is_3516) {
1963 		*pins = gemini_3516_pin_groups[selector].pins;
1964 		*num_pins = gemini_3516_pin_groups[selector].num_pins;
1965 	}
1966 	return 0;
1967 }
1968 
1969 static void gemini_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
1970 				unsigned int offset)
1971 {
1972 	seq_printf(s, " " DRIVER_NAME);
1973 }
1974 
1975 static const struct pinctrl_ops gemini_pctrl_ops = {
1976 	.get_groups_count = gemini_get_groups_count,
1977 	.get_group_name = gemini_get_group_name,
1978 	.get_group_pins = gemini_get_group_pins,
1979 	.pin_dbg_show = gemini_pin_dbg_show,
1980 	.dt_node_to_map = pinconf_generic_dt_node_to_map_all,
1981 	.dt_free_map = pinconf_generic_dt_free_map,
1982 };
1983 
1984 /**
1985  * struct gemini_pmx_func - describes Gemini pinmux functions
1986  * @name: the name of this specific function
1987  * @groups: corresponding pin groups
1988  */
1989 struct gemini_pmx_func {
1990 	const char *name;
1991 	const char * const *groups;
1992 	const unsigned int num_groups;
1993 };
1994 
1995 static const char * const dramgrps[] = { "dramgrp" };
1996 static const char * const rtcgrps[] = { "rtcgrp" };
1997 static const char * const powergrps[] = { "powergrp" };
1998 static const char * const cirgrps[] = { "cirgrp" };
1999 static const char * const systemgrps[] = { "systemgrp" };
2000 static const char * const vcontrolgrps[] = { "vcontrolgrp" };
2001 static const char * const icegrps[] = { "icegrp" };
2002 static const char * const idegrps[] = { "idegrp" };
2003 static const char * const satagrps[] = { "satagrp" };
2004 static const char * const usbgrps[] = { "usbgrp" };
2005 static const char * const gmiigrps[] = { "gmii_gmac0_grp", "gmii_gmac1_grp" };
2006 static const char * const pcigrps[] = { "pcigrp" };
2007 static const char * const lpcgrps[] = { "lpcgrp" };
2008 static const char * const lcdgrps[] = { "lcdgrp" };
2009 static const char * const sspgrps[] = { "sspgrp" };
2010 static const char * const uartgrps[] = { "uartrxtxgrp", "uartmodemgrp" };
2011 static const char * const tvcgrps[] = { "tvcgrp" };
2012 static const char * const nflashgrps[] = { "nflashgrp" };
2013 static const char * const pflashgrps[] = { "pflashgrp", "pflashextgrp" };
2014 static const char * const sflashgrps[] = { "sflashgrp" };
2015 static const char * const gpio0grps[] = { "gpio0agrp", "gpio0bgrp", "gpio0cgrp",
2016 					  "gpio0dgrp", "gpio0egrp", "gpio0fgrp",
2017 					  "gpio0ggrp", "gpio0hgrp", "gpio0igrp",
2018 					  "gpio0jgrp", "gpio0kgrp" };
2019 static const char * const gpio1grps[] = { "gpio1agrp", "gpio1bgrp", "gpio1cgrp",
2020 					  "gpio1dgrp" };
2021 static const char * const gpio2grps[] = { "gpio2agrp", "gpio2bgrp", "gpio2cgrp" };
2022 
2023 static const struct gemini_pmx_func gemini_pmx_functions[] = {
2024 	{
2025 		.name = "dram",
2026 		.groups = dramgrps,
2027 		.num_groups = ARRAY_SIZE(idegrps),
2028 	},
2029 	{
2030 		.name = "rtc",
2031 		.groups = rtcgrps,
2032 		.num_groups = ARRAY_SIZE(rtcgrps),
2033 	},
2034 	{
2035 		.name = "power",
2036 		.groups = powergrps,
2037 		.num_groups = ARRAY_SIZE(powergrps),
2038 	},
2039 	{
2040 		/* This function is strictly unavailable on 3512 */
2041 		.name = "cir",
2042 		.groups = cirgrps,
2043 		.num_groups = ARRAY_SIZE(cirgrps),
2044 	},
2045 	{
2046 		.name = "system",
2047 		.groups = systemgrps,
2048 		.num_groups = ARRAY_SIZE(systemgrps),
2049 	},
2050 	{
2051 		.name = "vcontrol",
2052 		.groups = vcontrolgrps,
2053 		.num_groups = ARRAY_SIZE(vcontrolgrps),
2054 	},
2055 	{
2056 		.name = "ice",
2057 		.groups = icegrps,
2058 		.num_groups = ARRAY_SIZE(icegrps),
2059 	},
2060 	{
2061 		.name = "ide",
2062 		.groups = idegrps,
2063 		.num_groups = ARRAY_SIZE(idegrps),
2064 	},
2065 	{
2066 		.name = "sata",
2067 		.groups = satagrps,
2068 		.num_groups = ARRAY_SIZE(satagrps),
2069 	},
2070 	{
2071 		.name = "usb",
2072 		.groups = usbgrps,
2073 		.num_groups = ARRAY_SIZE(usbgrps),
2074 	},
2075 	{
2076 		.name = "gmii",
2077 		.groups = gmiigrps,
2078 		.num_groups = ARRAY_SIZE(gmiigrps),
2079 	},
2080 	{
2081 		.name = "pci",
2082 		.groups = pcigrps,
2083 		.num_groups = ARRAY_SIZE(pcigrps),
2084 	},
2085 	{
2086 		.name = "lpc",
2087 		.groups = lpcgrps,
2088 		.num_groups = ARRAY_SIZE(lpcgrps),
2089 	},
2090 	{
2091 		.name = "lcd",
2092 		.groups = lcdgrps,
2093 		.num_groups = ARRAY_SIZE(lcdgrps),
2094 	},
2095 	{
2096 		.name = "ssp",
2097 		.groups = sspgrps,
2098 		.num_groups = ARRAY_SIZE(sspgrps),
2099 	},
2100 	{
2101 		.name = "uart",
2102 		.groups = uartgrps,
2103 		.num_groups = ARRAY_SIZE(uartgrps),
2104 	},
2105 	{
2106 		.name = "tvc",
2107 		.groups = tvcgrps,
2108 		.num_groups = ARRAY_SIZE(tvcgrps),
2109 	},
2110 	{
2111 		.name = "nflash",
2112 		.groups = nflashgrps,
2113 		.num_groups = ARRAY_SIZE(nflashgrps),
2114 	},
2115 	{
2116 		.name = "pflash",
2117 		.groups = pflashgrps,
2118 		.num_groups = ARRAY_SIZE(pflashgrps),
2119 	},
2120 	{
2121 		.name = "sflash",
2122 		.groups = sflashgrps,
2123 		.num_groups = ARRAY_SIZE(sflashgrps),
2124 	},
2125 	{
2126 		.name = "gpio0",
2127 		.groups = gpio0grps,
2128 		.num_groups = ARRAY_SIZE(gpio0grps),
2129 	},
2130 	{
2131 		.name = "gpio1",
2132 		.groups = gpio1grps,
2133 		.num_groups = ARRAY_SIZE(gpio1grps),
2134 	},
2135 	{
2136 		.name = "gpio2",
2137 		.groups = gpio2grps,
2138 		.num_groups = ARRAY_SIZE(gpio2grps),
2139 	},
2140 };
2141 
2142 
2143 static int gemini_pmx_set_mux(struct pinctrl_dev *pctldev,
2144 			      unsigned int selector,
2145 			      unsigned int group)
2146 {
2147 	struct gemini_pmx *pmx;
2148 	const struct gemini_pmx_func *func;
2149 	const struct gemini_pin_group *grp;
2150 	u32 before, after, expected;
2151 	unsigned long tmp;
2152 	int i;
2153 
2154 	pmx = pinctrl_dev_get_drvdata(pctldev);
2155 
2156 	func = &gemini_pmx_functions[selector];
2157 	if (pmx->is_3512)
2158 		grp = &gemini_3512_pin_groups[group];
2159 	else if (pmx->is_3516)
2160 		grp = &gemini_3516_pin_groups[group];
2161 	else {
2162 		dev_err(pmx->dev, "invalid SoC type\n");
2163 		return -ENODEV;
2164 	}
2165 
2166 	dev_info(pmx->dev,
2167 		 "ACTIVATE function \"%s\" with group \"%s\"\n",
2168 		 func->name, grp->name);
2169 
2170 	regmap_read(pmx->map, GLOBAL_MISC_CTRL, &before);
2171 	regmap_update_bits(pmx->map, GLOBAL_MISC_CTRL, grp->mask,
2172 			   grp->value);
2173 	regmap_read(pmx->map, GLOBAL_MISC_CTRL, &after);
2174 
2175 	/* Which bits changed */
2176 	before &= PADS_MASK;
2177 	after &= PADS_MASK;
2178 	expected = before &= ~grp->mask;
2179 	expected |= grp->value;
2180 	expected &= PADS_MASK;
2181 
2182 	/* Print changed states */
2183 	tmp = grp->mask;
2184 	for_each_set_bit(i, &tmp, PADS_MAXBIT) {
2185 		bool enabled = !(i > 3);
2186 
2187 		/* Did not go low though it should */
2188 		if (after & BIT(i)) {
2189 			dev_err(pmx->dev,
2190 				"pin group %s could not be %s: "
2191 				"probably a hardware limitation\n",
2192 				gemini_padgroups[i],
2193 				enabled ? "enabled" : "disabled");
2194 			dev_err(pmx->dev,
2195 				"GLOBAL MISC CTRL before: %08x, after %08x, expected %08x\n",
2196 				before, after, expected);
2197 		} else {
2198 			dev_info(pmx->dev,
2199 				 "padgroup %s %s\n",
2200 				 gemini_padgroups[i],
2201 				 enabled ? "enabled" : "disabled");
2202 		}
2203 	}
2204 
2205 	tmp = grp->value;
2206 	for_each_set_bit(i, &tmp, PADS_MAXBIT) {
2207 		bool enabled = (i > 3);
2208 
2209 		/* Did not go high though it should */
2210 		if (!(after & BIT(i))) {
2211 			dev_err(pmx->dev,
2212 				"pin group %s could not be %s: "
2213 				"probably a hardware limitation\n",
2214 				gemini_padgroups[i],
2215 				enabled ? "enabled" : "disabled");
2216 			dev_err(pmx->dev,
2217 				"GLOBAL MISC CTRL before: %08x, after %08x, expected %08x\n",
2218 				before, after, expected);
2219 		} else {
2220 			dev_info(pmx->dev,
2221 				 "padgroup %s %s\n",
2222 				 gemini_padgroups[i],
2223 				 enabled ? "enabled" : "disabled");
2224 		}
2225 	}
2226 
2227 	return 0;
2228 }
2229 
2230 static int gemini_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
2231 {
2232 	return ARRAY_SIZE(gemini_pmx_functions);
2233 }
2234 
2235 static const char *gemini_pmx_get_func_name(struct pinctrl_dev *pctldev,
2236 					    unsigned int selector)
2237 {
2238 	return gemini_pmx_functions[selector].name;
2239 }
2240 
2241 static int gemini_pmx_get_groups(struct pinctrl_dev *pctldev,
2242 				 unsigned int selector,
2243 				 const char * const **groups,
2244 				 unsigned int * const num_groups)
2245 {
2246 	*groups = gemini_pmx_functions[selector].groups;
2247 	*num_groups = gemini_pmx_functions[selector].num_groups;
2248 	return 0;
2249 }
2250 
2251 static const struct pinmux_ops gemini_pmx_ops = {
2252 	.get_functions_count = gemini_pmx_get_funcs_count,
2253 	.get_function_name = gemini_pmx_get_func_name,
2254 	.get_function_groups = gemini_pmx_get_groups,
2255 	.set_mux = gemini_pmx_set_mux,
2256 };
2257 
2258 #define GEMINI_CFGPIN(_n, _r, _lb, _hb) {	\
2259 	.pin = _n,				\
2260 	.reg = _r,				\
2261 	.mask = GENMASK(_hb, _lb)		\
2262 }
2263 
2264 static const struct gemini_pin_conf gemini_confs_3512[] = {
2265 	GEMINI_CFGPIN(259, GLOBAL_GMAC_CTRL_SKEW, 0, 3), /* GMAC0 RXDV */
2266 	GEMINI_CFGPIN(277, GLOBAL_GMAC_CTRL_SKEW, 4, 7), /* GMAC0 RXC */
2267 	GEMINI_CFGPIN(241, GLOBAL_GMAC_CTRL_SKEW, 8, 11), /* GMAC0 TXEN */
2268 	GEMINI_CFGPIN(312, GLOBAL_GMAC_CTRL_SKEW, 12, 15), /* GMAC0 TXC */
2269 	GEMINI_CFGPIN(298, GLOBAL_GMAC_CTRL_SKEW, 16, 19), /* GMAC1 RXDV */
2270 	GEMINI_CFGPIN(280, GLOBAL_GMAC_CTRL_SKEW, 20, 23), /* GMAC1 RXC */
2271 	GEMINI_CFGPIN(316, GLOBAL_GMAC_CTRL_SKEW, 24, 27), /* GMAC1 TXEN */
2272 	GEMINI_CFGPIN(243, GLOBAL_GMAC_CTRL_SKEW, 28, 31), /* GMAC1 TXC */
2273 	GEMINI_CFGPIN(295, GLOBAL_GMAC0_DATA_SKEW, 0, 3), /* GMAC0 RXD0 */
2274 	GEMINI_CFGPIN(313, GLOBAL_GMAC0_DATA_SKEW, 4, 7), /* GMAC0 RXD1 */
2275 	GEMINI_CFGPIN(242, GLOBAL_GMAC0_DATA_SKEW, 8, 11), /* GMAC0 RXD2 */
2276 	GEMINI_CFGPIN(260, GLOBAL_GMAC0_DATA_SKEW, 12, 15), /* GMAC0 RXD3 */
2277 	GEMINI_CFGPIN(294, GLOBAL_GMAC0_DATA_SKEW, 16, 19), /* GMAC0 TXD0 */
2278 	GEMINI_CFGPIN(276, GLOBAL_GMAC0_DATA_SKEW, 20, 23), /* GMAC0 TXD1 */
2279 	GEMINI_CFGPIN(258, GLOBAL_GMAC0_DATA_SKEW, 24, 27), /* GMAC0 TXD2 */
2280 	GEMINI_CFGPIN(240, GLOBAL_GMAC0_DATA_SKEW, 28, 31), /* GMAC0 TXD3 */
2281 	GEMINI_CFGPIN(262, GLOBAL_GMAC1_DATA_SKEW, 0, 3), /* GMAC1 RXD0 */
2282 	GEMINI_CFGPIN(244, GLOBAL_GMAC1_DATA_SKEW, 4, 7), /* GMAC1 RXD1 */
2283 	GEMINI_CFGPIN(317, GLOBAL_GMAC1_DATA_SKEW, 8, 11), /* GMAC1 RXD2 */
2284 	GEMINI_CFGPIN(299, GLOBAL_GMAC1_DATA_SKEW, 12, 15), /* GMAC1 RXD3 */
2285 	GEMINI_CFGPIN(261, GLOBAL_GMAC1_DATA_SKEW, 16, 19), /* GMAC1 TXD0 */
2286 	GEMINI_CFGPIN(279, GLOBAL_GMAC1_DATA_SKEW, 20, 23), /* GMAC1 TXD1 */
2287 	GEMINI_CFGPIN(297, GLOBAL_GMAC1_DATA_SKEW, 24, 27), /* GMAC1 TXD2 */
2288 	GEMINI_CFGPIN(315, GLOBAL_GMAC1_DATA_SKEW, 28, 31), /* GMAC1 TXD3 */
2289 };
2290 
2291 static const struct gemini_pin_conf gemini_confs_3516[] = {
2292 	GEMINI_CFGPIN(347, GLOBAL_GMAC_CTRL_SKEW, 0, 3), /* GMAC0 RXDV */
2293 	GEMINI_CFGPIN(386, GLOBAL_GMAC_CTRL_SKEW, 4, 7), /* GMAC0 RXC */
2294 	GEMINI_CFGPIN(307, GLOBAL_GMAC_CTRL_SKEW, 8, 11), /* GMAC0 TXEN */
2295 	GEMINI_CFGPIN(327, GLOBAL_GMAC_CTRL_SKEW, 12, 15), /* GMAC0 TXC */
2296 	GEMINI_CFGPIN(309, GLOBAL_GMAC_CTRL_SKEW, 16, 19), /* GMAC1 RXDV */
2297 	GEMINI_CFGPIN(390, GLOBAL_GMAC_CTRL_SKEW, 20, 23), /* GMAC1 RXC */
2298 	GEMINI_CFGPIN(370, GLOBAL_GMAC_CTRL_SKEW, 24, 27), /* GMAC1 TXEN */
2299 	GEMINI_CFGPIN(350, GLOBAL_GMAC_CTRL_SKEW, 28, 31), /* GMAC1 TXC */
2300 	GEMINI_CFGPIN(367, GLOBAL_GMAC0_DATA_SKEW, 0, 3), /* GMAC0 RXD0 */
2301 	GEMINI_CFGPIN(348, GLOBAL_GMAC0_DATA_SKEW, 4, 7), /* GMAC0 RXD1 */
2302 	GEMINI_CFGPIN(387, GLOBAL_GMAC0_DATA_SKEW, 8, 11), /* GMAC0 RXD2 */
2303 	GEMINI_CFGPIN(328, GLOBAL_GMAC0_DATA_SKEW, 12, 15), /* GMAC0 RXD3 */
2304 	GEMINI_CFGPIN(306, GLOBAL_GMAC0_DATA_SKEW, 16, 19), /* GMAC0 TXD0 */
2305 	GEMINI_CFGPIN(325, GLOBAL_GMAC0_DATA_SKEW, 20, 23), /* GMAC0 TXD1 */
2306 	GEMINI_CFGPIN(346, GLOBAL_GMAC0_DATA_SKEW, 24, 27), /* GMAC0 TXD2 */
2307 	GEMINI_CFGPIN(326, GLOBAL_GMAC0_DATA_SKEW, 28, 31), /* GMAC0 TXD3 */
2308 	GEMINI_CFGPIN(391, GLOBAL_GMAC1_DATA_SKEW, 0, 3), /* GMAC1 RXD0 */
2309 	GEMINI_CFGPIN(351, GLOBAL_GMAC1_DATA_SKEW, 4, 7), /* GMAC1 RXD1 */
2310 	GEMINI_CFGPIN(310, GLOBAL_GMAC1_DATA_SKEW, 8, 11), /* GMAC1 RXD2 */
2311 	GEMINI_CFGPIN(371, GLOBAL_GMAC1_DATA_SKEW, 12, 15), /* GMAC1 RXD3 */
2312 	GEMINI_CFGPIN(329, GLOBAL_GMAC1_DATA_SKEW, 16, 19), /* GMAC1 TXD0 */
2313 	GEMINI_CFGPIN(389, GLOBAL_GMAC1_DATA_SKEW, 20, 23), /* GMAC1 TXD1 */
2314 	GEMINI_CFGPIN(369, GLOBAL_GMAC1_DATA_SKEW, 24, 27), /* GMAC1 TXD2 */
2315 	GEMINI_CFGPIN(308, GLOBAL_GMAC1_DATA_SKEW, 28, 31), /* GMAC1 TXD3 */
2316 };
2317 
2318 static const struct gemini_pin_conf *gemini_get_pin_conf(struct gemini_pmx *pmx,
2319 							 unsigned int pin)
2320 {
2321 	const struct gemini_pin_conf *retconf;
2322 	int i;
2323 
2324 	for (i = 0; i < pmx->nconfs; i++) {
2325 		retconf = &pmx->confs[i];
2326 		if (retconf->pin == pin)
2327 			return retconf;
2328 	}
2329 	return NULL;
2330 }
2331 
2332 static int gemini_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
2333 			      unsigned long *config)
2334 {
2335 	struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
2336 	enum pin_config_param param = pinconf_to_config_param(*config);
2337 	const struct gemini_pin_conf *conf;
2338 	u32 val;
2339 
2340 	switch (param) {
2341 	case PIN_CONFIG_SKEW_DELAY:
2342 		conf = gemini_get_pin_conf(pmx, pin);
2343 		if (!conf)
2344 			return -ENOTSUPP;
2345 		regmap_read(pmx->map, conf->reg, &val);
2346 		val &= conf->mask;
2347 		val >>= (ffs(conf->mask) - 1);
2348 		*config = pinconf_to_config_packed(PIN_CONFIG_SKEW_DELAY, val);
2349 		break;
2350 	default:
2351 		return -ENOTSUPP;
2352 	}
2353 
2354 	return 0;
2355 }
2356 
2357 static int gemini_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
2358 			      unsigned long *configs, unsigned int num_configs)
2359 {
2360 	struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
2361 	const struct gemini_pin_conf *conf;
2362 	enum pin_config_param param;
2363 	u32 arg;
2364 	int ret = 0;
2365 	int i;
2366 
2367 	for (i = 0; i < num_configs; i++) {
2368 		param = pinconf_to_config_param(configs[i]);
2369 		arg = pinconf_to_config_argument(configs[i]);
2370 
2371 		switch (param) {
2372 		case PIN_CONFIG_SKEW_DELAY:
2373 			if (arg > 0xf)
2374 				return -EINVAL;
2375 			conf = gemini_get_pin_conf(pmx, pin);
2376 			if (!conf) {
2377 				dev_err(pmx->dev,
2378 					"invalid pin for skew delay %d\n", pin);
2379 				return -ENOTSUPP;
2380 			}
2381 			arg <<= (ffs(conf->mask) - 1);
2382 			dev_dbg(pmx->dev,
2383 				"set pin %d to skew delay mask %08x, val %08x\n",
2384 				pin, conf->mask, arg);
2385 			regmap_update_bits(pmx->map, conf->reg, conf->mask, arg);
2386 			break;
2387 		default:
2388 			dev_err(pmx->dev, "Invalid config param %04x\n", param);
2389 			return -ENOTSUPP;
2390 		}
2391 	}
2392 
2393 	return ret;
2394 }
2395 
2396 static const struct pinconf_ops gemini_pinconf_ops = {
2397 	.pin_config_get = gemini_pinconf_get,
2398 	.pin_config_set = gemini_pinconf_set,
2399 	.is_generic = true,
2400 };
2401 
2402 static struct pinctrl_desc gemini_pmx_desc = {
2403 	.name = DRIVER_NAME,
2404 	.pctlops = &gemini_pctrl_ops,
2405 	.pmxops = &gemini_pmx_ops,
2406 	.confops = &gemini_pinconf_ops,
2407 	.owner = THIS_MODULE,
2408 };
2409 
2410 static int gemini_pmx_probe(struct platform_device *pdev)
2411 {
2412 	struct gemini_pmx *pmx;
2413 	struct regmap *map;
2414 	struct device *dev = &pdev->dev;
2415 	struct device *parent;
2416 	unsigned long tmp;
2417 	u32 val;
2418 	int ret;
2419 	int i;
2420 
2421 	/* Create state holders etc for this driver */
2422 	pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
2423 	if (!pmx)
2424 		return -ENOMEM;
2425 
2426 	pmx->dev = &pdev->dev;
2427 	parent = dev->parent;
2428 	if (!parent) {
2429 		dev_err(dev, "no parent to pin controller\n");
2430 		return -ENODEV;
2431 	}
2432 	map = syscon_node_to_regmap(parent->of_node);
2433 	if (IS_ERR(map)) {
2434 		dev_err(dev, "no syscon regmap\n");
2435 		return PTR_ERR(map);
2436 	}
2437 	pmx->map = map;
2438 
2439 	/* Check that regmap works at first call, then no more */
2440 	ret = regmap_read(map, GLOBAL_WORD_ID, &val);
2441 	if (ret) {
2442 		dev_err(dev, "cannot access regmap\n");
2443 		return ret;
2444 	}
2445 	val >>= 8;
2446 	val &= 0xffff;
2447 	if (val == 0x3512) {
2448 		pmx->is_3512 = true;
2449 		pmx->confs = gemini_confs_3512;
2450 		pmx->nconfs = ARRAY_SIZE(gemini_confs_3512);
2451 		gemini_pmx_desc.pins = gemini_3512_pins;
2452 		gemini_pmx_desc.npins = ARRAY_SIZE(gemini_3512_pins);
2453 		dev_info(dev, "detected 3512 chip variant\n");
2454 	} else if (val == 0x3516) {
2455 		pmx->is_3516 = true;
2456 		pmx->confs = gemini_confs_3516;
2457 		pmx->nconfs = ARRAY_SIZE(gemini_confs_3516);
2458 		gemini_pmx_desc.pins = gemini_3516_pins;
2459 		gemini_pmx_desc.npins = ARRAY_SIZE(gemini_3516_pins);
2460 		dev_info(dev, "detected 3516 chip variant\n");
2461 	} else {
2462 		dev_err(dev, "unknown chip ID: %04x\n", val);
2463 		return -ENODEV;
2464 	}
2465 
2466 	ret = regmap_read(map, GLOBAL_MISC_CTRL, &val);
2467 	dev_info(dev, "GLOBAL MISC CTRL at boot: 0x%08x\n", val);
2468 	/* Mask off relevant pads */
2469 	val &= PADS_MASK;
2470 	/* Invert the meaning of the DRAM+flash pads */
2471 	val ^= 0x0f;
2472 	/* Print initial state */
2473 	tmp = val;
2474 	for_each_set_bit(i, &tmp, PADS_MAXBIT) {
2475 		dev_info(dev, "pad group %s %s\n", gemini_padgroups[i],
2476 			 (val & BIT(i)) ? "enabled" : "disabled");
2477 	}
2478 
2479 	/* Check if flash pin is set */
2480 	regmap_read(map, GLOBAL_STATUS, &val);
2481 	pmx->flash_pin = !!(val & GLOBAL_STATUS_FLPIN);
2482 	dev_info(dev, "flash pin is %s\n", pmx->flash_pin ? "set" : "not set");
2483 
2484 	pmx->pctl = devm_pinctrl_register(dev, &gemini_pmx_desc, pmx);
2485 	if (IS_ERR(pmx->pctl)) {
2486 		dev_err(dev, "could not register pinmux driver\n");
2487 		return PTR_ERR(pmx->pctl);
2488 	}
2489 
2490 	dev_info(dev, "initialized Gemini pin control driver\n");
2491 
2492 	return 0;
2493 }
2494 
2495 static const struct of_device_id gemini_pinctrl_match[] = {
2496 	{ .compatible = "cortina,gemini-pinctrl" },
2497 	{},
2498 };
2499 
2500 static struct platform_driver gemini_pmx_driver = {
2501 	.driver = {
2502 		.name = DRIVER_NAME,
2503 		.of_match_table = gemini_pinctrl_match,
2504 	},
2505 	.probe = gemini_pmx_probe,
2506 };
2507 
2508 static int __init gemini_pmx_init(void)
2509 {
2510 	return platform_driver_register(&gemini_pmx_driver);
2511 }
2512 arch_initcall(gemini_pmx_init);
2513