Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pinctrl: add a Cirrus ep93xx SoC pin controller

Add a pin control (only multiplexing) driver for ep93xx SoC so
we can fully convert ep93xx to device tree.

This driver is capable of muxing ep9301/ep9302/ep9307/ep9312/ep9315
variants, this is chosen based on "compatible" in device tree.

Co-developed-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
Signed-off-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
Signed-off-by: Nikita Shubin <nikita.shubin@maquefel.me>
Tested-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

authored by

Nikita Shubin and committed by
Arnd Bergmann
035f9007 8a6b7e2b

+1442
+7
drivers/pinctrl/Kconfig
··· 194 194 select PINMUX 195 195 select GENERIC_PINCONF 196 196 197 + config PINCTRL_EP93XX 198 + bool 199 + depends on ARCH_EP93XX || COMPILE_TEST 200 + select PINMUX 201 + select GENERIC_PINCONF 202 + select MFD_SYSCON 203 + 197 204 config PINCTRL_EQUILIBRIUM 198 205 tristate "Generic pinctrl and GPIO driver for Intel Lightning Mountain SoC" 199 206 depends on OF && HAS_IOMEM
+1
drivers/pinctrl/Makefile
··· 23 23 obj-$(CONFIG_PINCTRL_DA9062) += pinctrl-da9062.o 24 24 obj-$(CONFIG_PINCTRL_DIGICOLOR) += pinctrl-digicolor.o 25 25 obj-$(CONFIG_PINCTRL_EQUILIBRIUM) += pinctrl-equilibrium.o 26 + obj-$(CONFIG_PINCTRL_EP93XX) += pinctrl-ep93xx.o 26 27 obj-$(CONFIG_PINCTRL_GEMINI) += pinctrl-gemini.o 27 28 obj-$(CONFIG_PINCTRL_INGENIC) += pinctrl-ingenic.o 28 29 obj-$(CONFIG_PINCTRL_K210) += pinctrl-k210.o
+1434
drivers/pinctrl/pinctrl-ep93xx.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Driver for the EP93xx pin controller 4 + * based on linux/drivers/pinctrl/pinmux-gemini.c 5 + * 6 + * Copyright (C) 2022 Nikita Shubin <nikita.shubin@maquefel.me> 7 + * 8 + * This is a group-only pin controller. 9 + */ 10 + #include <linux/array_size.h> 11 + #include <linux/err.h> 12 + #include <linux/init.h> 13 + #include <linux/io.h> 14 + #include <linux/mfd/syscon.h> 15 + #include <linux/property.h> 16 + #include <linux/regmap.h> 17 + #include <linux/seq_file.h> 18 + #include <linux/slab.h> 19 + 20 + #include <linux/soc/cirrus/ep93xx.h> 21 + 22 + #include <linux/pinctrl/machine.h> 23 + #include <linux/pinctrl/pinconf-generic.h> 24 + #include <linux/pinctrl/pinconf.h> 25 + #include <linux/pinctrl/pinctrl.h> 26 + #include <linux/pinctrl/pinmux.h> 27 + 28 + #include "pinctrl-utils.h" 29 + 30 + #define DRIVER_NAME "pinctrl-ep93xx" 31 + 32 + enum ep93xx_pinctrl_model { 33 + EP93XX_9301_PINCTRL, 34 + EP93XX_9307_PINCTRL, 35 + EP93XX_9312_PINCTRL, 36 + }; 37 + 38 + struct 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 + 46 + static 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 + 54 + struct ep93xx_pin_group { 55 + struct pingroup grp; 56 + u32 mask; 57 + u32 value; 58 + }; 59 + 60 + #define PMX_GROUP(_name, _pins, _mask, _value) \ 61 + { \ 62 + .grp = PINCTRL_PINGROUP(_name, _pins, ARRAY_SIZE(_pins)), \ 63 + .mask = _mask, \ 64 + .value = _value, \ 65 + } 66 + 67 + #define EP93XX_SYSCON_DEVCFG 0x80 68 + 69 + /* 70 + * There are several system configuration options selectable by the DeviceCfg and SysCfg 71 + * registers. These registers provide the selection of several pin multiplexing options and also 72 + * provide software access to the system reset configuration options. Please refer to the 73 + * descriptions of the registers, “DeviceCfg” on page 5-25 and “SysCfg” on page 5-34, for a 74 + * detailed explanation. 75 + */ 76 + #define EP93XX_SYSCON_DEVCFG_D1ONG BIT(30) 77 + #define EP93XX_SYSCON_DEVCFG_D0ONG BIT(29) 78 + #define EP93XX_SYSCON_DEVCFG_IONU2 BIT(28) 79 + #define EP93XX_SYSCON_DEVCFG_GONK BIT(27) 80 + #define EP93XX_SYSCON_DEVCFG_TONG BIT(26) 81 + #define EP93XX_SYSCON_DEVCFG_MONG BIT(25) 82 + #define EP93XX_SYSCON_DEVCFG_A2ONG BIT(22) 83 + #define EP93XX_SYSCON_DEVCFG_A1ONG BIT(21) 84 + #define EP93XX_SYSCON_DEVCFG_HONIDE BIT(11) 85 + #define EP93XX_SYSCON_DEVCFG_GONIDE BIT(10) 86 + #define EP93XX_SYSCON_DEVCFG_PONG BIT(9) 87 + #define EP93XX_SYSCON_DEVCFG_EONIDE BIT(8) 88 + #define EP93XX_SYSCON_DEVCFG_I2SONSSP BIT(7) 89 + #define EP93XX_SYSCON_DEVCFG_I2SONAC97 BIT(6) 90 + #define EP93XX_SYSCON_DEVCFG_RASONP3 BIT(4) 91 + 92 + #define PADS_MASK (GENMASK(30, 25) | BIT(22) | BIT(21) | GENMASK(11, 6) | BIT(4)) 93 + #define PADS_MAXBIT 30 94 + 95 + /* Ordered by bit index */ 96 + static 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 */ 119 + static const struct pinctrl_pin_desc ep9301_pins[] = { 120 + PINCTRL_PIN(1, "CSn[7]"), 121 + PINCTRL_PIN(2, "CSn[6]"), 122 + PINCTRL_PIN(3, "CSn[3]"), 123 + PINCTRL_PIN(4, "CSn[2]"), 124 + PINCTRL_PIN(5, "CSn[1]"), 125 + PINCTRL_PIN(6, "AD[25]"), 126 + PINCTRL_PIN(7, "vdd_ring"), 127 + PINCTRL_PIN(8, "gnd_ring"), 128 + PINCTRL_PIN(9, "AD[24]"), 129 + PINCTRL_PIN(10, "SDCLK"), 130 + PINCTRL_PIN(11, "AD[23]"), 131 + PINCTRL_PIN(12, "vdd_core"), 132 + PINCTRL_PIN(13, "gnd_core"), 133 + PINCTRL_PIN(14, "SDWEn"), 134 + PINCTRL_PIN(15, "SDCSn[3]"), 135 + PINCTRL_PIN(16, "SDCSn[2]"), 136 + PINCTRL_PIN(17, "SDCSn[1]"), 137 + PINCTRL_PIN(18, "SDCSn[0]"), 138 + PINCTRL_PIN(19, "vdd_ring"), 139 + PINCTRL_PIN(20, "gnd_ring"), 140 + PINCTRL_PIN(21, "RASn"), 141 + PINCTRL_PIN(22, "CASn"), 142 + PINCTRL_PIN(23, "DQMn[1]"), 143 + PINCTRL_PIN(24, "DQMn[0]"), 144 + PINCTRL_PIN(25, "AD[22]"), 145 + PINCTRL_PIN(26, "AD[21]"), 146 + PINCTRL_PIN(27, "vdd_ring"), 147 + PINCTRL_PIN(28, "gnd_ring"), 148 + PINCTRL_PIN(29, "DA[15]"), 149 + PINCTRL_PIN(30, "AD[7]"), 150 + PINCTRL_PIN(31, "DA[14]"), 151 + PINCTRL_PIN(32, "AD[6]"), 152 + PINCTRL_PIN(33, "DA[13]"), 153 + PINCTRL_PIN(34, "vdd_core"), 154 + PINCTRL_PIN(35, "gnd_core"), 155 + PINCTRL_PIN(36, "AD[5]"), 156 + PINCTRL_PIN(37, "DA[12]"), 157 + PINCTRL_PIN(38, "AD[4]"), 158 + PINCTRL_PIN(39, "DA[11]"), 159 + PINCTRL_PIN(40, "AD[3]"), 160 + PINCTRL_PIN(41, "vdd_ring"), 161 + PINCTRL_PIN(42, "gnd_ring"), 162 + PINCTRL_PIN(43, "DA[10]"), 163 + PINCTRL_PIN(44, "AD[2]"), 164 + PINCTRL_PIN(45, "DA[9]"), 165 + PINCTRL_PIN(46, "AD[1]"), 166 + PINCTRL_PIN(47, "DA[8]"), 167 + PINCTRL_PIN(48, "AD[0]"), 168 + PINCTRL_PIN(49, "vdd_ring"), 169 + PINCTRL_PIN(50, "gnd_ring"), 170 + PINCTRL_PIN(51, "NC"), 171 + PINCTRL_PIN(52, "NC"), 172 + PINCTRL_PIN(53, "vdd_ring"), 173 + PINCTRL_PIN(54, "gnd_ring"), 174 + PINCTRL_PIN(55, "AD[15]"), 175 + PINCTRL_PIN(56, "DA[7]"), 176 + PINCTRL_PIN(57, "vdd_core"), 177 + PINCTRL_PIN(58, "gnd_core"), 178 + PINCTRL_PIN(59, "AD[14]"), 179 + PINCTRL_PIN(60, "DA[6]"), 180 + PINCTRL_PIN(61, "AD[13]"), 181 + PINCTRL_PIN(62, "DA[5]"), 182 + PINCTRL_PIN(63, "AD[12]"), 183 + PINCTRL_PIN(64, "DA[4]"), 184 + PINCTRL_PIN(65, "AD[11]"), 185 + PINCTRL_PIN(66, "vdd_ring"), 186 + PINCTRL_PIN(67, "gnd_ring"), 187 + PINCTRL_PIN(68, "DA[3]"), 188 + PINCTRL_PIN(69, "AD[10]"), 189 + PINCTRL_PIN(70, "DA[2]"), 190 + PINCTRL_PIN(71, "AD[9]"), 191 + PINCTRL_PIN(72, "DA[1]"), 192 + PINCTRL_PIN(73, "AD[8]"), 193 + PINCTRL_PIN(74, "DA[0]"), 194 + PINCTRL_PIN(75, "DSRn"), 195 + PINCTRL_PIN(76, "DTRn"), 196 + PINCTRL_PIN(77, "TCK"), 197 + PINCTRL_PIN(78, "TDI"), 198 + PINCTRL_PIN(79, "TDO"), 199 + PINCTRL_PIN(80, "TMS"), 200 + PINCTRL_PIN(81, "vdd_ring"), 201 + PINCTRL_PIN(82, "gnd_ring"), 202 + PINCTRL_PIN(83, "BOOT[1]"), 203 + PINCTRL_PIN(84, "BOOT[0]"), 204 + PINCTRL_PIN(85, "gnd_ring"), 205 + PINCTRL_PIN(86, "NC"), 206 + PINCTRL_PIN(87, "EECLK"), 207 + PINCTRL_PIN(88, "EEDAT"), 208 + PINCTRL_PIN(89, "ASYNC"), 209 + PINCTRL_PIN(90, "vdd_core"), 210 + PINCTRL_PIN(91, "gnd_core"), 211 + PINCTRL_PIN(92, "ASDO"), 212 + PINCTRL_PIN(93, "SCLK1"), 213 + PINCTRL_PIN(94, "SFRM1"), 214 + PINCTRL_PIN(95, "SSPRX1"), 215 + PINCTRL_PIN(96, "SSPTX1"), 216 + PINCTRL_PIN(97, "GRLED"), 217 + PINCTRL_PIN(98, "RDLED"), 218 + PINCTRL_PIN(99, "vdd_ring"), 219 + PINCTRL_PIN(100, "gnd_ring"), 220 + PINCTRL_PIN(101, "INT[3]"), 221 + PINCTRL_PIN(102, "INT[1]"), 222 + PINCTRL_PIN(103, "INT[0]"), 223 + PINCTRL_PIN(104, "RTSn"), 224 + PINCTRL_PIN(105, "USBm[0]"), 225 + PINCTRL_PIN(106, "USBp[0]"), 226 + PINCTRL_PIN(107, "ABITCLK"), 227 + PINCTRL_PIN(108, "CTSn"), 228 + PINCTRL_PIN(109, "RXD[0]"), 229 + PINCTRL_PIN(110, "RXD[1]"), 230 + PINCTRL_PIN(111, "vdd_ring"), 231 + PINCTRL_PIN(112, "gnd_ring"), 232 + PINCTRL_PIN(113, "TXD[0]"), 233 + PINCTRL_PIN(114, "TXD[1]"), 234 + PINCTRL_PIN(115, "CGPIO[0]"), 235 + PINCTRL_PIN(116, "gnd_core"), 236 + PINCTRL_PIN(117, "PLL_GND"), 237 + PINCTRL_PIN(118, "XTALI"), 238 + PINCTRL_PIN(119, "XTALO"), 239 + PINCTRL_PIN(120, "PLL_VDD"), 240 + PINCTRL_PIN(121, "vdd_core"), 241 + PINCTRL_PIN(122, "gnd_ring"), 242 + PINCTRL_PIN(123, "vdd_ring"), 243 + PINCTRL_PIN(124, "RSTOn"), 244 + PINCTRL_PIN(125, "PRSTn"), 245 + PINCTRL_PIN(126, "CSn[0]"), 246 + PINCTRL_PIN(127, "gnd_core"), 247 + PINCTRL_PIN(128, "vdd_core"), 248 + PINCTRL_PIN(129, "gnd_ring"), 249 + PINCTRL_PIN(130, "vdd_ring"), 250 + PINCTRL_PIN(131, "ADC[4]"), 251 + PINCTRL_PIN(132, "ADC[3]"), 252 + PINCTRL_PIN(133, "ADC[2]"), 253 + PINCTRL_PIN(134, "ADC[1]"), 254 + PINCTRL_PIN(135, "ADC[0]"), 255 + PINCTRL_PIN(136, "ADC_VDD"), 256 + PINCTRL_PIN(137, "RTCXTALI"), 257 + PINCTRL_PIN(138, "RTCXTALO"), 258 + PINCTRL_PIN(139, "ADC_GND"), 259 + PINCTRL_PIN(140, "EGPIO[11]"), 260 + PINCTRL_PIN(141, "EGPIO[10]"), 261 + PINCTRL_PIN(142, "EGPIO[9]"), 262 + PINCTRL_PIN(143, "EGPIO[8]"), 263 + PINCTRL_PIN(144, "EGPIO[7]"), 264 + PINCTRL_PIN(145, "EGPIO[6]"), 265 + PINCTRL_PIN(146, "EGPIO[5]"), 266 + PINCTRL_PIN(147, "EGPIO[4]"), 267 + PINCTRL_PIN(148, "EGPIO[3]"), 268 + PINCTRL_PIN(149, "gnd_ring"), 269 + PINCTRL_PIN(150, "vdd_ring"), 270 + PINCTRL_PIN(151, "EGPIO[2]"), 271 + PINCTRL_PIN(152, "EGPIO[1]"), 272 + PINCTRL_PIN(153, "EGPIO[0]"), 273 + PINCTRL_PIN(154, "ARSTn"), 274 + PINCTRL_PIN(155, "TRSTn"), 275 + PINCTRL_PIN(156, "ASDI"), 276 + PINCTRL_PIN(157, "USBm[2]"), 277 + PINCTRL_PIN(158, "USBp[2]"), 278 + PINCTRL_PIN(159, "WAITn"), 279 + PINCTRL_PIN(160, "EGPIO[15]"), 280 + PINCTRL_PIN(161, "gnd_ring"), 281 + PINCTRL_PIN(162, "vdd_ring"), 282 + PINCTRL_PIN(163, "EGPIO[14]"), 283 + PINCTRL_PIN(164, "EGPIO[13]"), 284 + PINCTRL_PIN(165, "EGPIO[12]"), 285 + PINCTRL_PIN(166, "gnd_core"), 286 + PINCTRL_PIN(167, "vdd_core"), 287 + PINCTRL_PIN(168, "FGPIO[3]"), 288 + PINCTRL_PIN(169, "FGPIO[2]"), 289 + PINCTRL_PIN(170, "FGPIO[1]"), 290 + PINCTRL_PIN(171, "gnd_ring"), 291 + PINCTRL_PIN(172, "vdd_ring"), 292 + PINCTRL_PIN(173, "CLD"), 293 + PINCTRL_PIN(174, "CRS"), 294 + PINCTRL_PIN(175, "TXERR"), 295 + PINCTRL_PIN(176, "TXEN"), 296 + PINCTRL_PIN(177, "MIITXD[0]"), 297 + PINCTRL_PIN(178, "MIITXD[1]"), 298 + PINCTRL_PIN(179, "MIITXD[2]"), 299 + PINCTRL_PIN(180, "MIITXD[3]"), 300 + PINCTRL_PIN(181, "TXCLK"), 301 + PINCTRL_PIN(182, "RXERR"), 302 + PINCTRL_PIN(183, "RXDVAL"), 303 + PINCTRL_PIN(184, "MIIRXD[0]"), 304 + PINCTRL_PIN(185, "MIIRXD[1]"), 305 + PINCTRL_PIN(186, "MIIRXD[2]"), 306 + PINCTRL_PIN(187, "gnd_ring"), 307 + PINCTRL_PIN(188, "vdd_ring"), 308 + PINCTRL_PIN(189, "MIIRXD[3]"), 309 + PINCTRL_PIN(190, "RXCLK"), 310 + PINCTRL_PIN(191, "MDIO"), 311 + PINCTRL_PIN(192, "MDC"), 312 + PINCTRL_PIN(193, "RDn"), 313 + PINCTRL_PIN(194, "WRn"), 314 + PINCTRL_PIN(195, "AD[16]"), 315 + PINCTRL_PIN(196, "AD[17]"), 316 + PINCTRL_PIN(197, "gnd_core"), 317 + PINCTRL_PIN(198, "vdd_core"), 318 + PINCTRL_PIN(199, "HGPIO[2]"), 319 + PINCTRL_PIN(200, "HGPIO[3]"), 320 + PINCTRL_PIN(201, "HGPIO[4]"), 321 + PINCTRL_PIN(202, "HGPIO[5]"), 322 + PINCTRL_PIN(203, "gnd_ring"), 323 + PINCTRL_PIN(204, "vdd_ring"), 324 + PINCTRL_PIN(205, "AD[18]"), 325 + PINCTRL_PIN(206, "AD[19]"), 326 + PINCTRL_PIN(207, "AD[20]"), 327 + PINCTRL_PIN(208, "SDCLKEN"), 328 + }; 329 + 330 + static const unsigned int ssp_ep9301_pins[] = { 331 + 93, 94, 95, 96, 332 + }; 333 + 334 + static const unsigned int ac97_ep9301_pins[] = { 335 + 89, 92, 107, 154, 156, 336 + }; 337 + 338 + /* 339 + * Note: The EP9307 processor has one PWM with one output, PWMOUT. 340 + * Note: The EP9301, EP9302, EP9312, and EP9315 processors each have two PWMs with 341 + * two outputs, PWMOUT and PWMO1. PWMO1 is an alternate function for EGPIO14. 342 + */ 343 + /* The GPIO14E (14) pin overlap with pwm1 */ 344 + static const unsigned int pwm_9301_pins[] = { 163 }; 345 + 346 + static const unsigned int gpio1a_9301_pins[] = { 163 }; 347 + 348 + /* ep9301/9302 have only 0 pin of GPIO C Port exposed */ 349 + static const unsigned int gpio2a_9301_pins[] = { 115 }; 350 + 351 + /* ep9301/9302 have only 4,5 pin of GPIO E Port exposed */ 352 + static const unsigned int gpio4a_9301_pins[] = { 97, 98 }; 353 + 354 + /* ep9301/9302 have only 4,5 pin of GPIO G Port exposed */ 355 + static const unsigned int gpio6a_9301_pins[] = { 87, 88 }; 356 + 357 + static const unsigned int gpio7a_9301_pins[] = { 199, 200, 201, 202 }; 358 + 359 + /* Groups for the ep9301/ep9302 SoC/package */ 360 + static const struct ep93xx_pin_group ep9301_pin_groups[] = { 361 + PMX_GROUP("ssp", ssp_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 0), 362 + PMX_GROUP("i2s_on_ssp", ssp_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 363 + EP93XX_SYSCON_DEVCFG_I2SONSSP), 364 + PMX_GROUP("ac97", ac97_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 0), 365 + PMX_GROUP("i2s_on_ac97", ac97_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 366 + EP93XX_SYSCON_DEVCFG_I2SONAC97), 367 + PMX_GROUP("pwm1", pwm_9301_pins, EP93XX_SYSCON_DEVCFG_PONG, EP93XX_SYSCON_DEVCFG_PONG), 368 + PMX_GROUP("gpio1agrp", gpio1a_9301_pins, EP93XX_SYSCON_DEVCFG_PONG, 0), 369 + PMX_GROUP("gpio2agrp", gpio2a_9301_pins, EP93XX_SYSCON_DEVCFG_GONK, 370 + EP93XX_SYSCON_DEVCFG_GONK), 371 + PMX_GROUP("gpio4agrp", gpio4a_9301_pins, EP93XX_SYSCON_DEVCFG_EONIDE, 372 + EP93XX_SYSCON_DEVCFG_EONIDE), 373 + PMX_GROUP("gpio6agrp", gpio6a_9301_pins, EP93XX_SYSCON_DEVCFG_GONIDE, 374 + EP93XX_SYSCON_DEVCFG_GONIDE), 375 + PMX_GROUP("gpio7agrp", gpio7a_9301_pins, EP93XX_SYSCON_DEVCFG_HONIDE, 376 + EP93XX_SYSCON_DEVCFG_HONIDE), 377 + }; 378 + 379 + static 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 + 671 + static const unsigned int ssp_ep9307_pins[] = { 672 + 233, 249, 266, 267, 673 + }; 674 + 675 + static 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 */ 680 + static const unsigned int raster_on_sdram0_pins[] = { 681 + }; 682 + 683 + static const unsigned int raster_on_sdram3_pins[] = { 684 + }; 685 + 686 + /* ROW[N] */ 687 + static const unsigned int gpio2a_9307_pins[] = { 688 + 165, 166, 181, 182, 183, 184, 185, 186, 689 + }; 690 + 691 + /* COL[N] */ 692 + static const unsigned int gpio3a_9307_pins[] = { 693 + 127, 139, 140, 142, 153, 155, 156, 157, 694 + }; 695 + 696 + static const unsigned int keypad_9307_pins[] = { 697 + 127, 139, 140, 142, 153, 155, 156, 157, 698 + 165, 166, 181, 182, 183, 184, 185, 186, 699 + }; 700 + 701 + /* ep9307 have only 4,5 pin of GPIO E Port exposed */ 702 + static const unsigned int gpio4a_9307_pins[] = { 216, 217 }; 703 + 704 + /* ep9307 have only 2 pin of GPIO G Port exposed */ 705 + static const unsigned int gpio6a_9307_pins[] = { 219 }; 706 + 707 + static const unsigned int gpio7a_9307_pins[] = { 7, 24, 41, 56, 57, 59 }; 708 + 709 + static const struct ep93xx_pin_group ep9307_pin_groups[] = { 710 + PMX_GROUP("ssp", ssp_ep9307_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 0), 711 + PMX_GROUP("i2s_on_ssp", ssp_ep9307_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 712 + EP93XX_SYSCON_DEVCFG_I2SONSSP), 713 + PMX_GROUP("ac97", ac97_ep9307_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 0), 714 + PMX_GROUP("i2s_on_ac97", ac97_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 715 + EP93XX_SYSCON_DEVCFG_I2SONAC97), 716 + PMX_GROUP("rasteronsdram0grp", raster_on_sdram0_pins, EP93XX_SYSCON_DEVCFG_RASONP3, 0), 717 + PMX_GROUP("rasteronsdram3grp", raster_on_sdram0_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 */ 733 + static 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 + 1108 + static const unsigned int ssp_ep9312_pins[] = { 1109 + 285, 306, 326, 348, 1110 + }; 1111 + 1112 + static const unsigned int ac97_ep9312_pins[] = { 1113 + 77, 95, 305, 347, 351, 1114 + }; 1115 + 1116 + static const unsigned int pwm_ep9312_pins[] = { 74 }; 1117 + 1118 + static const unsigned int gpio1a_ep9312_pins[] = { 74 }; 1119 + 1120 + static const unsigned int gpio2a_9312_pins[] = { 1121 + 234, 235, 248, 249, 251, 270, 271, 291, 1122 + }; 1123 + 1124 + static const unsigned int gpio3a_9312_pins[] = { 1125 + 186, 187, 202, 203, 204, 221, 222, 223, 1126 + }; 1127 + 1128 + static const unsigned int keypad_9312_pins[] = { 1129 + 186, 187, 202, 203, 204, 221, 222, 223, 1130 + 234, 235, 248, 249, 251, 270, 271, 291, 1131 + }; 1132 + 1133 + static const unsigned int gpio4a_9312_pins[] = { 1134 + 78, 301, 302, 321, 322, 342, 1135 + }; 1136 + 1137 + static const unsigned int gpio6a_9312_pins[] = { 1138 + 257, 295, 296, 334, 1139 + }; 1140 + 1141 + static const unsigned int gpio7a_9312_pins[] = { 1142 + 4, 24, 25, 45, 46, 66, 314, 333, 1143 + }; 1144 + 1145 + static const unsigned int ide_9312_pins[] = { 1146 + 78, 301, 302, 321, 322, 342, 257, 295, 1147 + 296, 334, 4, 24, 25, 45, 46, 66, 1148 + 314, 333, 1149 + }; 1150 + 1151 + static const struct ep93xx_pin_group ep9312_pin_groups[] = { 1152 + PMX_GROUP("ssp", ssp_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 0), 1153 + PMX_GROUP("i2s_on_ssp", ssp_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 1154 + EP93XX_SYSCON_DEVCFG_I2SONSSP), 1155 + PMX_GROUP("pwm1", pwm_ep9312_pins, EP93XX_SYSCON_DEVCFG_PONG, 1156 + EP93XX_SYSCON_DEVCFG_PONG), 1157 + PMX_GROUP("gpio1agrp", gpio1a_ep9312_pins, EP93XX_SYSCON_DEVCFG_PONG, 0), 1158 + PMX_GROUP("ac97", ac97_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 0), 1159 + PMX_GROUP("i2s_on_ac97", ac97_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 1160 + EP93XX_SYSCON_DEVCFG_I2SONAC97), 1161 + PMX_GROUP("rasteronsdram0grp", raster_on_sdram0_pins, EP93XX_SYSCON_DEVCFG_RASONP3, 0), 1162 + PMX_GROUP("rasteronsdram3grp", raster_on_sdram0_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 + 1179 + static 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 + 1195 + static 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 + 1212 + static int ep93xx_get_group_pins(struct pinctrl_dev *pctldev, 1213 + unsigned int selector, 1214 + const unsigned int **pins, 1215 + unsigned int *num_pins) 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 + 1239 + static const struct pinctrl_ops ep93xx_pctrl_ops = { 1240 + .get_groups_count = ep93xx_get_groups_count, 1241 + .get_group_name = ep93xx_get_group_name, 1242 + .get_group_pins = ep93xx_get_group_pins, 1243 + .dt_node_to_map = pinconf_generic_dt_node_to_map_all, 1244 + .dt_free_map = pinconf_generic_dt_free_map, 1245 + }; 1246 + 1247 + static const char * const spigrps[] = { "ssp" }; 1248 + static const char * const ac97grps[] = { "ac97" }; 1249 + static const char * const i2sgrps[] = { "i2s_on_ssp", "i2s_on_ac97" }; 1250 + static const char * const pwm1grps[] = { "pwm1" }; 1251 + static const char * const gpiogrps[] = { "gpio1agrp", "gpio2agrp", "gpio3agrp", 1252 + "gpio4agrp", "gpio6agrp", "gpio7agrp" }; 1253 + static const char * const rastergrps[] = { "rasteronsdram0grp", "rasteronsdram3grp"}; 1254 + static const char * const keypadgrps[] = { "keypadgrp"}; 1255 + static const char * const idegrps[] = { "idegrp"}; 1256 + 1257 + static const struct pinfunction ep93xx_pmx_functions[] = { 1258 + PINCTRL_PINFUNCTION("spi", spigrps, ARRAY_SIZE(spigrps)), 1259 + PINCTRL_PINFUNCTION("ac97", ac97grps, ARRAY_SIZE(ac97grps)), 1260 + PINCTRL_PINFUNCTION("i2s", i2sgrps, ARRAY_SIZE(i2sgrps)), 1261 + PINCTRL_PINFUNCTION("pwm", pwm1grps, ARRAY_SIZE(pwm1grps)), 1262 + PINCTRL_PINFUNCTION("keypad", keypadgrps, ARRAY_SIZE(keypadgrps)), 1263 + PINCTRL_PINFUNCTION("pata", idegrps, ARRAY_SIZE(idegrps)), 1264 + PINCTRL_PINFUNCTION("lcd", rastergrps, ARRAY_SIZE(rastergrps)), 1265 + PINCTRL_PINFUNCTION("gpio", gpiogrps, ARRAY_SIZE(gpiogrps)), 1266 + }; 1267 + 1268 + static 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 + 1333 + static int ep93xx_pmx_get_funcs_count(struct pinctrl_dev *pctldev) 1334 + { 1335 + return ARRAY_SIZE(ep93xx_pmx_functions); 1336 + } 1337 + 1338 + static 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 + 1344 + static int ep93xx_pmx_get_groups(struct pinctrl_dev *pctldev, 1345 + unsigned int selector, 1346 + const char * const **groups, 1347 + unsigned int * const num_groups) 1348 + { 1349 + *groups = ep93xx_pmx_functions[selector].groups; 1350 + *num_groups = ep93xx_pmx_functions[selector].ngroups; 1351 + return 0; 1352 + } 1353 + 1354 + static const struct pinmux_ops ep93xx_pmx_ops = { 1355 + .get_functions_count = ep93xx_pmx_get_funcs_count, 1356 + .get_function_name = ep93xx_pmx_get_func_name, 1357 + .get_function_groups = ep93xx_pmx_get_groups, 1358 + .set_mux = ep93xx_pmx_set_mux, 1359 + }; 1360 + 1361 + static struct pinctrl_desc ep93xx_pmx_desc = { 1362 + .name = DRIVER_NAME, 1363 + .pctlops = &ep93xx_pctrl_ops, 1364 + .pmxops = &ep93xx_pmx_ops, 1365 + .owner = THIS_MODULE, 1366 + }; 1367 + 1368 + static 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 + 1413 + static 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 + }; 1428 + MODULE_DEVICE_TABLE(auxiliary, ep93xx_pinctrl_ids); 1429 + 1430 + static struct auxiliary_driver ep93xx_pmx_driver = { 1431 + .probe = ep93xx_pmx_probe, 1432 + .id_table = ep93xx_pinctrl_ids, 1433 + }; 1434 + module_auxiliary_driver(ep93xx_pmx_driver);