| // SPDX-License-Identifier: GPL-2.0-only | 
 | /* | 
 |  * Driver for the EP93xx pin controller | 
 |  * based on linux/drivers/pinctrl/pinmux-gemini.c | 
 |  * | 
 |  * Copyright (C) 2022 Nikita Shubin <nikita.shubin@maquefel.me> | 
 |  * | 
 |  * This is a group-only pin controller. | 
 |  */ | 
 | #include <linux/array_size.h> | 
 | #include <linux/err.h> | 
 | #include <linux/init.h> | 
 | #include <linux/io.h> | 
 | #include <linux/mfd/syscon.h> | 
 | #include <linux/property.h> | 
 | #include <linux/regmap.h> | 
 | #include <linux/seq_file.h> | 
 | #include <linux/slab.h> | 
 |  | 
 | #include <linux/soc/cirrus/ep93xx.h> | 
 |  | 
 | #include <linux/pinctrl/machine.h> | 
 | #include <linux/pinctrl/pinconf-generic.h> | 
 | #include <linux/pinctrl/pinconf.h> | 
 | #include <linux/pinctrl/pinctrl.h> | 
 | #include <linux/pinctrl/pinmux.h> | 
 |  | 
 | #include "pinctrl-utils.h" | 
 |  | 
 | #define DRIVER_NAME "pinctrl-ep93xx" | 
 |  | 
 | enum ep93xx_pinctrl_model { | 
 | 	EP93XX_9301_PINCTRL, | 
 | 	EP93XX_9307_PINCTRL, | 
 | 	EP93XX_9312_PINCTRL, | 
 | }; | 
 |  | 
 | struct ep93xx_pmx { | 
 | 	struct device *dev; | 
 | 	struct pinctrl_dev *pctl; | 
 | 	struct ep93xx_regmap_adev *aux_dev; | 
 | 	struct regmap *map; | 
 | 	enum ep93xx_pinctrl_model model; | 
 | }; | 
 |  | 
 | static void ep93xx_pinctrl_update_bits(struct ep93xx_pmx *pmx, unsigned int reg, | 
 | 				       unsigned int mask, unsigned int val) | 
 | { | 
 | 	struct ep93xx_regmap_adev *aux = pmx->aux_dev; | 
 |  | 
 | 	aux->update_bits(aux->map, aux->lock, reg, mask, val); | 
 | } | 
 |  | 
 | struct ep93xx_pin_group { | 
 | 	struct pingroup grp; | 
 | 	u32 mask; | 
 | 	u32 value; | 
 | }; | 
 |  | 
 | #define PMX_GROUP(_name, _pins, _mask, _value)					\ | 
 | 	{									\ | 
 | 		.grp = PINCTRL_PINGROUP(_name, _pins, ARRAY_SIZE(_pins)),	\ | 
 | 		.mask = _mask,							\ | 
 | 		.value = _value,						\ | 
 | 	} | 
 |  | 
 | #define EP93XX_SYSCON_DEVCFG		0x80 | 
 |  | 
 | /* | 
 |  * There are several system configuration options selectable by the DeviceCfg and SysCfg | 
 |  * registers. These registers provide the selection of several pin multiplexing options and also | 
 |  * provide software access to the system reset configuration options. Please refer to the | 
 |  * descriptions of the registers, “DeviceCfg” on page 5-25 and “SysCfg” on page 5-34, for a | 
 |  * detailed explanation. | 
 |  */ | 
 | #define EP93XX_SYSCON_DEVCFG_D1ONG	BIT(30) | 
 | #define EP93XX_SYSCON_DEVCFG_D0ONG	BIT(29) | 
 | #define EP93XX_SYSCON_DEVCFG_IONU2	BIT(28) | 
 | #define EP93XX_SYSCON_DEVCFG_GONK	BIT(27) | 
 | #define EP93XX_SYSCON_DEVCFG_TONG	BIT(26) | 
 | #define EP93XX_SYSCON_DEVCFG_MONG	BIT(25) | 
 | #define EP93XX_SYSCON_DEVCFG_A2ONG	BIT(22) | 
 | #define EP93XX_SYSCON_DEVCFG_A1ONG	BIT(21) | 
 | #define EP93XX_SYSCON_DEVCFG_HONIDE	BIT(11) | 
 | #define EP93XX_SYSCON_DEVCFG_GONIDE	BIT(10) | 
 | #define EP93XX_SYSCON_DEVCFG_PONG	BIT(9) | 
 | #define EP93XX_SYSCON_DEVCFG_EONIDE	BIT(8) | 
 | #define EP93XX_SYSCON_DEVCFG_I2SONSSP	BIT(7) | 
 | #define EP93XX_SYSCON_DEVCFG_I2SONAC97	BIT(6) | 
 | #define EP93XX_SYSCON_DEVCFG_RASONP3	BIT(4) | 
 |  | 
 | #define PADS_MASK		(GENMASK(30, 25) | BIT(22) | BIT(21) | GENMASK(11, 6) | BIT(4)) | 
 | #define PADS_MAXBIT		30 | 
 |  | 
 | /* Ordered by bit index */ | 
 | static const char * const ep93xx_padgroups[] = { | 
 | 	NULL, NULL, NULL, NULL, | 
 | 	"RasOnP3", | 
 | 	NULL, | 
 | 	"I2SonAC97", | 
 | 	"I2SonSSP", | 
 | 	"EonIDE", | 
 | 	"PonG", | 
 | 	"GonIDE", | 
 | 	"HonIDE", | 
 | 	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
 | 	"A1onG", | 
 | 	"A2onG", | 
 | 	NULL, NULL, | 
 | 	"MonG", | 
 | 	"TonG", | 
 | 	"GonK", | 
 | 	"IonU2", | 
 | 	"D0onG", | 
 | 	"D1onG", | 
 | }; | 
 |  | 
 | /* ep9301, ep9302 */ | 
 | static const struct pinctrl_pin_desc ep9301_pins[] = { | 
 | 	PINCTRL_PIN(1, "CSn[7]"), | 
 | 	PINCTRL_PIN(2, "CSn[6]"), | 
 | 	PINCTRL_PIN(3, "CSn[3]"), | 
 | 	PINCTRL_PIN(4, "CSn[2]"), | 
 | 	PINCTRL_PIN(5, "CSn[1]"), | 
 | 	PINCTRL_PIN(6, "AD[25]"), | 
 | 	PINCTRL_PIN(7, "vdd_ring"), | 
 | 	PINCTRL_PIN(8, "gnd_ring"), | 
 | 	PINCTRL_PIN(9, "AD[24]"), | 
 | 	PINCTRL_PIN(10, "SDCLK"), | 
 | 	PINCTRL_PIN(11, "AD[23]"), | 
 | 	PINCTRL_PIN(12, "vdd_core"), | 
 | 	PINCTRL_PIN(13, "gnd_core"), | 
 | 	PINCTRL_PIN(14, "SDWEn"), | 
 | 	PINCTRL_PIN(15, "SDCSn[3]"), | 
 | 	PINCTRL_PIN(16, "SDCSn[2]"), | 
 | 	PINCTRL_PIN(17, "SDCSn[1]"), | 
 | 	PINCTRL_PIN(18, "SDCSn[0]"), | 
 | 	PINCTRL_PIN(19, "vdd_ring"), | 
 | 	PINCTRL_PIN(20, "gnd_ring"), | 
 | 	PINCTRL_PIN(21, "RASn"), | 
 | 	PINCTRL_PIN(22, "CASn"), | 
 | 	PINCTRL_PIN(23, "DQMn[1]"), | 
 | 	PINCTRL_PIN(24, "DQMn[0]"), | 
 | 	PINCTRL_PIN(25, "AD[22]"), | 
 | 	PINCTRL_PIN(26, "AD[21]"), | 
 | 	PINCTRL_PIN(27, "vdd_ring"), | 
 | 	PINCTRL_PIN(28, "gnd_ring"), | 
 | 	PINCTRL_PIN(29, "DA[15]"), | 
 | 	PINCTRL_PIN(30, "AD[7]"), | 
 | 	PINCTRL_PIN(31, "DA[14]"), | 
 | 	PINCTRL_PIN(32, "AD[6]"), | 
 | 	PINCTRL_PIN(33, "DA[13]"), | 
 | 	PINCTRL_PIN(34, "vdd_core"), | 
 | 	PINCTRL_PIN(35, "gnd_core"), | 
 | 	PINCTRL_PIN(36, "AD[5]"), | 
 | 	PINCTRL_PIN(37, "DA[12]"), | 
 | 	PINCTRL_PIN(38, "AD[4]"), | 
 | 	PINCTRL_PIN(39, "DA[11]"), | 
 | 	PINCTRL_PIN(40, "AD[3]"), | 
 | 	PINCTRL_PIN(41, "vdd_ring"), | 
 | 	PINCTRL_PIN(42, "gnd_ring"), | 
 | 	PINCTRL_PIN(43, "DA[10]"), | 
 | 	PINCTRL_PIN(44, "AD[2]"), | 
 | 	PINCTRL_PIN(45, "DA[9]"), | 
 | 	PINCTRL_PIN(46, "AD[1]"), | 
 | 	PINCTRL_PIN(47, "DA[8]"), | 
 | 	PINCTRL_PIN(48, "AD[0]"), | 
 | 	PINCTRL_PIN(49, "vdd_ring"), | 
 | 	PINCTRL_PIN(50, "gnd_ring"), | 
 | 	PINCTRL_PIN(51, "NC"), | 
 | 	PINCTRL_PIN(52, "NC"), | 
 | 	PINCTRL_PIN(53, "vdd_ring"), | 
 | 	PINCTRL_PIN(54, "gnd_ring"), | 
 | 	PINCTRL_PIN(55, "AD[15]"), | 
 | 	PINCTRL_PIN(56, "DA[7]"), | 
 | 	PINCTRL_PIN(57, "vdd_core"), | 
 | 	PINCTRL_PIN(58, "gnd_core"), | 
 | 	PINCTRL_PIN(59, "AD[14]"), | 
 | 	PINCTRL_PIN(60, "DA[6]"), | 
 | 	PINCTRL_PIN(61, "AD[13]"), | 
 | 	PINCTRL_PIN(62, "DA[5]"), | 
 | 	PINCTRL_PIN(63, "AD[12]"), | 
 | 	PINCTRL_PIN(64, "DA[4]"), | 
 | 	PINCTRL_PIN(65, "AD[11]"), | 
 | 	PINCTRL_PIN(66, "vdd_ring"), | 
 | 	PINCTRL_PIN(67, "gnd_ring"), | 
 | 	PINCTRL_PIN(68, "DA[3]"), | 
 | 	PINCTRL_PIN(69, "AD[10]"), | 
 | 	PINCTRL_PIN(70, "DA[2]"), | 
 | 	PINCTRL_PIN(71, "AD[9]"), | 
 | 	PINCTRL_PIN(72, "DA[1]"), | 
 | 	PINCTRL_PIN(73, "AD[8]"), | 
 | 	PINCTRL_PIN(74, "DA[0]"), | 
 | 	PINCTRL_PIN(75, "DSRn"), | 
 | 	PINCTRL_PIN(76, "DTRn"), | 
 | 	PINCTRL_PIN(77, "TCK"), | 
 | 	PINCTRL_PIN(78, "TDI"), | 
 | 	PINCTRL_PIN(79, "TDO"), | 
 | 	PINCTRL_PIN(80, "TMS"), | 
 | 	PINCTRL_PIN(81, "vdd_ring"), | 
 | 	PINCTRL_PIN(82, "gnd_ring"), | 
 | 	PINCTRL_PIN(83, "BOOT[1]"), | 
 | 	PINCTRL_PIN(84, "BOOT[0]"), | 
 | 	PINCTRL_PIN(85, "gnd_ring"), | 
 | 	PINCTRL_PIN(86, "NC"), | 
 | 	PINCTRL_PIN(87, "EECLK"), | 
 | 	PINCTRL_PIN(88, "EEDAT"), | 
 | 	PINCTRL_PIN(89, "ASYNC"), | 
 | 	PINCTRL_PIN(90, "vdd_core"), | 
 | 	PINCTRL_PIN(91, "gnd_core"), | 
 | 	PINCTRL_PIN(92, "ASDO"), | 
 | 	PINCTRL_PIN(93, "SCLK1"), | 
 | 	PINCTRL_PIN(94, "SFRM1"), | 
 | 	PINCTRL_PIN(95, "SSPRX1"), | 
 | 	PINCTRL_PIN(96, "SSPTX1"), | 
 | 	PINCTRL_PIN(97, "GRLED"), | 
 | 	PINCTRL_PIN(98, "RDLED"), | 
 | 	PINCTRL_PIN(99, "vdd_ring"), | 
 | 	PINCTRL_PIN(100, "gnd_ring"), | 
 | 	PINCTRL_PIN(101, "INT[3]"), | 
 | 	PINCTRL_PIN(102, "INT[1]"), | 
 | 	PINCTRL_PIN(103, "INT[0]"), | 
 | 	PINCTRL_PIN(104, "RTSn"), | 
 | 	PINCTRL_PIN(105, "USBm[0]"), | 
 | 	PINCTRL_PIN(106, "USBp[0]"), | 
 | 	PINCTRL_PIN(107, "ABITCLK"), | 
 | 	PINCTRL_PIN(108, "CTSn"), | 
 | 	PINCTRL_PIN(109, "RXD[0]"), | 
 | 	PINCTRL_PIN(110, "RXD[1]"), | 
 | 	PINCTRL_PIN(111, "vdd_ring"), | 
 | 	PINCTRL_PIN(112, "gnd_ring"), | 
 | 	PINCTRL_PIN(113, "TXD[0]"), | 
 | 	PINCTRL_PIN(114, "TXD[1]"), | 
 | 	PINCTRL_PIN(115, "CGPIO[0]"), | 
 | 	PINCTRL_PIN(116, "gnd_core"), | 
 | 	PINCTRL_PIN(117, "PLL_GND"), | 
 | 	PINCTRL_PIN(118, "XTALI"), | 
 | 	PINCTRL_PIN(119, "XTALO"), | 
 | 	PINCTRL_PIN(120, "PLL_VDD"), | 
 | 	PINCTRL_PIN(121, "vdd_core"), | 
 | 	PINCTRL_PIN(122, "gnd_ring"), | 
 | 	PINCTRL_PIN(123, "vdd_ring"), | 
 | 	PINCTRL_PIN(124, "RSTOn"), | 
 | 	PINCTRL_PIN(125, "PRSTn"), | 
 | 	PINCTRL_PIN(126, "CSn[0]"), | 
 | 	PINCTRL_PIN(127, "gnd_core"), | 
 | 	PINCTRL_PIN(128, "vdd_core"), | 
 | 	PINCTRL_PIN(129, "gnd_ring"), | 
 | 	PINCTRL_PIN(130, "vdd_ring"), | 
 | 	PINCTRL_PIN(131, "ADC[4]"), | 
 | 	PINCTRL_PIN(132, "ADC[3]"), | 
 | 	PINCTRL_PIN(133, "ADC[2]"), | 
 | 	PINCTRL_PIN(134, "ADC[1]"), | 
 | 	PINCTRL_PIN(135, "ADC[0]"), | 
 | 	PINCTRL_PIN(136, "ADC_VDD"), | 
 | 	PINCTRL_PIN(137, "RTCXTALI"), | 
 | 	PINCTRL_PIN(138, "RTCXTALO"), | 
 | 	PINCTRL_PIN(139, "ADC_GND"), | 
 | 	PINCTRL_PIN(140, "EGPIO[11]"), | 
 | 	PINCTRL_PIN(141, "EGPIO[10]"), | 
 | 	PINCTRL_PIN(142, "EGPIO[9]"), | 
 | 	PINCTRL_PIN(143, "EGPIO[8]"), | 
 | 	PINCTRL_PIN(144, "EGPIO[7]"), | 
 | 	PINCTRL_PIN(145, "EGPIO[6]"), | 
 | 	PINCTRL_PIN(146, "EGPIO[5]"), | 
 | 	PINCTRL_PIN(147, "EGPIO[4]"), | 
 | 	PINCTRL_PIN(148, "EGPIO[3]"), | 
 | 	PINCTRL_PIN(149, "gnd_ring"), | 
 | 	PINCTRL_PIN(150, "vdd_ring"), | 
 | 	PINCTRL_PIN(151, "EGPIO[2]"), | 
 | 	PINCTRL_PIN(152, "EGPIO[1]"), | 
 | 	PINCTRL_PIN(153, "EGPIO[0]"), | 
 | 	PINCTRL_PIN(154, "ARSTn"), | 
 | 	PINCTRL_PIN(155, "TRSTn"), | 
 | 	PINCTRL_PIN(156, "ASDI"), | 
 | 	PINCTRL_PIN(157, "USBm[2]"), | 
 | 	PINCTRL_PIN(158, "USBp[2]"), | 
 | 	PINCTRL_PIN(159, "WAITn"), | 
 | 	PINCTRL_PIN(160, "EGPIO[15]"), | 
 | 	PINCTRL_PIN(161, "gnd_ring"), | 
 | 	PINCTRL_PIN(162, "vdd_ring"), | 
 | 	PINCTRL_PIN(163, "EGPIO[14]"), | 
 | 	PINCTRL_PIN(164, "EGPIO[13]"), | 
 | 	PINCTRL_PIN(165, "EGPIO[12]"), | 
 | 	PINCTRL_PIN(166, "gnd_core"), | 
 | 	PINCTRL_PIN(167, "vdd_core"), | 
 | 	PINCTRL_PIN(168, "FGPIO[3]"), | 
 | 	PINCTRL_PIN(169, "FGPIO[2]"), | 
 | 	PINCTRL_PIN(170, "FGPIO[1]"), | 
 | 	PINCTRL_PIN(171, "gnd_ring"), | 
 | 	PINCTRL_PIN(172, "vdd_ring"), | 
 | 	PINCTRL_PIN(173, "CLD"), | 
 | 	PINCTRL_PIN(174, "CRS"), | 
 | 	PINCTRL_PIN(175, "TXERR"), | 
 | 	PINCTRL_PIN(176, "TXEN"), | 
 | 	PINCTRL_PIN(177, "MIITXD[0]"), | 
 | 	PINCTRL_PIN(178, "MIITXD[1]"), | 
 | 	PINCTRL_PIN(179, "MIITXD[2]"), | 
 | 	PINCTRL_PIN(180, "MIITXD[3]"), | 
 | 	PINCTRL_PIN(181, "TXCLK"), | 
 | 	PINCTRL_PIN(182, "RXERR"), | 
 | 	PINCTRL_PIN(183, "RXDVAL"), | 
 | 	PINCTRL_PIN(184, "MIIRXD[0]"), | 
 | 	PINCTRL_PIN(185, "MIIRXD[1]"), | 
 | 	PINCTRL_PIN(186, "MIIRXD[2]"), | 
 | 	PINCTRL_PIN(187, "gnd_ring"), | 
 | 	PINCTRL_PIN(188, "vdd_ring"), | 
 | 	PINCTRL_PIN(189, "MIIRXD[3]"), | 
 | 	PINCTRL_PIN(190, "RXCLK"), | 
 | 	PINCTRL_PIN(191, "MDIO"), | 
 | 	PINCTRL_PIN(192, "MDC"), | 
 | 	PINCTRL_PIN(193, "RDn"), | 
 | 	PINCTRL_PIN(194, "WRn"), | 
 | 	PINCTRL_PIN(195, "AD[16]"), | 
 | 	PINCTRL_PIN(196, "AD[17]"), | 
 | 	PINCTRL_PIN(197, "gnd_core"), | 
 | 	PINCTRL_PIN(198, "vdd_core"), | 
 | 	PINCTRL_PIN(199, "HGPIO[2]"), | 
 | 	PINCTRL_PIN(200, "HGPIO[3]"), | 
 | 	PINCTRL_PIN(201, "HGPIO[4]"), | 
 | 	PINCTRL_PIN(202, "HGPIO[5]"), | 
 | 	PINCTRL_PIN(203, "gnd_ring"), | 
 | 	PINCTRL_PIN(204, "vdd_ring"), | 
 | 	PINCTRL_PIN(205, "AD[18]"), | 
 | 	PINCTRL_PIN(206, "AD[19]"), | 
 | 	PINCTRL_PIN(207, "AD[20]"), | 
 | 	PINCTRL_PIN(208, "SDCLKEN"), | 
 | }; | 
 |  | 
 | static const unsigned int ssp_ep9301_pins[] = { | 
 | 	93, 94, 95, 96, | 
 | }; | 
 |  | 
 | static const unsigned int ac97_ep9301_pins[] = { | 
 | 	89, 92, 107, 154, 156, | 
 | }; | 
 |  | 
 | /* | 
 |  * Note: The EP9307 processor has one PWM with one output, PWMOUT. | 
 |  * Note: The EP9301, EP9302, EP9312, and EP9315 processors each have two PWMs with | 
 |  * two outputs, PWMOUT and PWMO1. PWMO1 is an alternate function for EGPIO14. | 
 |  */ | 
 | /* The GPIO14E (14) pin overlap with pwm1 */ | 
 | static const unsigned int pwm_9301_pins[] = { 163 }; | 
 |  | 
 | static const unsigned int gpio1a_9301_pins[] = { 163 }; | 
 |  | 
 | /* ep9301/9302 have only 0 pin of GPIO C Port exposed */ | 
 | static const unsigned int gpio2a_9301_pins[] = { 115 }; | 
 |  | 
 | /* ep9301/9302 have only 4,5 pin of GPIO E Port exposed */ | 
 | static const unsigned int gpio4a_9301_pins[] = { 97, 98 }; | 
 |  | 
 | /* ep9301/9302 have only 4,5 pin of GPIO G Port exposed */ | 
 | static const unsigned int gpio6a_9301_pins[] = { 87, 88 }; | 
 |  | 
 | static const unsigned int gpio7a_9301_pins[] = { 199, 200, 201, 202 }; | 
 |  | 
 | /* Groups for the ep9301/ep9302 SoC/package */ | 
 | static const struct ep93xx_pin_group ep9301_pin_groups[] = { | 
 | 	PMX_GROUP("ssp", ssp_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 0), | 
 | 	PMX_GROUP("i2s_on_ssp", ssp_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, | 
 | 						EP93XX_SYSCON_DEVCFG_I2SONSSP), | 
 | 	PMX_GROUP("ac97", ac97_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 0), | 
 | 	PMX_GROUP("i2s_on_ac97", ac97_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, | 
 | 						EP93XX_SYSCON_DEVCFG_I2SONAC97), | 
 | 	PMX_GROUP("pwm1", pwm_9301_pins, EP93XX_SYSCON_DEVCFG_PONG, EP93XX_SYSCON_DEVCFG_PONG), | 
 | 	PMX_GROUP("gpio1agrp", gpio1a_9301_pins, EP93XX_SYSCON_DEVCFG_PONG, 0), | 
 | 	PMX_GROUP("gpio2agrp", gpio2a_9301_pins, EP93XX_SYSCON_DEVCFG_GONK, | 
 | 						EP93XX_SYSCON_DEVCFG_GONK), | 
 | 	PMX_GROUP("gpio4agrp", gpio4a_9301_pins, EP93XX_SYSCON_DEVCFG_EONIDE, | 
 | 						EP93XX_SYSCON_DEVCFG_EONIDE), | 
 | 	PMX_GROUP("gpio6agrp", gpio6a_9301_pins, EP93XX_SYSCON_DEVCFG_GONIDE, | 
 | 						EP93XX_SYSCON_DEVCFG_GONIDE), | 
 | 	PMX_GROUP("gpio7agrp", gpio7a_9301_pins, EP93XX_SYSCON_DEVCFG_HONIDE, | 
 | 						EP93XX_SYSCON_DEVCFG_HONIDE), | 
 | }; | 
 |  | 
 | static const struct pinctrl_pin_desc ep9307_pins[] = { | 
 | 	/* Row A */ | 
 | 	PINCTRL_PIN(0, "CSn[1]"),	/* A1 */ | 
 | 	PINCTRL_PIN(1, "CSn[7]"),	/* A2 */ | 
 | 	PINCTRL_PIN(2, "SDCLKEN"),	/* A3 */ | 
 | 	PINCTRL_PIN(3, "DA[31]"),	/* A4 */ | 
 | 	PINCTRL_PIN(4, "DA[29]"),	/* A5 */ | 
 | 	PINCTRL_PIN(5, "DA[27]"),	/* A6 */ | 
 | 	PINCTRL_PIN(6, "HGPIO[2]"),	/* A7 */ | 
 | 	PINCTRL_PIN(7, "RDn"),		/* A8 */ | 
 | 	PINCTRL_PIN(8, "MIIRXD[3]"),	/* A9 */ | 
 | 	PINCTRL_PIN(9, "RXDVAL"),	/* A10 */ | 
 | 	PINCTRL_PIN(10, "MIITXD[1]"),	/* A11 */ | 
 | 	PINCTRL_PIN(11, "CRS"),		/* A12 */ | 
 | 	PINCTRL_PIN(12, "FGPIO[7]"),	/* A13 */ | 
 | 	PINCTRL_PIN(13, "FGPIO[0]"),	/* A14 */ | 
 | 	PINCTRL_PIN(14, "WAITn"),	/* A15 */ | 
 | 	PINCTRL_PIN(15, "USBm[2]"),	/* A16 */ | 
 | 	PINCTRL_PIN(16, "ASDI"),		/* A17 */ | 
 | 	/* Row B */ | 
 | 	PINCTRL_PIN(17, "AD[25]"),	/* B1 */ | 
 | 	PINCTRL_PIN(18, "CSn[2]"),	/* B2 */ | 
 | 	PINCTRL_PIN(19, "CSn[6]"),	/* B3 */ | 
 | 	PINCTRL_PIN(20, "AD[20]"),	/* B4 */ | 
 | 	PINCTRL_PIN(21, "DA[30]"),	/* B5 */ | 
 | 	PINCTRL_PIN(22, "AD[18]"),	/* B6 */ | 
 | 	PINCTRL_PIN(23, "HGPIO[3]"),	/* B7 */ | 
 | 	PINCTRL_PIN(24, "AD[17]"),	/* B8 */ | 
 | 	PINCTRL_PIN(25, "RXCLK"),	/* B9 */ | 
 | 	PINCTRL_PIN(26, "MIIRXD[1]"),	/* B10 */ | 
 | 	PINCTRL_PIN(27, "MIITXD[2]"),	/* B11 */ | 
 | 	PINCTRL_PIN(28, "TXEN"),		/* B12 */ | 
 | 	PINCTRL_PIN(29, "FGPIO[5]"),	/* B13 */ | 
 | 	PINCTRL_PIN(30, "EGPIO[15]"),	/* B14 */ | 
 | 	PINCTRL_PIN(31, "USBp[2]"),	/* B15 */ | 
 | 	PINCTRL_PIN(32, "ARSTn"),	/* B16 */ | 
 | 	PINCTRL_PIN(33, "ADC_VDD"),	/* B17 */ | 
 | 	/* Row C */ | 
 | 	PINCTRL_PIN(34, "AD[23]"),	/* C1 */ | 
 | 	PINCTRL_PIN(35, "DA[26]"),	/* C2 */ | 
 | 	PINCTRL_PIN(36, "CSn[3]"),	/* C3 */ | 
 | 	PINCTRL_PIN(37, "DA[25]"),	/* C4 */ | 
 | 	PINCTRL_PIN(38, "AD[24]"),	/* C5 */ | 
 | 	PINCTRL_PIN(39, "AD[19]"),	/* C6 */ | 
 | 	PINCTRL_PIN(40, "HGPIO[5]"),	/* C7 */ | 
 | 	PINCTRL_PIN(41, "WRn"),		/* C8 */ | 
 | 	PINCTRL_PIN(42, "MDIO"),		/* C9 */ | 
 | 	PINCTRL_PIN(43, "MIIRXD[2]"),	/* C10 */ | 
 | 	PINCTRL_PIN(44, "TXCLK"),	/* C11 */ | 
 | 	PINCTRL_PIN(45, "MIITXD[0]"),	/* C12 */ | 
 | 	PINCTRL_PIN(46, "CLD"),		/* C13 */ | 
 | 	PINCTRL_PIN(47, "EGPIO[13]"),	/* C14 */ | 
 | 	PINCTRL_PIN(48, "TRSTn"),	/* C15 */ | 
 | 	PINCTRL_PIN(49, "Xp"),		/* C16 */ | 
 | 	PINCTRL_PIN(50, "Xm"),		/* C17 */ | 
 | 	/* Row D */ | 
 | 	PINCTRL_PIN(51, "SDCSn[3]"),	/* D1 */ | 
 | 	PINCTRL_PIN(52, "DA[23]"),	/* D2 */ | 
 | 	PINCTRL_PIN(53, "SDCLK"),	/* D3 */ | 
 | 	PINCTRL_PIN(54, "DA[24]"),	/* D4 */ | 
 | 	PINCTRL_PIN(55, "HGPIO[7]"),	/* D5 */ | 
 | 	PINCTRL_PIN(56, "HGPIO[6]"),	/* D6 */ | 
 | 	PINCTRL_PIN(57, "A[28]"),	/* D7 */ | 
 | 	PINCTRL_PIN(58, "HGPIO[4]"),	/* D8 */ | 
 | 	PINCTRL_PIN(59, "AD[16]"),	/* D9 */ | 
 | 	PINCTRL_PIN(60, "MDC"),		/* D10 */ | 
 | 	PINCTRL_PIN(61, "RXERR"),	/* D11 */ | 
 | 	PINCTRL_PIN(62, "MIITXD[3]"),	/* D12 */ | 
 | 	PINCTRL_PIN(63, "EGPIO[12]"),	/* D13 */ | 
 | 	PINCTRL_PIN(64, "EGPIO[1]"),	/* D14 */ | 
 | 	PINCTRL_PIN(65, "EGPIO[0]"),	/* D15 */ | 
 | 	PINCTRL_PIN(66, "Ym"),		/* D16 */ | 
 | 	PINCTRL_PIN(67, "Yp"),		/* D17 */ | 
 | 	/* Row E */ | 
 | 	PINCTRL_PIN(68, "SDCSn[2]"),	/* E1 */ | 
 | 	PINCTRL_PIN(69, "SDWEN"),	/* E2 */ | 
 | 	PINCTRL_PIN(70, "DA[22]"),	/* E3 */ | 
 | 	PINCTRL_PIN(71, "AD[3]"),	/* E4 */ | 
 | 	PINCTRL_PIN(72, "DA[15]"),	/* E5 */ | 
 | 	PINCTRL_PIN(73, "AD[21]"),	/* E6 */ | 
 | 	PINCTRL_PIN(74, "DA[17]"),	/* E7 */ | 
 | 	PINCTRL_PIN(75, "vddr"),		/* E8 */ | 
 | 	PINCTRL_PIN(76, "vddr"),		/* E9 */ | 
 | 	PINCTRL_PIN(77, "vddr"),		/* E10 */ | 
 | 	PINCTRL_PIN(78, "MIIRXD[0]"),	/* E11 */ | 
 | 	PINCTRL_PIN(79, "TXERR"),	/* E12 */ | 
 | 	PINCTRL_PIN(80, "EGPIO[2]"),	/* E13 */ | 
 | 	PINCTRL_PIN(81, "EGPIO[4]"),	/* E14 */ | 
 | 	PINCTRL_PIN(82, "EGPIO[3]"),	/* E15 */ | 
 | 	PINCTRL_PIN(83, "sXp"),		/* E16 */ | 
 | 	PINCTRL_PIN(84, "sXm"),		/* E17 */ | 
 | 	/* Row F */ | 
 | 	PINCTRL_PIN(85, "RASn"),		/* F1 */ | 
 | 	PINCTRL_PIN(86, "SDCSn[1]"),	/* F2 */ | 
 | 	PINCTRL_PIN(87, "SDCSn[0]"),	/* F3 */ | 
 | 	PINCTRL_PIN(88, "DQMn[3]"),	/* F4 */ | 
 | 	PINCTRL_PIN(89, "AD[5]"),	/* F5 */ | 
 | 	PINCTRL_PIN(90, "gndr"),		/* F6 */ | 
 | 	PINCTRL_PIN(91, "gndr"),		/* F7 */ | 
 | 	PINCTRL_PIN(92, "gndr"),		/* F8 */ | 
 | 	PINCTRL_PIN(93, "vddc"),		/* F9 */ | 
 | 	PINCTRL_PIN(94, "vddc"),		/* F10 */ | 
 | 	PINCTRL_PIN(95, "gndr"),		/* F11 */ | 
 | 	PINCTRL_PIN(96, "EGPIO[7]"),	/* F12 */ | 
 | 	PINCTRL_PIN(97, "EGPIO[5]"),	/* F13 */ | 
 | 	PINCTRL_PIN(98, "ADC GND"),	/* F14 */ | 
 | 	PINCTRL_PIN(99, "EGPIO[6]"),	/* F15 */ | 
 | 	PINCTRL_PIN(100, "sYm"),		/* F16 */ | 
 | 	PINCTRL_PIN(101, "syp"),		/* F17 */ | 
 | 	/* Row G */ | 
 | 	PINCTRL_PIN(102, "DQMn[0]"),	/* G1 */ | 
 | 	PINCTRL_PIN(103, "CASn"),	/* G2 */ | 
 | 	PINCTRL_PIN(104, "DA[21]"),	/* G3 */ | 
 | 	PINCTRL_PIN(105, "AD[22]"),	/* G4 */ | 
 | 	PINCTRL_PIN(106, "vddr"),	/* G5 */ | 
 | 	PINCTRL_PIN(107, "gndr"),	/* G6 */ | 
 | 	PINCTRL_PIN(108, "gndr"),	/* G12 */ | 
 | 	PINCTRL_PIN(109, "EGPIO[9]"),	/* G13 */ | 
 | 	PINCTRL_PIN(110, "EGPIO[10]"),	/* G14 */ | 
 | 	PINCTRL_PIN(111, "EGPIO[11]"),	/* G15 */ | 
 | 	PINCTRL_PIN(112, "RTCXTALO"),	/* G16 */ | 
 | 	PINCTRL_PIN(113, "RTCXTALI"),	/* G17 */ | 
 | 	/* Row H */ | 
 | 	PINCTRL_PIN(114, "DA[18]"),	/* H1 */ | 
 | 	PINCTRL_PIN(115, "DA[20]"),	/* H2 */ | 
 | 	PINCTRL_PIN(116, "DA[19]"),	/* H3 */ | 
 | 	PINCTRL_PIN(117, "DA[16]"),	/* H4 */ | 
 | 	PINCTRL_PIN(118, "vddr"),	/* H5 */ | 
 | 	PINCTRL_PIN(119, "vddc"),	/* H6 */ | 
 | 	PINCTRL_PIN(120, "gndc"),	/* H7 */ | 
 | 	PINCTRL_PIN(121, "gndc"),	/* H9 */ | 
 | 	PINCTRL_PIN(122, "gndc"),	/* H10 */ | 
 | 	PINCTRL_PIN(123, "gndr"),	/* H12 */ | 
 | 	PINCTRL_PIN(124, "vddr"),	/* H13 */ | 
 | 	PINCTRL_PIN(125, "EGPIO[8]"),	/* H14 */ | 
 | 	PINCTRL_PIN(126, "PRSTN"),	/* H15 */ | 
 | 	PINCTRL_PIN(127, "COL[7]"),	/* H16 */ | 
 | 	PINCTRL_PIN(128, "RSTON"),	/* H17 */ | 
 | 	/* Row J */ | 
 | 	PINCTRL_PIN(129, "AD[6]"),	/* J1 */ | 
 | 	PINCTRL_PIN(130, "DA[14]"),	/* J2 */ | 
 | 	PINCTRL_PIN(131, "AD[7]"),	/* J3 */ | 
 | 	PINCTRL_PIN(132, "DA[13]"),	/* J4 */ | 
 | 	PINCTRL_PIN(133, "vddr"),	/* J5 */ | 
 | 	PINCTRL_PIN(134, "vddc"),	/* J6 */ | 
 | 	PINCTRL_PIN(135, "gndc"),	/* J8 */ | 
 | 	PINCTRL_PIN(136, "gndc"),	/* J10 */ | 
 | 	PINCTRL_PIN(137, "vddc"),	/* J12 */ | 
 | 	PINCTRL_PIN(138, "vddr"),	/* J13 */ | 
 | 	PINCTRL_PIN(139, "COL[5]"),	/* J14 */ | 
 | 	PINCTRL_PIN(140, "COL[6]"),	/* J15 */ | 
 | 	PINCTRL_PIN(141, "CSn[0]"),	/* J16 */ | 
 | 	PINCTRL_PIN(142, "COL[3]"),	/* J17 */ | 
 | 	/* Row K */ | 
 | 	PINCTRL_PIN(143, "AD[4]"),	/* K1 */ | 
 | 	PINCTRL_PIN(144, "DA[12]"),	/* K2 */ | 
 | 	PINCTRL_PIN(145, "DA[10]"),	/* K3 */ | 
 | 	PINCTRL_PIN(146, "DA[11]"),	/* K4 */ | 
 | 	PINCTRL_PIN(147, "vddr"),	/* K5 */ | 
 | 	PINCTRL_PIN(148, "gndr"),	/* K6 */ | 
 | 	PINCTRL_PIN(149, "gndc"),	/* K8 */ | 
 | 	PINCTRL_PIN(150, "gndc"),	/* K9 */ | 
 | 	PINCTRL_PIN(151, "gndc"),	/* K10 */ | 
 | 	PINCTRL_PIN(152, "vddc"),	/* K12 */ | 
 | 	PINCTRL_PIN(153, "COL[4]"),	/* K13 */ | 
 | 	PINCTRL_PIN(154, "PLL_VDD"),	/* K14 */ | 
 | 	PINCTRL_PIN(155, "COL[2]"),	/* K15 */ | 
 | 	PINCTRL_PIN(156, "COL[1]"),	/* K16 */ | 
 | 	PINCTRL_PIN(157, "COL[0]"),	/* K17 */ | 
 | 	/* Row L */ | 
 | 	PINCTRL_PIN(158, "DA[9]"),	/* L1 */ | 
 | 	PINCTRL_PIN(159, "AD[2]"),	/* L2 */ | 
 | 	PINCTRL_PIN(160, "AD[1]"),	/* L3 */ | 
 | 	PINCTRL_PIN(161, "DA[8]"),	/* L4 */ | 
 | 	PINCTRL_PIN(162, "BLANK"),	/* L5 */ | 
 | 	PINCTRL_PIN(163, "gndr"),	/* L6 */ | 
 | 	PINCTRL_PIN(164, "gndr"),	/* L7 */ | 
 | 	PINCTRL_PIN(165, "ROW[7]"),	/* L8 */ | 
 | 	PINCTRL_PIN(166, "ROW[5]"),	/* L9 */ | 
 | 	PINCTRL_PIN(167, "PLL GND"),	/* L10 */ | 
 | 	PINCTRL_PIN(168, "XTALI"),	/* L11 */ | 
 | 	PINCTRL_PIN(169, "XTALO"),	/* L12 */ | 
 | 	/* Row M */ | 
 | 	PINCTRL_PIN(170, "BRIGHT"),	/* M1 */ | 
 | 	PINCTRL_PIN(171, "AD[0]"),	/* M2 */ | 
 | 	PINCTRL_PIN(172, "DQMn[1]"),	/* M3 */ | 
 | 	PINCTRL_PIN(173, "DQMn[2]"),	/* M4 */ | 
 | 	PINCTRL_PIN(174, "P[17]"),	/* M5 */ | 
 | 	PINCTRL_PIN(175, "gndr"),	/* M6 */ | 
 | 	PINCTRL_PIN(176, "gndr"),	/* M7 */ | 
 | 	PINCTRL_PIN(177, "vddc"),	/* M8 */ | 
 | 	PINCTRL_PIN(178, "vddc"),	/* M9 */ | 
 | 	PINCTRL_PIN(179, "gndr"),	/* M10 */ | 
 | 	PINCTRL_PIN(180, "gndr"),	/* M11 */ | 
 | 	PINCTRL_PIN(181, "ROW[6]"),	/* M12 */ | 
 | 	PINCTRL_PIN(182, "ROW[4]"),	/* M13 */ | 
 | 	PINCTRL_PIN(183, "ROW[1]"),	/* M14 */ | 
 | 	PINCTRL_PIN(184, "ROW[0]"),	/* M15 */ | 
 | 	PINCTRL_PIN(185, "ROW[3]"),	/* M16 */ | 
 | 	PINCTRL_PIN(186, "ROW[2]"),	/* M17 */ | 
 | 	/* Row N */ | 
 | 	PINCTRL_PIN(187, "P[14]"),	/* N1 */ | 
 | 	PINCTRL_PIN(188, "P[16]"),	/* N2 */ | 
 | 	PINCTRL_PIN(189, "P[15]"),	/* N3 */ | 
 | 	PINCTRL_PIN(190, "P[13]"),	/* N4 */ | 
 | 	PINCTRL_PIN(191, "P[12]"),	/* N5 */ | 
 | 	PINCTRL_PIN(192, "DA[5]"),	/* N6 */ | 
 | 	PINCTRL_PIN(193, "vddr"),	/* N7 */ | 
 | 	PINCTRL_PIN(194, "vddr"),	/* N8 */ | 
 | 	PINCTRL_PIN(195, "vddr"),	/* N9 */ | 
 | 	PINCTRL_PIN(196, "vddr"),	/* N10 */ | 
 | 	PINCTRL_PIN(197, "EECLK"),	/* N11 */ | 
 | 	PINCTRL_PIN(198, "ASDO"),	/* N12 */ | 
 | 	PINCTRL_PIN(199, "CTSn"),	/* N13 */ | 
 | 	PINCTRL_PIN(200, "RXD[0]"),	/* N14 */ | 
 | 	PINCTRL_PIN(201, "TXD[0]"),	/* N15 */ | 
 | 	PINCTRL_PIN(202, "TXD[1]"),	/* N16 */ | 
 | 	PINCTRL_PIN(203, "TXD[2]"),	/* N17 */ | 
 | 	/* Row P */ | 
 | 	PINCTRL_PIN(204, "SPCLK"),	/* P1 */ | 
 | 	PINCTRL_PIN(205, "P[10]"),	/* P2 */ | 
 | 	PINCTRL_PIN(206, "P[11]"),	/* P3 */ | 
 | 	PINCTRL_PIN(207, "P[3]"),	/* P4 */ | 
 | 	PINCTRL_PIN(208, "AD[15]"),	/* P5 */ | 
 | 	PINCTRL_PIN(209, "AD[13]"),	/* P6 */ | 
 | 	PINCTRL_PIN(210, "AD[12]"),	/* P7 */ | 
 | 	PINCTRL_PIN(211, "DA[2]"),	/* P8 */ | 
 | 	PINCTRL_PIN(212, "AD[8]"),	/* P9 */ | 
 | 	PINCTRL_PIN(213, "TCK"),		/* P10 */ | 
 | 	PINCTRL_PIN(214, "BOOT[1]"),	/* P11 */ | 
 | 	PINCTRL_PIN(215, "EEDAT"),	/* P12 */ | 
 | 	PINCTRL_PIN(216, "GRLED"),	/* P13 */ | 
 | 	PINCTRL_PIN(217, "RDLED"),	/* P14 */ | 
 | 	PINCTRL_PIN(218, "GGPIO[2]"),	/* P15 */ | 
 | 	PINCTRL_PIN(219, "RXD[1]"),	/* P16 */ | 
 | 	PINCTRL_PIN(220, "RXD[2]"),	/* P17 */ | 
 | 	/* Row R */ | 
 | 	PINCTRL_PIN(221, "P[9]"),	/* R1 */ | 
 | 	PINCTRL_PIN(222, "HSYNC"),	/* R2 */ | 
 | 	PINCTRL_PIN(223, "P[6]"),	/* R3 */ | 
 | 	PINCTRL_PIN(224, "P[5]"),	/* R4 */ | 
 | 	PINCTRL_PIN(225, "P[0]"),	/* R5 */ | 
 | 	PINCTRL_PIN(226, "AD[14]"),	/* R6 */ | 
 | 	PINCTRL_PIN(227, "DA[4]"),	/* R7 */ | 
 | 	PINCTRL_PIN(228, "DA[1]"),	/* R8 */ | 
 | 	PINCTRL_PIN(229, "DTRn"),	/* R9 */ | 
 | 	PINCTRL_PIN(230, "TDI"),		/* R10 */ | 
 | 	PINCTRL_PIN(231, "BOOT[0]"),	/* R11 */ | 
 | 	PINCTRL_PIN(232, "ASYNC"),	/* R12 */ | 
 | 	PINCTRL_PIN(233, "SSPTX[1]"),	/* R13 */ | 
 | 	PINCTRL_PIN(234, "PWMOUT"),	/* R14 */ | 
 | 	PINCTRL_PIN(235, "USBm[0]"),	/* R15 */ | 
 | 	PINCTRL_PIN(236, "ABITCLK"),	/* R16 */ | 
 | 	PINCTRL_PIN(237, "USBp[0]"),	/* R17 */ | 
 | 	/* Row T */ | 
 | 	PINCTRL_PIN(238, "NC"),		/* T1 */ | 
 | 	PINCTRL_PIN(239, "NC"),		/* T2 */ | 
 | 	PINCTRL_PIN(240, "V_CSYNC"),	/* T3 */ | 
 | 	PINCTRL_PIN(241, "P[7]"),	/* T4 */ | 
 | 	PINCTRL_PIN(242, "P[2]"),	/* T5 */ | 
 | 	PINCTRL_PIN(243, "DA[7]"),	/* T6 */ | 
 | 	PINCTRL_PIN(244, "AD[11]"),	/* T7 */ | 
 | 	PINCTRL_PIN(245, "AD[9]"),	/* T8 */ | 
 | 	PINCTRL_PIN(246, "DSRn"),	/* T9 */ | 
 | 	PINCTRL_PIN(247, "TMS"),		/* T10 */ | 
 | 	PINCTRL_PIN(248, "gndr"),	/* T11 */ | 
 | 	PINCTRL_PIN(249, "SFRM[1]"),	/* T12 */ | 
 | 	PINCTRL_PIN(250, "INT[2]"),	/* T13 */ | 
 | 	PINCTRL_PIN(251, "INT[0]"),	/* T14 */ | 
 | 	PINCTRL_PIN(252, "USBp[1]"),	/* T15 */ | 
 | 	PINCTRL_PIN(253, "NC"),		/* T16 */ | 
 | 	PINCTRL_PIN(254, "NC"),		/* T17 */ | 
 | 	/* Row U */ | 
 | 	PINCTRL_PIN(255, "NC"),		/* U1 */ | 
 | 	PINCTRL_PIN(256, "NC"),		/* U2 */ | 
 | 	PINCTRL_PIN(257, "P[8]"),	/* U3 */ | 
 | 	PINCTRL_PIN(258, "P[4]"),	/* U4 */ | 
 | 	PINCTRL_PIN(259, "P[1]"),	/* U5 */ | 
 | 	PINCTRL_PIN(260, "DA[6]"),	/* U6 */ | 
 | 	PINCTRL_PIN(261, "DA[3]"),	/* U7 */ | 
 | 	PINCTRL_PIN(262, "AD[10]"),	/* U8 */ | 
 | 	PINCTRL_PIN(263, "DA[0]"),	/* U9 */ | 
 | 	PINCTRL_PIN(264, "TDO"),		/* U10 */ | 
 | 	PINCTRL_PIN(265, "NC"),		/* U11 */ | 
 | 	PINCTRL_PIN(266, "SCLK[1]"),	/* U12 */ | 
 | 	PINCTRL_PIN(267, "SSPRX[1]"),	/* U13 */ | 
 | 	PINCTRL_PIN(268, "INT[1]"),	/* U14 */ | 
 | 	PINCTRL_PIN(269, "RTSn"),	/* U15 */ | 
 | 	PINCTRL_PIN(270, "USBm[1]"),	/* U16 */ | 
 | 	PINCTRL_PIN(271, "NC"),		/* U17 */ | 
 | }; | 
 |  | 
 | static const unsigned int ssp_ep9307_pins[] = { | 
 | 	233, 249, 266, 267, | 
 | }; | 
 |  | 
 | static const unsigned int ac97_ep9307_pins[] = { | 
 | 	16, 32, 198, 232, 236, | 
 | }; | 
 |  | 
 | /* I can't find info on those - it's some internal state */ | 
 | static const unsigned int raster_on_sdram0_pins[] = { | 
 | }; | 
 |  | 
 | static const unsigned int raster_on_sdram3_pins[] = { | 
 | }; | 
 |  | 
 | /* ROW[N] */ | 
 | static const unsigned int gpio2a_9307_pins[] = { | 
 | 	165, 166, 181, 182, 183, 184, 185, 186, | 
 | }; | 
 |  | 
 | /* COL[N] */ | 
 | static const unsigned int gpio3a_9307_pins[] = { | 
 | 	127, 139, 140, 142, 153, 155, 156, 157, | 
 | }; | 
 |  | 
 | static const unsigned int keypad_9307_pins[] = { | 
 | 	127, 139, 140, 142, 153, 155, 156, 157, | 
 | 	165, 166, 181, 182, 183, 184, 185, 186, | 
 | }; | 
 |  | 
 | /* ep9307 have only 4,5 pin of GPIO E Port exposed */ | 
 | static const unsigned int gpio4a_9307_pins[] = { 216, 217 }; | 
 |  | 
 | /* ep9307 have only 2 pin of GPIO G Port exposed */ | 
 | static const unsigned int gpio6a_9307_pins[] = { 219 }; | 
 |  | 
 | static const unsigned int gpio7a_9307_pins[] = { 7, 24, 41, 56, 57, 59 }; | 
 |  | 
 | static const struct ep93xx_pin_group ep9307_pin_groups[] = { | 
 | 	PMX_GROUP("ssp", ssp_ep9307_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 0), | 
 | 	PMX_GROUP("i2s_on_ssp", ssp_ep9307_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, | 
 | 						EP93XX_SYSCON_DEVCFG_I2SONSSP), | 
 | 	PMX_GROUP("ac97", ac97_ep9307_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 0), | 
 | 	PMX_GROUP("i2s_on_ac97", ac97_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, | 
 | 						EP93XX_SYSCON_DEVCFG_I2SONAC97), | 
 | 	PMX_GROUP("rasteronsdram0grp", raster_on_sdram0_pins, EP93XX_SYSCON_DEVCFG_RASONP3, 0), | 
 | 	PMX_GROUP("rasteronsdram3grp", raster_on_sdram3_pins, EP93XX_SYSCON_DEVCFG_RASONP3, | 
 | 							EP93XX_SYSCON_DEVCFG_RASONP3), | 
 | 	PMX_GROUP("gpio2agrp", gpio2a_9307_pins, EP93XX_SYSCON_DEVCFG_GONK, | 
 | 						EP93XX_SYSCON_DEVCFG_GONK), | 
 | 	PMX_GROUP("gpio3agrp", gpio3a_9307_pins, EP93XX_SYSCON_DEVCFG_GONK, | 
 | 						EP93XX_SYSCON_DEVCFG_GONK), | 
 | 	PMX_GROUP("keypadgrp", keypad_9307_pins, EP93XX_SYSCON_DEVCFG_GONK, 0), | 
 | 	PMX_GROUP("gpio4agrp", gpio4a_9307_pins, EP93XX_SYSCON_DEVCFG_EONIDE, | 
 | 						EP93XX_SYSCON_DEVCFG_EONIDE), | 
 | 	PMX_GROUP("gpio6agrp", gpio6a_9307_pins, EP93XX_SYSCON_DEVCFG_GONIDE, | 
 | 						EP93XX_SYSCON_DEVCFG_GONIDE), | 
 | 	PMX_GROUP("gpio7agrp", gpio7a_9307_pins, EP93XX_SYSCON_DEVCFG_HONIDE, | 
 | 						EP93XX_SYSCON_DEVCFG_HONIDE), | 
 | }; | 
 |  | 
 | /* ep9312, ep9315 */ | 
 | static const struct pinctrl_pin_desc ep9312_pins[] = { | 
 | 	/* Row A */ | 
 | 	PINCTRL_PIN(0, "CSN[7]"),	/* A1 */ | 
 | 	PINCTRL_PIN(1, "DA[28]"),	/* A2 */ | 
 | 	PINCTRL_PIN(2, "AD[18]"),	/* A3 */ | 
 | 	PINCTRL_PIN(3, "DD[8]"),	/* A4 */ | 
 | 	PINCTRL_PIN(4, "DD[4]"),	/* A5 */ | 
 | 	PINCTRL_PIN(5, "AD[17]"),	/* A6 */ | 
 | 	PINCTRL_PIN(6, "RDN"),		/* A7 */ | 
 | 	PINCTRL_PIN(7, "RXCLK"),	/* A8 */ | 
 | 	PINCTRL_PIN(8, "MIIRXD[0]"),	/* A9 */ | 
 | 	PINCTRL_PIN(9, "RXDVAL"),	/* A10 */ | 
 | 	PINCTRL_PIN(10, "MIITXD[2]"),	/* A11 */ | 
 | 	PINCTRL_PIN(11, "TXERR"),	/* A12 */ | 
 | 	PINCTRL_PIN(12, "CLD"),	/* A13 */ | 
 | 	PINCTRL_PIN(13, "NC"),		/* A14 */ | 
 | 	PINCTRL_PIN(14, "NC"),		/* A15 */ | 
 | 	PINCTRL_PIN(15, "NC"),		/* A16 */ | 
 | 	PINCTRL_PIN(16, "EGPIO[12]"),	/* A17 */ | 
 | 	PINCTRL_PIN(17, "EGPIO[15]"),	/* A18 */ | 
 | 	PINCTRL_PIN(18, "NC"),		/* A19 */ | 
 | 	PINCTRL_PIN(19, "NC"),		/* A20 */ | 
 | 	/* Row B */ | 
 | 	PINCTRL_PIN(20, "CSN[2]"),	/* B1 */ | 
 | 	PINCTRL_PIN(21, "DA[31]"),	/* B2 */ | 
 | 	PINCTRL_PIN(22, "DA[30]"),	/* B3 */ | 
 | 	PINCTRL_PIN(23, "DA[27]"),	/* B4 */ | 
 | 	PINCTRL_PIN(24, "DD[7]"),	/* B5 */ | 
 | 	PINCTRL_PIN(25, "DD[3]"),	/* B6 */ | 
 | 	PINCTRL_PIN(26, "WRN"),	/* B7 */ | 
 | 	PINCTRL_PIN(27, "MDIO"),	/* B8 */ | 
 | 	PINCTRL_PIN(28, "MIIRXD[1]"),	/* B9 */ | 
 | 	PINCTRL_PIN(29, "RXERR"),	/* B10 */ | 
 | 	PINCTRL_PIN(30, "MIITXD[1]"),	/* B11 */ | 
 | 	PINCTRL_PIN(31, "CRS"),	/* B12 */ | 
 | 	PINCTRL_PIN(32, "NC"),		/* B13 */ | 
 | 	PINCTRL_PIN(33, "NC"),		/* B14 */ | 
 | 	PINCTRL_PIN(34, "NC"),		/* B15 */ | 
 | 	PINCTRL_PIN(35, "NC"),		/* B16 */ | 
 | 	PINCTRL_PIN(36, "EGPIO[13]"),	/* B17 */ | 
 | 	PINCTRL_PIN(37, "NC"),		/* B18 */ | 
 | 	PINCTRL_PIN(38, "WAITN"),	/* B19 */ | 
 | 	PINCTRL_PIN(39, "TRSTN"),	/* B20 */ | 
 | 	/* Row C */ | 
 | 	PINCTRL_PIN(40, "CSN[1]"),	/* C1 */ | 
 | 	PINCTRL_PIN(41, "CSN[3]"),	/* C2 */ | 
 | 	PINCTRL_PIN(42, "AD[20]"),	/* C3 */ | 
 | 	PINCTRL_PIN(43, "DA[29]"),	/* C4 */ | 
 | 	PINCTRL_PIN(44, "DD[10]"),	/* C5 */ | 
 | 	PINCTRL_PIN(45, "DD[6]"),	/* C6 */ | 
 | 	PINCTRL_PIN(46, "DD[2]"),	/* C7 */ | 
 | 	PINCTRL_PIN(47, "MDC"),	/* C8 */ | 
 | 	PINCTRL_PIN(48, "MIIRXD[3]"),	/* C9 */ | 
 | 	PINCTRL_PIN(49, "TXCLK"),	/* C10 */ | 
 | 	PINCTRL_PIN(50, "MIITXD[0]"),	/* C11 */ | 
 | 	PINCTRL_PIN(51, "NC"),		/* C12 */ | 
 | 	PINCTRL_PIN(52, "NC"),		/* C13 */ | 
 | 	PINCTRL_PIN(53, "NC"),		/* C14 */ | 
 | 	PINCTRL_PIN(54, "NC"),		/* C15 */ | 
 | 	PINCTRL_PIN(55, "NC"),		/* C16 */ | 
 | 	PINCTRL_PIN(56, "NC"),		/* C17 */ | 
 | 	PINCTRL_PIN(57, "USBP[2]"),	/* C18 */ | 
 | 	PINCTRL_PIN(58, "IORDY"),	/* C19 */ | 
 | 	PINCTRL_PIN(59, "DMACKN"),	/* C20 */ | 
 | 	/* Row D */ | 
 | 	PINCTRL_PIN(60, "AD[24]"),	/* D1 */ | 
 | 	PINCTRL_PIN(61, "DA[25]"),	/* D2 */ | 
 | 	PINCTRL_PIN(62, "DD[11]"),	/* D3 */ | 
 | 	PINCTRL_PIN(63, "SDCLKEN"),	/* D4 */ | 
 | 	PINCTRL_PIN(64, "AD[19]"),	/* D5 */ | 
 | 	PINCTRL_PIN(65, "DD[9]"),	/* D6 */ | 
 | 	PINCTRL_PIN(66, "DD[5]"),	/* D7 */ | 
 | 	PINCTRL_PIN(67, "AD[16]"),	/* D8 */ | 
 | 	PINCTRL_PIN(68, "MIIRXD[2]"),	/* D9 */ | 
 | 	PINCTRL_PIN(69, "MIITXD[3]"),	/* D10 */ | 
 | 	PINCTRL_PIN(70, "TXEN"),	/* D11 */ | 
 | 	PINCTRL_PIN(71, "NC"),		/* D12 */ | 
 | 	PINCTRL_PIN(72, "NC"),		/* D13 */ | 
 | 	PINCTRL_PIN(73, "NC"),		/* D14 */ | 
 | 	PINCTRL_PIN(74, "EGPIO[14]"),	/* D15 */ | 
 | 	PINCTRL_PIN(75, "NC"),		/* D16 */ | 
 | 	PINCTRL_PIN(76, "USBM[2]"),	/* D17 */ | 
 | 	PINCTRL_PIN(77, "ARSTN"),	/* D18 */ | 
 | 	PINCTRL_PIN(78, "DIORN"),	/* D19 */ | 
 | 	PINCTRL_PIN(79, "EGPIO[1]"),	/* D20 */ | 
 | 	/* Row E */ | 
 | 	PINCTRL_PIN(80, "AD[23]"),	/* E1 */ | 
 | 	PINCTRL_PIN(81, "DA[23]"),	/* E2 */ | 
 | 	PINCTRL_PIN(82, "DA[26]"),	/* E3 */ | 
 | 	PINCTRL_PIN(83, "CSN[6]"),	/* E4 */ | 
 | 	PINCTRL_PIN(84, "GND"),	/* E5 */ | 
 | 	PINCTRL_PIN(85, "GND"),	/* E6 */ | 
 | 	PINCTRL_PIN(86, "CVDD"),	/* E7 */ | 
 | 	PINCTRL_PIN(87, "CVDD"),	/* E8 */ | 
 | 	PINCTRL_PIN(88, "RVDD"),	/* E9 */ | 
 | 	PINCTRL_PIN(89, "GND"),	/* E10 */ | 
 | 	PINCTRL_PIN(90, "GND"),	/* E11 */ | 
 | 	PINCTRL_PIN(91, "RVDD"),	/* E12 */ | 
 | 	PINCTRL_PIN(92, "CVDD"),	/* E13 */ | 
 | 	PINCTRL_PIN(93, "CVDD"),	/* E14 */ | 
 | 	PINCTRL_PIN(94, "GND"),	/* E15 */ | 
 | 	PINCTRL_PIN(95, "ASDI"),	/* E16 */ | 
 | 	PINCTRL_PIN(96, "DIOWN"),	/* E17 */ | 
 | 	PINCTRL_PIN(97, "EGPIO[0]"),	/* E18 */ | 
 | 	PINCTRL_PIN(98, "EGPIO[3]"),	/* E19 */ | 
 | 	PINCTRL_PIN(99, "EGPIO[5]"),	/* E20 */ | 
 | 	/* Row F */ | 
 | 	PINCTRL_PIN(100, "SDCSN[3]"),	/* F1 */ | 
 | 	PINCTRL_PIN(101, "DA[22]"),	/* F2 */ | 
 | 	PINCTRL_PIN(102, "DA[24]"),	/* F3 */ | 
 | 	PINCTRL_PIN(103, "AD[25]"),	/* F4 */ | 
 | 	PINCTRL_PIN(104, "RVDD"),	/* F5 */ | 
 | 	PINCTRL_PIN(105, "GND"),	/* F6 */ | 
 | 	PINCTRL_PIN(106, "CVDD"),	/* F7 */ | 
 | 	PINCTRL_PIN(107, "CVDD"),	/* F14 */ | 
 | 	PINCTRL_PIN(108, "GND"),	/* F15 */ | 
 | 	PINCTRL_PIN(109, "GND"),	/* F16 */ | 
 | 	PINCTRL_PIN(110, "EGPIO[2]"),	/* F17 */ | 
 | 	PINCTRL_PIN(111, "EGPIO[4]"),	/* F18 */ | 
 | 	PINCTRL_PIN(112, "EGPIO[6]"),	/* F19 */ | 
 | 	PINCTRL_PIN(113, "EGPIO[8]"),	/* F20 */ | 
 | 	/* Row G */ | 
 | 	PINCTRL_PIN(114, "SDCSN[0]"),	/* G1 */ | 
 | 	PINCTRL_PIN(115, "SDCSN[1]"),	/* G2 */ | 
 | 	PINCTRL_PIN(116, "SDWEN"),	/* G3 */ | 
 | 	PINCTRL_PIN(117, "SDCLK"),	/* G4 */ | 
 | 	PINCTRL_PIN(118, "RVDD"),	/* G5 */ | 
 | 	PINCTRL_PIN(119, "RVDD"),	/* G6 */ | 
 | 	PINCTRL_PIN(120, "RVDD"),	/* G15 */ | 
 | 	PINCTRL_PIN(121, "RVDD"),	/* G16 */ | 
 | 	PINCTRL_PIN(122, "EGPIO[7]"),	/* G17 */ | 
 | 	PINCTRL_PIN(123, "EGPIO[9]"),	/* G18 */ | 
 | 	PINCTRL_PIN(124, "EGPIO[10]"),	/* G19 */ | 
 | 	PINCTRL_PIN(125, "EGPIO[11]"),	/* G20 */ | 
 | 	/* Row H */ | 
 | 	PINCTRL_PIN(126, "DQMN[3]"),	/* H1 */ | 
 | 	PINCTRL_PIN(127, "CASN"),	/* H2 */ | 
 | 	PINCTRL_PIN(128, "RASN"),	/* H3 */ | 
 | 	PINCTRL_PIN(129, "SDCSN[2]"),	/* H4 */ | 
 | 	PINCTRL_PIN(130, "CVDD"),	/* H5 */ | 
 | 	PINCTRL_PIN(131, "GND"),	/* H8 */ | 
 | 	PINCTRL_PIN(132, "GND"),	/* H9 */ | 
 | 	PINCTRL_PIN(133, "GND"),	/* H10 */ | 
 | 	PINCTRL_PIN(134, "GND"),	/* H11 */ | 
 | 	PINCTRL_PIN(135, "GND"),	/* H12 */ | 
 | 	PINCTRL_PIN(136, "GND"),	/* H13 */ | 
 | 	PINCTRL_PIN(137, "RVDD"),	/* H16 */ | 
 | 	PINCTRL_PIN(138, "RTCXTALO"),	/* H17 */ | 
 | 	PINCTRL_PIN(139, "ADC_VDD"),	/* H18 */ | 
 | 	PINCTRL_PIN(140, "ADC_GND"),	/* H19 */ | 
 | 	PINCTRL_PIN(141, "XP"),	/* H20 */ | 
 | 	/* Row J */ | 
 | 	PINCTRL_PIN(142, "DA[21]"),	/* J1 */ | 
 | 	PINCTRL_PIN(143, "DQMN[0]"),	/* J2 */ | 
 | 	PINCTRL_PIN(144, "DQMN[1]"),	/* J3 */ | 
 | 	PINCTRL_PIN(145, "DQMN[2]"),	/* J4 */ | 
 | 	PINCTRL_PIN(146, "GND"),	/* J5 */ | 
 | 	PINCTRL_PIN(147, "GND"),	/* J8 */ | 
 | 	PINCTRL_PIN(148, "GND"),	/* J9 */ | 
 | 	PINCTRL_PIN(149, "GND"),	/* J10 */ | 
 | 	PINCTRL_PIN(150, "GND"),	/* J11 */ | 
 | 	PINCTRL_PIN(151, "GND"),	/* J12 */ | 
 | 	PINCTRL_PIN(152, "GND"),	/* J13 */ | 
 | 	PINCTRL_PIN(153, "CVDD"),	/* J16 */ | 
 | 	PINCTRL_PIN(154, "RTCXTALI"),	/* J17 */ | 
 | 	PINCTRL_PIN(155, "XM"),	/* J18 */ | 
 | 	PINCTRL_PIN(156, "YP"),	/* J19 */ | 
 | 	PINCTRL_PIN(157, "YM"),	/* J20 */ | 
 | 	/* Row K */ | 
 | 	PINCTRL_PIN(158, "AD[22]"),	/* K1 */ | 
 | 	PINCTRL_PIN(159, "DA[20]"),	/* K2 */ | 
 | 	PINCTRL_PIN(160, "AD[21]"),	/* K3 */ | 
 | 	PINCTRL_PIN(161, "DA[19]"),	/* K4 */ | 
 | 	PINCTRL_PIN(162, "RVDD"),	/* K5 */ | 
 | 	PINCTRL_PIN(163, "GND"),	/* K8 */ | 
 | 	PINCTRL_PIN(164, "GND"),	/* K9 */ | 
 | 	PINCTRL_PIN(165, "GND"),	/* K10 */ | 
 | 	PINCTRL_PIN(166, "GND"),	/* K11 */ | 
 | 	PINCTRL_PIN(167, "GND"),	/* K12 */ | 
 | 	PINCTRL_PIN(168, "GND"),	/* K13 */ | 
 | 	PINCTRL_PIN(169, "CVDD"),	/* K16 */ | 
 | 	PINCTRL_PIN(170, "SYM"),	/* K17 */ | 
 | 	PINCTRL_PIN(171, "SYP"),	/* K18 */ | 
 | 	PINCTRL_PIN(172, "SXM"),	/* K19 */ | 
 | 	PINCTRL_PIN(173, "SXP"),	/* K20 */ | 
 | 	/* Row L */ | 
 | 	PINCTRL_PIN(174, "DA[18]"),	/* L1 */ | 
 | 	PINCTRL_PIN(175, "DA[17]"),	/* L2 */ | 
 | 	PINCTRL_PIN(176, "DA[16]"),	/* L3 */ | 
 | 	PINCTRL_PIN(177, "DA[15]"),	/* L4 */ | 
 | 	PINCTRL_PIN(178, "GND"),	/* L5 */ | 
 | 	PINCTRL_PIN(179, "GND"),	/* L8 */ | 
 | 	PINCTRL_PIN(180, "GND"),	/* L9 */ | 
 | 	PINCTRL_PIN(181, "GND"),	/* L10 */ | 
 | 	PINCTRL_PIN(182, "GND"),	/* L11 */ | 
 | 	PINCTRL_PIN(183, "GND"),	/* L12 */ | 
 | 	PINCTRL_PIN(184, "GND"),	/* L13 */ | 
 | 	PINCTRL_PIN(185, "CVDD"),	/* L16 */ | 
 | 	PINCTRL_PIN(186, "COL[5]"),	/* L17 */ | 
 | 	PINCTRL_PIN(187, "COL[7]"),	/* L18 */ | 
 | 	PINCTRL_PIN(188, "RSTON"),	/* L19 */ | 
 | 	PINCTRL_PIN(189, "PRSTN"),	/* L20 */ | 
 | 	/* Row M */ | 
 | 	PINCTRL_PIN(190, "AD[7]"),	/* M1 */ | 
 | 	PINCTRL_PIN(191, "DA[14]"),	/* M2 */ | 
 | 	PINCTRL_PIN(192, "AD[6]"),	/* M3 */ | 
 | 	PINCTRL_PIN(193, "AD[5]"),	/* M4 */ | 
 | 	PINCTRL_PIN(194, "CVDD"),	/* M5 */ | 
 | 	PINCTRL_PIN(195, "GND"),	/* M8 */ | 
 | 	PINCTRL_PIN(196, "GND"),	/* M9 */ | 
 | 	PINCTRL_PIN(197, "GND"),	/* M10 */ | 
 | 	PINCTRL_PIN(198, "GND"),	/* M11 */ | 
 | 	PINCTRL_PIN(199, "GND"),	/* M12 */ | 
 | 	PINCTRL_PIN(200, "GND"),	/* M13 */ | 
 | 	PINCTRL_PIN(201, "GND"),	/* M16 */ | 
 | 	PINCTRL_PIN(202, "COL[4]"),	/* M17 */ | 
 | 	PINCTRL_PIN(203, "COL[3]"),	/* M18 */ | 
 | 	PINCTRL_PIN(204, "COL[6]"),	/* M19 */ | 
 | 	PINCTRL_PIN(205, "CSN[0]"),	/* M20 */ | 
 | 	/* Row N */ | 
 | 	PINCTRL_PIN(206, "DA[13]"),	/* N1 */ | 
 | 	PINCTRL_PIN(207, "DA[12]"),	/* N2 */ | 
 | 	PINCTRL_PIN(208, "DA[11]"),	/* N3 */ | 
 | 	PINCTRL_PIN(209, "AD[3]"),	/* N4 */ | 
 | 	PINCTRL_PIN(210, "CVDD"),	/* N5 */ | 
 | 	PINCTRL_PIN(211, "CVDD"),	/* N6 */ | 
 | 	PINCTRL_PIN(212, "GND"),	/* N8 */ | 
 | 	PINCTRL_PIN(213, "GND"),	/* N9 */ | 
 | 	PINCTRL_PIN(214, "GND"),	/* N10 */ | 
 | 	PINCTRL_PIN(215, "GND"),	/* N11 */ | 
 | 	PINCTRL_PIN(216, "GND"),	/* N12 */ | 
 | 	PINCTRL_PIN(217, "GND"),	/* N13 */ | 
 | 	PINCTRL_PIN(218, "GND"),	/* N15 */ | 
 | 	PINCTRL_PIN(219, "GND"),	/* N16 */ | 
 | 	PINCTRL_PIN(220, "XTALO"),	/* N17 */ | 
 | 	PINCTRL_PIN(221, "COL[0]"),	/* N18 */ | 
 | 	PINCTRL_PIN(222, "COL[1]"),	/* N19 */ | 
 | 	PINCTRL_PIN(223, "COL[2]"),	/* N20 */ | 
 | 	/* Row P */ | 
 | 	PINCTRL_PIN(224, "AD[4]"),	/* P1 */ | 
 | 	PINCTRL_PIN(225, "DA[10]"),	/* P2 */ | 
 | 	PINCTRL_PIN(226, "DA[9]"),	/* P3 */ | 
 | 	PINCTRL_PIN(227, "BRIGHT"),	/* P4 */ | 
 | 	PINCTRL_PIN(228, "RVDD"),	/* P5 */ | 
 | 	PINCTRL_PIN(229, "RVDD"),	/* P6 */ | 
 | 	PINCTRL_PIN(230, "RVDD"),	/* P15 */ | 
 | 	PINCTRL_PIN(231, "RVDD"),	/* P16 */ | 
 | 	PINCTRL_PIN(232, "XTALI"),	/* P17 */ | 
 | 	PINCTRL_PIN(233, "PLL_VDD"),	/* P18 */ | 
 | 	PINCTRL_PIN(234, "ROW[6]"),	/* P19 */ | 
 | 	PINCTRL_PIN(235, "ROW[7]"),	/* P20 */ | 
 | 	/* Row R */ | 
 | 	PINCTRL_PIN(236, "AD[2]"),	/* R1 */ | 
 | 	PINCTRL_PIN(237, "AD[1]"),	/* R2 */ | 
 | 	PINCTRL_PIN(238, "P[17]"),	/* R3 */ | 
 | 	PINCTRL_PIN(239, "P[14]"),	/* R4 */ | 
 | 	PINCTRL_PIN(240, "RVDD"),	/* R5 */ | 
 | 	PINCTRL_PIN(241, "RVDD"),	/* R6 */ | 
 | 	PINCTRL_PIN(242, "GND"),	/* R7 */ | 
 | 	PINCTRL_PIN(243, "CVDD"),	/* R8 */ | 
 | 	PINCTRL_PIN(244, "CVDD"),	/* R13 */ | 
 | 	PINCTRL_PIN(245, "GND"),	/* R14 */ | 
 | 	PINCTRL_PIN(246, "RVDD"),	/* R15 */ | 
 | 	PINCTRL_PIN(247, "RVDD"),	/* R16 */ | 
 | 	PINCTRL_PIN(248, "ROW[0]"),	/* R17 */ | 
 | 	PINCTRL_PIN(249, "ROW[3]"),	/* R18 */ | 
 | 	PINCTRL_PIN(250, "PLL_GND"),	/* R19 */ | 
 | 	PINCTRL_PIN(251, "ROW[5]"),	/* R20 */ | 
 | 	/* Row T */ | 
 | 	PINCTRL_PIN(252, "DA[8]"),	/* T1 */ | 
 | 	PINCTRL_PIN(253, "BLANK"),	/* T2 */ | 
 | 	PINCTRL_PIN(254, "P[13]"),	/* T3 */ | 
 | 	PINCTRL_PIN(255, "SPCLK"),	/* T4 */ | 
 | 	PINCTRL_PIN(256, "V_CSYNC"),	/* T5 */ | 
 | 	PINCTRL_PIN(257, "DD[14]"),	/* T6 */ | 
 | 	PINCTRL_PIN(258, "GND"),	/* T7 */ | 
 | 	PINCTRL_PIN(259, "CVDD"),	/* T8 */ | 
 | 	PINCTRL_PIN(260, "RVDD"),	/* T9 */ | 
 | 	PINCTRL_PIN(261, "GND"),	/* T10 */ | 
 | 	PINCTRL_PIN(262, "GND"),	/* T11 */ | 
 | 	PINCTRL_PIN(263, "RVDD"),	/* T12 */ | 
 | 	PINCTRL_PIN(264, "CVDD"),	/* T13 */ | 
 | 	PINCTRL_PIN(265, "GND"),	/* T14 */ | 
 | 	PINCTRL_PIN(266, "INT[0]"),	/* T15 */ | 
 | 	PINCTRL_PIN(267, "USBM[1]"),	/* T16 */ | 
 | 	PINCTRL_PIN(268, "RXD[0]"),	/* T17 */ | 
 | 	PINCTRL_PIN(269, "TXD[2]"),	/* T18 */ | 
 | 	PINCTRL_PIN(270, "ROW[2]"),	/* T19 */ | 
 | 	PINCTRL_PIN(271, "ROW[4]"),	/* T20 */ | 
 | 	/* Row U */ | 
 | 	PINCTRL_PIN(272, "AD[0]"),	/* U1 */ | 
 | 	PINCTRL_PIN(273, "P[15]"),	/* U2 */ | 
 | 	PINCTRL_PIN(274, "P[10]"),	/* U3 */ | 
 | 	PINCTRL_PIN(275, "P[7]"),	/* U4 */ | 
 | 	PINCTRL_PIN(276, "P[6]"),	/* U5 */ | 
 | 	PINCTRL_PIN(277, "P[4]"),	/* U6 */ | 
 | 	PINCTRL_PIN(278, "P[0]"),	/* U7 */ | 
 | 	PINCTRL_PIN(279, "AD[13]"),	/* U8 */ | 
 | 	PINCTRL_PIN(280, "DA[3]"),	/* U9 */ | 
 | 	PINCTRL_PIN(281, "DA[0]"),	/* U10 */ | 
 | 	PINCTRL_PIN(282, "DSRN"),	/* U11 */ | 
 | 	PINCTRL_PIN(283, "BOOT[1]"),	/* U12 */ | 
 | 	PINCTRL_PIN(284, "NC"),	/* U13 */ | 
 | 	PINCTRL_PIN(285, "SSPRX1"),	/* U14 */ | 
 | 	PINCTRL_PIN(286, "INT[1]"),	/* U15 */ | 
 | 	PINCTRL_PIN(287, "PWMOUT"),	/* U16 */ | 
 | 	PINCTRL_PIN(288, "USBM[0]"),	/* U17 */ | 
 | 	PINCTRL_PIN(289, "RXD[1]"),	/* U18 */ | 
 | 	PINCTRL_PIN(290, "TXD[1]"),	/* U19 */ | 
 | 	PINCTRL_PIN(291, "ROW[1]"),	/* U20 */ | 
 | 	/* Row V */ | 
 | 	PINCTRL_PIN(292, "P[16]"),	/* V1 */ | 
 | 	PINCTRL_PIN(293, "P[11]"),	/* V2 */ | 
 | 	PINCTRL_PIN(294, "P[8]"),	/* V3 */ | 
 | 	PINCTRL_PIN(295, "DD[15]"),	/* V4 */ | 
 | 	PINCTRL_PIN(296, "DD[13]"),	/* V5 */ | 
 | 	PINCTRL_PIN(297, "P[1]"),	/* V6 */ | 
 | 	PINCTRL_PIN(298, "AD[14]"),	/* V7 */ | 
 | 	PINCTRL_PIN(299, "AD[12]"),	/* V8 */ | 
 | 	PINCTRL_PIN(300, "DA[2]"),	/* V9 */ | 
 | 	PINCTRL_PIN(301, "IDECS0N"),	/* V10 */ | 
 | 	PINCTRL_PIN(302, "IDEDA[2]"),	/* V11 */ | 
 | 	PINCTRL_PIN(303, "TDI"),	/* V12 */ | 
 | 	PINCTRL_PIN(304, "GND"),	/* V13 */ | 
 | 	PINCTRL_PIN(305, "ASYNC"),	/* V14 */ | 
 | 	PINCTRL_PIN(306, "SSPTX1"),	/* V15 */ | 
 | 	PINCTRL_PIN(307, "INT[2]"),	/* V16 */ | 
 | 	PINCTRL_PIN(308, "RTSN"),	/* V17 */ | 
 | 	PINCTRL_PIN(309, "USBP[0]"),	/* V18 */ | 
 | 	PINCTRL_PIN(310, "CTSN"),	/* V19 */ | 
 | 	PINCTRL_PIN(311, "TXD[0]"),	/* V20 */ | 
 | 	/* Row W */ | 
 | 	PINCTRL_PIN(312, "P[12]"),	/* W1 */ | 
 | 	PINCTRL_PIN(313, "P[9]"),	/* W2 */ | 
 | 	PINCTRL_PIN(314, "DD[0]"),	/* W3 */ | 
 | 	PINCTRL_PIN(315, "P[5]"),	/* W4 */ | 
 | 	PINCTRL_PIN(316, "P[3]"),	/* W5 */ | 
 | 	PINCTRL_PIN(317, "DA[7]"),	/* W6 */ | 
 | 	PINCTRL_PIN(318, "DA[5]"),	/* W7 */ | 
 | 	PINCTRL_PIN(319, "AD[11]"),	/* W8 */ | 
 | 	PINCTRL_PIN(320, "AD[9]"),	/* W9 */ | 
 | 	PINCTRL_PIN(321, "IDECS1N"),	/* W10 */ | 
 | 	PINCTRL_PIN(322, "IDEDA[1]"),	/* W11 */ | 
 | 	PINCTRL_PIN(323, "TCK"),	/* W12 */ | 
 | 	PINCTRL_PIN(324, "TMS"),	/* W13 */ | 
 | 	PINCTRL_PIN(325, "EECLK"),	/* W14 */ | 
 | 	PINCTRL_PIN(326, "SCLK1"),	/* W15 */ | 
 | 	PINCTRL_PIN(327, "GRLED"),	/* W16 */ | 
 | 	PINCTRL_PIN(328, "INT[3]"),	/* W17 */ | 
 | 	PINCTRL_PIN(329, "SLA[1]"),	/* W18 */ | 
 | 	PINCTRL_PIN(330, "SLA[0]"),	/* W19 */ | 
 | 	PINCTRL_PIN(331, "RXD[2]"),	/* W20 */ | 
 | 	/* Row Y */ | 
 | 	PINCTRL_PIN(332, "HSYNC"),	/* Y1 */ | 
 | 	PINCTRL_PIN(333, "DD[1]"),	/* Y2 */ | 
 | 	PINCTRL_PIN(334, "DD[12]"),	/* Y3 */ | 
 | 	PINCTRL_PIN(335, "P[2]"),	/* Y4 */ | 
 | 	PINCTRL_PIN(336, "AD[15]"),	/* Y5 */ | 
 | 	PINCTRL_PIN(337, "DA[6]"),	/* Y6 */ | 
 | 	PINCTRL_PIN(338, "DA[4]"),	/* Y7 */ | 
 | 	PINCTRL_PIN(339, "AD[10]"),	/* Y8 */ | 
 | 	PINCTRL_PIN(340, "DA[1]"),	/* Y9 */ | 
 | 	PINCTRL_PIN(341, "AD[8]"),	/* Y10 */ | 
 | 	PINCTRL_PIN(342, "IDEDA[0]"),	/* Y11 */ | 
 | 	PINCTRL_PIN(343, "DTRN"),	/* Y12 */ | 
 | 	PINCTRL_PIN(344, "TDO"),	/* Y13 */ | 
 | 	PINCTRL_PIN(345, "BOOT[0]"),	/* Y14 */ | 
 | 	PINCTRL_PIN(346, "EEDAT"),	/* Y15 */ | 
 | 	PINCTRL_PIN(347, "ASDO"),	/* Y16 */ | 
 | 	PINCTRL_PIN(348, "SFRM1"),	/* Y17 */ | 
 | 	PINCTRL_PIN(349, "RDLED"),	/* Y18 */ | 
 | 	PINCTRL_PIN(350, "USBP[1]"),	/* Y19 */ | 
 | 	PINCTRL_PIN(351, "ABITCLK"),	/* Y20 */ | 
 | }; | 
 |  | 
 | static const unsigned int ssp_ep9312_pins[] = { | 
 | 	285, 306, 326, 348, | 
 | }; | 
 |  | 
 | static const unsigned int ac97_ep9312_pins[] = { | 
 | 	77, 95, 305, 347, 351, | 
 | }; | 
 |  | 
 | static const unsigned int pwm_ep9312_pins[] = { 74 }; | 
 |  | 
 | static const unsigned int gpio1a_ep9312_pins[] = { 74 }; | 
 |  | 
 | static const unsigned int gpio2a_9312_pins[] = { | 
 | 	234, 235, 248, 249, 251, 270, 271, 291, | 
 | }; | 
 |  | 
 | static const unsigned int gpio3a_9312_pins[] = { | 
 | 	186, 187, 202, 203, 204, 221, 222, 223, | 
 | }; | 
 |  | 
 | static const unsigned int keypad_9312_pins[] = { | 
 | 	186, 187, 202, 203, 204, 221, 222, 223, | 
 | 	234, 235, 248, 249, 251, 270, 271, 291, | 
 | }; | 
 |  | 
 | static const unsigned int gpio4a_9312_pins[] = { | 
 | 	78, 301, 302, 321, 322, 342, | 
 | }; | 
 |  | 
 | static const unsigned int gpio6a_9312_pins[] = { | 
 | 	257, 295, 296, 334, | 
 | }; | 
 |  | 
 | static const unsigned int gpio7a_9312_pins[] = { | 
 | 	4, 24, 25, 45, 46, 66, 314, 333, | 
 | }; | 
 |  | 
 | static const unsigned int ide_9312_pins[] = { | 
 | 	78, 301, 302, 321, 322, 342, 257, 295, | 
 | 	296, 334, 4, 24, 25, 45, 46, 66, | 
 | 	314, 333, | 
 | }; | 
 |  | 
 | static const struct ep93xx_pin_group ep9312_pin_groups[] = { | 
 | 	PMX_GROUP("ssp", ssp_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 0), | 
 | 	PMX_GROUP("i2s_on_ssp", ssp_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, | 
 | 						EP93XX_SYSCON_DEVCFG_I2SONSSP), | 
 | 	PMX_GROUP("pwm1", pwm_ep9312_pins, EP93XX_SYSCON_DEVCFG_PONG, | 
 | 						EP93XX_SYSCON_DEVCFG_PONG), | 
 | 	PMX_GROUP("gpio1agrp", gpio1a_ep9312_pins, EP93XX_SYSCON_DEVCFG_PONG, 0), | 
 | 	PMX_GROUP("ac97", ac97_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 0), | 
 | 	PMX_GROUP("i2s_on_ac97", ac97_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, | 
 | 						EP93XX_SYSCON_DEVCFG_I2SONAC97), | 
 | 	PMX_GROUP("rasteronsdram0grp", raster_on_sdram0_pins, EP93XX_SYSCON_DEVCFG_RASONP3, 0), | 
 | 	PMX_GROUP("rasteronsdram3grp", raster_on_sdram3_pins, EP93XX_SYSCON_DEVCFG_RASONP3, | 
 | 							EP93XX_SYSCON_DEVCFG_RASONP3), | 
 | 	PMX_GROUP("gpio2agrp", gpio2a_9312_pins, EP93XX_SYSCON_DEVCFG_GONK, | 
 | 						EP93XX_SYSCON_DEVCFG_GONK), | 
 | 	PMX_GROUP("gpio3agrp", gpio3a_9312_pins, EP93XX_SYSCON_DEVCFG_GONK, | 
 | 						EP93XX_SYSCON_DEVCFG_GONK), | 
 | 	PMX_GROUP("keypadgrp", keypad_9312_pins, EP93XX_SYSCON_DEVCFG_GONK, 0), | 
 | 	PMX_GROUP("gpio4agrp", gpio4a_9312_pins, EP93XX_SYSCON_DEVCFG_EONIDE, | 
 | 						EP93XX_SYSCON_DEVCFG_EONIDE), | 
 | 	PMX_GROUP("gpio6agrp", gpio6a_9312_pins, EP93XX_SYSCON_DEVCFG_GONIDE, | 
 | 						EP93XX_SYSCON_DEVCFG_GONIDE), | 
 | 	PMX_GROUP("gpio7agrp", gpio7a_9312_pins, EP93XX_SYSCON_DEVCFG_HONIDE, | 
 | 						EP93XX_SYSCON_DEVCFG_HONIDE), | 
 | 	PMX_GROUP("idegrp", ide_9312_pins, EP93XX_SYSCON_DEVCFG_EONIDE | | 
 | 				EP93XX_SYSCON_DEVCFG_GONIDE | EP93XX_SYSCON_DEVCFG_HONIDE, 0), | 
 | }; | 
 |  | 
 | static int ep93xx_get_groups_count(struct pinctrl_dev *pctldev) | 
 | { | 
 | 	struct ep93xx_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); | 
 |  | 
 | 	switch (pmx->model) { | 
 | 	case EP93XX_9301_PINCTRL: | 
 | 		return ARRAY_SIZE(ep9301_pin_groups); | 
 | 	case EP93XX_9307_PINCTRL: | 
 | 		return ARRAY_SIZE(ep9307_pin_groups); | 
 | 	case EP93XX_9312_PINCTRL: | 
 | 		return ARRAY_SIZE(ep9312_pin_groups); | 
 | 	default: | 
 | 		return 0; | 
 | 	} | 
 | } | 
 |  | 
 | static const char *ep93xx_get_group_name(struct pinctrl_dev *pctldev, | 
 | 					 unsigned int selector) | 
 | { | 
 | 	struct ep93xx_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); | 
 |  | 
 | 	switch (pmx->model) { | 
 | 	case EP93XX_9301_PINCTRL: | 
 | 		return ep9301_pin_groups[selector].grp.name; | 
 | 	case EP93XX_9307_PINCTRL: | 
 | 		return ep9307_pin_groups[selector].grp.name; | 
 | 	case EP93XX_9312_PINCTRL: | 
 | 		return ep9312_pin_groups[selector].grp.name; | 
 | 	default: | 
 | 		return NULL; | 
 | 	} | 
 | } | 
 |  | 
 | static int ep93xx_get_group_pins(struct pinctrl_dev *pctldev, | 
 | 				 unsigned int selector, | 
 | 				 const unsigned int **pins, | 
 | 				 unsigned int *num_pins) | 
 | { | 
 | 	struct ep93xx_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); | 
 |  | 
 | 	switch (pmx->model) { | 
 | 	case EP93XX_9301_PINCTRL: | 
 | 		*pins = ep9301_pin_groups[selector].grp.pins; | 
 | 		*num_pins = ep9301_pin_groups[selector].grp.npins; | 
 | 		break; | 
 | 	case EP93XX_9307_PINCTRL: | 
 | 		*pins = ep9307_pin_groups[selector].grp.pins; | 
 | 		*num_pins = ep9307_pin_groups[selector].grp.npins; | 
 | 		break; | 
 | 	case EP93XX_9312_PINCTRL: | 
 | 		*pins = ep9312_pin_groups[selector].grp.pins; | 
 | 		*num_pins = ep9312_pin_groups[selector].grp.npins; | 
 | 		break; | 
 | 	default: | 
 | 		return -EINVAL; | 
 | 	} | 
 |  | 
 | 	return 0; | 
 | } | 
 |  | 
 | static const struct pinctrl_ops ep93xx_pctrl_ops = { | 
 | 	.get_groups_count = ep93xx_get_groups_count, | 
 | 	.get_group_name = ep93xx_get_group_name, | 
 | 	.get_group_pins = ep93xx_get_group_pins, | 
 | 	.dt_node_to_map = pinconf_generic_dt_node_to_map_all, | 
 | 	.dt_free_map = pinconf_generic_dt_free_map, | 
 | }; | 
 |  | 
 | static const char * const spigrps[] = { "ssp" }; | 
 | static const char * const ac97grps[] = { "ac97" }; | 
 | static const char * const i2sgrps[] = { "i2s_on_ssp", "i2s_on_ac97" }; | 
 | static const char * const pwm1grps[] = { "pwm1" }; | 
 | static const char * const gpiogrps[] = { "gpio1agrp", "gpio2agrp", "gpio3agrp", | 
 | 					"gpio4agrp", "gpio6agrp", "gpio7agrp" }; | 
 | static const char * const rastergrps[] = { "rasteronsdram0grp", "rasteronsdram3grp"}; | 
 | static const char * const keypadgrps[] = { "keypadgrp"}; | 
 | static const char * const idegrps[] = { "idegrp"}; | 
 |  | 
 | static const struct pinfunction ep93xx_pmx_functions[] = { | 
 | 	PINCTRL_PINFUNCTION("spi", spigrps, ARRAY_SIZE(spigrps)), | 
 | 	PINCTRL_PINFUNCTION("ac97", ac97grps, ARRAY_SIZE(ac97grps)), | 
 | 	PINCTRL_PINFUNCTION("i2s", i2sgrps, ARRAY_SIZE(i2sgrps)), | 
 | 	PINCTRL_PINFUNCTION("pwm", pwm1grps, ARRAY_SIZE(pwm1grps)), | 
 | 	PINCTRL_PINFUNCTION("keypad", keypadgrps, ARRAY_SIZE(keypadgrps)), | 
 | 	PINCTRL_PINFUNCTION("pata", idegrps, ARRAY_SIZE(idegrps)), | 
 | 	PINCTRL_PINFUNCTION("lcd", rastergrps, ARRAY_SIZE(rastergrps)), | 
 | 	PINCTRL_PINFUNCTION("gpio", gpiogrps, ARRAY_SIZE(gpiogrps)), | 
 | }; | 
 |  | 
 | static int ep93xx_pmx_set_mux(struct pinctrl_dev *pctldev, | 
 | 			      unsigned int selector, | 
 | 			      unsigned int group) | 
 | { | 
 | 	struct ep93xx_pmx *pmx; | 
 | 	const struct pinfunction *func; | 
 | 	const struct ep93xx_pin_group *grp; | 
 | 	u32 before, after, expected; | 
 | 	unsigned long tmp; | 
 | 	int i; | 
 |  | 
 | 	pmx = pinctrl_dev_get_drvdata(pctldev); | 
 |  | 
 | 	switch (pmx->model) { | 
 | 	case EP93XX_9301_PINCTRL: | 
 | 		grp = &ep9301_pin_groups[group]; | 
 | 		break; | 
 | 	case EP93XX_9307_PINCTRL: | 
 | 		grp = &ep9307_pin_groups[group]; | 
 | 		break; | 
 | 	case EP93XX_9312_PINCTRL: | 
 | 		grp = &ep9312_pin_groups[group]; | 
 | 		break; | 
 | 	default: | 
 | 		dev_err(pmx->dev, "invalid SoC type\n"); | 
 | 		return -ENODEV; | 
 | 	} | 
 |  | 
 | 	func = &ep93xx_pmx_functions[selector]; | 
 |  | 
 | 	dev_dbg(pmx->dev, | 
 | 		"ACTIVATE function \"%s\" with group \"%s\" (mask=0x%x, value=0x%x)\n", | 
 | 		func->name, grp->grp.name, grp->mask, grp->value); | 
 |  | 
 | 	regmap_read(pmx->map, EP93XX_SYSCON_DEVCFG, &before); | 
 | 	ep93xx_pinctrl_update_bits(pmx, EP93XX_SYSCON_DEVCFG, | 
 | 				   grp->mask, grp->value); | 
 | 	regmap_read(pmx->map, EP93XX_SYSCON_DEVCFG, &after); | 
 |  | 
 | 	dev_dbg(pmx->dev, "before=0x%x, after=0x%x, mask=0x%lx\n", | 
 | 		before, after, PADS_MASK); | 
 |  | 
 | 	/* Which bits changed */ | 
 | 	before &= PADS_MASK; | 
 | 	after &= PADS_MASK; | 
 | 	expected = before & ~grp->mask; | 
 | 	expected |= grp->value; | 
 | 	expected &= PADS_MASK; | 
 |  | 
 | 	/* Print changed states */ | 
 | 	tmp = expected ^ after; | 
 | 	for_each_set_bit(i, &tmp, PADS_MAXBIT) { | 
 | 		bool enabled = expected & BIT(i); | 
 |  | 
 | 		dev_err(pmx->dev, | 
 | 			    "pin group %s could not be %s: probably a hardware limitation\n", | 
 | 			    ep93xx_padgroups[i], str_enabled_disabled(enabled)); | 
 | 		dev_err(pmx->dev, | 
 | 				"DeviceCfg before: %08x, after %08x, expected %08x\n", | 
 | 				before, after, expected); | 
 | 	} | 
 |  | 
 | 	return tmp ? -EINVAL : 0; | 
 | }; | 
 |  | 
 | static int ep93xx_pmx_get_funcs_count(struct pinctrl_dev *pctldev) | 
 | { | 
 | 	return ARRAY_SIZE(ep93xx_pmx_functions); | 
 | } | 
 |  | 
 | static const char *ep93xx_pmx_get_func_name(struct pinctrl_dev *pctldev, | 
 | 					    unsigned int selector) | 
 | { | 
 | 	return ep93xx_pmx_functions[selector].name; | 
 | } | 
 |  | 
 | static int ep93xx_pmx_get_groups(struct pinctrl_dev *pctldev, | 
 | 				 unsigned int selector, | 
 | 				 const char * const **groups, | 
 | 				 unsigned int * const num_groups) | 
 | { | 
 | 	*groups = ep93xx_pmx_functions[selector].groups; | 
 | 	*num_groups = ep93xx_pmx_functions[selector].ngroups; | 
 | 	return 0; | 
 | } | 
 |  | 
 | static const struct pinmux_ops ep93xx_pmx_ops = { | 
 | 	.get_functions_count = ep93xx_pmx_get_funcs_count, | 
 | 	.get_function_name = ep93xx_pmx_get_func_name, | 
 | 	.get_function_groups = ep93xx_pmx_get_groups, | 
 | 	.set_mux = ep93xx_pmx_set_mux, | 
 | }; | 
 |  | 
 | static struct pinctrl_desc ep93xx_pmx_desc = { | 
 | 	.name = DRIVER_NAME, | 
 | 	.pctlops = &ep93xx_pctrl_ops, | 
 | 	.pmxops = &ep93xx_pmx_ops, | 
 | 	.owner = THIS_MODULE, | 
 | }; | 
 |  | 
 | static int ep93xx_pmx_probe(struct auxiliary_device *adev, | 
 | 			    const struct auxiliary_device_id *id) | 
 | { | 
 | 	struct ep93xx_regmap_adev *rdev = to_ep93xx_regmap_adev(adev); | 
 | 	struct device *dev = &adev->dev; | 
 | 	struct ep93xx_pmx *pmx; | 
 |  | 
 | 	/* Create state holders etc for this driver */ | 
 | 	pmx = devm_kzalloc(dev, sizeof(*pmx), GFP_KERNEL); | 
 | 	if (!pmx) | 
 | 		return -ENOMEM; | 
 |  | 
 | 	pmx->dev = dev; | 
 | 	pmx->map = rdev->map; | 
 | 	pmx->aux_dev = rdev; | 
 | 	pmx->model = (enum ep93xx_pinctrl_model)(uintptr_t)id->driver_data; | 
 | 	switch (pmx->model) { | 
 | 	case EP93XX_9301_PINCTRL: | 
 | 		ep93xx_pmx_desc.pins = ep9301_pins; | 
 | 		ep93xx_pmx_desc.npins = ARRAY_SIZE(ep9301_pins); | 
 | 		dev_info(dev, "detected 9301/9302 chip variant\n"); | 
 | 		break; | 
 | 	case EP93XX_9307_PINCTRL: | 
 | 		ep93xx_pmx_desc.pins = ep9307_pins; | 
 | 		ep93xx_pmx_desc.npins = ARRAY_SIZE(ep9307_pins); | 
 | 		dev_info(dev, "detected 9307 chip variant\n"); | 
 | 		break; | 
 | 	case EP93XX_9312_PINCTRL: | 
 | 		ep93xx_pmx_desc.pins = ep9312_pins; | 
 | 		ep93xx_pmx_desc.npins = ARRAY_SIZE(ep9312_pins); | 
 | 		dev_info(dev, "detected 9312/9315 chip variant\n"); | 
 | 		break; | 
 | 	default: | 
 | 		return dev_err_probe(dev, -EINVAL, "unknown pin control model: %u\n", pmx->model); | 
 | 	} | 
 |  | 
 | 	/* using parent of_node to match in get_pinctrl_dev_from_of_node() */ | 
 | 	device_set_node(dev, dev_fwnode(adev->dev.parent)); | 
 | 	pmx->pctl = devm_pinctrl_register(dev, &ep93xx_pmx_desc, pmx); | 
 | 	if (IS_ERR(pmx->pctl)) | 
 | 		return dev_err_probe(dev, PTR_ERR(pmx->pctl), "could not register pinmux driver\n"); | 
 |  | 
 | 	return 0; | 
 | }; | 
 |  | 
 | static const struct auxiliary_device_id ep93xx_pinctrl_ids[] = { | 
 | 	{ | 
 | 		.name = "soc_ep93xx.pinctrl-ep9301", | 
 | 		.driver_data = (kernel_ulong_t)EP93XX_9301_PINCTRL, | 
 | 	}, | 
 | 	{ | 
 | 		.name = "soc_ep93xx.pinctrl-ep9307", | 
 | 		.driver_data = (kernel_ulong_t)EP93XX_9307_PINCTRL, | 
 | 	}, | 
 | 	{ | 
 | 		.name = "soc_ep93xx.pinctrl-ep9312", | 
 | 		.driver_data = (kernel_ulong_t)EP93XX_9312_PINCTRL, | 
 | 	}, | 
 | 	{ /* sentinel */ } | 
 | }; | 
 | MODULE_DEVICE_TABLE(auxiliary, ep93xx_pinctrl_ids); | 
 |  | 
 | static struct auxiliary_driver ep93xx_pmx_driver = { | 
 | 	.probe		= ep93xx_pmx_probe, | 
 | 	.id_table	= ep93xx_pinctrl_ids, | 
 | }; | 
 | module_auxiliary_driver(ep93xx_pmx_driver); |