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