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