#include <linux/array_size.h>
#include <linux/err.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/mfd/syscon.h>
#include <linux/property.h>
#include <linux/regmap.h>
#include <linux/seq_file.h>
#include <linux/slab.h>
#include <linux/soc/cirrus/ep93xx.h>
#include <linux/pinctrl/machine.h>
#include <linux/pinctrl/pinconf-generic.h>
#include <linux/pinctrl/pinconf.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/pinmux.h>
#include "pinctrl-utils.h"
#define DRIVER_NAME "pinctrl-ep93xx"
enum ep93xx_pinctrl_model {
EP93XX_9301_PINCTRL,
EP93XX_9307_PINCTRL,
EP93XX_9312_PINCTRL,
};
struct ep93xx_pmx {
struct device *dev;
struct pinctrl_dev *pctl;
struct ep93xx_regmap_adev *aux_dev;
struct regmap *map;
enum ep93xx_pinctrl_model model;
};
static void ep93xx_pinctrl_update_bits(struct ep93xx_pmx *pmx, unsigned int reg,
unsigned int mask, unsigned int val)
{
struct ep93xx_regmap_adev *aux = pmx->aux_dev;
aux->update_bits(aux->map, aux->lock, reg, mask, val);
}
struct ep93xx_pin_group {
struct pingroup grp;
u32 mask;
u32 value;
};
#define PMX_GROUP(_name, _pins, _mask, _value) \
{ \
.grp = PINCTRL_PINGROUP(_name, _pins, ARRAY_SIZE(_pins)), \
.mask = _mask, \
.value = _value, \
}
#define EP93XX_SYSCON_DEVCFG 0x80
#define EP93XX_SYSCON_DEVCFG_D1ONG BIT(30)
#define EP93XX_SYSCON_DEVCFG_D0ONG BIT(29)
#define EP93XX_SYSCON_DEVCFG_IONU2 BIT(28)
#define EP93XX_SYSCON_DEVCFG_GONK BIT(27)
#define EP93XX_SYSCON_DEVCFG_TONG BIT(26)
#define EP93XX_SYSCON_DEVCFG_MONG BIT(25)
#define EP93XX_SYSCON_DEVCFG_A2ONG BIT(22)
#define EP93XX_SYSCON_DEVCFG_A1ONG BIT(21)
#define EP93XX_SYSCON_DEVCFG_HONIDE BIT(11)
#define EP93XX_SYSCON_DEVCFG_GONIDE BIT(10)
#define EP93XX_SYSCON_DEVCFG_PONG BIT(9)
#define EP93XX_SYSCON_DEVCFG_EONIDE BIT(8)
#define EP93XX_SYSCON_DEVCFG_I2SONSSP BIT(7)
#define EP93XX_SYSCON_DEVCFG_I2SONAC97 BIT(6)
#define EP93XX_SYSCON_DEVCFG_RASONP3 BIT(4)
#define PADS_MASK (GENMASK(30, 25) | BIT(22) | BIT(21) | GENMASK(11, 6) | BIT(4))
#define PADS_MAXBIT 30
static const char * const ep93xx_padgroups[] = {
NULL, NULL, NULL, NULL,
"RasOnP3",
NULL,
"I2SonAC97",
"I2SonSSP",
"EonIDE",
"PonG",
"GonIDE",
"HonIDE",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
"A1onG",
"A2onG",
NULL, NULL,
"MonG",
"TonG",
"GonK",
"IonU2",
"D0onG",
"D1onG",
};
static const struct pinctrl_pin_desc ep9301_pins[] = {
PINCTRL_PIN(1, "CSn[7]"),
PINCTRL_PIN(2, "CSn[6]"),
PINCTRL_PIN(3, "CSn[3]"),
PINCTRL_PIN(4, "CSn[2]"),
PINCTRL_PIN(5, "CSn[1]"),
PINCTRL_PIN(6, "AD[25]"),
PINCTRL_PIN(7, "vdd_ring"),
PINCTRL_PIN(8, "gnd_ring"),
PINCTRL_PIN(9, "AD[24]"),
PINCTRL_PIN(10, "SDCLK"),
PINCTRL_PIN(11, "AD[23]"),
PINCTRL_PIN(12, "vdd_core"),
PINCTRL_PIN(13, "gnd_core"),
PINCTRL_PIN(14, "SDWEn"),
PINCTRL_PIN(15, "SDCSn[3]"),
PINCTRL_PIN(16, "SDCSn[2]"),
PINCTRL_PIN(17, "SDCSn[1]"),
PINCTRL_PIN(18, "SDCSn[0]"),
PINCTRL_PIN(19, "vdd_ring"),
PINCTRL_PIN(20, "gnd_ring"),
PINCTRL_PIN(21, "RASn"),
PINCTRL_PIN(22, "CASn"),
PINCTRL_PIN(23, "DQMn[1]"),
PINCTRL_PIN(24, "DQMn[0]"),
PINCTRL_PIN(25, "AD[22]"),
PINCTRL_PIN(26, "AD[21]"),
PINCTRL_PIN(27, "vdd_ring"),
PINCTRL_PIN(28, "gnd_ring"),
PINCTRL_PIN(29, "DA[15]"),
PINCTRL_PIN(30, "AD[7]"),
PINCTRL_PIN(31, "DA[14]"),
PINCTRL_PIN(32, "AD[6]"),
PINCTRL_PIN(33, "DA[13]"),
PINCTRL_PIN(34, "vdd_core"),
PINCTRL_PIN(35, "gnd_core"),
PINCTRL_PIN(36, "AD[5]"),
PINCTRL_PIN(37, "DA[12]"),
PINCTRL_PIN(38, "AD[4]"),
PINCTRL_PIN(39, "DA[11]"),
PINCTRL_PIN(40, "AD[3]"),
PINCTRL_PIN(41, "vdd_ring"),
PINCTRL_PIN(42, "gnd_ring"),
PINCTRL_PIN(43, "DA[10]"),
PINCTRL_PIN(44, "AD[2]"),
PINCTRL_PIN(45, "DA[9]"),
PINCTRL_PIN(46, "AD[1]"),
PINCTRL_PIN(47, "DA[8]"),
PINCTRL_PIN(48, "AD[0]"),
PINCTRL_PIN(49, "vdd_ring"),
PINCTRL_PIN(50, "gnd_ring"),
PINCTRL_PIN(51, "NC"),
PINCTRL_PIN(52, "NC"),
PINCTRL_PIN(53, "vdd_ring"),
PINCTRL_PIN(54, "gnd_ring"),
PINCTRL_PIN(55, "AD[15]"),
PINCTRL_PIN(56, "DA[7]"),
PINCTRL_PIN(57, "vdd_core"),
PINCTRL_PIN(58, "gnd_core"),
PINCTRL_PIN(59, "AD[14]"),
PINCTRL_PIN(60, "DA[6]"),
PINCTRL_PIN(61, "AD[13]"),
PINCTRL_PIN(62, "DA[5]"),
PINCTRL_PIN(63, "AD[12]"),
PINCTRL_PIN(64, "DA[4]"),
PINCTRL_PIN(65, "AD[11]"),
PINCTRL_PIN(66, "vdd_ring"),
PINCTRL_PIN(67, "gnd_ring"),
PINCTRL_PIN(68, "DA[3]"),
PINCTRL_PIN(69, "AD[10]"),
PINCTRL_PIN(70, "DA[2]"),
PINCTRL_PIN(71, "AD[9]"),
PINCTRL_PIN(72, "DA[1]"),
PINCTRL_PIN(73, "AD[8]"),
PINCTRL_PIN(74, "DA[0]"),
PINCTRL_PIN(75, "DSRn"),
PINCTRL_PIN(76, "DTRn"),
PINCTRL_PIN(77, "TCK"),
PINCTRL_PIN(78, "TDI"),
PINCTRL_PIN(79, "TDO"),
PINCTRL_PIN(80, "TMS"),
PINCTRL_PIN(81, "vdd_ring"),
PINCTRL_PIN(82, "gnd_ring"),
PINCTRL_PIN(83, "BOOT[1]"),
PINCTRL_PIN(84, "BOOT[0]"),
PINCTRL_PIN(85, "gnd_ring"),
PINCTRL_PIN(86, "NC"),
PINCTRL_PIN(87, "EECLK"),
PINCTRL_PIN(88, "EEDAT"),
PINCTRL_PIN(89, "ASYNC"),
PINCTRL_PIN(90, "vdd_core"),
PINCTRL_PIN(91, "gnd_core"),
PINCTRL_PIN(92, "ASDO"),
PINCTRL_PIN(93, "SCLK1"),
PINCTRL_PIN(94, "SFRM1"),
PINCTRL_PIN(95, "SSPRX1"),
PINCTRL_PIN(96, "SSPTX1"),
PINCTRL_PIN(97, "GRLED"),
PINCTRL_PIN(98, "RDLED"),
PINCTRL_PIN(99, "vdd_ring"),
PINCTRL_PIN(100, "gnd_ring"),
PINCTRL_PIN(101, "INT[3]"),
PINCTRL_PIN(102, "INT[1]"),
PINCTRL_PIN(103, "INT[0]"),
PINCTRL_PIN(104, "RTSn"),
PINCTRL_PIN(105, "USBm[0]"),
PINCTRL_PIN(106, "USBp[0]"),
PINCTRL_PIN(107, "ABITCLK"),
PINCTRL_PIN(108, "CTSn"),
PINCTRL_PIN(109, "RXD[0]"),
PINCTRL_PIN(110, "RXD[1]"),
PINCTRL_PIN(111, "vdd_ring"),
PINCTRL_PIN(112, "gnd_ring"),
PINCTRL_PIN(113, "TXD[0]"),
PINCTRL_PIN(114, "TXD[1]"),
PINCTRL_PIN(115, "CGPIO[0]"),
PINCTRL_PIN(116, "gnd_core"),
PINCTRL_PIN(117, "PLL_GND"),
PINCTRL_PIN(118, "XTALI"),
PINCTRL_PIN(119, "XTALO"),
PINCTRL_PIN(120, "PLL_VDD"),
PINCTRL_PIN(121, "vdd_core"),
PINCTRL_PIN(122, "gnd_ring"),
PINCTRL_PIN(123, "vdd_ring"),
PINCTRL_PIN(124, "RSTOn"),
PINCTRL_PIN(125, "PRSTn"),
PINCTRL_PIN(126, "CSn[0]"),
PINCTRL_PIN(127, "gnd_core"),
PINCTRL_PIN(128, "vdd_core"),
PINCTRL_PIN(129, "gnd_ring"),
PINCTRL_PIN(130, "vdd_ring"),
PINCTRL_PIN(131, "ADC[4]"),
PINCTRL_PIN(132, "ADC[3]"),
PINCTRL_PIN(133, "ADC[2]"),
PINCTRL_PIN(134, "ADC[1]"),
PINCTRL_PIN(135, "ADC[0]"),
PINCTRL_PIN(136, "ADC_VDD"),
PINCTRL_PIN(137, "RTCXTALI"),
PINCTRL_PIN(138, "RTCXTALO"),
PINCTRL_PIN(139, "ADC_GND"),
PINCTRL_PIN(140, "EGPIO[11]"),
PINCTRL_PIN(141, "EGPIO[10]"),
PINCTRL_PIN(142, "EGPIO[9]"),
PINCTRL_PIN(143, "EGPIO[8]"),
PINCTRL_PIN(144, "EGPIO[7]"),
PINCTRL_PIN(145, "EGPIO[6]"),
PINCTRL_PIN(146, "EGPIO[5]"),
PINCTRL_PIN(147, "EGPIO[4]"),
PINCTRL_PIN(148, "EGPIO[3]"),
PINCTRL_PIN(149, "gnd_ring"),
PINCTRL_PIN(150, "vdd_ring"),
PINCTRL_PIN(151, "EGPIO[2]"),
PINCTRL_PIN(152, "EGPIO[1]"),
PINCTRL_PIN(153, "EGPIO[0]"),
PINCTRL_PIN(154, "ARSTn"),
PINCTRL_PIN(155, "TRSTn"),
PINCTRL_PIN(156, "ASDI"),
PINCTRL_PIN(157, "USBm[2]"),
PINCTRL_PIN(158, "USBp[2]"),
PINCTRL_PIN(159, "WAITn"),
PINCTRL_PIN(160, "EGPIO[15]"),
PINCTRL_PIN(161, "gnd_ring"),
PINCTRL_PIN(162, "vdd_ring"),
PINCTRL_PIN(163, "EGPIO[14]"),
PINCTRL_PIN(164, "EGPIO[13]"),
PINCTRL_PIN(165, "EGPIO[12]"),
PINCTRL_PIN(166, "gnd_core"),
PINCTRL_PIN(167, "vdd_core"),
PINCTRL_PIN(168, "FGPIO[3]"),
PINCTRL_PIN(169, "FGPIO[2]"),
PINCTRL_PIN(170, "FGPIO[1]"),
PINCTRL_PIN(171, "gnd_ring"),
PINCTRL_PIN(172, "vdd_ring"),
PINCTRL_PIN(173, "CLD"),
PINCTRL_PIN(174, "CRS"),
PINCTRL_PIN(175, "TXERR"),
PINCTRL_PIN(176, "TXEN"),
PINCTRL_PIN(177, "MIITXD[0]"),
PINCTRL_PIN(178, "MIITXD[1]"),
PINCTRL_PIN(179, "MIITXD[2]"),
PINCTRL_PIN(180, "MIITXD[3]"),
PINCTRL_PIN(181, "TXCLK"),
PINCTRL_PIN(182, "RXERR"),
PINCTRL_PIN(183, "RXDVAL"),
PINCTRL_PIN(184, "MIIRXD[0]"),
PINCTRL_PIN(185, "MIIRXD[1]"),
PINCTRL_PIN(186, "MIIRXD[2]"),
PINCTRL_PIN(187, "gnd_ring"),
PINCTRL_PIN(188, "vdd_ring"),
PINCTRL_PIN(189, "MIIRXD[3]"),
PINCTRL_PIN(190, "RXCLK"),
PINCTRL_PIN(191, "MDIO"),
PINCTRL_PIN(192, "MDC"),
PINCTRL_PIN(193, "RDn"),
PINCTRL_PIN(194, "WRn"),
PINCTRL_PIN(195, "AD[16]"),
PINCTRL_PIN(196, "AD[17]"),
PINCTRL_PIN(197, "gnd_core"),
PINCTRL_PIN(198, "vdd_core"),
PINCTRL_PIN(199, "HGPIO[2]"),
PINCTRL_PIN(200, "HGPIO[3]"),
PINCTRL_PIN(201, "HGPIO[4]"),
PINCTRL_PIN(202, "HGPIO[5]"),
PINCTRL_PIN(203, "gnd_ring"),
PINCTRL_PIN(204, "vdd_ring"),
PINCTRL_PIN(205, "AD[18]"),
PINCTRL_PIN(206, "AD[19]"),
PINCTRL_PIN(207, "AD[20]"),
PINCTRL_PIN(208, "SDCLKEN"),
};
static const unsigned int ssp_ep9301_pins[] = {
93, 94, 95, 96,
};
static const unsigned int ac97_ep9301_pins[] = {
89, 92, 107, 154, 156,
};
static const unsigned int pwm_9301_pins[] = { 163 };
static const unsigned int gpio1a_9301_pins[] = { 163 };
static const unsigned int gpio2a_9301_pins[] = { 115 };
static const unsigned int gpio4a_9301_pins[] = { 97, 98 };
static const unsigned int gpio6a_9301_pins[] = { 87, 88 };
static const unsigned int gpio7a_9301_pins[] = { 199, 200, 201, 202 };
static const struct ep93xx_pin_group ep9301_pin_groups[] = {
PMX_GROUP("ssp", ssp_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 0),
PMX_GROUP("i2s_on_ssp", ssp_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP,
EP93XX_SYSCON_DEVCFG_I2SONSSP),
PMX_GROUP("ac97", ac97_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 0),
PMX_GROUP("i2s_on_ac97", ac97_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97,
EP93XX_SYSCON_DEVCFG_I2SONAC97),
PMX_GROUP("pwm1", pwm_9301_pins, EP93XX_SYSCON_DEVCFG_PONG, EP93XX_SYSCON_DEVCFG_PONG),
PMX_GROUP("gpio1agrp", gpio1a_9301_pins, EP93XX_SYSCON_DEVCFG_PONG, 0),
PMX_GROUP("gpio2agrp", gpio2a_9301_pins, EP93XX_SYSCON_DEVCFG_GONK,
EP93XX_SYSCON_DEVCFG_GONK),
PMX_GROUP("gpio4agrp", gpio4a_9301_pins, EP93XX_SYSCON_DEVCFG_EONIDE,
EP93XX_SYSCON_DEVCFG_EONIDE),
PMX_GROUP("gpio6agrp", gpio6a_9301_pins, EP93XX_SYSCON_DEVCFG_GONIDE,
EP93XX_SYSCON_DEVCFG_GONIDE),
PMX_GROUP("gpio7agrp", gpio7a_9301_pins, EP93XX_SYSCON_DEVCFG_HONIDE,
EP93XX_SYSCON_DEVCFG_HONIDE),
};
static const struct pinctrl_pin_desc ep9307_pins[] = {
PINCTRL_PIN(0, "CSn[1]"),
PINCTRL_PIN(1, "CSn[7]"),
PINCTRL_PIN(2, "SDCLKEN"),
PINCTRL_PIN(3, "DA[31]"),
PINCTRL_PIN(4, "DA[29]"),
PINCTRL_PIN(5, "DA[27]"),
PINCTRL_PIN(6, "HGPIO[2]"),
PINCTRL_PIN(7, "RDn"),
PINCTRL_PIN(8, "MIIRXD[3]"),
PINCTRL_PIN(9, "RXDVAL"),
PINCTRL_PIN(10, "MIITXD[1]"),
PINCTRL_PIN(11, "CRS"),
PINCTRL_PIN(12, "FGPIO[7]"),
PINCTRL_PIN(13, "FGPIO[0]"),
PINCTRL_PIN(14, "WAITn"),
PINCTRL_PIN(15, "USBm[2]"),
PINCTRL_PIN(16, "ASDI"),
PINCTRL_PIN(17, "AD[25]"),
PINCTRL_PIN(18, "CSn[2]"),
PINCTRL_PIN(19, "CSn[6]"),
PINCTRL_PIN(20, "AD[20]"),
PINCTRL_PIN(21, "DA[30]"),
PINCTRL_PIN(22, "AD[18]"),
PINCTRL_PIN(23, "HGPIO[3]"),
PINCTRL_PIN(24, "AD[17]"),
PINCTRL_PIN(25, "RXCLK"),
PINCTRL_PIN(26, "MIIRXD[1]"),
PINCTRL_PIN(27, "MIITXD[2]"),
PINCTRL_PIN(28, "TXEN"),
PINCTRL_PIN(29, "FGPIO[5]"),
PINCTRL_PIN(30, "EGPIO[15]"),
PINCTRL_PIN(31, "USBp[2]"),
PINCTRL_PIN(32, "ARSTn"),
PINCTRL_PIN(33, "ADC_VDD"),
PINCTRL_PIN(34, "AD[23]"),
PINCTRL_PIN(35, "DA[26]"),
PINCTRL_PIN(36, "CSn[3]"),
PINCTRL_PIN(37, "DA[25]"),
PINCTRL_PIN(38, "AD[24]"),
PINCTRL_PIN(39, "AD[19]"),
PINCTRL_PIN(40, "HGPIO[5]"),
PINCTRL_PIN(41, "WRn"),
PINCTRL_PIN(42, "MDIO"),
PINCTRL_PIN(43, "MIIRXD[2]"),
PINCTRL_PIN(44, "TXCLK"),
PINCTRL_PIN(45, "MIITXD[0]"),
PINCTRL_PIN(46, "CLD"),
PINCTRL_PIN(47, "EGPIO[13]"),
PINCTRL_PIN(48, "TRSTn"),
PINCTRL_PIN(49, "Xp"),
PINCTRL_PIN(50, "Xm"),
PINCTRL_PIN(51, "SDCSn[3]"),
PINCTRL_PIN(52, "DA[23]"),
PINCTRL_PIN(53, "SDCLK"),
PINCTRL_PIN(54, "DA[24]"),
PINCTRL_PIN(55, "HGPIO[7]"),
PINCTRL_PIN(56, "HGPIO[6]"),
PINCTRL_PIN(57, "A[28]"),
PINCTRL_PIN(58, "HGPIO[4]"),
PINCTRL_PIN(59, "AD[16]"),
PINCTRL_PIN(60, "MDC"),
PINCTRL_PIN(61, "RXERR"),
PINCTRL_PIN(62, "MIITXD[3]"),
PINCTRL_PIN(63, "EGPIO[12]"),
PINCTRL_PIN(64, "EGPIO[1]"),
PINCTRL_PIN(65, "EGPIO[0]"),
PINCTRL_PIN(66, "Ym"),
PINCTRL_PIN(67, "Yp"),
PINCTRL_PIN(68, "SDCSn[2]"),
PINCTRL_PIN(69, "SDWEN"),
PINCTRL_PIN(70, "DA[22]"),
PINCTRL_PIN(71, "AD[3]"),
PINCTRL_PIN(72, "DA[15]"),
PINCTRL_PIN(73, "AD[21]"),
PINCTRL_PIN(74, "DA[17]"),
PINCTRL_PIN(75, "vddr"),
PINCTRL_PIN(76, "vddr"),
PINCTRL_PIN(77, "vddr"),
PINCTRL_PIN(78, "MIIRXD[0]"),
PINCTRL_PIN(79, "TXERR"),
PINCTRL_PIN(80, "EGPIO[2]"),
PINCTRL_PIN(81, "EGPIO[4]"),
PINCTRL_PIN(82, "EGPIO[3]"),
PINCTRL_PIN(83, "sXp"),
PINCTRL_PIN(84, "sXm"),
PINCTRL_PIN(85, "RASn"),
PINCTRL_PIN(86, "SDCSn[1]"),
PINCTRL_PIN(87, "SDCSn[0]"),
PINCTRL_PIN(88, "DQMn[3]"),
PINCTRL_PIN(89, "AD[5]"),
PINCTRL_PIN(90, "gndr"),
PINCTRL_PIN(91, "gndr"),
PINCTRL_PIN(92, "gndr"),
PINCTRL_PIN(93, "vddc"),
PINCTRL_PIN(94, "vddc"),
PINCTRL_PIN(95, "gndr"),
PINCTRL_PIN(96, "EGPIO[7]"),
PINCTRL_PIN(97, "EGPIO[5]"),
PINCTRL_PIN(98, "ADC GND"),
PINCTRL_PIN(99, "EGPIO[6]"),
PINCTRL_PIN(100, "sYm"),
PINCTRL_PIN(101, "syp"),
PINCTRL_PIN(102, "DQMn[0]"),
PINCTRL_PIN(103, "CASn"),
PINCTRL_PIN(104, "DA[21]"),
PINCTRL_PIN(105, "AD[22]"),
PINCTRL_PIN(106, "vddr"),
PINCTRL_PIN(107, "gndr"),
PINCTRL_PIN(108, "gndr"),
PINCTRL_PIN(109, "EGPIO[9]"),
PINCTRL_PIN(110, "EGPIO[10]"),
PINCTRL_PIN(111, "EGPIO[11]"),
PINCTRL_PIN(112, "RTCXTALO"),
PINCTRL_PIN(113, "RTCXTALI"),
PINCTRL_PIN(114, "DA[18]"),
PINCTRL_PIN(115, "DA[20]"),
PINCTRL_PIN(116, "DA[19]"),
PINCTRL_PIN(117, "DA[16]"),
PINCTRL_PIN(118, "vddr"),
PINCTRL_PIN(119, "vddc"),
PINCTRL_PIN(120, "gndc"),
PINCTRL_PIN(121, "gndc"),
PINCTRL_PIN(122, "gndc"),
PINCTRL_PIN(123, "gndr"),
PINCTRL_PIN(124, "vddr"),
PINCTRL_PIN(125, "EGPIO[8]"),
PINCTRL_PIN(126, "PRSTN"),
PINCTRL_PIN(127, "COL[7]"),
PINCTRL_PIN(128, "RSTON"),
PINCTRL_PIN(129, "AD[6]"),
PINCTRL_PIN(130, "DA[14]"),
PINCTRL_PIN(131, "AD[7]"),
PINCTRL_PIN(132, "DA[13]"),
PINCTRL_PIN(133, "vddr"),
PINCTRL_PIN(134, "vddc"),
PINCTRL_PIN(135, "gndc"),
PINCTRL_PIN(136, "gndc"),
PINCTRL_PIN(137, "vddc"),
PINCTRL_PIN(138, "vddr"),
PINCTRL_PIN(139, "COL[5]"),
PINCTRL_PIN(140, "COL[6]"),
PINCTRL_PIN(141, "CSn[0]"),
PINCTRL_PIN(142, "COL[3]"),
PINCTRL_PIN(143, "AD[4]"),
PINCTRL_PIN(144, "DA[12]"),
PINCTRL_PIN(145, "DA[10]"),
PINCTRL_PIN(146, "DA[11]"),
PINCTRL_PIN(147, "vddr"),
PINCTRL_PIN(148, "gndr"),
PINCTRL_PIN(149, "gndc"),
PINCTRL_PIN(150, "gndc"),
PINCTRL_PIN(151, "gndc"),
PINCTRL_PIN(152, "vddc"),
PINCTRL_PIN(153, "COL[4]"),
PINCTRL_PIN(154, "PLL_VDD"),
PINCTRL_PIN(155, "COL[2]"),
PINCTRL_PIN(156, "COL[1]"),
PINCTRL_PIN(157, "COL[0]"),
PINCTRL_PIN(158, "DA[9]"),
PINCTRL_PIN(159, "AD[2]"),
PINCTRL_PIN(160, "AD[1]"),
PINCTRL_PIN(161, "DA[8]"),
PINCTRL_PIN(162, "BLANK"),
PINCTRL_PIN(163, "gndr"),
PINCTRL_PIN(164, "gndr"),
PINCTRL_PIN(165, "ROW[7]"),
PINCTRL_PIN(166, "ROW[5]"),
PINCTRL_PIN(167, "PLL GND"),
PINCTRL_PIN(168, "XTALI"),
PINCTRL_PIN(169, "XTALO"),
PINCTRL_PIN(170, "BRIGHT"),
PINCTRL_PIN(171, "AD[0]"),
PINCTRL_PIN(172, "DQMn[1]"),
PINCTRL_PIN(173, "DQMn[2]"),
PINCTRL_PIN(174, "P[17]"),
PINCTRL_PIN(175, "gndr"),
PINCTRL_PIN(176, "gndr"),
PINCTRL_PIN(177, "vddc"),
PINCTRL_PIN(178, "vddc"),
PINCTRL_PIN(179, "gndr"),
PINCTRL_PIN(180, "gndr"),
PINCTRL_PIN(181, "ROW[6]"),
PINCTRL_PIN(182, "ROW[4]"),
PINCTRL_PIN(183, "ROW[1]"),
PINCTRL_PIN(184, "ROW[0]"),
PINCTRL_PIN(185, "ROW[3]"),
PINCTRL_PIN(186, "ROW[2]"),
PINCTRL_PIN(187, "P[14]"),
PINCTRL_PIN(188, "P[16]"),
PINCTRL_PIN(189, "P[15]"),
PINCTRL_PIN(190, "P[13]"),
PINCTRL_PIN(191, "P[12]"),
PINCTRL_PIN(192, "DA[5]"),
PINCTRL_PIN(193, "vddr"),
PINCTRL_PIN(194, "vddr"),
PINCTRL_PIN(195, "vddr"),
PINCTRL_PIN(196, "vddr"),
PINCTRL_PIN(197, "EECLK"),
PINCTRL_PIN(198, "ASDO"),
PINCTRL_PIN(199, "CTSn"),
PINCTRL_PIN(200, "RXD[0]"),
PINCTRL_PIN(201, "TXD[0]"),
PINCTRL_PIN(202, "TXD[1]"),
PINCTRL_PIN(203, "TXD[2]"),
PINCTRL_PIN(204, "SPCLK"),
PINCTRL_PIN(205, "P[10]"),
PINCTRL_PIN(206, "P[11]"),
PINCTRL_PIN(207, "P[3]"),
PINCTRL_PIN(208, "AD[15]"),
PINCTRL_PIN(209, "AD[13]"),
PINCTRL_PIN(210, "AD[12]"),
PINCTRL_PIN(211, "DA[2]"),
PINCTRL_PIN(212, "AD[8]"),
PINCTRL_PIN(213, "TCK"),
PINCTRL_PIN(214, "BOOT[1]"),
PINCTRL_PIN(215, "EEDAT"),
PINCTRL_PIN(216, "GRLED"),
PINCTRL_PIN(217, "RDLED"),
PINCTRL_PIN(218, "GGPIO[2]"),
PINCTRL_PIN(219, "RXD[1]"),
PINCTRL_PIN(220, "RXD[2]"),
PINCTRL_PIN(221, "P[9]"),
PINCTRL_PIN(222, "HSYNC"),
PINCTRL_PIN(223, "P[6]"),
PINCTRL_PIN(224, "P[5]"),
PINCTRL_PIN(225, "P[0]"),
PINCTRL_PIN(226, "AD[14]"),
PINCTRL_PIN(227, "DA[4]"),
PINCTRL_PIN(228, "DA[1]"),
PINCTRL_PIN(229, "DTRn"),
PINCTRL_PIN(230, "TDI"),
PINCTRL_PIN(231, "BOOT[0]"),
PINCTRL_PIN(232, "ASYNC"),
PINCTRL_PIN(233, "SSPTX[1]"),
PINCTRL_PIN(234, "PWMOUT"),
PINCTRL_PIN(235, "USBm[0]"),
PINCTRL_PIN(236, "ABITCLK"),
PINCTRL_PIN(237, "USBp[0]"),
PINCTRL_PIN(238, "NC"),
PINCTRL_PIN(239, "NC"),
PINCTRL_PIN(240, "V_CSYNC"),
PINCTRL_PIN(241, "P[7]"),
PINCTRL_PIN(242, "P[2]"),
PINCTRL_PIN(243, "DA[7]"),
PINCTRL_PIN(244, "AD[11]"),
PINCTRL_PIN(245, "AD[9]"),
PINCTRL_PIN(246, "DSRn"),
PINCTRL_PIN(247, "TMS"),
PINCTRL_PIN(248, "gndr"),
PINCTRL_PIN(249, "SFRM[1]"),
PINCTRL_PIN(250, "INT[2]"),
PINCTRL_PIN(251, "INT[0]"),
PINCTRL_PIN(252, "USBp[1]"),
PINCTRL_PIN(253, "NC"),
PINCTRL_PIN(254, "NC"),
PINCTRL_PIN(255, "NC"),
PINCTRL_PIN(256, "NC"),
PINCTRL_PIN(257, "P[8]"),
PINCTRL_PIN(258, "P[4]"),
PINCTRL_PIN(259, "P[1]"),
PINCTRL_PIN(260, "DA[6]"),
PINCTRL_PIN(261, "DA[3]"),
PINCTRL_PIN(262, "AD[10]"),
PINCTRL_PIN(263, "DA[0]"),
PINCTRL_PIN(264, "TDO"),
PINCTRL_PIN(265, "NC"),
PINCTRL_PIN(266, "SCLK[1]"),
PINCTRL_PIN(267, "SSPRX[1]"),
PINCTRL_PIN(268, "INT[1]"),
PINCTRL_PIN(269, "RTSn"),
PINCTRL_PIN(270, "USBm[1]"),
PINCTRL_PIN(271, "NC"),
};
static const unsigned int ssp_ep9307_pins[] = {
233, 249, 266, 267,
};
static const unsigned int ac97_ep9307_pins[] = {
16, 32, 198, 232, 236,
};
static const unsigned int raster_on_sdram0_pins[] = {
};
static const unsigned int raster_on_sdram3_pins[] = {
};
static const unsigned int gpio2a_9307_pins[] = {
165, 166, 181, 182, 183, 184, 185, 186,
};
static const unsigned int gpio3a_9307_pins[] = {
127, 139, 140, 142, 153, 155, 156, 157,
};
static const unsigned int keypad_9307_pins[] = {
127, 139, 140, 142, 153, 155, 156, 157,
165, 166, 181, 182, 183, 184, 185, 186,
};
static const unsigned int gpio4a_9307_pins[] = { 216, 217 };
static const unsigned int gpio6a_9307_pins[] = { 219 };
static const unsigned int gpio7a_9307_pins[] = { 7, 24, 41, 56, 57, 59 };
static const struct ep93xx_pin_group ep9307_pin_groups[] = {
PMX_GROUP("ssp", ssp_ep9307_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 0),
PMX_GROUP("i2s_on_ssp", ssp_ep9307_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP,
EP93XX_SYSCON_DEVCFG_I2SONSSP),
PMX_GROUP("ac97", ac97_ep9307_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 0),
PMX_GROUP("i2s_on_ac97", ac97_ep9301_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97,
EP93XX_SYSCON_DEVCFG_I2SONAC97),
PMX_GROUP("rasteronsdram0grp", raster_on_sdram0_pins, EP93XX_SYSCON_DEVCFG_RASONP3, 0),
PMX_GROUP("rasteronsdram3grp", raster_on_sdram3_pins, EP93XX_SYSCON_DEVCFG_RASONP3,
EP93XX_SYSCON_DEVCFG_RASONP3),
PMX_GROUP("gpio2agrp", gpio2a_9307_pins, EP93XX_SYSCON_DEVCFG_GONK,
EP93XX_SYSCON_DEVCFG_GONK),
PMX_GROUP("gpio3agrp", gpio3a_9307_pins, EP93XX_SYSCON_DEVCFG_GONK,
EP93XX_SYSCON_DEVCFG_GONK),
PMX_GROUP("keypadgrp", keypad_9307_pins, EP93XX_SYSCON_DEVCFG_GONK, 0),
PMX_GROUP("gpio4agrp", gpio4a_9307_pins, EP93XX_SYSCON_DEVCFG_EONIDE,
EP93XX_SYSCON_DEVCFG_EONIDE),
PMX_GROUP("gpio6agrp", gpio6a_9307_pins, EP93XX_SYSCON_DEVCFG_GONIDE,
EP93XX_SYSCON_DEVCFG_GONIDE),
PMX_GROUP("gpio7agrp", gpio7a_9307_pins, EP93XX_SYSCON_DEVCFG_HONIDE,
EP93XX_SYSCON_DEVCFG_HONIDE),
};
static const struct pinctrl_pin_desc ep9312_pins[] = {
PINCTRL_PIN(0, "CSN[7]"),
PINCTRL_PIN(1, "DA[28]"),
PINCTRL_PIN(2, "AD[18]"),
PINCTRL_PIN(3, "DD[8]"),
PINCTRL_PIN(4, "DD[4]"),
PINCTRL_PIN(5, "AD[17]"),
PINCTRL_PIN(6, "RDN"),
PINCTRL_PIN(7, "RXCLK"),
PINCTRL_PIN(8, "MIIRXD[0]"),
PINCTRL_PIN(9, "RXDVAL"),
PINCTRL_PIN(10, "MIITXD[2]"),
PINCTRL_PIN(11, "TXERR"),
PINCTRL_PIN(12, "CLD"),
PINCTRL_PIN(13, "NC"),
PINCTRL_PIN(14, "NC"),
PINCTRL_PIN(15, "NC"),
PINCTRL_PIN(16, "EGPIO[12]"),
PINCTRL_PIN(17, "EGPIO[15]"),
PINCTRL_PIN(18, "NC"),
PINCTRL_PIN(19, "NC"),
PINCTRL_PIN(20, "CSN[2]"),
PINCTRL_PIN(21, "DA[31]"),
PINCTRL_PIN(22, "DA[30]"),
PINCTRL_PIN(23, "DA[27]"),
PINCTRL_PIN(24, "DD[7]"),
PINCTRL_PIN(25, "DD[3]"),
PINCTRL_PIN(26, "WRN"),
PINCTRL_PIN(27, "MDIO"),
PINCTRL_PIN(28, "MIIRXD[1]"),
PINCTRL_PIN(29, "RXERR"),
PINCTRL_PIN(30, "MIITXD[1]"),
PINCTRL_PIN(31, "CRS"),
PINCTRL_PIN(32, "NC"),
PINCTRL_PIN(33, "NC"),
PINCTRL_PIN(34, "NC"),
PINCTRL_PIN(35, "NC"),
PINCTRL_PIN(36, "EGPIO[13]"),
PINCTRL_PIN(37, "NC"),
PINCTRL_PIN(38, "WAITN"),
PINCTRL_PIN(39, "TRSTN"),
PINCTRL_PIN(40, "CSN[1]"),
PINCTRL_PIN(41, "CSN[3]"),
PINCTRL_PIN(42, "AD[20]"),
PINCTRL_PIN(43, "DA[29]"),
PINCTRL_PIN(44, "DD[10]"),
PINCTRL_PIN(45, "DD[6]"),
PINCTRL_PIN(46, "DD[2]"),
PINCTRL_PIN(47, "MDC"),
PINCTRL_PIN(48, "MIIRXD[3]"),
PINCTRL_PIN(49, "TXCLK"),
PINCTRL_PIN(50, "MIITXD[0]"),
PINCTRL_PIN(51, "NC"),
PINCTRL_PIN(52, "NC"),
PINCTRL_PIN(53, "NC"),
PINCTRL_PIN(54, "NC"),
PINCTRL_PIN(55, "NC"),
PINCTRL_PIN(56, "NC"),
PINCTRL_PIN(57, "USBP[2]"),
PINCTRL_PIN(58, "IORDY"),
PINCTRL_PIN(59, "DMACKN"),
PINCTRL_PIN(60, "AD[24]"),
PINCTRL_PIN(61, "DA[25]"),
PINCTRL_PIN(62, "DD[11]"),
PINCTRL_PIN(63, "SDCLKEN"),
PINCTRL_PIN(64, "AD[19]"),
PINCTRL_PIN(65, "DD[9]"),
PINCTRL_PIN(66, "DD[5]"),
PINCTRL_PIN(67, "AD[16]"),
PINCTRL_PIN(68, "MIIRXD[2]"),
PINCTRL_PIN(69, "MIITXD[3]"),
PINCTRL_PIN(70, "TXEN"),
PINCTRL_PIN(71, "NC"),
PINCTRL_PIN(72, "NC"),
PINCTRL_PIN(73, "NC"),
PINCTRL_PIN(74, "EGPIO[14]"),
PINCTRL_PIN(75, "NC"),
PINCTRL_PIN(76, "USBM[2]"),
PINCTRL_PIN(77, "ARSTN"),
PINCTRL_PIN(78, "DIORN"),
PINCTRL_PIN(79, "EGPIO[1]"),
PINCTRL_PIN(80, "AD[23]"),
PINCTRL_PIN(81, "DA[23]"),
PINCTRL_PIN(82, "DA[26]"),
PINCTRL_PIN(83, "CSN[6]"),
PINCTRL_PIN(84, "GND"),
PINCTRL_PIN(85, "GND"),
PINCTRL_PIN(86, "CVDD"),
PINCTRL_PIN(87, "CVDD"),
PINCTRL_PIN(88, "RVDD"),
PINCTRL_PIN(89, "GND"),
PINCTRL_PIN(90, "GND"),
PINCTRL_PIN(91, "RVDD"),
PINCTRL_PIN(92, "CVDD"),
PINCTRL_PIN(93, "CVDD"),
PINCTRL_PIN(94, "GND"),
PINCTRL_PIN(95, "ASDI"),
PINCTRL_PIN(96, "DIOWN"),
PINCTRL_PIN(97, "EGPIO[0]"),
PINCTRL_PIN(98, "EGPIO[3]"),
PINCTRL_PIN(99, "EGPIO[5]"),
PINCTRL_PIN(100, "SDCSN[3]"),
PINCTRL_PIN(101, "DA[22]"),
PINCTRL_PIN(102, "DA[24]"),
PINCTRL_PIN(103, "AD[25]"),
PINCTRL_PIN(104, "RVDD"),
PINCTRL_PIN(105, "GND"),
PINCTRL_PIN(106, "CVDD"),
PINCTRL_PIN(107, "CVDD"),
PINCTRL_PIN(108, "GND"),
PINCTRL_PIN(109, "GND"),
PINCTRL_PIN(110, "EGPIO[2]"),
PINCTRL_PIN(111, "EGPIO[4]"),
PINCTRL_PIN(112, "EGPIO[6]"),
PINCTRL_PIN(113, "EGPIO[8]"),
PINCTRL_PIN(114, "SDCSN[0]"),
PINCTRL_PIN(115, "SDCSN[1]"),
PINCTRL_PIN(116, "SDWEN"),
PINCTRL_PIN(117, "SDCLK"),
PINCTRL_PIN(118, "RVDD"),
PINCTRL_PIN(119, "RVDD"),
PINCTRL_PIN(120, "RVDD"),
PINCTRL_PIN(121, "RVDD"),
PINCTRL_PIN(122, "EGPIO[7]"),
PINCTRL_PIN(123, "EGPIO[9]"),
PINCTRL_PIN(124, "EGPIO[10]"),
PINCTRL_PIN(125, "EGPIO[11]"),
PINCTRL_PIN(126, "DQMN[3]"),
PINCTRL_PIN(127, "CASN"),
PINCTRL_PIN(128, "RASN"),
PINCTRL_PIN(129, "SDCSN[2]"),
PINCTRL_PIN(130, "CVDD"),
PINCTRL_PIN(131, "GND"),
PINCTRL_PIN(132, "GND"),
PINCTRL_PIN(133, "GND"),
PINCTRL_PIN(134, "GND"),
PINCTRL_PIN(135, "GND"),
PINCTRL_PIN(136, "GND"),
PINCTRL_PIN(137, "RVDD"),
PINCTRL_PIN(138, "RTCXTALO"),
PINCTRL_PIN(139, "ADC_VDD"),
PINCTRL_PIN(140, "ADC_GND"),
PINCTRL_PIN(141, "XP"),
PINCTRL_PIN(142, "DA[21]"),
PINCTRL_PIN(143, "DQMN[0]"),
PINCTRL_PIN(144, "DQMN[1]"),
PINCTRL_PIN(145, "DQMN[2]"),
PINCTRL_PIN(146, "GND"),
PINCTRL_PIN(147, "GND"),
PINCTRL_PIN(148, "GND"),
PINCTRL_PIN(149, "GND"),
PINCTRL_PIN(150, "GND"),
PINCTRL_PIN(151, "GND"),
PINCTRL_PIN(152, "GND"),
PINCTRL_PIN(153, "CVDD"),
PINCTRL_PIN(154, "RTCXTALI"),
PINCTRL_PIN(155, "XM"),
PINCTRL_PIN(156, "YP"),
PINCTRL_PIN(157, "YM"),
PINCTRL_PIN(158, "AD[22]"),
PINCTRL_PIN(159, "DA[20]"),
PINCTRL_PIN(160, "AD[21]"),
PINCTRL_PIN(161, "DA[19]"),
PINCTRL_PIN(162, "RVDD"),
PINCTRL_PIN(163, "GND"),
PINCTRL_PIN(164, "GND"),
PINCTRL_PIN(165, "GND"),
PINCTRL_PIN(166, "GND"),
PINCTRL_PIN(167, "GND"),
PINCTRL_PIN(168, "GND"),
PINCTRL_PIN(169, "CVDD"),
PINCTRL_PIN(170, "SYM"),
PINCTRL_PIN(171, "SYP"),
PINCTRL_PIN(172, "SXM"),
PINCTRL_PIN(173, "SXP"),
PINCTRL_PIN(174, "DA[18]"),
PINCTRL_PIN(175, "DA[17]"),
PINCTRL_PIN(176, "DA[16]"),
PINCTRL_PIN(177, "DA[15]"),
PINCTRL_PIN(178, "GND"),
PINCTRL_PIN(179, "GND"),
PINCTRL_PIN(180, "GND"),
PINCTRL_PIN(181, "GND"),
PINCTRL_PIN(182, "GND"),
PINCTRL_PIN(183, "GND"),
PINCTRL_PIN(184, "GND"),
PINCTRL_PIN(185, "CVDD"),
PINCTRL_PIN(186, "COL[5]"),
PINCTRL_PIN(187, "COL[7]"),
PINCTRL_PIN(188, "RSTON"),
PINCTRL_PIN(189, "PRSTN"),
PINCTRL_PIN(190, "AD[7]"),
PINCTRL_PIN(191, "DA[14]"),
PINCTRL_PIN(192, "AD[6]"),
PINCTRL_PIN(193, "AD[5]"),
PINCTRL_PIN(194, "CVDD"),
PINCTRL_PIN(195, "GND"),
PINCTRL_PIN(196, "GND"),
PINCTRL_PIN(197, "GND"),
PINCTRL_PIN(198, "GND"),
PINCTRL_PIN(199, "GND"),
PINCTRL_PIN(200, "GND"),
PINCTRL_PIN(201, "GND"),
PINCTRL_PIN(202, "COL[4]"),
PINCTRL_PIN(203, "COL[3]"),
PINCTRL_PIN(204, "COL[6]"),
PINCTRL_PIN(205, "CSN[0]"),
PINCTRL_PIN(206, "DA[13]"),
PINCTRL_PIN(207, "DA[12]"),
PINCTRL_PIN(208, "DA[11]"),
PINCTRL_PIN(209, "AD[3]"),
PINCTRL_PIN(210, "CVDD"),
PINCTRL_PIN(211, "CVDD"),
PINCTRL_PIN(212, "GND"),
PINCTRL_PIN(213, "GND"),
PINCTRL_PIN(214, "GND"),
PINCTRL_PIN(215, "GND"),
PINCTRL_PIN(216, "GND"),
PINCTRL_PIN(217, "GND"),
PINCTRL_PIN(218, "GND"),
PINCTRL_PIN(219, "GND"),
PINCTRL_PIN(220, "XTALO"),
PINCTRL_PIN(221, "COL[0]"),
PINCTRL_PIN(222, "COL[1]"),
PINCTRL_PIN(223, "COL[2]"),
PINCTRL_PIN(224, "AD[4]"),
PINCTRL_PIN(225, "DA[10]"),
PINCTRL_PIN(226, "DA[9]"),
PINCTRL_PIN(227, "BRIGHT"),
PINCTRL_PIN(228, "RVDD"),
PINCTRL_PIN(229, "RVDD"),
PINCTRL_PIN(230, "RVDD"),
PINCTRL_PIN(231, "RVDD"),
PINCTRL_PIN(232, "XTALI"),
PINCTRL_PIN(233, "PLL_VDD"),
PINCTRL_PIN(234, "ROW[6]"),
PINCTRL_PIN(235, "ROW[7]"),
PINCTRL_PIN(236, "AD[2]"),
PINCTRL_PIN(237, "AD[1]"),
PINCTRL_PIN(238, "P[17]"),
PINCTRL_PIN(239, "P[14]"),
PINCTRL_PIN(240, "RVDD"),
PINCTRL_PIN(241, "RVDD"),
PINCTRL_PIN(242, "GND"),
PINCTRL_PIN(243, "CVDD"),
PINCTRL_PIN(244, "CVDD"),
PINCTRL_PIN(245, "GND"),
PINCTRL_PIN(246, "RVDD"),
PINCTRL_PIN(247, "RVDD"),
PINCTRL_PIN(248, "ROW[0]"),
PINCTRL_PIN(249, "ROW[3]"),
PINCTRL_PIN(250, "PLL_GND"),
PINCTRL_PIN(251, "ROW[5]"),
PINCTRL_PIN(252, "DA[8]"),
PINCTRL_PIN(253, "BLANK"),
PINCTRL_PIN(254, "P[13]"),
PINCTRL_PIN(255, "SPCLK"),
PINCTRL_PIN(256, "V_CSYNC"),
PINCTRL_PIN(257, "DD[14]"),
PINCTRL_PIN(258, "GND"),
PINCTRL_PIN(259, "CVDD"),
PINCTRL_PIN(260, "RVDD"),
PINCTRL_PIN(261, "GND"),
PINCTRL_PIN(262, "GND"),
PINCTRL_PIN(263, "RVDD"),
PINCTRL_PIN(264, "CVDD"),
PINCTRL_PIN(265, "GND"),
PINCTRL_PIN(266, "INT[0]"),
PINCTRL_PIN(267, "USBM[1]"),
PINCTRL_PIN(268, "RXD[0]"),
PINCTRL_PIN(269, "TXD[2]"),
PINCTRL_PIN(270, "ROW[2]"),
PINCTRL_PIN(271, "ROW[4]"),
PINCTRL_PIN(272, "AD[0]"),
PINCTRL_PIN(273, "P[15]"),
PINCTRL_PIN(274, "P[10]"),
PINCTRL_PIN(275, "P[7]"),
PINCTRL_PIN(276, "P[6]"),
PINCTRL_PIN(277, "P[4]"),
PINCTRL_PIN(278, "P[0]"),
PINCTRL_PIN(279, "AD[13]"),
PINCTRL_PIN(280, "DA[3]"),
PINCTRL_PIN(281, "DA[0]"),
PINCTRL_PIN(282, "DSRN"),
PINCTRL_PIN(283, "BOOT[1]"),
PINCTRL_PIN(284, "NC"),
PINCTRL_PIN(285, "SSPRX1"),
PINCTRL_PIN(286, "INT[1]"),
PINCTRL_PIN(287, "PWMOUT"),
PINCTRL_PIN(288, "USBM[0]"),
PINCTRL_PIN(289, "RXD[1]"),
PINCTRL_PIN(290, "TXD[1]"),
PINCTRL_PIN(291, "ROW[1]"),
PINCTRL_PIN(292, "P[16]"),
PINCTRL_PIN(293, "P[11]"),
PINCTRL_PIN(294, "P[8]"),
PINCTRL_PIN(295, "DD[15]"),
PINCTRL_PIN(296, "DD[13]"),
PINCTRL_PIN(297, "P[1]"),
PINCTRL_PIN(298, "AD[14]"),
PINCTRL_PIN(299, "AD[12]"),
PINCTRL_PIN(300, "DA[2]"),
PINCTRL_PIN(301, "IDECS0N"),
PINCTRL_PIN(302, "IDEDA[2]"),
PINCTRL_PIN(303, "TDI"),
PINCTRL_PIN(304, "GND"),
PINCTRL_PIN(305, "ASYNC"),
PINCTRL_PIN(306, "SSPTX1"),
PINCTRL_PIN(307, "INT[2]"),
PINCTRL_PIN(308, "RTSN"),
PINCTRL_PIN(309, "USBP[0]"),
PINCTRL_PIN(310, "CTSN"),
PINCTRL_PIN(311, "TXD[0]"),
PINCTRL_PIN(312, "P[12]"),
PINCTRL_PIN(313, "P[9]"),
PINCTRL_PIN(314, "DD[0]"),
PINCTRL_PIN(315, "P[5]"),
PINCTRL_PIN(316, "P[3]"),
PINCTRL_PIN(317, "DA[7]"),
PINCTRL_PIN(318, "DA[5]"),
PINCTRL_PIN(319, "AD[11]"),
PINCTRL_PIN(320, "AD[9]"),
PINCTRL_PIN(321, "IDECS1N"),
PINCTRL_PIN(322, "IDEDA[1]"),
PINCTRL_PIN(323, "TCK"),
PINCTRL_PIN(324, "TMS"),
PINCTRL_PIN(325, "EECLK"),
PINCTRL_PIN(326, "SCLK1"),
PINCTRL_PIN(327, "GRLED"),
PINCTRL_PIN(328, "INT[3]"),
PINCTRL_PIN(329, "SLA[1]"),
PINCTRL_PIN(330, "SLA[0]"),
PINCTRL_PIN(331, "RXD[2]"),
PINCTRL_PIN(332, "HSYNC"),
PINCTRL_PIN(333, "DD[1]"),
PINCTRL_PIN(334, "DD[12]"),
PINCTRL_PIN(335, "P[2]"),
PINCTRL_PIN(336, "AD[15]"),
PINCTRL_PIN(337, "DA[6]"),
PINCTRL_PIN(338, "DA[4]"),
PINCTRL_PIN(339, "AD[10]"),
PINCTRL_PIN(340, "DA[1]"),
PINCTRL_PIN(341, "AD[8]"),
PINCTRL_PIN(342, "IDEDA[0]"),
PINCTRL_PIN(343, "DTRN"),
PINCTRL_PIN(344, "TDO"),
PINCTRL_PIN(345, "BOOT[0]"),
PINCTRL_PIN(346, "EEDAT"),
PINCTRL_PIN(347, "ASDO"),
PINCTRL_PIN(348, "SFRM1"),
PINCTRL_PIN(349, "RDLED"),
PINCTRL_PIN(350, "USBP[1]"),
PINCTRL_PIN(351, "ABITCLK"),
};
static const unsigned int ssp_ep9312_pins[] = {
285, 306, 326, 348,
};
static const unsigned int ac97_ep9312_pins[] = {
77, 95, 305, 347, 351,
};
static const unsigned int pwm_ep9312_pins[] = { 74 };
static const unsigned int gpio1a_ep9312_pins[] = { 74 };
static const unsigned int gpio2a_9312_pins[] = {
234, 235, 248, 249, 251, 270, 271, 291,
};
static const unsigned int gpio3a_9312_pins[] = {
186, 187, 202, 203, 204, 221, 222, 223,
};
static const unsigned int keypad_9312_pins[] = {
186, 187, 202, 203, 204, 221, 222, 223,
234, 235, 248, 249, 251, 270, 271, 291,
};
static const unsigned int gpio4a_9312_pins[] = {
78, 301, 302, 321, 322, 342,
};
static const unsigned int gpio6a_9312_pins[] = {
257, 295, 296, 334,
};
static const unsigned int gpio7a_9312_pins[] = {
4, 24, 25, 45, 46, 66, 314, 333,
};
static const unsigned int ide_9312_pins[] = {
78, 301, 302, 321, 322, 342, 257, 295,
296, 334, 4, 24, 25, 45, 46, 66,
314, 333,
};
static const struct ep93xx_pin_group ep9312_pin_groups[] = {
PMX_GROUP("ssp", ssp_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP, 0),
PMX_GROUP("i2s_on_ssp", ssp_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONSSP,
EP93XX_SYSCON_DEVCFG_I2SONSSP),
PMX_GROUP("pwm1", pwm_ep9312_pins, EP93XX_SYSCON_DEVCFG_PONG,
EP93XX_SYSCON_DEVCFG_PONG),
PMX_GROUP("gpio1agrp", gpio1a_ep9312_pins, EP93XX_SYSCON_DEVCFG_PONG, 0),
PMX_GROUP("ac97", ac97_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97, 0),
PMX_GROUP("i2s_on_ac97", ac97_ep9312_pins, EP93XX_SYSCON_DEVCFG_I2SONAC97,
EP93XX_SYSCON_DEVCFG_I2SONAC97),
PMX_GROUP("rasteronsdram0grp", raster_on_sdram0_pins, EP93XX_SYSCON_DEVCFG_RASONP3, 0),
PMX_GROUP("rasteronsdram3grp", raster_on_sdram3_pins, EP93XX_SYSCON_DEVCFG_RASONP3,
EP93XX_SYSCON_DEVCFG_RASONP3),
PMX_GROUP("gpio2agrp", gpio2a_9312_pins, EP93XX_SYSCON_DEVCFG_GONK,
EP93XX_SYSCON_DEVCFG_GONK),
PMX_GROUP("gpio3agrp", gpio3a_9312_pins, EP93XX_SYSCON_DEVCFG_GONK,
EP93XX_SYSCON_DEVCFG_GONK),
PMX_GROUP("keypadgrp", keypad_9312_pins, EP93XX_SYSCON_DEVCFG_GONK, 0),
PMX_GROUP("gpio4agrp", gpio4a_9312_pins, EP93XX_SYSCON_DEVCFG_EONIDE,
EP93XX_SYSCON_DEVCFG_EONIDE),
PMX_GROUP("gpio6agrp", gpio6a_9312_pins, EP93XX_SYSCON_DEVCFG_GONIDE,
EP93XX_SYSCON_DEVCFG_GONIDE),
PMX_GROUP("gpio7agrp", gpio7a_9312_pins, EP93XX_SYSCON_DEVCFG_HONIDE,
EP93XX_SYSCON_DEVCFG_HONIDE),
PMX_GROUP("idegrp", ide_9312_pins, EP93XX_SYSCON_DEVCFG_EONIDE |
EP93XX_SYSCON_DEVCFG_GONIDE | EP93XX_SYSCON_DEVCFG_HONIDE, 0),
};
static int ep93xx_get_groups_count(struct pinctrl_dev *pctldev)
{
struct ep93xx_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
switch (pmx->model) {
case EP93XX_9301_PINCTRL:
return ARRAY_SIZE(ep9301_pin_groups);
case EP93XX_9307_PINCTRL:
return ARRAY_SIZE(ep9307_pin_groups);
case EP93XX_9312_PINCTRL:
return ARRAY_SIZE(ep9312_pin_groups);
default:
return 0;
}
}
static const char *ep93xx_get_group_name(struct pinctrl_dev *pctldev,
unsigned int selector)
{
struct ep93xx_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
switch (pmx->model) {
case EP93XX_9301_PINCTRL:
return ep9301_pin_groups[selector].grp.name;
case EP93XX_9307_PINCTRL:
return ep9307_pin_groups[selector].grp.name;
case EP93XX_9312_PINCTRL:
return ep9312_pin_groups[selector].grp.name;
default:
return NULL;
}
}
static int ep93xx_get_group_pins(struct pinctrl_dev *pctldev,
unsigned int selector,
const unsigned int **pins,
unsigned int *num_pins)
{
struct ep93xx_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
switch (pmx->model) {
case EP93XX_9301_PINCTRL:
*pins = ep9301_pin_groups[selector].grp.pins;
*num_pins = ep9301_pin_groups[selector].grp.npins;
break;
case EP93XX_9307_PINCTRL:
*pins = ep9307_pin_groups[selector].grp.pins;
*num_pins = ep9307_pin_groups[selector].grp.npins;
break;
case EP93XX_9312_PINCTRL:
*pins = ep9312_pin_groups[selector].grp.pins;
*num_pins = ep9312_pin_groups[selector].grp.npins;
break;
default:
return -EINVAL;
}
return 0;
}
static const struct pinctrl_ops ep93xx_pctrl_ops = {
.get_groups_count = ep93xx_get_groups_count,
.get_group_name = ep93xx_get_group_name,
.get_group_pins = ep93xx_get_group_pins,
.dt_node_to_map = pinconf_generic_dt_node_to_map_all,
.dt_free_map = pinconf_generic_dt_free_map,
};
static const char * const spigrps[] = { "ssp" };
static const char * const ac97grps[] = { "ac97" };
static const char * const i2sgrps[] = { "i2s_on_ssp", "i2s_on_ac97" };
static const char * const pwm1grps[] = { "pwm1" };
static const char * const gpiogrps[] = { "gpio1agrp", "gpio2agrp", "gpio3agrp",
"gpio4agrp", "gpio6agrp", "gpio7agrp" };
static const char * const rastergrps[] = { "rasteronsdram0grp", "rasteronsdram3grp"};
static const char * const keypadgrps[] = { "keypadgrp"};
static const char * const idegrps[] = { "idegrp"};
static const struct pinfunction ep93xx_pmx_functions[] = {
PINCTRL_PINFUNCTION("spi", spigrps, ARRAY_SIZE(spigrps)),
PINCTRL_PINFUNCTION("ac97", ac97grps, ARRAY_SIZE(ac97grps)),
PINCTRL_PINFUNCTION("i2s", i2sgrps, ARRAY_SIZE(i2sgrps)),
PINCTRL_PINFUNCTION("pwm", pwm1grps, ARRAY_SIZE(pwm1grps)),
PINCTRL_PINFUNCTION("keypad", keypadgrps, ARRAY_SIZE(keypadgrps)),
PINCTRL_PINFUNCTION("pata", idegrps, ARRAY_SIZE(idegrps)),
PINCTRL_PINFUNCTION("lcd", rastergrps, ARRAY_SIZE(rastergrps)),
PINCTRL_PINFUNCTION("gpio", gpiogrps, ARRAY_SIZE(gpiogrps)),
};
static int ep93xx_pmx_set_mux(struct pinctrl_dev *pctldev,
unsigned int selector,
unsigned int group)
{
struct ep93xx_pmx *pmx;
const struct pinfunction *func;
const struct ep93xx_pin_group *grp;
u32 before, after, expected;
unsigned long tmp;
int i;
pmx = pinctrl_dev_get_drvdata(pctldev);
switch (pmx->model) {
case EP93XX_9301_PINCTRL:
grp = &ep9301_pin_groups[group];
break;
case EP93XX_9307_PINCTRL:
grp = &ep9307_pin_groups[group];
break;
case EP93XX_9312_PINCTRL:
grp = &ep9312_pin_groups[group];
break;
default:
dev_err(pmx->dev, "invalid SoC type\n");
return -ENODEV;
}
func = &ep93xx_pmx_functions[selector];
dev_dbg(pmx->dev,
"ACTIVATE function \"%s\" with group \"%s\" (mask=0x%x, value=0x%x)\n",
func->name, grp->grp.name, grp->mask, grp->value);
regmap_read(pmx->map, EP93XX_SYSCON_DEVCFG, &before);
ep93xx_pinctrl_update_bits(pmx, EP93XX_SYSCON_DEVCFG,
grp->mask, grp->value);
regmap_read(pmx->map, EP93XX_SYSCON_DEVCFG, &after);
dev_dbg(pmx->dev, "before=0x%x, after=0x%x, mask=0x%lx\n",
before, after, PADS_MASK);
before &= PADS_MASK;
after &= PADS_MASK;
expected = before & ~grp->mask;
expected |= grp->value;
expected &= PADS_MASK;
tmp = expected ^ after;
for_each_set_bit(i, &tmp, PADS_MAXBIT) {
bool enabled = expected & BIT(i);
dev_err(pmx->dev,
"pin group %s could not be %s: probably a hardware limitation\n",
ep93xx_padgroups[i], str_enabled_disabled(enabled));
dev_err(pmx->dev,
"DeviceCfg before: %08x, after %08x, expected %08x\n",
before, after, expected);
}
return tmp ? -EINVAL : 0;
};
static int ep93xx_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
{
return ARRAY_SIZE(ep93xx_pmx_functions);
}
static const char *ep93xx_pmx_get_func_name(struct pinctrl_dev *pctldev,
unsigned int selector)
{
return ep93xx_pmx_functions[selector].name;
}
static int ep93xx_pmx_get_groups(struct pinctrl_dev *pctldev,
unsigned int selector,
const char * const **groups,
unsigned int * const num_groups)
{
*groups = ep93xx_pmx_functions[selector].groups;
*num_groups = ep93xx_pmx_functions[selector].ngroups;
return 0;
}
static const struct pinmux_ops ep93xx_pmx_ops = {
.get_functions_count = ep93xx_pmx_get_funcs_count,
.get_function_name = ep93xx_pmx_get_func_name,
.get_function_groups = ep93xx_pmx_get_groups,
.set_mux = ep93xx_pmx_set_mux,
};
static struct pinctrl_desc ep93xx_pmx_desc = {
.name = DRIVER_NAME,
.pctlops = &ep93xx_pctrl_ops,
.pmxops = &ep93xx_pmx_ops,
.owner = THIS_MODULE,
};
static int ep93xx_pmx_probe(struct auxiliary_device *adev,
const struct auxiliary_device_id *id)
{
struct ep93xx_regmap_adev *rdev = to_ep93xx_regmap_adev(adev);
struct device *dev = &adev->dev;
struct ep93xx_pmx *pmx;
pmx = devm_kzalloc(dev, sizeof(*pmx), GFP_KERNEL);
if (!pmx)
return -ENOMEM;
pmx->dev = dev;
pmx->map = rdev->map;
pmx->aux_dev = rdev;
pmx->model = (enum ep93xx_pinctrl_model)(uintptr_t)id->driver_data;
switch (pmx->model) {
case EP93XX_9301_PINCTRL:
ep93xx_pmx_desc.pins = ep9301_pins;
ep93xx_pmx_desc.npins = ARRAY_SIZE(ep9301_pins);
dev_info(dev, "detected 9301/9302 chip variant\n");
break;
case EP93XX_9307_PINCTRL:
ep93xx_pmx_desc.pins = ep9307_pins;
ep93xx_pmx_desc.npins = ARRAY_SIZE(ep9307_pins);
dev_info(dev, "detected 9307 chip variant\n");
break;
case EP93XX_9312_PINCTRL:
ep93xx_pmx_desc.pins = ep9312_pins;
ep93xx_pmx_desc.npins = ARRAY_SIZE(ep9312_pins);
dev_info(dev, "detected 9312/9315 chip variant\n");
break;
default:
return dev_err_probe(dev, -EINVAL, "unknown pin control model: %u\n", pmx->model);
}
device_set_node(dev, dev_fwnode(adev->dev.parent));
pmx->pctl = devm_pinctrl_register(dev, &ep93xx_pmx_desc, pmx);
if (IS_ERR(pmx->pctl))
return dev_err_probe(dev, PTR_ERR(pmx->pctl), "could not register pinmux driver\n");
return 0;
};
static const struct auxiliary_device_id ep93xx_pinctrl_ids[] = {
{
.name = "soc_ep93xx.pinctrl-ep9301",
.driver_data = (kernel_ulong_t)EP93XX_9301_PINCTRL,
},
{
.name = "soc_ep93xx.pinctrl-ep9307",
.driver_data = (kernel_ulong_t)EP93XX_9307_PINCTRL,
},
{
.name = "soc_ep93xx.pinctrl-ep9312",
.driver_data = (kernel_ulong_t)EP93XX_9312_PINCTRL,
},
{ }
};
MODULE_DEVICE_TABLE(auxiliary, ep93xx_pinctrl_ids);
static struct auxiliary_driver ep93xx_pmx_driver = {
.probe = ep93xx_pmx_probe,
.id_table = ep93xx_pinctrl_ids,
};
module_auxiliary_driver(ep93xx_pmx_driver);