brintos

brintos / linux-shallow public Read only

0
0
Text · 46.4 KiB · abafbbb Raw
1435 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Driver for the EP93xx pin controller4 * based on linux/drivers/pinctrl/pinmux-gemini.c5 *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		0x8068 69/*70 * There are several system configuration options selectable by the DeviceCfg and SysCfg71 * registers. These registers provide the selection of several pin multiplexing options and also72 * provide software access to the system reset configuration options. Please refer to the73 * descriptions of the registers, “DeviceCfg” on page 5-25 and “SysCfg” on page 5-34, for a74 * 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		3094 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 with341 * 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);1435