File Index
Files and directories
Sign in
FILE

pinctrl-ep93xx.c

File preview with syntax highlighting.

linux-6.19.14/drivers/pinctrl/pinctrl-ep93xx.c C
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Driver for the EP93xx pin controller
   4 * based on linux/drivers/pinctrl/pinmux-gemini.c
   5 *
   6 * Copyright (C) 2022 Nikita Shubin <nikita.shubin@maquefel.me>
   7 *
   8 * This is a group-only pin controller.
   9 */
  10#include <linux/array_size.h>
  11#include <linux/err.h>
  12#include <linux/init.h>
  13#include <linux/io.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>
  19
  20#include <linux/soc/cirrus/ep93xx.h>
  21
  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>
  27
  28#include "pinctrl-utils.h"
  29
  30#define DRIVER_NAME "pinctrl-ep93xx"
  31
  32enum ep93xx_pinctrl_model {
  33	EP93XX_9301_PINCTRL,
  34	EP93XX_9307_PINCTRL,
  35	EP93XX_9312_PINCTRL,
  36};
  37
  38struct ep93xx_pmx {
  39	struct device *dev;
  40	struct pinctrl_dev *pctl;
  41	struct ep93xx_regmap_adev *aux_dev;
  42	struct regmap *map;
  43	enum ep93xx_pinctrl_model model;
  44};
  45
  46static void ep93xx_pinctrl_update_bits(struct ep93xx_pmx *pmx, unsigned int reg,
  47				       unsigned int mask, unsigned int val)
  48{
  49	struct ep93xx_regmap_adev *aux = pmx->aux_dev;
  50
  51	aux->update_bits(aux->map, aux->lock, reg, mask, val);
  52}
  53
  54struct ep93xx_pin_group {
  55	struct pingroup grp;
  56	u32 mask;
  57	u32 value;
  58};
  59
  60#define PMX_GROUP(_name, _pins, _mask, _value)					\
  61	{									\
  62		.grp = PINCTRL_PINGROUP(_name, _pins, ARRAY_SIZE(_pins)),	\
  63		.mask = _mask,							\
  64		.value = _value,						\
  65	}
  66
  67#define EP93XX_SYSCON_DEVCFG		0x80
  68
  69/*
  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.
  75 */
  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)
  91
  92#define PADS_MASK		(GENMASK(30, 25) | BIT(22) | BIT(21) | GENMASK(11, 6) | BIT(4))
  93#define PADS_MAXBIT		30
  94
  95/* Ordered by bit index */
  96static const char * const ep93xx_padgroups[] = {
  97	NULL, NULL, NULL, NULL,
  98	"RasOnP3",
  99	NULL,
 100	"I2SonAC97",
 101	"I2SonSSP",
 102	"EonIDE",
 103	"PonG",
 104	"GonIDE",
 105	"HonIDE",
 106	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 107	"A1onG",
 108	"A2onG",
 109	NULL, NULL,
 110	"MonG",
 111	"TonG",
 112	"GonK",
 113	"IonU2",
 114	"D0onG",
 115	"D1onG",
 116};
 117
 118/* ep9301, ep9302 */
 119static 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"),
 328};
 329
 330static const unsigned int ssp_ep9301_pins[] = {
 331	93, 94, 95, 96,
 332};
 333
 334static const unsigned int ac97_ep9301_pins[] = {
 335	89, 92, 107, 154, 156,
 336};
 337
 338/*
 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.
 342 */
 343/* The GPIO14E (14) pin overlap with pwm1 */
 344static const unsigned int pwm_9301_pins[] = { 163 };
 345
 346static const unsigned int gpio1a_9301_pins[] = { 163 };
 347
 348/* ep9301/9302 have only 0 pin of GPIO C Port exposed */
 349static const unsigned int gpio2a_9301_pins[] = { 115 };
 350
 351/* ep9301/9302 have only 4,5 pin of GPIO E Port exposed */
 352static const unsigned int gpio4a_9301_pins[] = { 97, 98 };
 353
 354/* ep9301/9302 have only 4,5 pin of GPIO G Port exposed */
 355static const unsigned int gpio6a_9301_pins[] = { 87, 88 };
 356
 357static const unsigned int gpio7a_9301_pins[] = { 199, 200, 201, 202 };
 358
 359/* Groups for the ep9301/ep9302 SoC/package */
 360static 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),
 377};
 378
 379static const struct pinctrl_pin_desc ep9307_pins[] = {
 380	/* Row A */
 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 */
 398	/* Row B */
 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 */
 416	/* Row C */
 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 */
 434	/* Row D */
 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 */
 452	/* Row E */
 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 */
 470	/* Row F */
 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 */
 488	/* Row G */
 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 */
 501	/* Row H */
 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 */
 517	/* Row J */
 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 */
 532	/* Row K */
 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 */
 548	/* Row L */
 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 */
 561	/* Row M */
 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 */
 579	/* Row N */
 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 */
 597	/* Row P */
 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 */
 615	/* Row R */
 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 */
 633	/* Row T */
 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 */
 651	/* Row U */
 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 */
 669};
 670
 671static const unsigned int ssp_ep9307_pins[] = {
 672	233, 249, 266, 267,
 673};
 674
 675static const unsigned int ac97_ep9307_pins[] = {
 676	16, 32, 198, 232, 236,
 677};
 678
 679/* I can't find info on those - it's some internal state */
 680static const unsigned int raster_on_sdram0_pins[] = {
 681};
 682
 683static const unsigned int raster_on_sdram3_pins[] = {
 684};
 685
 686/* ROW[N] */
 687static const unsigned int gpio2a_9307_pins[] = {
 688	165, 166, 181, 182, 183, 184, 185, 186,
 689};
 690
 691/* COL[N] */
 692static const unsigned int gpio3a_9307_pins[] = {
 693	127, 139, 140, 142, 153, 155, 156, 157,
 694};
 695
 696static const unsigned int keypad_9307_pins[] = {
 697	127, 139, 140, 142, 153, 155, 156, 157,
 698	165, 166, 181, 182, 183, 184, 185, 186,
 699};
 700
 701/* ep9307 have only 4,5 pin of GPIO E Port exposed */
 702static const unsigned int gpio4a_9307_pins[] = { 216, 217 };
 703
 704/* ep9307 have only 2 pin of GPIO G Port exposed */
 705static const unsigned int gpio6a_9307_pins[] = { 219 };
 706
 707static const unsigned int gpio7a_9307_pins[] = { 7, 24, 41, 56, 57, 59 };
 708
 709static 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),
 730};
 731
 732/* ep9312, ep9315 */
 733static const struct pinctrl_pin_desc ep9312_pins[] = {
 734	/* Row A */
 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 */
 755	/* Row B */
 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 */
 776	/* Row C */
 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 */
 797	/* Row D */
 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 */
 818	/* Row E */
 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 */
 839	/* Row F */
 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 */
 854	/* Row G */
 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 */
 867	/* Row H */
 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 */
 884	/* Row J */
 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 */
 901	/* Row K */
 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 */
 918	/* Row L */
 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 */
 935	/* Row M */
 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 */
 952	/* Row N */
 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 */
 971	/* Row P */
 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 */
 984	/* Row R */
 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 */
1001	/* Row T */
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 */
1022	/* Row U */
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 */
1043	/* Row V */
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 */
1064	/* Row W */
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 */
1085	/* Row Y */
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 */
1106};
1107
1108static const unsigned int ssp_ep9312_pins[] = {
1109	285, 306, 326, 348,
1110};
1111
1112static const unsigned int ac97_ep9312_pins[] = {
1113	77, 95, 305, 347, 351,
1114};
1115
1116static const unsigned int pwm_ep9312_pins[] = { 74 };
1117
1118static const unsigned int gpio1a_ep9312_pins[] = { 74 };
1119
1120static const unsigned int gpio2a_9312_pins[] = {
1121	234, 235, 248, 249, 251, 270, 271, 291,
1122};
1123
1124static const unsigned int gpio3a_9312_pins[] = {
1125	186, 187, 202, 203, 204, 221, 222, 223,
1126};
1127
1128static const unsigned int keypad_9312_pins[] = {
1129	186, 187, 202, 203, 204, 221, 222, 223,
1130	234, 235, 248, 249, 251, 270, 271, 291,
1131};
1132
1133static const unsigned int gpio4a_9312_pins[] = {
1134	78, 301, 302, 321, 322, 342,
1135};
1136
1137static const unsigned int gpio6a_9312_pins[] = {
1138	257, 295, 296, 334,
1139};
1140
1141static const unsigned int gpio7a_9312_pins[] = {
1142	4, 24, 25, 45, 46, 66, 314, 333,
1143};
1144
1145static const unsigned int ide_9312_pins[] = {
1146	78, 301, 302, 321, 322, 342, 257, 295,
1147	296, 334, 4, 24, 25, 45, 46, 66,
1148	314, 333,
1149};
1150
1151static 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),
1177};
1178
1179static int ep93xx_get_groups_count(struct pinctrl_dev *pctldev)
1180{
1181	struct ep93xx_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1182
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);
1190	default:
1191		return 0;
1192	}
1193}
1194
1195static const char *ep93xx_get_group_name(struct pinctrl_dev *pctldev,
1196					 unsigned int selector)
1197{
1198	struct ep93xx_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1199
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;
1207	default:
1208		return NULL;
1209	}
1210}
1211
1212static int ep93xx_get_group_pins(struct pinctrl_dev *pctldev,
1213				 unsigned int selector,
1214				 const unsigned int **pins,
1215				 unsigned int *num_pins)
1216{
1217	struct ep93xx_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1218
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;
1223		break;
1224	case EP93XX_9307_PINCTRL:
1225		*pins = ep9307_pin_groups[selector].grp.pins;
1226		*num_pins = ep9307_pin_groups[selector].grp.npins;
1227		break;
1228	case EP93XX_9312_PINCTRL:
1229		*pins = ep9312_pin_groups[selector].grp.pins;
1230		*num_pins = ep9312_pin_groups[selector].grp.npins;
1231		break;
1232	default:
1233		return -EINVAL;
1234	}
1235
1236	return 0;
1237}
1238
1239static 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,
1245};
1246
1247static const char * const spigrps[] = { "ssp" };
1248static const char * const ac97grps[] = { "ac97" };
1249static const char * const i2sgrps[] = { "i2s_on_ssp", "i2s_on_ac97" };
1250static const char * const pwm1grps[] = { "pwm1" };
1251static const char * const gpiogrps[] = { "gpio1agrp", "gpio2agrp", "gpio3agrp",
1252					"gpio4agrp", "gpio6agrp", "gpio7agrp" };
1253static const char * const rastergrps[] = { "rasteronsdram0grp", "rasteronsdram3grp"};
1254static const char * const keypadgrps[] = { "keypadgrp"};
1255static const char * const idegrps[] = { "idegrp"};
1256
1257static 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)),
1266};
1267
1268static int ep93xx_pmx_set_mux(struct pinctrl_dev *pctldev,
1269			      unsigned int selector,
1270			      unsigned int group)
1271{
1272	struct ep93xx_pmx *pmx;
1273	const struct pinfunction *func;
1274	const struct ep93xx_pin_group *grp;
1275	u32 before, after, expected;
1276	unsigned long tmp;
1277	int i;
1278
1279	pmx = pinctrl_dev_get_drvdata(pctldev);
1280
1281	switch (pmx->model) {
1282	case EP93XX_9301_PINCTRL:
1283		grp = &ep9301_pin_groups[group];
1284		break;
1285	case EP93XX_9307_PINCTRL:
1286		grp = &ep9307_pin_groups[group];
1287		break;
1288	case EP93XX_9312_PINCTRL:
1289		grp = &ep9312_pin_groups[group];
1290		break;
1291	default:
1292		dev_err(pmx->dev, "invalid SoC type\n");
1293		return -ENODEV;
1294	}
1295
1296	func = &ep93xx_pmx_functions[selector];
1297
1298	dev_dbg(pmx->dev,
1299		"ACTIVATE function \"%s\" with group \"%s\" (mask=0x%x, value=0x%x)\n",
1300		func->name, grp->grp.name, grp->mask, grp->value);
1301
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);
1306
1307	dev_dbg(pmx->dev, "before=0x%x, after=0x%x, mask=0x%lx\n",
1308		before, after, PADS_MASK);
1309
1310	/* Which bits changed */
1311	before &= PADS_MASK;
1312	after &= PADS_MASK;
1313	expected = before & ~grp->mask;
1314	expected |= grp->value;
1315	expected &= PADS_MASK;
1316
1317	/* Print changed states */
1318	tmp = expected ^ after;
1319	for_each_set_bit(i, &tmp, PADS_MAXBIT) {
1320		bool enabled = expected & BIT(i);
1321
1322		dev_err(pmx->dev,
1323			    "pin group %s could not be %s: probably a hardware limitation\n",
1324			    ep93xx_padgroups[i], str_enabled_disabled(enabled));
1325		dev_err(pmx->dev,
1326				"DeviceCfg before: %08x, after %08x, expected %08x\n",
1327				before, after, expected);
1328	}
1329
1330	return tmp ? -EINVAL : 0;
1331};
1332
1333static int ep93xx_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
1334{
1335	return ARRAY_SIZE(ep93xx_pmx_functions);
1336}
1337
1338static const char *ep93xx_pmx_get_func_name(struct pinctrl_dev *pctldev,
1339					    unsigned int selector)
1340{
1341	return ep93xx_pmx_functions[selector].name;
1342}
1343
1344static int ep93xx_pmx_get_groups(struct pinctrl_dev *pctldev,
1345				 unsigned int selector,
1346				 const char * const **groups,
1347				 unsigned int * const num_groups)
1348{
1349	*groups = ep93xx_pmx_functions[selector].groups;
1350	*num_groups = ep93xx_pmx_functions[selector].ngroups;
1351	return 0;
1352}
1353
1354static 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,
1359};
1360
1361static struct pinctrl_desc ep93xx_pmx_desc = {
1362	.name = DRIVER_NAME,
1363	.pctlops = &ep93xx_pctrl_ops,
1364	.pmxops = &ep93xx_pmx_ops,
1365	.owner = THIS_MODULE,
1366};
1367
1368static int ep93xx_pmx_probe(struct auxiliary_device *adev,
1369			    const struct auxiliary_device_id *id)
1370{
1371	struct ep93xx_regmap_adev *rdev = to_ep93xx_regmap_adev(adev);
1372	struct device *dev = &adev->dev;
1373	struct ep93xx_pmx *pmx;
1374
1375	/* Create state holders etc for this driver */
1376	pmx = devm_kzalloc(dev, sizeof(*pmx), GFP_KERNEL);
1377	if (!pmx)
1378		return -ENOMEM;
1379
1380	pmx->dev = dev;
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");
1389		break;
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");
1394		break;
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");
1399		break;
1400	default:
1401		return dev_err_probe(dev, -EINVAL, "unknown pin control model: %u\n", pmx->model);
1402	}
1403
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");
1409
1410	return 0;
1411};
1412
1413static const struct auxiliary_device_id ep93xx_pinctrl_ids[] = {
1414	{
1415		.name = "soc_ep93xx.pinctrl-ep9301",
1416		.driver_data = (kernel_ulong_t)EP93XX_9301_PINCTRL,
1417	},
1418	{
1419		.name = "soc_ep93xx.pinctrl-ep9307",
1420		.driver_data = (kernel_ulong_t)EP93XX_9307_PINCTRL,
1421	},
1422	{
1423		.name = "soc_ep93xx.pinctrl-ep9312",
1424		.driver_data = (kernel_ulong_t)EP93XX_9312_PINCTRL,
1425	},
1426	{ /* sentinel */ }
1427};
1428MODULE_DEVICE_TABLE(auxiliary, ep93xx_pinctrl_ids);
1429
1430static struct auxiliary_driver ep93xx_pmx_driver = {
1431	.probe		= ep93xx_pmx_probe,
1432	.id_table	= ep93xx_pinctrl_ids,
1433};
1434module_auxiliary_driver(ep93xx_pmx_driver);
~/ Read-only file preview.