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