1 // SPDX-License-Identifier: GPL-2.0-only
3 * Driver for the EP93xx pin controller
4 * based on linux/drivers/pinctrl/pinmux-gemini.c
6 * Copyright (C) 2022 Nikita Shubin <nikita.shubin@maquefel.me>
8 * This is a group-only pin controller.
10 #include <linux/array_size.h>
11 #include <linux/err.h>
12 #include <linux/init.h>
14 #include <linux/mfd/syscon.h>
15 #include <linux/property.h>
16 #include <linux/regmap.h>
17 #include <linux/seq_file.h>
18 #include <linux/slab.h>
20 #include <linux/soc/cirrus/ep93xx.h>
22 #include <linux/pinctrl/machine.h>
23 #include <linux/pinctrl/pinconf-generic.h>
24 #include <linux/pinctrl/pinconf.h>
25 #include <linux/pinctrl/pinctrl.h>
26 #include <linux/pinctrl/pinmux.h>
28 #include "pinctrl-utils.h"
30 #define DRIVER_NAME "pinctrl-ep93xx"
32 enum ep93xx_pinctrl_model
{
40 struct pinctrl_dev
*pctl
;
41 struct ep93xx_regmap_adev
*aux_dev
;
43 enum ep93xx_pinctrl_model model
;
46 static void ep93xx_pinctrl_update_bits(struct ep93xx_pmx
*pmx
, unsigned int reg
,
47 unsigned int mask
, unsigned int val
)
49 struct ep93xx_regmap_adev
*aux
= pmx
->aux_dev
;
51 aux
->update_bits(aux
->map
, aux
->lock
, reg
, mask
, val
);
54 struct ep93xx_pin_group
{
60 #define PMX_GROUP(_name, _pins, _mask, _value) \
62 .grp = PINCTRL_PINGROUP(_name, _pins, ARRAY_SIZE(_pins)), \
67 #define EP93XX_SYSCON_DEVCFG 0x80
70 * There are several system configuration options selectable by the DeviceCfg and SysCfg
71 * registers. These registers provide the selection of several pin multiplexing options and also
72 * provide software access to the system reset configuration options. Please refer to the
73 * descriptions of the registers, “DeviceCfg” on page 5-25 and “SysCfg” on page 5-34, for a
74 * detailed explanation.
76 #define EP93XX_SYSCON_DEVCFG_D1ONG BIT(30)
77 #define EP93XX_SYSCON_DEVCFG_D0ONG BIT(29)
78 #define EP93XX_SYSCON_DEVCFG_IONU2 BIT(28)
79 #define EP93XX_SYSCON_DEVCFG_GONK BIT(27)
80 #define EP93XX_SYSCON_DEVCFG_TONG BIT(26)
81 #define EP93XX_SYSCON_DEVCFG_MONG BIT(25)
82 #define EP93XX_SYSCON_DEVCFG_A2ONG BIT(22)
83 #define EP93XX_SYSCON_DEVCFG_A1ONG BIT(21)
84 #define EP93XX_SYSCON_DEVCFG_HONIDE BIT(11)
85 #define EP93XX_SYSCON_DEVCFG_GONIDE BIT(10)
86 #define EP93XX_SYSCON_DEVCFG_PONG BIT(9)
87 #define EP93XX_SYSCON_DEVCFG_EONIDE BIT(8)
88 #define EP93XX_SYSCON_DEVCFG_I2SONSSP BIT(7)
89 #define EP93XX_SYSCON_DEVCFG_I2SONAC97 BIT(6)
90 #define EP93XX_SYSCON_DEVCFG_RASONP3 BIT(4)
92 #define PADS_MASK (GENMASK(30, 25) | BIT(22) | BIT(21) | GENMASK(11, 6) | BIT(4))
93 #define PADS_MAXBIT 30
95 /* Ordered by bit index */
96 static const char * const ep93xx_padgroups
[] = {
97 NULL
, NULL
, NULL
, NULL
,
106 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
119 static const struct pinctrl_pin_desc ep9301_pins
[] = {
120 PINCTRL_PIN(1, "CSn[7]"),
121 PINCTRL_PIN(2, "CSn[6]"),
122 PINCTRL_PIN(3, "CSn[3]"),
123 PINCTRL_PIN(4, "CSn[2]"),
124 PINCTRL_PIN(5, "CSn[1]"),
125 PINCTRL_PIN(6, "AD[25]"),
126 PINCTRL_PIN(7, "vdd_ring"),
127 PINCTRL_PIN(8, "gnd_ring"),
128 PINCTRL_PIN(9, "AD[24]"),
129 PINCTRL_PIN(10, "SDCLK"),
130 PINCTRL_PIN(11, "AD[23]"),
131 PINCTRL_PIN(12, "vdd_core"),
132 PINCTRL_PIN(13, "gnd_core"),
133 PINCTRL_PIN(14, "SDWEn"),
134 PINCTRL_PIN(15, "SDCSn[3]"),
135 PINCTRL_PIN(16, "SDCSn[2]"),
136 PINCTRL_PIN(17, "SDCSn[1]"),
137 PINCTRL_PIN(18, "SDCSn[0]"),
138 PINCTRL_PIN(19, "vdd_ring"),
139 PINCTRL_PIN(20, "gnd_ring"),
140 PINCTRL_PIN(21, "RASn"),
141 PINCTRL_PIN(22, "CASn"),
142 PINCTRL_PIN(23, "DQMn[1]"),
143 PINCTRL_PIN(24, "DQMn[0]"),
144 PINCTRL_PIN(25, "AD[22]"),
145 PINCTRL_PIN(26, "AD[21]"),
146 PINCTRL_PIN(27, "vdd_ring"),
147 PINCTRL_PIN(28, "gnd_ring"),
148 PINCTRL_PIN(29, "DA[15]"),
149 PINCTRL_PIN(30, "AD[7]"),
150 PINCTRL_PIN(31, "DA[14]"),
151 PINCTRL_PIN(32, "AD[6]"),
152 PINCTRL_PIN(33, "DA[13]"),
153 PINCTRL_PIN(34, "vdd_core"),
154 PINCTRL_PIN(35, "gnd_core"),
155 PINCTRL_PIN(36, "AD[5]"),
156 PINCTRL_PIN(37, "DA[12]"),
157 PINCTRL_PIN(38, "AD[4]"),
158 PINCTRL_PIN(39, "DA[11]"),
159 PINCTRL_PIN(40, "AD[3]"),
160 PINCTRL_PIN(41, "vdd_ring"),
161 PINCTRL_PIN(42, "gnd_ring"),
162 PINCTRL_PIN(43, "DA[10]"),
163 PINCTRL_PIN(44, "AD[2]"),
164 PINCTRL_PIN(45, "DA[9]"),
165 PINCTRL_PIN(46, "AD[1]"),
166 PINCTRL_PIN(47, "DA[8]"),
167 PINCTRL_PIN(48, "AD[0]"),
168 PINCTRL_PIN(49, "vdd_ring"),
169 PINCTRL_PIN(50, "gnd_ring"),
170 PINCTRL_PIN(51, "NC"),
171 PINCTRL_PIN(52, "NC"),
172 PINCTRL_PIN(53, "vdd_ring"),
173 PINCTRL_PIN(54, "gnd_ring"),
174 PINCTRL_PIN(55, "AD[15]"),
175 PINCTRL_PIN(56, "DA[7]"),
176 PINCTRL_PIN(57, "vdd_core"),
177 PINCTRL_PIN(58, "gnd_core"),
178 PINCTRL_PIN(59, "AD[14]"),
179 PINCTRL_PIN(60, "DA[6]"),
180 PINCTRL_PIN(61, "AD[13]"),
181 PINCTRL_PIN(62, "DA[5]"),
182 PINCTRL_PIN(63, "AD[12]"),
183 PINCTRL_PIN(64, "DA[4]"),
184 PINCTRL_PIN(65, "AD[11]"),
185 PINCTRL_PIN(66, "vdd_ring"),
186 PINCTRL_PIN(67, "gnd_ring"),
187 PINCTRL_PIN(68, "DA[3]"),
188 PINCTRL_PIN(69, "AD[10]"),
189 PINCTRL_PIN(70, "DA[2]"),
190 PINCTRL_PIN(71, "AD[9]"),
191 PINCTRL_PIN(72, "DA[1]"),
192 PINCTRL_PIN(73, "AD[8]"),
193 PINCTRL_PIN(74, "DA[0]"),
194 PINCTRL_PIN(75, "DSRn"),
195 PINCTRL_PIN(76, "DTRn"),
196 PINCTRL_PIN(77, "TCK"),
197 PINCTRL_PIN(78, "TDI"),
198 PINCTRL_PIN(79, "TDO"),
199 PINCTRL_PIN(80, "TMS"),
200 PINCTRL_PIN(81, "vdd_ring"),
201 PINCTRL_PIN(82, "gnd_ring"),
202 PINCTRL_PIN(83, "BOOT[1]"),
203 PINCTRL_PIN(84, "BOOT[0]"),
204 PINCTRL_PIN(85, "gnd_ring"),
205 PINCTRL_PIN(86, "NC"),
206 PINCTRL_PIN(87, "EECLK"),
207 PINCTRL_PIN(88, "EEDAT"),
208 PINCTRL_PIN(89, "ASYNC"),
209 PINCTRL_PIN(90, "vdd_core"),
210 PINCTRL_PIN(91, "gnd_core"),
211 PINCTRL_PIN(92, "ASDO"),
212 PINCTRL_PIN(93, "SCLK1"),
213 PINCTRL_PIN(94, "SFRM1"),
214 PINCTRL_PIN(95, "SSPRX1"),
215 PINCTRL_PIN(96, "SSPTX1"),
216 PINCTRL_PIN(97, "GRLED"),
217 PINCTRL_PIN(98, "RDLED"),
218 PINCTRL_PIN(99, "vdd_ring"),
219 PINCTRL_PIN(100, "gnd_ring"),
220 PINCTRL_PIN(101, "INT[3]"),
221 PINCTRL_PIN(102, "INT[1]"),
222 PINCTRL_PIN(103, "INT[0]"),
223 PINCTRL_PIN(104, "RTSn"),
224 PINCTRL_PIN(105, "USBm[0]"),
225 PINCTRL_PIN(106, "USBp[0]"),
226 PINCTRL_PIN(107, "ABITCLK"),
227 PINCTRL_PIN(108, "CTSn"),
228 PINCTRL_PIN(109, "RXD[0]"),
229 PINCTRL_PIN(110, "RXD[1]"),
230 PINCTRL_PIN(111, "vdd_ring"),
231 PINCTRL_PIN(112, "gnd_ring"),
232 PINCTRL_PIN(113, "TXD[0]"),
233 PINCTRL_PIN(114, "TXD[1]"),
234 PINCTRL_PIN(115, "CGPIO[0]"),
235 PINCTRL_PIN(116, "gnd_core"),
236 PINCTRL_PIN(117, "PLL_GND"),
237 PINCTRL_PIN(118, "XTALI"),
238 PINCTRL_PIN(119, "XTALO"),
239 PINCTRL_PIN(120, "PLL_VDD"),
240 PINCTRL_PIN(121, "vdd_core"),
241 PINCTRL_PIN(122, "gnd_ring"),
242 PINCTRL_PIN(123, "vdd_ring"),
243 PINCTRL_PIN(124, "RSTOn"),
244 PINCTRL_PIN(125, "PRSTn"),
245 PINCTRL_PIN(126, "CSn[0]"),
246 PINCTRL_PIN(127, "gnd_core"),
247 PINCTRL_PIN(128, "vdd_core"),
248 PINCTRL_PIN(129, "gnd_ring"),
249 PINCTRL_PIN(130, "vdd_ring"),
250 PINCTRL_PIN(131, "ADC[4]"),
251 PINCTRL_PIN(132, "ADC[3]"),
252 PINCTRL_PIN(133, "ADC[2]"),
253 PINCTRL_PIN(134, "ADC[1]"),
254 PINCTRL_PIN(135, "ADC[0]"),
255 PINCTRL_PIN(136, "ADC_VDD"),
256 PINCTRL_PIN(137, "RTCXTALI"),
257 PINCTRL_PIN(138, "RTCXTALO"),
258 PINCTRL_PIN(139, "ADC_GND"),
259 PINCTRL_PIN(140, "EGPIO[11]"),
260 PINCTRL_PIN(141, "EGPIO[10]"),
261 PINCTRL_PIN(142, "EGPIO[9]"),
262 PINCTRL_PIN(143, "EGPIO[8]"),
263 PINCTRL_PIN(144, "EGPIO[7]"),
264 PINCTRL_PIN(145, "EGPIO[6]"),
265 PINCTRL_PIN(146, "EGPIO[5]"),
266 PINCTRL_PIN(147, "EGPIO[4]"),
267 PINCTRL_PIN(148, "EGPIO[3]"),
268 PINCTRL_PIN(149, "gnd_ring"),
269 PINCTRL_PIN(150, "vdd_ring"),
270 PINCTRL_PIN(151, "EGPIO[2]"),
271 PINCTRL_PIN(152, "EGPIO[1]"),
272 PINCTRL_PIN(153, "EGPIO[0]"),
273 PINCTRL_PIN(154, "ARSTn"),
274 PINCTRL_PIN(155, "TRSTn"),
275 PINCTRL_PIN(156, "ASDI"),
276 PINCTRL_PIN(157, "USBm[2]"),
277 PINCTRL_PIN(158, "USBp[2]"),
278 PINCTRL_PIN(159, "WAITn"),
279 PINCTRL_PIN(160, "EGPIO[15]"),
280 PINCTRL_PIN(161, "gnd_ring"),
281 PINCTRL_PIN(162, "vdd_ring"),
282 PINCTRL_PIN(163, "EGPIO[14]"),
283 PINCTRL_PIN(164, "EGPIO[13]"),
284 PINCTRL_PIN(165, "EGPIO[12]"),
285 PINCTRL_PIN(166, "gnd_core"),
286 PINCTRL_PIN(167, "vdd_core"),
287 PINCTRL_PIN(168, "FGPIO[3]"),
288 PINCTRL_PIN(169, "FGPIO[2]"),
289 PINCTRL_PIN(170, "FGPIO[1]"),
290 PINCTRL_PIN(171, "gnd_ring"),
291 PINCTRL_PIN(172, "vdd_ring"),
292 PINCTRL_PIN(173, "CLD"),
293 PINCTRL_PIN(174, "CRS"),
294 PINCTRL_PIN(175, "TXERR"),
295 PINCTRL_PIN(176, "TXEN"),
296 PINCTRL_PIN(177, "MIITXD[0]"),
297 PINCTRL_PIN(178, "MIITXD[1]"),
298 PINCTRL_PIN(179, "MIITXD[2]"),
299 PINCTRL_PIN(180, "MIITXD[3]"),
300 PINCTRL_PIN(181, "TXCLK"),
301 PINCTRL_PIN(182, "RXERR"),
302 PINCTRL_PIN(183, "RXDVAL"),
303 PINCTRL_PIN(184, "MIIRXD[0]"),
304 PINCTRL_PIN(185, "MIIRXD[1]"),
305 PINCTRL_PIN(186, "MIIRXD[2]"),
306 PINCTRL_PIN(187, "gnd_ring"),
307 PINCTRL_PIN(188, "vdd_ring"),
308 PINCTRL_PIN(189, "MIIRXD[3]"),
309 PINCTRL_PIN(190, "RXCLK"),
310 PINCTRL_PIN(191, "MDIO"),
311 PINCTRL_PIN(192, "MDC"),
312 PINCTRL_PIN(193, "RDn"),
313 PINCTRL_PIN(194, "WRn"),
314 PINCTRL_PIN(195, "AD[16]"),
315 PINCTRL_PIN(196, "AD[17]"),
316 PINCTRL_PIN(197, "gnd_core"),
317 PINCTRL_PIN(198, "vdd_core"),
318 PINCTRL_PIN(199, "HGPIO[2]"),
319 PINCTRL_PIN(200, "HGPIO[3]"),
320 PINCTRL_PIN(201, "HGPIO[4]"),
321 PINCTRL_PIN(202, "HGPIO[5]"),
322 PINCTRL_PIN(203, "gnd_ring"),
323 PINCTRL_PIN(204, "vdd_ring"),
324 PINCTRL_PIN(205, "AD[18]"),
325 PINCTRL_PIN(206, "AD[19]"),
326 PINCTRL_PIN(207, "AD[20]"),
327 PINCTRL_PIN(208, "SDCLKEN"),
330 static const unsigned int ssp_ep9301_pins
[] = {
334 static const unsigned int ac97_ep9301_pins
[] = {
335 89, 92, 107, 154, 156,
339 * Note: The EP9307 processor has one PWM with one output, PWMOUT.
340 * Note: The EP9301, EP9302, EP9312, and EP9315 processors each have two PWMs with
341 * two outputs, PWMOUT and PWMO1. PWMO1 is an alternate function for EGPIO14.
343 /* The GPIO14E (14) pin overlap with pwm1 */
344 static const unsigned int pwm_9301_pins
[] = { 163 };
346 static const unsigned int gpio1a_9301_pins
[] = { 163 };
348 /* ep9301/9302 have only 0 pin of GPIO C Port exposed */
349 static const unsigned int gpio2a_9301_pins
[] = { 115 };
351 /* ep9301/9302 have only 4,5 pin of GPIO E Port exposed */
352 static const unsigned int gpio4a_9301_pins
[] = { 97, 98 };
354 /* ep9301/9302 have only 4,5 pin of GPIO G Port exposed */
355 static const unsigned int gpio6a_9301_pins
[] = { 87, 88 };
357 static const unsigned int gpio7a_9301_pins
[] = { 199, 200, 201, 202 };
359 /* Groups for the ep9301/ep9302 SoC/package */
360 static const struct ep93xx_pin_group ep9301_pin_groups
[] = {
361 PMX_GROUP("ssp", ssp_ep9301_pins
, EP93XX_SYSCON_DEVCFG_I2SONSSP
, 0),
362 PMX_GROUP("i2s_on_ssp", ssp_ep9301_pins
, EP93XX_SYSCON_DEVCFG_I2SONSSP
,
363 EP93XX_SYSCON_DEVCFG_I2SONSSP
),
364 PMX_GROUP("ac97", ac97_ep9301_pins
, EP93XX_SYSCON_DEVCFG_I2SONAC97
, 0),
365 PMX_GROUP("i2s_on_ac97", ac97_ep9301_pins
, EP93XX_SYSCON_DEVCFG_I2SONAC97
,
366 EP93XX_SYSCON_DEVCFG_I2SONAC97
),
367 PMX_GROUP("pwm1", pwm_9301_pins
, EP93XX_SYSCON_DEVCFG_PONG
, EP93XX_SYSCON_DEVCFG_PONG
),
368 PMX_GROUP("gpio1agrp", gpio1a_9301_pins
, EP93XX_SYSCON_DEVCFG_PONG
, 0),
369 PMX_GROUP("gpio2agrp", gpio2a_9301_pins
, EP93XX_SYSCON_DEVCFG_GONK
,
370 EP93XX_SYSCON_DEVCFG_GONK
),
371 PMX_GROUP("gpio4agrp", gpio4a_9301_pins
, EP93XX_SYSCON_DEVCFG_EONIDE
,
372 EP93XX_SYSCON_DEVCFG_EONIDE
),
373 PMX_GROUP("gpio6agrp", gpio6a_9301_pins
, EP93XX_SYSCON_DEVCFG_GONIDE
,
374 EP93XX_SYSCON_DEVCFG_GONIDE
),
375 PMX_GROUP("gpio7agrp", gpio7a_9301_pins
, EP93XX_SYSCON_DEVCFG_HONIDE
,
376 EP93XX_SYSCON_DEVCFG_HONIDE
),
379 static const struct pinctrl_pin_desc ep9307_pins
[] = {
381 PINCTRL_PIN(0, "CSn[1]"), /* A1 */
382 PINCTRL_PIN(1, "CSn[7]"), /* A2 */
383 PINCTRL_PIN(2, "SDCLKEN"), /* A3 */
384 PINCTRL_PIN(3, "DA[31]"), /* A4 */
385 PINCTRL_PIN(4, "DA[29]"), /* A5 */
386 PINCTRL_PIN(5, "DA[27]"), /* A6 */
387 PINCTRL_PIN(6, "HGPIO[2]"), /* A7 */
388 PINCTRL_PIN(7, "RDn"), /* A8 */
389 PINCTRL_PIN(8, "MIIRXD[3]"), /* A9 */
390 PINCTRL_PIN(9, "RXDVAL"), /* A10 */
391 PINCTRL_PIN(10, "MIITXD[1]"), /* A11 */
392 PINCTRL_PIN(11, "CRS"), /* A12 */
393 PINCTRL_PIN(12, "FGPIO[7]"), /* A13 */
394 PINCTRL_PIN(13, "FGPIO[0]"), /* A14 */
395 PINCTRL_PIN(14, "WAITn"), /* A15 */
396 PINCTRL_PIN(15, "USBm[2]"), /* A16 */
397 PINCTRL_PIN(16, "ASDI"), /* A17 */
399 PINCTRL_PIN(17, "AD[25]"), /* B1 */
400 PINCTRL_PIN(18, "CSn[2]"), /* B2 */
401 PINCTRL_PIN(19, "CSn[6]"), /* B3 */
402 PINCTRL_PIN(20, "AD[20]"), /* B4 */
403 PINCTRL_PIN(21, "DA[30]"), /* B5 */
404 PINCTRL_PIN(22, "AD[18]"), /* B6 */
405 PINCTRL_PIN(23, "HGPIO[3]"), /* B7 */
406 PINCTRL_PIN(24, "AD[17]"), /* B8 */
407 PINCTRL_PIN(25, "RXCLK"), /* B9 */
408 PINCTRL_PIN(26, "MIIRXD[1]"), /* B10 */
409 PINCTRL_PIN(27, "MIITXD[2]"), /* B11 */
410 PINCTRL_PIN(28, "TXEN"), /* B12 */
411 PINCTRL_PIN(29, "FGPIO[5]"), /* B13 */
412 PINCTRL_PIN(30, "EGPIO[15]"), /* B14 */
413 PINCTRL_PIN(31, "USBp[2]"), /* B15 */
414 PINCTRL_PIN(32, "ARSTn"), /* B16 */
415 PINCTRL_PIN(33, "ADC_VDD"), /* B17 */
417 PINCTRL_PIN(34, "AD[23]"), /* C1 */
418 PINCTRL_PIN(35, "DA[26]"), /* C2 */
419 PINCTRL_PIN(36, "CSn[3]"), /* C3 */
420 PINCTRL_PIN(37, "DA[25]"), /* C4 */
421 PINCTRL_PIN(38, "AD[24]"), /* C5 */
422 PINCTRL_PIN(39, "AD[19]"), /* C6 */
423 PINCTRL_PIN(40, "HGPIO[5]"), /* C7 */
424 PINCTRL_PIN(41, "WRn"), /* C8 */
425 PINCTRL_PIN(42, "MDIO"), /* C9 */
426 PINCTRL_PIN(43, "MIIRXD[2]"), /* C10 */
427 PINCTRL_PIN(44, "TXCLK"), /* C11 */
428 PINCTRL_PIN(45, "MIITXD[0]"), /* C12 */
429 PINCTRL_PIN(46, "CLD"), /* C13 */
430 PINCTRL_PIN(47, "EGPIO[13]"), /* C14 */
431 PINCTRL_PIN(48, "TRSTn"), /* C15 */
432 PINCTRL_PIN(49, "Xp"), /* C16 */
433 PINCTRL_PIN(50, "Xm"), /* C17 */
435 PINCTRL_PIN(51, "SDCSn[3]"), /* D1 */
436 PINCTRL_PIN(52, "DA[23]"), /* D2 */
437 PINCTRL_PIN(53, "SDCLK"), /* D3 */
438 PINCTRL_PIN(54, "DA[24]"), /* D4 */
439 PINCTRL_PIN(55, "HGPIO[7]"), /* D5 */
440 PINCTRL_PIN(56, "HGPIO[6]"), /* D6 */
441 PINCTRL_PIN(57, "A[28]"), /* D7 */
442 PINCTRL_PIN(58, "HGPIO[4]"), /* D8 */
443 PINCTRL_PIN(59, "AD[16]"), /* D9 */
444 PINCTRL_PIN(60, "MDC"), /* D10 */
445 PINCTRL_PIN(61, "RXERR"), /* D11 */
446 PINCTRL_PIN(62, "MIITXD[3]"), /* D12 */
447 PINCTRL_PIN(63, "EGPIO[12]"), /* D13 */
448 PINCTRL_PIN(64, "EGPIO[1]"), /* D14 */
449 PINCTRL_PIN(65, "EGPIO[0]"), /* D15 */
450 PINCTRL_PIN(66, "Ym"), /* D16 */
451 PINCTRL_PIN(67, "Yp"), /* D17 */
453 PINCTRL_PIN(68, "SDCSn[2]"), /* E1 */
454 PINCTRL_PIN(69, "SDWEN"), /* E2 */
455 PINCTRL_PIN(70, "DA[22]"), /* E3 */
456 PINCTRL_PIN(71, "AD[3]"), /* E4 */
457 PINCTRL_PIN(72, "DA[15]"), /* E5 */
458 PINCTRL_PIN(73, "AD[21]"), /* E6 */
459 PINCTRL_PIN(74, "DA[17]"), /* E7 */
460 PINCTRL_PIN(75, "vddr"), /* E8 */
461 PINCTRL_PIN(76, "vddr"), /* E9 */
462 PINCTRL_PIN(77, "vddr"), /* E10 */
463 PINCTRL_PIN(78, "MIIRXD[0]"), /* E11 */
464 PINCTRL_PIN(79, "TXERR"), /* E12 */
465 PINCTRL_PIN(80, "EGPIO[2]"), /* E13 */
466 PINCTRL_PIN(81, "EGPIO[4]"), /* E14 */
467 PINCTRL_PIN(82, "EGPIO[3]"), /* E15 */
468 PINCTRL_PIN(83, "sXp"), /* E16 */
469 PINCTRL_PIN(84, "sXm"), /* E17 */
471 PINCTRL_PIN(85, "RASn"), /* F1 */
472 PINCTRL_PIN(86, "SDCSn[1]"), /* F2 */
473 PINCTRL_PIN(87, "SDCSn[0]"), /* F3 */
474 PINCTRL_PIN(88, "DQMn[3]"), /* F4 */
475 PINCTRL_PIN(89, "AD[5]"), /* F5 */
476 PINCTRL_PIN(90, "gndr"), /* F6 */
477 PINCTRL_PIN(91, "gndr"), /* F7 */
478 PINCTRL_PIN(92, "gndr"), /* F8 */
479 PINCTRL_PIN(93, "vddc"), /* F9 */
480 PINCTRL_PIN(94, "vddc"), /* F10 */
481 PINCTRL_PIN(95, "gndr"), /* F11 */
482 PINCTRL_PIN(96, "EGPIO[7]"), /* F12 */
483 PINCTRL_PIN(97, "EGPIO[5]"), /* F13 */
484 PINCTRL_PIN(98, "ADC GND"), /* F14 */
485 PINCTRL_PIN(99, "EGPIO[6]"), /* F15 */
486 PINCTRL_PIN(100, "sYm"), /* F16 */
487 PINCTRL_PIN(101, "syp"), /* F17 */
489 PINCTRL_PIN(102, "DQMn[0]"), /* G1 */
490 PINCTRL_PIN(103, "CASn"), /* G2 */
491 PINCTRL_PIN(104, "DA[21]"), /* G3 */
492 PINCTRL_PIN(105, "AD[22]"), /* G4 */
493 PINCTRL_PIN(106, "vddr"), /* G5 */
494 PINCTRL_PIN(107, "gndr"), /* G6 */
495 PINCTRL_PIN(108, "gndr"), /* G12 */
496 PINCTRL_PIN(109, "EGPIO[9]"), /* G13 */
497 PINCTRL_PIN(110, "EGPIO[10]"), /* G14 */
498 PINCTRL_PIN(111, "EGPIO[11]"), /* G15 */
499 PINCTRL_PIN(112, "RTCXTALO"), /* G16 */
500 PINCTRL_PIN(113, "RTCXTALI"), /* G17 */
502 PINCTRL_PIN(114, "DA[18]"), /* H1 */
503 PINCTRL_PIN(115, "DA[20]"), /* H2 */
504 PINCTRL_PIN(116, "DA[19]"), /* H3 */
505 PINCTRL_PIN(117, "DA[16]"), /* H4 */
506 PINCTRL_PIN(118, "vddr"), /* H5 */
507 PINCTRL_PIN(119, "vddc"), /* H6 */
508 PINCTRL_PIN(120, "gndc"), /* H7 */
509 PINCTRL_PIN(121, "gndc"), /* H9 */
510 PINCTRL_PIN(122, "gndc"), /* H10 */
511 PINCTRL_PIN(123, "gndr"), /* H12 */
512 PINCTRL_PIN(124, "vddr"), /* H13 */
513 PINCTRL_PIN(125, "EGPIO[8]"), /* H14 */
514 PINCTRL_PIN(126, "PRSTN"), /* H15 */
515 PINCTRL_PIN(127, "COL[7]"), /* H16 */
516 PINCTRL_PIN(128, "RSTON"), /* H17 */
518 PINCTRL_PIN(129, "AD[6]"), /* J1 */
519 PINCTRL_PIN(130, "DA[14]"), /* J2 */
520 PINCTRL_PIN(131, "AD[7]"), /* J3 */
521 PINCTRL_PIN(132, "DA[13]"), /* J4 */
522 PINCTRL_PIN(133, "vddr"), /* J5 */
523 PINCTRL_PIN(134, "vddc"), /* J6 */
524 PINCTRL_PIN(135, "gndc"), /* J8 */
525 PINCTRL_PIN(136, "gndc"), /* J10 */
526 PINCTRL_PIN(137, "vddc"), /* J12 */
527 PINCTRL_PIN(138, "vddr"), /* J13 */
528 PINCTRL_PIN(139, "COL[5]"), /* J14 */
529 PINCTRL_PIN(140, "COL[6]"), /* J15 */
530 PINCTRL_PIN(141, "CSn[0]"), /* J16 */
531 PINCTRL_PIN(142, "COL[3]"), /* J17 */
533 PINCTRL_PIN(143, "AD[4]"), /* K1 */
534 PINCTRL_PIN(144, "DA[12]"), /* K2 */
535 PINCTRL_PIN(145, "DA[10]"), /* K3 */
536 PINCTRL_PIN(146, "DA[11]"), /* K4 */
537 PINCTRL_PIN(147, "vddr"), /* K5 */
538 PINCTRL_PIN(148, "gndr"), /* K6 */
539 PINCTRL_PIN(149, "gndc"), /* K8 */
540 PINCTRL_PIN(150, "gndc"), /* K9 */
541 PINCTRL_PIN(151, "gndc"), /* K10 */
542 PINCTRL_PIN(152, "vddc"), /* K12 */
543 PINCTRL_PIN(153, "COL[4]"), /* K13 */
544 PINCTRL_PIN(154, "PLL_VDD"), /* K14 */
545 PINCTRL_PIN(155, "COL[2]"), /* K15 */
546 PINCTRL_PIN(156, "COL[1]"), /* K16 */
547 PINCTRL_PIN(157, "COL[0]"), /* K17 */
549 PINCTRL_PIN(158, "DA[9]"), /* L1 */
550 PINCTRL_PIN(159, "AD[2]"), /* L2 */
551 PINCTRL_PIN(160, "AD[1]"), /* L3 */
552 PINCTRL_PIN(161, "DA[8]"), /* L4 */
553 PINCTRL_PIN(162, "BLANK"), /* L5 */
554 PINCTRL_PIN(163, "gndr"), /* L6 */
555 PINCTRL_PIN(164, "gndr"), /* L7 */
556 PINCTRL_PIN(165, "ROW[7]"), /* L8 */
557 PINCTRL_PIN(166, "ROW[5]"), /* L9 */
558 PINCTRL_PIN(167, "PLL GND"), /* L10 */
559 PINCTRL_PIN(168, "XTALI"), /* L11 */
560 PINCTRL_PIN(169, "XTALO"), /* L12 */
562 PINCTRL_PIN(170, "BRIGHT"), /* M1 */
563 PINCTRL_PIN(171, "AD[0]"), /* M2 */
564 PINCTRL_PIN(172, "DQMn[1]"), /* M3 */
565 PINCTRL_PIN(173, "DQMn[2]"), /* M4 */
566 PINCTRL_PIN(174, "P[17]"), /* M5 */
567 PINCTRL_PIN(175, "gndr"), /* M6 */
568 PINCTRL_PIN(176, "gndr"), /* M7 */
569 PINCTRL_PIN(177, "vddc"), /* M8 */
570 PINCTRL_PIN(178, "vddc"), /* M9 */
571 PINCTRL_PIN(179, "gndr"), /* M10 */
572 PINCTRL_PIN(180, "gndr"), /* M11 */
573 PINCTRL_PIN(181, "ROW[6]"), /* M12 */
574 PINCTRL_PIN(182, "ROW[4]"), /* M13 */
575 PINCTRL_PIN(183, "ROW[1]"), /* M14 */
576 PINCTRL_PIN(184, "ROW[0]"), /* M15 */
577 PINCTRL_PIN(185, "ROW[3]"), /* M16 */
578 PINCTRL_PIN(186, "ROW[2]"), /* M17 */
580 PINCTRL_PIN(187, "P[14]"), /* N1 */
581 PINCTRL_PIN(188, "P[16]"), /* N2 */
582 PINCTRL_PIN(189, "P[15]"), /* N3 */
583 PINCTRL_PIN(190, "P[13]"), /* N4 */
584 PINCTRL_PIN(191, "P[12]"), /* N5 */
585 PINCTRL_PIN(192, "DA[5]"), /* N6 */
586 PINCTRL_PIN(193, "vddr"), /* N7 */
587 PINCTRL_PIN(194, "vddr"), /* N8 */
588 PINCTRL_PIN(195, "vddr"), /* N9 */
589 PINCTRL_PIN(196, "vddr"), /* N10 */
590 PINCTRL_PIN(197, "EECLK"), /* N11 */
591 PINCTRL_PIN(198, "ASDO"), /* N12 */
592 PINCTRL_PIN(199, "CTSn"), /* N13 */
593 PINCTRL_PIN(200, "RXD[0]"), /* N14 */
594 PINCTRL_PIN(201, "TXD[0]"), /* N15 */
595 PINCTRL_PIN(202, "TXD[1]"), /* N16 */
596 PINCTRL_PIN(203, "TXD[2]"), /* N17 */
598 PINCTRL_PIN(204, "SPCLK"), /* P1 */
599 PINCTRL_PIN(205, "P[10]"), /* P2 */
600 PINCTRL_PIN(206, "P[11]"), /* P3 */
601 PINCTRL_PIN(207, "P[3]"), /* P4 */
602 PINCTRL_PIN(208, "AD[15]"), /* P5 */
603 PINCTRL_PIN(209, "AD[13]"), /* P6 */
604 PINCTRL_PIN(210, "AD[12]"), /* P7 */
605 PINCTRL_PIN(211, "DA[2]"), /* P8 */
606 PINCTRL_PIN(212, "AD[8]"), /* P9 */
607 PINCTRL_PIN(213, "TCK"), /* P10 */
608 PINCTRL_PIN(214, "BOOT[1]"), /* P11 */
609 PINCTRL_PIN(215, "EEDAT"), /* P12 */
610 PINCTRL_PIN(216, "GRLED"), /* P13 */
611 PINCTRL_PIN(217, "RDLED"), /* P14 */
612 PINCTRL_PIN(218, "GGPIO[2]"), /* P15 */
613 PINCTRL_PIN(219, "RXD[1]"), /* P16 */
614 PINCTRL_PIN(220, "RXD[2]"), /* P17 */
616 PINCTRL_PIN(221, "P[9]"), /* R1 */
617 PINCTRL_PIN(222, "HSYNC"), /* R2 */
618 PINCTRL_PIN(223, "P[6]"), /* R3 */
619 PINCTRL_PIN(224, "P[5]"), /* R4 */
620 PINCTRL_PIN(225, "P[0]"), /* R5 */
621 PINCTRL_PIN(226, "AD[14]"), /* R6 */
622 PINCTRL_PIN(227, "DA[4]"), /* R7 */
623 PINCTRL_PIN(228, "DA[1]"), /* R8 */
624 PINCTRL_PIN(229, "DTRn"), /* R9 */
625 PINCTRL_PIN(230, "TDI"), /* R10 */
626 PINCTRL_PIN(231, "BOOT[0]"), /* R11 */
627 PINCTRL_PIN(232, "ASYNC"), /* R12 */
628 PINCTRL_PIN(233, "SSPTX[1]"), /* R13 */
629 PINCTRL_PIN(234, "PWMOUT"), /* R14 */
630 PINCTRL_PIN(235, "USBm[0]"), /* R15 */
631 PINCTRL_PIN(236, "ABITCLK"), /* R16 */
632 PINCTRL_PIN(237, "USBp[0]"), /* R17 */
634 PINCTRL_PIN(238, "NC"), /* T1 */
635 PINCTRL_PIN(239, "NC"), /* T2 */
636 PINCTRL_PIN(240, "V_CSYNC"), /* T3 */
637 PINCTRL_PIN(241, "P[7]"), /* T4 */
638 PINCTRL_PIN(242, "P[2]"), /* T5 */
639 PINCTRL_PIN(243, "DA[7]"), /* T6 */
640 PINCTRL_PIN(244, "AD[11]"), /* T7 */
641 PINCTRL_PIN(245, "AD[9]"), /* T8 */
642 PINCTRL_PIN(246, "DSRn"), /* T9 */
643 PINCTRL_PIN(247, "TMS"), /* T10 */
644 PINCTRL_PIN(248, "gndr"), /* T11 */
645 PINCTRL_PIN(249, "SFRM[1]"), /* T12 */
646 PINCTRL_PIN(250, "INT[2]"), /* T13 */
647 PINCTRL_PIN(251, "INT[0]"), /* T14 */
648 PINCTRL_PIN(252, "USBp[1]"), /* T15 */
649 PINCTRL_PIN(253, "NC"), /* T16 */
650 PINCTRL_PIN(254, "NC"), /* T17 */
652 PINCTRL_PIN(255, "NC"), /* U1 */
653 PINCTRL_PIN(256, "NC"), /* U2 */
654 PINCTRL_PIN(257, "P[8]"), /* U3 */
655 PINCTRL_PIN(258, "P[4]"), /* U4 */
656 PINCTRL_PIN(259, "P[1]"), /* U5 */
657 PINCTRL_PIN(260, "DA[6]"), /* U6 */
658 PINCTRL_PIN(261, "DA[3]"), /* U7 */
659 PINCTRL_PIN(262, "AD[10]"), /* U8 */
660 PINCTRL_PIN(263, "DA[0]"), /* U9 */
661 PINCTRL_PIN(264, "TDO"), /* U10 */
662 PINCTRL_PIN(265, "NC"), /* U11 */
663 PINCTRL_PIN(266, "SCLK[1]"), /* U12 */
664 PINCTRL_PIN(267, "SSPRX[1]"), /* U13 */
665 PINCTRL_PIN(268, "INT[1]"), /* U14 */
666 PINCTRL_PIN(269, "RTSn"), /* U15 */
667 PINCTRL_PIN(270, "USBm[1]"), /* U16 */
668 PINCTRL_PIN(271, "NC"), /* U17 */
671 static const unsigned int ssp_ep9307_pins
[] = {
675 static const unsigned int ac97_ep9307_pins
[] = {
676 16, 32, 198, 232, 236,
679 /* I can't find info on those - it's some internal state */
680 static const unsigned int raster_on_sdram0_pins
[] = {
683 static const unsigned int raster_on_sdram3_pins
[] = {
687 static const unsigned int gpio2a_9307_pins
[] = {
688 165, 166, 181, 182, 183, 184, 185, 186,
692 static const unsigned int gpio3a_9307_pins
[] = {
693 127, 139, 140, 142, 153, 155, 156, 157,
696 static const unsigned int keypad_9307_pins
[] = {
697 127, 139, 140, 142, 153, 155, 156, 157,
698 165, 166, 181, 182, 183, 184, 185, 186,
701 /* ep9307 have only 4,5 pin of GPIO E Port exposed */
702 static const unsigned int gpio4a_9307_pins
[] = { 216, 217 };
704 /* ep9307 have only 2 pin of GPIO G Port exposed */
705 static const unsigned int gpio6a_9307_pins
[] = { 219 };
707 static const unsigned int gpio7a_9307_pins
[] = { 7, 24, 41, 56, 57, 59 };
709 static const struct ep93xx_pin_group ep9307_pin_groups
[] = {
710 PMX_GROUP("ssp", ssp_ep9307_pins
, EP93XX_SYSCON_DEVCFG_I2SONSSP
, 0),
711 PMX_GROUP("i2s_on_ssp", ssp_ep9307_pins
, EP93XX_SYSCON_DEVCFG_I2SONSSP
,
712 EP93XX_SYSCON_DEVCFG_I2SONSSP
),
713 PMX_GROUP("ac97", ac97_ep9307_pins
, EP93XX_SYSCON_DEVCFG_I2SONAC97
, 0),
714 PMX_GROUP("i2s_on_ac97", ac97_ep9301_pins
, EP93XX_SYSCON_DEVCFG_I2SONAC97
,
715 EP93XX_SYSCON_DEVCFG_I2SONAC97
),
716 PMX_GROUP("rasteronsdram0grp", raster_on_sdram0_pins
, EP93XX_SYSCON_DEVCFG_RASONP3
, 0),
717 PMX_GROUP("rasteronsdram3grp", raster_on_sdram3_pins
, EP93XX_SYSCON_DEVCFG_RASONP3
,
718 EP93XX_SYSCON_DEVCFG_RASONP3
),
719 PMX_GROUP("gpio2agrp", gpio2a_9307_pins
, EP93XX_SYSCON_DEVCFG_GONK
,
720 EP93XX_SYSCON_DEVCFG_GONK
),
721 PMX_GROUP("gpio3agrp", gpio3a_9307_pins
, EP93XX_SYSCON_DEVCFG_GONK
,
722 EP93XX_SYSCON_DEVCFG_GONK
),
723 PMX_GROUP("keypadgrp", keypad_9307_pins
, EP93XX_SYSCON_DEVCFG_GONK
, 0),
724 PMX_GROUP("gpio4agrp", gpio4a_9307_pins
, EP93XX_SYSCON_DEVCFG_EONIDE
,
725 EP93XX_SYSCON_DEVCFG_EONIDE
),
726 PMX_GROUP("gpio6agrp", gpio6a_9307_pins
, EP93XX_SYSCON_DEVCFG_GONIDE
,
727 EP93XX_SYSCON_DEVCFG_GONIDE
),
728 PMX_GROUP("gpio7agrp", gpio7a_9307_pins
, EP93XX_SYSCON_DEVCFG_HONIDE
,
729 EP93XX_SYSCON_DEVCFG_HONIDE
),
733 static const struct pinctrl_pin_desc ep9312_pins
[] = {
735 PINCTRL_PIN(0, "CSN[7]"), /* A1 */
736 PINCTRL_PIN(1, "DA[28]"), /* A2 */
737 PINCTRL_PIN(2, "AD[18]"), /* A3 */
738 PINCTRL_PIN(3, "DD[8]"), /* A4 */
739 PINCTRL_PIN(4, "DD[4]"), /* A5 */
740 PINCTRL_PIN(5, "AD[17]"), /* A6 */
741 PINCTRL_PIN(6, "RDN"), /* A7 */
742 PINCTRL_PIN(7, "RXCLK"), /* A8 */
743 PINCTRL_PIN(8, "MIIRXD[0]"), /* A9 */
744 PINCTRL_PIN(9, "RXDVAL"), /* A10 */
745 PINCTRL_PIN(10, "MIITXD[2]"), /* A11 */
746 PINCTRL_PIN(11, "TXERR"), /* A12 */
747 PINCTRL_PIN(12, "CLD"), /* A13 */
748 PINCTRL_PIN(13, "NC"), /* A14 */
749 PINCTRL_PIN(14, "NC"), /* A15 */
750 PINCTRL_PIN(15, "NC"), /* A16 */
751 PINCTRL_PIN(16, "EGPIO[12]"), /* A17 */
752 PINCTRL_PIN(17, "EGPIO[15]"), /* A18 */
753 PINCTRL_PIN(18, "NC"), /* A19 */
754 PINCTRL_PIN(19, "NC"), /* A20 */
756 PINCTRL_PIN(20, "CSN[2]"), /* B1 */
757 PINCTRL_PIN(21, "DA[31]"), /* B2 */
758 PINCTRL_PIN(22, "DA[30]"), /* B3 */
759 PINCTRL_PIN(23, "DA[27]"), /* B4 */
760 PINCTRL_PIN(24, "DD[7]"), /* B5 */
761 PINCTRL_PIN(25, "DD[3]"), /* B6 */
762 PINCTRL_PIN(26, "WRN"), /* B7 */
763 PINCTRL_PIN(27, "MDIO"), /* B8 */
764 PINCTRL_PIN(28, "MIIRXD[1]"), /* B9 */
765 PINCTRL_PIN(29, "RXERR"), /* B10 */
766 PINCTRL_PIN(30, "MIITXD[1]"), /* B11 */
767 PINCTRL_PIN(31, "CRS"), /* B12 */
768 PINCTRL_PIN(32, "NC"), /* B13 */
769 PINCTRL_PIN(33, "NC"), /* B14 */
770 PINCTRL_PIN(34, "NC"), /* B15 */
771 PINCTRL_PIN(35, "NC"), /* B16 */
772 PINCTRL_PIN(36, "EGPIO[13]"), /* B17 */
773 PINCTRL_PIN(37, "NC"), /* B18 */
774 PINCTRL_PIN(38, "WAITN"), /* B19 */
775 PINCTRL_PIN(39, "TRSTN"), /* B20 */
777 PINCTRL_PIN(40, "CSN[1]"), /* C1 */
778 PINCTRL_PIN(41, "CSN[3]"), /* C2 */
779 PINCTRL_PIN(42, "AD[20]"), /* C3 */
780 PINCTRL_PIN(43, "DA[29]"), /* C4 */
781 PINCTRL_PIN(44, "DD[10]"), /* C5 */
782 PINCTRL_PIN(45, "DD[6]"), /* C6 */
783 PINCTRL_PIN(46, "DD[2]"), /* C7 */
784 PINCTRL_PIN(47, "MDC"), /* C8 */
785 PINCTRL_PIN(48, "MIIRXD[3]"), /* C9 */
786 PINCTRL_PIN(49, "TXCLK"), /* C10 */
787 PINCTRL_PIN(50, "MIITXD[0]"), /* C11 */
788 PINCTRL_PIN(51, "NC"), /* C12 */
789 PINCTRL_PIN(52, "NC"), /* C13 */
790 PINCTRL_PIN(53, "NC"), /* C14 */
791 PINCTRL_PIN(54, "NC"), /* C15 */
792 PINCTRL_PIN(55, "NC"), /* C16 */
793 PINCTRL_PIN(56, "NC"), /* C17 */
794 PINCTRL_PIN(57, "USBP[2]"), /* C18 */
795 PINCTRL_PIN(58, "IORDY"), /* C19 */
796 PINCTRL_PIN(59, "DMACKN"), /* C20 */
798 PINCTRL_PIN(60, "AD[24]"), /* D1 */
799 PINCTRL_PIN(61, "DA[25]"), /* D2 */
800 PINCTRL_PIN(62, "DD[11]"), /* D3 */
801 PINCTRL_PIN(63, "SDCLKEN"), /* D4 */
802 PINCTRL_PIN(64, "AD[19]"), /* D5 */
803 PINCTRL_PIN(65, "DD[9]"), /* D6 */
804 PINCTRL_PIN(66, "DD[5]"), /* D7 */
805 PINCTRL_PIN(67, "AD[16]"), /* D8 */
806 PINCTRL_PIN(68, "MIIRXD[2]"), /* D9 */
807 PINCTRL_PIN(69, "MIITXD[3]"), /* D10 */
808 PINCTRL_PIN(70, "TXEN"), /* D11 */
809 PINCTRL_PIN(71, "NC"), /* D12 */
810 PINCTRL_PIN(72, "NC"), /* D13 */
811 PINCTRL_PIN(73, "NC"), /* D14 */
812 PINCTRL_PIN(74, "EGPIO[14]"), /* D15 */
813 PINCTRL_PIN(75, "NC"), /* D16 */
814 PINCTRL_PIN(76, "USBM[2]"), /* D17 */
815 PINCTRL_PIN(77, "ARSTN"), /* D18 */
816 PINCTRL_PIN(78, "DIORN"), /* D19 */
817 PINCTRL_PIN(79, "EGPIO[1]"), /* D20 */
819 PINCTRL_PIN(80, "AD[23]"), /* E1 */
820 PINCTRL_PIN(81, "DA[23]"), /* E2 */
821 PINCTRL_PIN(82, "DA[26]"), /* E3 */
822 PINCTRL_PIN(83, "CSN[6]"), /* E4 */
823 PINCTRL_PIN(84, "GND"), /* E5 */
824 PINCTRL_PIN(85, "GND"), /* E6 */
825 PINCTRL_PIN(86, "CVDD"), /* E7 */
826 PINCTRL_PIN(87, "CVDD"), /* E8 */
827 PINCTRL_PIN(88, "RVDD"), /* E9 */
828 PINCTRL_PIN(89, "GND"), /* E10 */
829 PINCTRL_PIN(90, "GND"), /* E11 */
830 PINCTRL_PIN(91, "RVDD"), /* E12 */
831 PINCTRL_PIN(92, "CVDD"), /* E13 */
832 PINCTRL_PIN(93, "CVDD"), /* E14 */
833 PINCTRL_PIN(94, "GND"), /* E15 */
834 PINCTRL_PIN(95, "ASDI"), /* E16 */
835 PINCTRL_PIN(96, "DIOWN"), /* E17 */
836 PINCTRL_PIN(97, "EGPIO[0]"), /* E18 */
837 PINCTRL_PIN(98, "EGPIO[3]"), /* E19 */
838 PINCTRL_PIN(99, "EGPIO[5]"), /* E20 */
840 PINCTRL_PIN(100, "SDCSN[3]"), /* F1 */
841 PINCTRL_PIN(101, "DA[22]"), /* F2 */
842 PINCTRL_PIN(102, "DA[24]"), /* F3 */
843 PINCTRL_PIN(103, "AD[25]"), /* F4 */
844 PINCTRL_PIN(104, "RVDD"), /* F5 */
845 PINCTRL_PIN(105, "GND"), /* F6 */
846 PINCTRL_PIN(106, "CVDD"), /* F7 */
847 PINCTRL_PIN(107, "CVDD"), /* F14 */
848 PINCTRL_PIN(108, "GND"), /* F15 */
849 PINCTRL_PIN(109, "GND"), /* F16 */
850 PINCTRL_PIN(110, "EGPIO[2]"), /* F17 */
851 PINCTRL_PIN(111, "EGPIO[4]"), /* F18 */
852 PINCTRL_PIN(112, "EGPIO[6]"), /* F19 */
853 PINCTRL_PIN(113, "EGPIO[8]"), /* F20 */
855 PINCTRL_PIN(114, "SDCSN[0]"), /* G1 */
856 PINCTRL_PIN(115, "SDCSN[1]"), /* G2 */
857 PINCTRL_PIN(116, "SDWEN"), /* G3 */
858 PINCTRL_PIN(117, "SDCLK"), /* G4 */
859 PINCTRL_PIN(118, "RVDD"), /* G5 */
860 PINCTRL_PIN(119, "RVDD"), /* G6 */
861 PINCTRL_PIN(120, "RVDD"), /* G15 */
862 PINCTRL_PIN(121, "RVDD"), /* G16 */
863 PINCTRL_PIN(122, "EGPIO[7]"), /* G17 */
864 PINCTRL_PIN(123, "EGPIO[9]"), /* G18 */
865 PINCTRL_PIN(124, "EGPIO[10]"), /* G19 */
866 PINCTRL_PIN(125, "EGPIO[11]"), /* G20 */
868 PINCTRL_PIN(126, "DQMN[3]"), /* H1 */
869 PINCTRL_PIN(127, "CASN"), /* H2 */
870 PINCTRL_PIN(128, "RASN"), /* H3 */
871 PINCTRL_PIN(129, "SDCSN[2]"), /* H4 */
872 PINCTRL_PIN(130, "CVDD"), /* H5 */
873 PINCTRL_PIN(131, "GND"), /* H8 */
874 PINCTRL_PIN(132, "GND"), /* H9 */
875 PINCTRL_PIN(133, "GND"), /* H10 */
876 PINCTRL_PIN(134, "GND"), /* H11 */
877 PINCTRL_PIN(135, "GND"), /* H12 */
878 PINCTRL_PIN(136, "GND"), /* H13 */
879 PINCTRL_PIN(137, "RVDD"), /* H16 */
880 PINCTRL_PIN(138, "RTCXTALO"), /* H17 */
881 PINCTRL_PIN(139, "ADC_VDD"), /* H18 */
882 PINCTRL_PIN(140, "ADC_GND"), /* H19 */
883 PINCTRL_PIN(141, "XP"), /* H20 */
885 PINCTRL_PIN(142, "DA[21]"), /* J1 */
886 PINCTRL_PIN(143, "DQMN[0]"), /* J2 */
887 PINCTRL_PIN(144, "DQMN[1]"), /* J3 */
888 PINCTRL_PIN(145, "DQMN[2]"), /* J4 */
889 PINCTRL_PIN(146, "GND"), /* J5 */
890 PINCTRL_PIN(147, "GND"), /* J8 */
891 PINCTRL_PIN(148, "GND"), /* J9 */
892 PINCTRL_PIN(149, "GND"), /* J10 */
893 PINCTRL_PIN(150, "GND"), /* J11 */
894 PINCTRL_PIN(151, "GND"), /* J12 */
895 PINCTRL_PIN(152, "GND"), /* J13 */
896 PINCTRL_PIN(153, "CVDD"), /* J16 */
897 PINCTRL_PIN(154, "RTCXTALI"), /* J17 */
898 PINCTRL_PIN(155, "XM"), /* J18 */
899 PINCTRL_PIN(156, "YP"), /* J19 */
900 PINCTRL_PIN(157, "YM"), /* J20 */
902 PINCTRL_PIN(158, "AD[22]"), /* K1 */
903 PINCTRL_PIN(159, "DA[20]"), /* K2 */
904 PINCTRL_PIN(160, "AD[21]"), /* K3 */
905 PINCTRL_PIN(161, "DA[19]"), /* K4 */
906 PINCTRL_PIN(162, "RVDD"), /* K5 */
907 PINCTRL_PIN(163, "GND"), /* K8 */
908 PINCTRL_PIN(164, "GND"), /* K9 */
909 PINCTRL_PIN(165, "GND"), /* K10 */
910 PINCTRL_PIN(166, "GND"), /* K11 */
911 PINCTRL_PIN(167, "GND"), /* K12 */
912 PINCTRL_PIN(168, "GND"), /* K13 */
913 PINCTRL_PIN(169, "CVDD"), /* K16 */
914 PINCTRL_PIN(170, "SYM"), /* K17 */
915 PINCTRL_PIN(171, "SYP"), /* K18 */
916 PINCTRL_PIN(172, "SXM"), /* K19 */
917 PINCTRL_PIN(173, "SXP"), /* K20 */
919 PINCTRL_PIN(174, "DA[18]"), /* L1 */
920 PINCTRL_PIN(175, "DA[17]"), /* L2 */
921 PINCTRL_PIN(176, "DA[16]"), /* L3 */
922 PINCTRL_PIN(177, "DA[15]"), /* L4 */
923 PINCTRL_PIN(178, "GND"), /* L5 */
924 PINCTRL_PIN(179, "GND"), /* L8 */
925 PINCTRL_PIN(180, "GND"), /* L9 */
926 PINCTRL_PIN(181, "GND"), /* L10 */
927 PINCTRL_PIN(182, "GND"), /* L11 */
928 PINCTRL_PIN(183, "GND"), /* L12 */
929 PINCTRL_PIN(184, "GND"), /* L13 */
930 PINCTRL_PIN(185, "CVDD"), /* L16 */
931 PINCTRL_PIN(186, "COL[5]"), /* L17 */
932 PINCTRL_PIN(187, "COL[7]"), /* L18 */
933 PINCTRL_PIN(188, "RSTON"), /* L19 */
934 PINCTRL_PIN(189, "PRSTN"), /* L20 */
936 PINCTRL_PIN(190, "AD[7]"), /* M1 */
937 PINCTRL_PIN(191, "DA[14]"), /* M2 */
938 PINCTRL_PIN(192, "AD[6]"), /* M3 */
939 PINCTRL_PIN(193, "AD[5]"), /* M4 */
940 PINCTRL_PIN(194, "CVDD"), /* M5 */
941 PINCTRL_PIN(195, "GND"), /* M8 */
942 PINCTRL_PIN(196, "GND"), /* M9 */
943 PINCTRL_PIN(197, "GND"), /* M10 */
944 PINCTRL_PIN(198, "GND"), /* M11 */
945 PINCTRL_PIN(199, "GND"), /* M12 */
946 PINCTRL_PIN(200, "GND"), /* M13 */
947 PINCTRL_PIN(201, "GND"), /* M16 */
948 PINCTRL_PIN(202, "COL[4]"), /* M17 */
949 PINCTRL_PIN(203, "COL[3]"), /* M18 */
950 PINCTRL_PIN(204, "COL[6]"), /* M19 */
951 PINCTRL_PIN(205, "CSN[0]"), /* M20 */
953 PINCTRL_PIN(206, "DA[13]"), /* N1 */
954 PINCTRL_PIN(207, "DA[12]"), /* N2 */
955 PINCTRL_PIN(208, "DA[11]"), /* N3 */
956 PINCTRL_PIN(209, "AD[3]"), /* N4 */
957 PINCTRL_PIN(210, "CVDD"), /* N5 */
958 PINCTRL_PIN(211, "CVDD"), /* N6 */
959 PINCTRL_PIN(212, "GND"), /* N8 */
960 PINCTRL_PIN(213, "GND"), /* N9 */
961 PINCTRL_PIN(214, "GND"), /* N10 */
962 PINCTRL_PIN(215, "GND"), /* N11 */
963 PINCTRL_PIN(216, "GND"), /* N12 */
964 PINCTRL_PIN(217, "GND"), /* N13 */
965 PINCTRL_PIN(218, "GND"), /* N15 */
966 PINCTRL_PIN(219, "GND"), /* N16 */
967 PINCTRL_PIN(220, "XTALO"), /* N17 */
968 PINCTRL_PIN(221, "COL[0]"), /* N18 */
969 PINCTRL_PIN(222, "COL[1]"), /* N19 */
970 PINCTRL_PIN(223, "COL[2]"), /* N20 */
972 PINCTRL_PIN(224, "AD[4]"), /* P1 */
973 PINCTRL_PIN(225, "DA[10]"), /* P2 */
974 PINCTRL_PIN(226, "DA[9]"), /* P3 */
975 PINCTRL_PIN(227, "BRIGHT"), /* P4 */
976 PINCTRL_PIN(228, "RVDD"), /* P5 */
977 PINCTRL_PIN(229, "RVDD"), /* P6 */
978 PINCTRL_PIN(230, "RVDD"), /* P15 */
979 PINCTRL_PIN(231, "RVDD"), /* P16 */
980 PINCTRL_PIN(232, "XTALI"), /* P17 */
981 PINCTRL_PIN(233, "PLL_VDD"), /* P18 */
982 PINCTRL_PIN(234, "ROW[6]"), /* P19 */
983 PINCTRL_PIN(235, "ROW[7]"), /* P20 */
985 PINCTRL_PIN(236, "AD[2]"), /* R1 */
986 PINCTRL_PIN(237, "AD[1]"), /* R2 */
987 PINCTRL_PIN(238, "P[17]"), /* R3 */
988 PINCTRL_PIN(239, "P[14]"), /* R4 */
989 PINCTRL_PIN(240, "RVDD"), /* R5 */
990 PINCTRL_PIN(241, "RVDD"), /* R6 */
991 PINCTRL_PIN(242, "GND"), /* R7 */
992 PINCTRL_PIN(243, "CVDD"), /* R8 */
993 PINCTRL_PIN(244, "CVDD"), /* R13 */
994 PINCTRL_PIN(245, "GND"), /* R14 */
995 PINCTRL_PIN(246, "RVDD"), /* R15 */
996 PINCTRL_PIN(247, "RVDD"), /* R16 */
997 PINCTRL_PIN(248, "ROW[0]"), /* R17 */
998 PINCTRL_PIN(249, "ROW[3]"), /* R18 */
999 PINCTRL_PIN(250, "PLL_GND"), /* R19 */
1000 PINCTRL_PIN(251, "ROW[5]"), /* R20 */
1002 PINCTRL_PIN(252, "DA[8]"), /* T1 */
1003 PINCTRL_PIN(253, "BLANK"), /* T2 */
1004 PINCTRL_PIN(254, "P[13]"), /* T3 */
1005 PINCTRL_PIN(255, "SPCLK"), /* T4 */
1006 PINCTRL_PIN(256, "V_CSYNC"), /* T5 */
1007 PINCTRL_PIN(257, "DD[14]"), /* T6 */
1008 PINCTRL_PIN(258, "GND"), /* T7 */
1009 PINCTRL_PIN(259, "CVDD"), /* T8 */
1010 PINCTRL_PIN(260, "RVDD"), /* T9 */
1011 PINCTRL_PIN(261, "GND"), /* T10 */
1012 PINCTRL_PIN(262, "GND"), /* T11 */
1013 PINCTRL_PIN(263, "RVDD"), /* T12 */
1014 PINCTRL_PIN(264, "CVDD"), /* T13 */
1015 PINCTRL_PIN(265, "GND"), /* T14 */
1016 PINCTRL_PIN(266, "INT[0]"), /* T15 */
1017 PINCTRL_PIN(267, "USBM[1]"), /* T16 */
1018 PINCTRL_PIN(268, "RXD[0]"), /* T17 */
1019 PINCTRL_PIN(269, "TXD[2]"), /* T18 */
1020 PINCTRL_PIN(270, "ROW[2]"), /* T19 */
1021 PINCTRL_PIN(271, "ROW[4]"), /* T20 */
1023 PINCTRL_PIN(272, "AD[0]"), /* U1 */
1024 PINCTRL_PIN(273, "P[15]"), /* U2 */
1025 PINCTRL_PIN(274, "P[10]"), /* U3 */
1026 PINCTRL_PIN(275, "P[7]"), /* U4 */
1027 PINCTRL_PIN(276, "P[6]"), /* U5 */
1028 PINCTRL_PIN(277, "P[4]"), /* U6 */
1029 PINCTRL_PIN(278, "P[0]"), /* U7 */
1030 PINCTRL_PIN(279, "AD[13]"), /* U8 */
1031 PINCTRL_PIN(280, "DA[3]"), /* U9 */
1032 PINCTRL_PIN(281, "DA[0]"), /* U10 */
1033 PINCTRL_PIN(282, "DSRN"), /* U11 */
1034 PINCTRL_PIN(283, "BOOT[1]"), /* U12 */
1035 PINCTRL_PIN(284, "NC"), /* U13 */
1036 PINCTRL_PIN(285, "SSPRX1"), /* U14 */
1037 PINCTRL_PIN(286, "INT[1]"), /* U15 */
1038 PINCTRL_PIN(287, "PWMOUT"), /* U16 */
1039 PINCTRL_PIN(288, "USBM[0]"), /* U17 */
1040 PINCTRL_PIN(289, "RXD[1]"), /* U18 */
1041 PINCTRL_PIN(290, "TXD[1]"), /* U19 */
1042 PINCTRL_PIN(291, "ROW[1]"), /* U20 */
1044 PINCTRL_PIN(292, "P[16]"), /* V1 */
1045 PINCTRL_PIN(293, "P[11]"), /* V2 */
1046 PINCTRL_PIN(294, "P[8]"), /* V3 */
1047 PINCTRL_PIN(295, "DD[15]"), /* V4 */
1048 PINCTRL_PIN(296, "DD[13]"), /* V5 */
1049 PINCTRL_PIN(297, "P[1]"), /* V6 */
1050 PINCTRL_PIN(298, "AD[14]"), /* V7 */
1051 PINCTRL_PIN(299, "AD[12]"), /* V8 */
1052 PINCTRL_PIN(300, "DA[2]"), /* V9 */
1053 PINCTRL_PIN(301, "IDECS0N"), /* V10 */
1054 PINCTRL_PIN(302, "IDEDA[2]"), /* V11 */
1055 PINCTRL_PIN(303, "TDI"), /* V12 */
1056 PINCTRL_PIN(304, "GND"), /* V13 */
1057 PINCTRL_PIN(305, "ASYNC"), /* V14 */
1058 PINCTRL_PIN(306, "SSPTX1"), /* V15 */
1059 PINCTRL_PIN(307, "INT[2]"), /* V16 */
1060 PINCTRL_PIN(308, "RTSN"), /* V17 */
1061 PINCTRL_PIN(309, "USBP[0]"), /* V18 */
1062 PINCTRL_PIN(310, "CTSN"), /* V19 */
1063 PINCTRL_PIN(311, "TXD[0]"), /* V20 */
1065 PINCTRL_PIN(312, "P[12]"), /* W1 */
1066 PINCTRL_PIN(313, "P[9]"), /* W2 */
1067 PINCTRL_PIN(314, "DD[0]"), /* W3 */
1068 PINCTRL_PIN(315, "P[5]"), /* W4 */
1069 PINCTRL_PIN(316, "P[3]"), /* W5 */
1070 PINCTRL_PIN(317, "DA[7]"), /* W6 */
1071 PINCTRL_PIN(318, "DA[5]"), /* W7 */
1072 PINCTRL_PIN(319, "AD[11]"), /* W8 */
1073 PINCTRL_PIN(320, "AD[9]"), /* W9 */
1074 PINCTRL_PIN(321, "IDECS1N"), /* W10 */
1075 PINCTRL_PIN(322, "IDEDA[1]"), /* W11 */
1076 PINCTRL_PIN(323, "TCK"), /* W12 */
1077 PINCTRL_PIN(324, "TMS"), /* W13 */
1078 PINCTRL_PIN(325, "EECLK"), /* W14 */
1079 PINCTRL_PIN(326, "SCLK1"), /* W15 */
1080 PINCTRL_PIN(327, "GRLED"), /* W16 */
1081 PINCTRL_PIN(328, "INT[3]"), /* W17 */
1082 PINCTRL_PIN(329, "SLA[1]"), /* W18 */
1083 PINCTRL_PIN(330, "SLA[0]"), /* W19 */
1084 PINCTRL_PIN(331, "RXD[2]"), /* W20 */
1086 PINCTRL_PIN(332, "HSYNC"), /* Y1 */
1087 PINCTRL_PIN(333, "DD[1]"), /* Y2 */
1088 PINCTRL_PIN(334, "DD[12]"), /* Y3 */
1089 PINCTRL_PIN(335, "P[2]"), /* Y4 */
1090 PINCTRL_PIN(336, "AD[15]"), /* Y5 */
1091 PINCTRL_PIN(337, "DA[6]"), /* Y6 */
1092 PINCTRL_PIN(338, "DA[4]"), /* Y7 */
1093 PINCTRL_PIN(339, "AD[10]"), /* Y8 */
1094 PINCTRL_PIN(340, "DA[1]"), /* Y9 */
1095 PINCTRL_PIN(341, "AD[8]"), /* Y10 */
1096 PINCTRL_PIN(342, "IDEDA[0]"), /* Y11 */
1097 PINCTRL_PIN(343, "DTRN"), /* Y12 */
1098 PINCTRL_PIN(344, "TDO"), /* Y13 */
1099 PINCTRL_PIN(345, "BOOT[0]"), /* Y14 */
1100 PINCTRL_PIN(346, "EEDAT"), /* Y15 */
1101 PINCTRL_PIN(347, "ASDO"), /* Y16 */
1102 PINCTRL_PIN(348, "SFRM1"), /* Y17 */
1103 PINCTRL_PIN(349, "RDLED"), /* Y18 */
1104 PINCTRL_PIN(350, "USBP[1]"), /* Y19 */
1105 PINCTRL_PIN(351, "ABITCLK"), /* Y20 */
1108 static const unsigned int ssp_ep9312_pins
[] = {
1112 static const unsigned int ac97_ep9312_pins
[] = {
1113 77, 95, 305, 347, 351,
1116 static const unsigned int pwm_ep9312_pins
[] = { 74 };
1118 static const unsigned int gpio1a_ep9312_pins
[] = { 74 };
1120 static const unsigned int gpio2a_9312_pins
[] = {
1121 234, 235, 248, 249, 251, 270, 271, 291,
1124 static const unsigned int gpio3a_9312_pins
[] = {
1125 186, 187, 202, 203, 204, 221, 222, 223,
1128 static const unsigned int keypad_9312_pins
[] = {
1129 186, 187, 202, 203, 204, 221, 222, 223,
1130 234, 235, 248, 249, 251, 270, 271, 291,
1133 static const unsigned int gpio4a_9312_pins
[] = {
1134 78, 301, 302, 321, 322, 342,
1137 static const unsigned int gpio6a_9312_pins
[] = {
1141 static const unsigned int gpio7a_9312_pins
[] = {
1142 4, 24, 25, 45, 46, 66, 314, 333,
1145 static const unsigned int ide_9312_pins
[] = {
1146 78, 301, 302, 321, 322, 342, 257, 295,
1147 296, 334, 4, 24, 25, 45, 46, 66,
1151 static const struct ep93xx_pin_group ep9312_pin_groups
[] = {
1152 PMX_GROUP("ssp", ssp_ep9312_pins
, EP93XX_SYSCON_DEVCFG_I2SONSSP
, 0),
1153 PMX_GROUP("i2s_on_ssp", ssp_ep9312_pins
, EP93XX_SYSCON_DEVCFG_I2SONSSP
,
1154 EP93XX_SYSCON_DEVCFG_I2SONSSP
),
1155 PMX_GROUP("pwm1", pwm_ep9312_pins
, EP93XX_SYSCON_DEVCFG_PONG
,
1156 EP93XX_SYSCON_DEVCFG_PONG
),
1157 PMX_GROUP("gpio1agrp", gpio1a_ep9312_pins
, EP93XX_SYSCON_DEVCFG_PONG
, 0),
1158 PMX_GROUP("ac97", ac97_ep9312_pins
, EP93XX_SYSCON_DEVCFG_I2SONAC97
, 0),
1159 PMX_GROUP("i2s_on_ac97", ac97_ep9312_pins
, EP93XX_SYSCON_DEVCFG_I2SONAC97
,
1160 EP93XX_SYSCON_DEVCFG_I2SONAC97
),
1161 PMX_GROUP("rasteronsdram0grp", raster_on_sdram0_pins
, EP93XX_SYSCON_DEVCFG_RASONP3
, 0),
1162 PMX_GROUP("rasteronsdram3grp", raster_on_sdram3_pins
, EP93XX_SYSCON_DEVCFG_RASONP3
,
1163 EP93XX_SYSCON_DEVCFG_RASONP3
),
1164 PMX_GROUP("gpio2agrp", gpio2a_9312_pins
, EP93XX_SYSCON_DEVCFG_GONK
,
1165 EP93XX_SYSCON_DEVCFG_GONK
),
1166 PMX_GROUP("gpio3agrp", gpio3a_9312_pins
, EP93XX_SYSCON_DEVCFG_GONK
,
1167 EP93XX_SYSCON_DEVCFG_GONK
),
1168 PMX_GROUP("keypadgrp", keypad_9312_pins
, EP93XX_SYSCON_DEVCFG_GONK
, 0),
1169 PMX_GROUP("gpio4agrp", gpio4a_9312_pins
, EP93XX_SYSCON_DEVCFG_EONIDE
,
1170 EP93XX_SYSCON_DEVCFG_EONIDE
),
1171 PMX_GROUP("gpio6agrp", gpio6a_9312_pins
, EP93XX_SYSCON_DEVCFG_GONIDE
,
1172 EP93XX_SYSCON_DEVCFG_GONIDE
),
1173 PMX_GROUP("gpio7agrp", gpio7a_9312_pins
, EP93XX_SYSCON_DEVCFG_HONIDE
,
1174 EP93XX_SYSCON_DEVCFG_HONIDE
),
1175 PMX_GROUP("idegrp", ide_9312_pins
, EP93XX_SYSCON_DEVCFG_EONIDE
|
1176 EP93XX_SYSCON_DEVCFG_GONIDE
| EP93XX_SYSCON_DEVCFG_HONIDE
, 0),
1179 static int ep93xx_get_groups_count(struct pinctrl_dev
*pctldev
)
1181 struct ep93xx_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
1183 switch (pmx
->model
) {
1184 case EP93XX_9301_PINCTRL
:
1185 return ARRAY_SIZE(ep9301_pin_groups
);
1186 case EP93XX_9307_PINCTRL
:
1187 return ARRAY_SIZE(ep9307_pin_groups
);
1188 case EP93XX_9312_PINCTRL
:
1189 return ARRAY_SIZE(ep9312_pin_groups
);
1195 static const char *ep93xx_get_group_name(struct pinctrl_dev
*pctldev
,
1196 unsigned int selector
)
1198 struct ep93xx_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
1200 switch (pmx
->model
) {
1201 case EP93XX_9301_PINCTRL
:
1202 return ep9301_pin_groups
[selector
].grp
.name
;
1203 case EP93XX_9307_PINCTRL
:
1204 return ep9307_pin_groups
[selector
].grp
.name
;
1205 case EP93XX_9312_PINCTRL
:
1206 return ep9312_pin_groups
[selector
].grp
.name
;
1212 static int ep93xx_get_group_pins(struct pinctrl_dev
*pctldev
,
1213 unsigned int selector
,
1214 const unsigned int **pins
,
1215 unsigned int *num_pins
)
1217 struct ep93xx_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
1219 switch (pmx
->model
) {
1220 case EP93XX_9301_PINCTRL
:
1221 *pins
= ep9301_pin_groups
[selector
].grp
.pins
;
1222 *num_pins
= ep9301_pin_groups
[selector
].grp
.npins
;
1224 case EP93XX_9307_PINCTRL
:
1225 *pins
= ep9307_pin_groups
[selector
].grp
.pins
;
1226 *num_pins
= ep9307_pin_groups
[selector
].grp
.npins
;
1228 case EP93XX_9312_PINCTRL
:
1229 *pins
= ep9312_pin_groups
[selector
].grp
.pins
;
1230 *num_pins
= ep9312_pin_groups
[selector
].grp
.npins
;
1239 static const struct pinctrl_ops ep93xx_pctrl_ops
= {
1240 .get_groups_count
= ep93xx_get_groups_count
,
1241 .get_group_name
= ep93xx_get_group_name
,
1242 .get_group_pins
= ep93xx_get_group_pins
,
1243 .dt_node_to_map
= pinconf_generic_dt_node_to_map_all
,
1244 .dt_free_map
= pinconf_generic_dt_free_map
,
1247 static const char * const spigrps
[] = { "ssp" };
1248 static const char * const ac97grps
[] = { "ac97" };
1249 static const char * const i2sgrps
[] = { "i2s_on_ssp", "i2s_on_ac97" };
1250 static const char * const pwm1grps
[] = { "pwm1" };
1251 static const char * const gpiogrps
[] = { "gpio1agrp", "gpio2agrp", "gpio3agrp",
1252 "gpio4agrp", "gpio6agrp", "gpio7agrp" };
1253 static const char * const rastergrps
[] = { "rasteronsdram0grp", "rasteronsdram3grp"};
1254 static const char * const keypadgrps
[] = { "keypadgrp"};
1255 static const char * const idegrps
[] = { "idegrp"};
1257 static const struct pinfunction ep93xx_pmx_functions
[] = {
1258 PINCTRL_PINFUNCTION("spi", spigrps
, ARRAY_SIZE(spigrps
)),
1259 PINCTRL_PINFUNCTION("ac97", ac97grps
, ARRAY_SIZE(ac97grps
)),
1260 PINCTRL_PINFUNCTION("i2s", i2sgrps
, ARRAY_SIZE(i2sgrps
)),
1261 PINCTRL_PINFUNCTION("pwm", pwm1grps
, ARRAY_SIZE(pwm1grps
)),
1262 PINCTRL_PINFUNCTION("keypad", keypadgrps
, ARRAY_SIZE(keypadgrps
)),
1263 PINCTRL_PINFUNCTION("pata", idegrps
, ARRAY_SIZE(idegrps
)),
1264 PINCTRL_PINFUNCTION("lcd", rastergrps
, ARRAY_SIZE(rastergrps
)),
1265 PINCTRL_PINFUNCTION("gpio", gpiogrps
, ARRAY_SIZE(gpiogrps
)),
1268 static int ep93xx_pmx_set_mux(struct pinctrl_dev
*pctldev
,
1269 unsigned int selector
,
1272 struct ep93xx_pmx
*pmx
;
1273 const struct pinfunction
*func
;
1274 const struct ep93xx_pin_group
*grp
;
1275 u32 before
, after
, expected
;
1279 pmx
= pinctrl_dev_get_drvdata(pctldev
);
1281 switch (pmx
->model
) {
1282 case EP93XX_9301_PINCTRL
:
1283 grp
= &ep9301_pin_groups
[group
];
1285 case EP93XX_9307_PINCTRL
:
1286 grp
= &ep9307_pin_groups
[group
];
1288 case EP93XX_9312_PINCTRL
:
1289 grp
= &ep9312_pin_groups
[group
];
1292 dev_err(pmx
->dev
, "invalid SoC type\n");
1296 func
= &ep93xx_pmx_functions
[selector
];
1299 "ACTIVATE function \"%s\" with group \"%s\" (mask=0x%x, value=0x%x)\n",
1300 func
->name
, grp
->grp
.name
, grp
->mask
, grp
->value
);
1302 regmap_read(pmx
->map
, EP93XX_SYSCON_DEVCFG
, &before
);
1303 ep93xx_pinctrl_update_bits(pmx
, EP93XX_SYSCON_DEVCFG
,
1304 grp
->mask
, grp
->value
);
1305 regmap_read(pmx
->map
, EP93XX_SYSCON_DEVCFG
, &after
);
1307 dev_dbg(pmx
->dev
, "before=0x%x, after=0x%x, mask=0x%lx\n",
1308 before
, after
, PADS_MASK
);
1310 /* Which bits changed */
1311 before
&= PADS_MASK
;
1313 expected
= before
& ~grp
->mask
;
1314 expected
|= grp
->value
;
1315 expected
&= PADS_MASK
;
1317 /* Print changed states */
1318 tmp
= expected
^ after
;
1319 for_each_set_bit(i
, &tmp
, PADS_MAXBIT
) {
1320 bool enabled
= expected
& BIT(i
);
1323 "pin group %s could not be %s: probably a hardware limitation\n",
1324 ep93xx_padgroups
[i
], str_enabled_disabled(enabled
));
1326 "DeviceCfg before: %08x, after %08x, expected %08x\n",
1327 before
, after
, expected
);
1330 return tmp
? -EINVAL
: 0;
1333 static int ep93xx_pmx_get_funcs_count(struct pinctrl_dev
*pctldev
)
1335 return ARRAY_SIZE(ep93xx_pmx_functions
);
1338 static const char *ep93xx_pmx_get_func_name(struct pinctrl_dev
*pctldev
,
1339 unsigned int selector
)
1341 return ep93xx_pmx_functions
[selector
].name
;
1344 static int ep93xx_pmx_get_groups(struct pinctrl_dev
*pctldev
,
1345 unsigned int selector
,
1346 const char * const **groups
,
1347 unsigned int * const num_groups
)
1349 *groups
= ep93xx_pmx_functions
[selector
].groups
;
1350 *num_groups
= ep93xx_pmx_functions
[selector
].ngroups
;
1354 static const struct pinmux_ops ep93xx_pmx_ops
= {
1355 .get_functions_count
= ep93xx_pmx_get_funcs_count
,
1356 .get_function_name
= ep93xx_pmx_get_func_name
,
1357 .get_function_groups
= ep93xx_pmx_get_groups
,
1358 .set_mux
= ep93xx_pmx_set_mux
,
1361 static struct pinctrl_desc ep93xx_pmx_desc
= {
1362 .name
= DRIVER_NAME
,
1363 .pctlops
= &ep93xx_pctrl_ops
,
1364 .pmxops
= &ep93xx_pmx_ops
,
1365 .owner
= THIS_MODULE
,
1368 static int ep93xx_pmx_probe(struct auxiliary_device
*adev
,
1369 const struct auxiliary_device_id
*id
)
1371 struct ep93xx_regmap_adev
*rdev
= to_ep93xx_regmap_adev(adev
);
1372 struct device
*dev
= &adev
->dev
;
1373 struct ep93xx_pmx
*pmx
;
1375 /* Create state holders etc for this driver */
1376 pmx
= devm_kzalloc(dev
, sizeof(*pmx
), GFP_KERNEL
);
1381 pmx
->map
= rdev
->map
;
1382 pmx
->aux_dev
= rdev
;
1383 pmx
->model
= (enum ep93xx_pinctrl_model
)(uintptr_t)id
->driver_data
;
1384 switch (pmx
->model
) {
1385 case EP93XX_9301_PINCTRL
:
1386 ep93xx_pmx_desc
.pins
= ep9301_pins
;
1387 ep93xx_pmx_desc
.npins
= ARRAY_SIZE(ep9301_pins
);
1388 dev_info(dev
, "detected 9301/9302 chip variant\n");
1390 case EP93XX_9307_PINCTRL
:
1391 ep93xx_pmx_desc
.pins
= ep9307_pins
;
1392 ep93xx_pmx_desc
.npins
= ARRAY_SIZE(ep9307_pins
);
1393 dev_info(dev
, "detected 9307 chip variant\n");
1395 case EP93XX_9312_PINCTRL
:
1396 ep93xx_pmx_desc
.pins
= ep9312_pins
;
1397 ep93xx_pmx_desc
.npins
= ARRAY_SIZE(ep9312_pins
);
1398 dev_info(dev
, "detected 9312/9315 chip variant\n");
1401 return dev_err_probe(dev
, -EINVAL
, "unknown pin control model: %u\n", pmx
->model
);
1404 /* using parent of_node to match in get_pinctrl_dev_from_of_node() */
1405 device_set_node(dev
, dev_fwnode(adev
->dev
.parent
));
1406 pmx
->pctl
= devm_pinctrl_register(dev
, &ep93xx_pmx_desc
, pmx
);
1407 if (IS_ERR(pmx
->pctl
))
1408 return dev_err_probe(dev
, PTR_ERR(pmx
->pctl
), "could not register pinmux driver\n");
1413 static const struct auxiliary_device_id ep93xx_pinctrl_ids
[] = {
1415 .name
= "soc_ep93xx.pinctrl-ep9301",
1416 .driver_data
= (kernel_ulong_t
)EP93XX_9301_PINCTRL
,
1419 .name
= "soc_ep93xx.pinctrl-ep9307",
1420 .driver_data
= (kernel_ulong_t
)EP93XX_9307_PINCTRL
,
1423 .name
= "soc_ep93xx.pinctrl-ep9312",
1424 .driver_data
= (kernel_ulong_t
)EP93XX_9312_PINCTRL
,
1428 MODULE_DEVICE_TABLE(auxiliary
, ep93xx_pinctrl_ids
);
1430 static struct auxiliary_driver ep93xx_pmx_driver
= {
1431 .probe
= ep93xx_pmx_probe
,
1432 .id_table
= ep93xx_pinctrl_ids
,
1434 module_auxiliary_driver(ep93xx_pmx_driver
);