1*52130b60SViresh Kumar /* 2*52130b60SViresh Kumar * Driver for the ST Microelectronics SPEAr3xx pinmux 3*52130b60SViresh Kumar * 4*52130b60SViresh Kumar * Copyright (C) 2012 ST Microelectronics 5*52130b60SViresh Kumar * Viresh Kumar <viresh.kumar@st.com> 6*52130b60SViresh Kumar * 7*52130b60SViresh Kumar * This file is licensed under the terms of the GNU General Public 8*52130b60SViresh Kumar * License version 2. This program is licensed "as is" without any 9*52130b60SViresh Kumar * warranty of any kind, whether express or implied. 10*52130b60SViresh Kumar */ 11*52130b60SViresh Kumar 12*52130b60SViresh Kumar #include <linux/pinctrl/pinctrl.h> 13*52130b60SViresh Kumar 14*52130b60SViresh Kumar #include "pinctrl-spear3xx.h" 15*52130b60SViresh Kumar 16*52130b60SViresh Kumar /* pins */ 17*52130b60SViresh Kumar static const struct pinctrl_pin_desc spear3xx_pins[] = { 18*52130b60SViresh Kumar PINCTRL_PIN(0, "PLGPIO0"), 19*52130b60SViresh Kumar PINCTRL_PIN(1, "PLGPIO1"), 20*52130b60SViresh Kumar PINCTRL_PIN(2, "PLGPIO2"), 21*52130b60SViresh Kumar PINCTRL_PIN(3, "PLGPIO3"), 22*52130b60SViresh Kumar PINCTRL_PIN(4, "PLGPIO4"), 23*52130b60SViresh Kumar PINCTRL_PIN(5, "PLGPIO5"), 24*52130b60SViresh Kumar PINCTRL_PIN(6, "PLGPIO6"), 25*52130b60SViresh Kumar PINCTRL_PIN(7, "PLGPIO7"), 26*52130b60SViresh Kumar PINCTRL_PIN(8, "PLGPIO8"), 27*52130b60SViresh Kumar PINCTRL_PIN(9, "PLGPIO9"), 28*52130b60SViresh Kumar PINCTRL_PIN(10, "PLGPIO10"), 29*52130b60SViresh Kumar PINCTRL_PIN(11, "PLGPIO11"), 30*52130b60SViresh Kumar PINCTRL_PIN(12, "PLGPIO12"), 31*52130b60SViresh Kumar PINCTRL_PIN(13, "PLGPIO13"), 32*52130b60SViresh Kumar PINCTRL_PIN(14, "PLGPIO14"), 33*52130b60SViresh Kumar PINCTRL_PIN(15, "PLGPIO15"), 34*52130b60SViresh Kumar PINCTRL_PIN(16, "PLGPIO16"), 35*52130b60SViresh Kumar PINCTRL_PIN(17, "PLGPIO17"), 36*52130b60SViresh Kumar PINCTRL_PIN(18, "PLGPIO18"), 37*52130b60SViresh Kumar PINCTRL_PIN(19, "PLGPIO19"), 38*52130b60SViresh Kumar PINCTRL_PIN(20, "PLGPIO20"), 39*52130b60SViresh Kumar PINCTRL_PIN(21, "PLGPIO21"), 40*52130b60SViresh Kumar PINCTRL_PIN(22, "PLGPIO22"), 41*52130b60SViresh Kumar PINCTRL_PIN(23, "PLGPIO23"), 42*52130b60SViresh Kumar PINCTRL_PIN(24, "PLGPIO24"), 43*52130b60SViresh Kumar PINCTRL_PIN(25, "PLGPIO25"), 44*52130b60SViresh Kumar PINCTRL_PIN(26, "PLGPIO26"), 45*52130b60SViresh Kumar PINCTRL_PIN(27, "PLGPIO27"), 46*52130b60SViresh Kumar PINCTRL_PIN(28, "PLGPIO28"), 47*52130b60SViresh Kumar PINCTRL_PIN(29, "PLGPIO29"), 48*52130b60SViresh Kumar PINCTRL_PIN(30, "PLGPIO30"), 49*52130b60SViresh Kumar PINCTRL_PIN(31, "PLGPIO31"), 50*52130b60SViresh Kumar PINCTRL_PIN(32, "PLGPIO32"), 51*52130b60SViresh Kumar PINCTRL_PIN(33, "PLGPIO33"), 52*52130b60SViresh Kumar PINCTRL_PIN(34, "PLGPIO34"), 53*52130b60SViresh Kumar PINCTRL_PIN(35, "PLGPIO35"), 54*52130b60SViresh Kumar PINCTRL_PIN(36, "PLGPIO36"), 55*52130b60SViresh Kumar PINCTRL_PIN(37, "PLGPIO37"), 56*52130b60SViresh Kumar PINCTRL_PIN(38, "PLGPIO38"), 57*52130b60SViresh Kumar PINCTRL_PIN(39, "PLGPIO39"), 58*52130b60SViresh Kumar PINCTRL_PIN(40, "PLGPIO40"), 59*52130b60SViresh Kumar PINCTRL_PIN(41, "PLGPIO41"), 60*52130b60SViresh Kumar PINCTRL_PIN(42, "PLGPIO42"), 61*52130b60SViresh Kumar PINCTRL_PIN(43, "PLGPIO43"), 62*52130b60SViresh Kumar PINCTRL_PIN(44, "PLGPIO44"), 63*52130b60SViresh Kumar PINCTRL_PIN(45, "PLGPIO45"), 64*52130b60SViresh Kumar PINCTRL_PIN(46, "PLGPIO46"), 65*52130b60SViresh Kumar PINCTRL_PIN(47, "PLGPIO47"), 66*52130b60SViresh Kumar PINCTRL_PIN(48, "PLGPIO48"), 67*52130b60SViresh Kumar PINCTRL_PIN(49, "PLGPIO49"), 68*52130b60SViresh Kumar PINCTRL_PIN(50, "PLGPIO50"), 69*52130b60SViresh Kumar PINCTRL_PIN(51, "PLGPIO51"), 70*52130b60SViresh Kumar PINCTRL_PIN(52, "PLGPIO52"), 71*52130b60SViresh Kumar PINCTRL_PIN(53, "PLGPIO53"), 72*52130b60SViresh Kumar PINCTRL_PIN(54, "PLGPIO54"), 73*52130b60SViresh Kumar PINCTRL_PIN(55, "PLGPIO55"), 74*52130b60SViresh Kumar PINCTRL_PIN(56, "PLGPIO56"), 75*52130b60SViresh Kumar PINCTRL_PIN(57, "PLGPIO57"), 76*52130b60SViresh Kumar PINCTRL_PIN(58, "PLGPIO58"), 77*52130b60SViresh Kumar PINCTRL_PIN(59, "PLGPIO59"), 78*52130b60SViresh Kumar PINCTRL_PIN(60, "PLGPIO60"), 79*52130b60SViresh Kumar PINCTRL_PIN(61, "PLGPIO61"), 80*52130b60SViresh Kumar PINCTRL_PIN(62, "PLGPIO62"), 81*52130b60SViresh Kumar PINCTRL_PIN(63, "PLGPIO63"), 82*52130b60SViresh Kumar PINCTRL_PIN(64, "PLGPIO64"), 83*52130b60SViresh Kumar PINCTRL_PIN(65, "PLGPIO65"), 84*52130b60SViresh Kumar PINCTRL_PIN(66, "PLGPIO66"), 85*52130b60SViresh Kumar PINCTRL_PIN(67, "PLGPIO67"), 86*52130b60SViresh Kumar PINCTRL_PIN(68, "PLGPIO68"), 87*52130b60SViresh Kumar PINCTRL_PIN(69, "PLGPIO69"), 88*52130b60SViresh Kumar PINCTRL_PIN(70, "PLGPIO70"), 89*52130b60SViresh Kumar PINCTRL_PIN(71, "PLGPIO71"), 90*52130b60SViresh Kumar PINCTRL_PIN(72, "PLGPIO72"), 91*52130b60SViresh Kumar PINCTRL_PIN(73, "PLGPIO73"), 92*52130b60SViresh Kumar PINCTRL_PIN(74, "PLGPIO74"), 93*52130b60SViresh Kumar PINCTRL_PIN(75, "PLGPIO75"), 94*52130b60SViresh Kumar PINCTRL_PIN(76, "PLGPIO76"), 95*52130b60SViresh Kumar PINCTRL_PIN(77, "PLGPIO77"), 96*52130b60SViresh Kumar PINCTRL_PIN(78, "PLGPIO78"), 97*52130b60SViresh Kumar PINCTRL_PIN(79, "PLGPIO79"), 98*52130b60SViresh Kumar PINCTRL_PIN(80, "PLGPIO80"), 99*52130b60SViresh Kumar PINCTRL_PIN(81, "PLGPIO81"), 100*52130b60SViresh Kumar PINCTRL_PIN(82, "PLGPIO82"), 101*52130b60SViresh Kumar PINCTRL_PIN(83, "PLGPIO83"), 102*52130b60SViresh Kumar PINCTRL_PIN(84, "PLGPIO84"), 103*52130b60SViresh Kumar PINCTRL_PIN(85, "PLGPIO85"), 104*52130b60SViresh Kumar PINCTRL_PIN(86, "PLGPIO86"), 105*52130b60SViresh Kumar PINCTRL_PIN(87, "PLGPIO87"), 106*52130b60SViresh Kumar PINCTRL_PIN(88, "PLGPIO88"), 107*52130b60SViresh Kumar PINCTRL_PIN(89, "PLGPIO89"), 108*52130b60SViresh Kumar PINCTRL_PIN(90, "PLGPIO90"), 109*52130b60SViresh Kumar PINCTRL_PIN(91, "PLGPIO91"), 110*52130b60SViresh Kumar PINCTRL_PIN(92, "PLGPIO92"), 111*52130b60SViresh Kumar PINCTRL_PIN(93, "PLGPIO93"), 112*52130b60SViresh Kumar PINCTRL_PIN(94, "PLGPIO94"), 113*52130b60SViresh Kumar PINCTRL_PIN(95, "PLGPIO95"), 114*52130b60SViresh Kumar PINCTRL_PIN(96, "PLGPIO96"), 115*52130b60SViresh Kumar PINCTRL_PIN(97, "PLGPIO97"), 116*52130b60SViresh Kumar PINCTRL_PIN(98, "PLGPIO98"), 117*52130b60SViresh Kumar PINCTRL_PIN(99, "PLGPIO99"), 118*52130b60SViresh Kumar PINCTRL_PIN(100, "PLGPIO100"), 119*52130b60SViresh Kumar PINCTRL_PIN(101, "PLGPIO101"), 120*52130b60SViresh Kumar }; 121*52130b60SViresh Kumar 122*52130b60SViresh Kumar /* firda_pins */ 123*52130b60SViresh Kumar static const unsigned firda_pins[] = { 0, 1 }; 124*52130b60SViresh Kumar static struct spear_muxreg firda_muxreg[] = { 125*52130b60SViresh Kumar { 126*52130b60SViresh Kumar .reg = -1, 127*52130b60SViresh Kumar .mask = PMX_FIRDA_MASK, 128*52130b60SViresh Kumar .val = PMX_FIRDA_MASK, 129*52130b60SViresh Kumar }, 130*52130b60SViresh Kumar }; 131*52130b60SViresh Kumar 132*52130b60SViresh Kumar static struct spear_modemux firda_modemux[] = { 133*52130b60SViresh Kumar { 134*52130b60SViresh Kumar .modes = ~0, 135*52130b60SViresh Kumar .muxregs = firda_muxreg, 136*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(firda_muxreg), 137*52130b60SViresh Kumar }, 138*52130b60SViresh Kumar }; 139*52130b60SViresh Kumar 140*52130b60SViresh Kumar struct spear_pingroup spear3xx_firda_pingroup = { 141*52130b60SViresh Kumar .name = "firda_grp", 142*52130b60SViresh Kumar .pins = firda_pins, 143*52130b60SViresh Kumar .npins = ARRAY_SIZE(firda_pins), 144*52130b60SViresh Kumar .modemuxs = firda_modemux, 145*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(firda_modemux), 146*52130b60SViresh Kumar }; 147*52130b60SViresh Kumar 148*52130b60SViresh Kumar static const char *const firda_grps[] = { "firda_grp" }; 149*52130b60SViresh Kumar struct spear_function spear3xx_firda_function = { 150*52130b60SViresh Kumar .name = "firda", 151*52130b60SViresh Kumar .groups = firda_grps, 152*52130b60SViresh Kumar .ngroups = ARRAY_SIZE(firda_grps), 153*52130b60SViresh Kumar }; 154*52130b60SViresh Kumar 155*52130b60SViresh Kumar /* i2c_pins */ 156*52130b60SViresh Kumar static const unsigned i2c_pins[] = { 4, 5 }; 157*52130b60SViresh Kumar static struct spear_muxreg i2c_muxreg[] = { 158*52130b60SViresh Kumar { 159*52130b60SViresh Kumar .reg = -1, 160*52130b60SViresh Kumar .mask = PMX_I2C_MASK, 161*52130b60SViresh Kumar .val = PMX_I2C_MASK, 162*52130b60SViresh Kumar }, 163*52130b60SViresh Kumar }; 164*52130b60SViresh Kumar 165*52130b60SViresh Kumar static struct spear_modemux i2c_modemux[] = { 166*52130b60SViresh Kumar { 167*52130b60SViresh Kumar .modes = ~0, 168*52130b60SViresh Kumar .muxregs = i2c_muxreg, 169*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(i2c_muxreg), 170*52130b60SViresh Kumar }, 171*52130b60SViresh Kumar }; 172*52130b60SViresh Kumar 173*52130b60SViresh Kumar struct spear_pingroup spear3xx_i2c_pingroup = { 174*52130b60SViresh Kumar .name = "i2c0_grp", 175*52130b60SViresh Kumar .pins = i2c_pins, 176*52130b60SViresh Kumar .npins = ARRAY_SIZE(i2c_pins), 177*52130b60SViresh Kumar .modemuxs = i2c_modemux, 178*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(i2c_modemux), 179*52130b60SViresh Kumar }; 180*52130b60SViresh Kumar 181*52130b60SViresh Kumar static const char *const i2c_grps[] = { "i2c0_grp" }; 182*52130b60SViresh Kumar struct spear_function spear3xx_i2c_function = { 183*52130b60SViresh Kumar .name = "i2c0", 184*52130b60SViresh Kumar .groups = i2c_grps, 185*52130b60SViresh Kumar .ngroups = ARRAY_SIZE(i2c_grps), 186*52130b60SViresh Kumar }; 187*52130b60SViresh Kumar 188*52130b60SViresh Kumar /* ssp_cs_pins */ 189*52130b60SViresh Kumar static const unsigned ssp_cs_pins[] = { 34, 35, 36 }; 190*52130b60SViresh Kumar static struct spear_muxreg ssp_cs_muxreg[] = { 191*52130b60SViresh Kumar { 192*52130b60SViresh Kumar .reg = -1, 193*52130b60SViresh Kumar .mask = PMX_SSP_CS_MASK, 194*52130b60SViresh Kumar .val = PMX_SSP_CS_MASK, 195*52130b60SViresh Kumar }, 196*52130b60SViresh Kumar }; 197*52130b60SViresh Kumar 198*52130b60SViresh Kumar static struct spear_modemux ssp_cs_modemux[] = { 199*52130b60SViresh Kumar { 200*52130b60SViresh Kumar .modes = ~0, 201*52130b60SViresh Kumar .muxregs = ssp_cs_muxreg, 202*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(ssp_cs_muxreg), 203*52130b60SViresh Kumar }, 204*52130b60SViresh Kumar }; 205*52130b60SViresh Kumar 206*52130b60SViresh Kumar struct spear_pingroup spear3xx_ssp_cs_pingroup = { 207*52130b60SViresh Kumar .name = "ssp_cs_grp", 208*52130b60SViresh Kumar .pins = ssp_cs_pins, 209*52130b60SViresh Kumar .npins = ARRAY_SIZE(ssp_cs_pins), 210*52130b60SViresh Kumar .modemuxs = ssp_cs_modemux, 211*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(ssp_cs_modemux), 212*52130b60SViresh Kumar }; 213*52130b60SViresh Kumar 214*52130b60SViresh Kumar static const char *const ssp_cs_grps[] = { "ssp_cs_grp" }; 215*52130b60SViresh Kumar struct spear_function spear3xx_ssp_cs_function = { 216*52130b60SViresh Kumar .name = "ssp_cs", 217*52130b60SViresh Kumar .groups = ssp_cs_grps, 218*52130b60SViresh Kumar .ngroups = ARRAY_SIZE(ssp_cs_grps), 219*52130b60SViresh Kumar }; 220*52130b60SViresh Kumar 221*52130b60SViresh Kumar /* ssp_pins */ 222*52130b60SViresh Kumar static const unsigned ssp_pins[] = { 6, 7, 8, 9 }; 223*52130b60SViresh Kumar static struct spear_muxreg ssp_muxreg[] = { 224*52130b60SViresh Kumar { 225*52130b60SViresh Kumar .reg = -1, 226*52130b60SViresh Kumar .mask = PMX_SSP_MASK, 227*52130b60SViresh Kumar .val = PMX_SSP_MASK, 228*52130b60SViresh Kumar }, 229*52130b60SViresh Kumar }; 230*52130b60SViresh Kumar 231*52130b60SViresh Kumar static struct spear_modemux ssp_modemux[] = { 232*52130b60SViresh Kumar { 233*52130b60SViresh Kumar .modes = ~0, 234*52130b60SViresh Kumar .muxregs = ssp_muxreg, 235*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(ssp_muxreg), 236*52130b60SViresh Kumar }, 237*52130b60SViresh Kumar }; 238*52130b60SViresh Kumar 239*52130b60SViresh Kumar struct spear_pingroup spear3xx_ssp_pingroup = { 240*52130b60SViresh Kumar .name = "ssp0_grp", 241*52130b60SViresh Kumar .pins = ssp_pins, 242*52130b60SViresh Kumar .npins = ARRAY_SIZE(ssp_pins), 243*52130b60SViresh Kumar .modemuxs = ssp_modemux, 244*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(ssp_modemux), 245*52130b60SViresh Kumar }; 246*52130b60SViresh Kumar 247*52130b60SViresh Kumar static const char *const ssp_grps[] = { "ssp0_grp" }; 248*52130b60SViresh Kumar struct spear_function spear3xx_ssp_function = { 249*52130b60SViresh Kumar .name = "ssp0", 250*52130b60SViresh Kumar .groups = ssp_grps, 251*52130b60SViresh Kumar .ngroups = ARRAY_SIZE(ssp_grps), 252*52130b60SViresh Kumar }; 253*52130b60SViresh Kumar 254*52130b60SViresh Kumar /* mii_pins */ 255*52130b60SViresh Kumar static const unsigned mii_pins[] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 256*52130b60SViresh Kumar 21, 22, 23, 24, 25, 26, 27 }; 257*52130b60SViresh Kumar static struct spear_muxreg mii_muxreg[] = { 258*52130b60SViresh Kumar { 259*52130b60SViresh Kumar .reg = -1, 260*52130b60SViresh Kumar .mask = PMX_MII_MASK, 261*52130b60SViresh Kumar .val = PMX_MII_MASK, 262*52130b60SViresh Kumar }, 263*52130b60SViresh Kumar }; 264*52130b60SViresh Kumar 265*52130b60SViresh Kumar static struct spear_modemux mii_modemux[] = { 266*52130b60SViresh Kumar { 267*52130b60SViresh Kumar .modes = ~0, 268*52130b60SViresh Kumar .muxregs = mii_muxreg, 269*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(mii_muxreg), 270*52130b60SViresh Kumar }, 271*52130b60SViresh Kumar }; 272*52130b60SViresh Kumar 273*52130b60SViresh Kumar struct spear_pingroup spear3xx_mii_pingroup = { 274*52130b60SViresh Kumar .name = "mii0_grp", 275*52130b60SViresh Kumar .pins = mii_pins, 276*52130b60SViresh Kumar .npins = ARRAY_SIZE(mii_pins), 277*52130b60SViresh Kumar .modemuxs = mii_modemux, 278*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(mii_modemux), 279*52130b60SViresh Kumar }; 280*52130b60SViresh Kumar 281*52130b60SViresh Kumar static const char *const mii_grps[] = { "mii0_grp" }; 282*52130b60SViresh Kumar struct spear_function spear3xx_mii_function = { 283*52130b60SViresh Kumar .name = "mii0", 284*52130b60SViresh Kumar .groups = mii_grps, 285*52130b60SViresh Kumar .ngroups = ARRAY_SIZE(mii_grps), 286*52130b60SViresh Kumar }; 287*52130b60SViresh Kumar 288*52130b60SViresh Kumar /* gpio0_pin0_pins */ 289*52130b60SViresh Kumar static const unsigned gpio0_pin0_pins[] = { 28 }; 290*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin0_muxreg[] = { 291*52130b60SViresh Kumar { 292*52130b60SViresh Kumar .reg = -1, 293*52130b60SViresh Kumar .mask = PMX_GPIO_PIN0_MASK, 294*52130b60SViresh Kumar .val = PMX_GPIO_PIN0_MASK, 295*52130b60SViresh Kumar }, 296*52130b60SViresh Kumar }; 297*52130b60SViresh Kumar 298*52130b60SViresh Kumar static struct spear_modemux gpio0_pin0_modemux[] = { 299*52130b60SViresh Kumar { 300*52130b60SViresh Kumar .modes = ~0, 301*52130b60SViresh Kumar .muxregs = gpio0_pin0_muxreg, 302*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(gpio0_pin0_muxreg), 303*52130b60SViresh Kumar }, 304*52130b60SViresh Kumar }; 305*52130b60SViresh Kumar 306*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin0_pingroup = { 307*52130b60SViresh Kumar .name = "gpio0_pin0_grp", 308*52130b60SViresh Kumar .pins = gpio0_pin0_pins, 309*52130b60SViresh Kumar .npins = ARRAY_SIZE(gpio0_pin0_pins), 310*52130b60SViresh Kumar .modemuxs = gpio0_pin0_modemux, 311*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(gpio0_pin0_modemux), 312*52130b60SViresh Kumar }; 313*52130b60SViresh Kumar 314*52130b60SViresh Kumar /* gpio0_pin1_pins */ 315*52130b60SViresh Kumar static const unsigned gpio0_pin1_pins[] = { 29 }; 316*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin1_muxreg[] = { 317*52130b60SViresh Kumar { 318*52130b60SViresh Kumar .reg = -1, 319*52130b60SViresh Kumar .mask = PMX_GPIO_PIN1_MASK, 320*52130b60SViresh Kumar .val = PMX_GPIO_PIN1_MASK, 321*52130b60SViresh Kumar }, 322*52130b60SViresh Kumar }; 323*52130b60SViresh Kumar 324*52130b60SViresh Kumar static struct spear_modemux gpio0_pin1_modemux[] = { 325*52130b60SViresh Kumar { 326*52130b60SViresh Kumar .modes = ~0, 327*52130b60SViresh Kumar .muxregs = gpio0_pin1_muxreg, 328*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(gpio0_pin1_muxreg), 329*52130b60SViresh Kumar }, 330*52130b60SViresh Kumar }; 331*52130b60SViresh Kumar 332*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin1_pingroup = { 333*52130b60SViresh Kumar .name = "gpio0_pin1_grp", 334*52130b60SViresh Kumar .pins = gpio0_pin1_pins, 335*52130b60SViresh Kumar .npins = ARRAY_SIZE(gpio0_pin1_pins), 336*52130b60SViresh Kumar .modemuxs = gpio0_pin1_modemux, 337*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(gpio0_pin1_modemux), 338*52130b60SViresh Kumar }; 339*52130b60SViresh Kumar 340*52130b60SViresh Kumar /* gpio0_pin2_pins */ 341*52130b60SViresh Kumar static const unsigned gpio0_pin2_pins[] = { 30 }; 342*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin2_muxreg[] = { 343*52130b60SViresh Kumar { 344*52130b60SViresh Kumar .reg = -1, 345*52130b60SViresh Kumar .mask = PMX_GPIO_PIN2_MASK, 346*52130b60SViresh Kumar .val = PMX_GPIO_PIN2_MASK, 347*52130b60SViresh Kumar }, 348*52130b60SViresh Kumar }; 349*52130b60SViresh Kumar 350*52130b60SViresh Kumar static struct spear_modemux gpio0_pin2_modemux[] = { 351*52130b60SViresh Kumar { 352*52130b60SViresh Kumar .modes = ~0, 353*52130b60SViresh Kumar .muxregs = gpio0_pin2_muxreg, 354*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(gpio0_pin2_muxreg), 355*52130b60SViresh Kumar }, 356*52130b60SViresh Kumar }; 357*52130b60SViresh Kumar 358*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin2_pingroup = { 359*52130b60SViresh Kumar .name = "gpio0_pin2_grp", 360*52130b60SViresh Kumar .pins = gpio0_pin2_pins, 361*52130b60SViresh Kumar .npins = ARRAY_SIZE(gpio0_pin2_pins), 362*52130b60SViresh Kumar .modemuxs = gpio0_pin2_modemux, 363*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(gpio0_pin2_modemux), 364*52130b60SViresh Kumar }; 365*52130b60SViresh Kumar 366*52130b60SViresh Kumar /* gpio0_pin3_pins */ 367*52130b60SViresh Kumar static const unsigned gpio0_pin3_pins[] = { 31 }; 368*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin3_muxreg[] = { 369*52130b60SViresh Kumar { 370*52130b60SViresh Kumar .reg = -1, 371*52130b60SViresh Kumar .mask = PMX_GPIO_PIN3_MASK, 372*52130b60SViresh Kumar .val = PMX_GPIO_PIN3_MASK, 373*52130b60SViresh Kumar }, 374*52130b60SViresh Kumar }; 375*52130b60SViresh Kumar 376*52130b60SViresh Kumar static struct spear_modemux gpio0_pin3_modemux[] = { 377*52130b60SViresh Kumar { 378*52130b60SViresh Kumar .modes = ~0, 379*52130b60SViresh Kumar .muxregs = gpio0_pin3_muxreg, 380*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(gpio0_pin3_muxreg), 381*52130b60SViresh Kumar }, 382*52130b60SViresh Kumar }; 383*52130b60SViresh Kumar 384*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin3_pingroup = { 385*52130b60SViresh Kumar .name = "gpio0_pin3_grp", 386*52130b60SViresh Kumar .pins = gpio0_pin3_pins, 387*52130b60SViresh Kumar .npins = ARRAY_SIZE(gpio0_pin3_pins), 388*52130b60SViresh Kumar .modemuxs = gpio0_pin3_modemux, 389*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(gpio0_pin3_modemux), 390*52130b60SViresh Kumar }; 391*52130b60SViresh Kumar 392*52130b60SViresh Kumar /* gpio0_pin4_pins */ 393*52130b60SViresh Kumar static const unsigned gpio0_pin4_pins[] = { 32 }; 394*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin4_muxreg[] = { 395*52130b60SViresh Kumar { 396*52130b60SViresh Kumar .reg = -1, 397*52130b60SViresh Kumar .mask = PMX_GPIO_PIN4_MASK, 398*52130b60SViresh Kumar .val = PMX_GPIO_PIN4_MASK, 399*52130b60SViresh Kumar }, 400*52130b60SViresh Kumar }; 401*52130b60SViresh Kumar 402*52130b60SViresh Kumar static struct spear_modemux gpio0_pin4_modemux[] = { 403*52130b60SViresh Kumar { 404*52130b60SViresh Kumar .modes = ~0, 405*52130b60SViresh Kumar .muxregs = gpio0_pin4_muxreg, 406*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(gpio0_pin4_muxreg), 407*52130b60SViresh Kumar }, 408*52130b60SViresh Kumar }; 409*52130b60SViresh Kumar 410*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin4_pingroup = { 411*52130b60SViresh Kumar .name = "gpio0_pin4_grp", 412*52130b60SViresh Kumar .pins = gpio0_pin4_pins, 413*52130b60SViresh Kumar .npins = ARRAY_SIZE(gpio0_pin4_pins), 414*52130b60SViresh Kumar .modemuxs = gpio0_pin4_modemux, 415*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(gpio0_pin4_modemux), 416*52130b60SViresh Kumar }; 417*52130b60SViresh Kumar 418*52130b60SViresh Kumar /* gpio0_pin5_pins */ 419*52130b60SViresh Kumar static const unsigned gpio0_pin5_pins[] = { 33 }; 420*52130b60SViresh Kumar static struct spear_muxreg gpio0_pin5_muxreg[] = { 421*52130b60SViresh Kumar { 422*52130b60SViresh Kumar .reg = -1, 423*52130b60SViresh Kumar .mask = PMX_GPIO_PIN5_MASK, 424*52130b60SViresh Kumar .val = PMX_GPIO_PIN5_MASK, 425*52130b60SViresh Kumar }, 426*52130b60SViresh Kumar }; 427*52130b60SViresh Kumar 428*52130b60SViresh Kumar static struct spear_modemux gpio0_pin5_modemux[] = { 429*52130b60SViresh Kumar { 430*52130b60SViresh Kumar .modes = ~0, 431*52130b60SViresh Kumar .muxregs = gpio0_pin5_muxreg, 432*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(gpio0_pin5_muxreg), 433*52130b60SViresh Kumar }, 434*52130b60SViresh Kumar }; 435*52130b60SViresh Kumar 436*52130b60SViresh Kumar struct spear_pingroup spear3xx_gpio0_pin5_pingroup = { 437*52130b60SViresh Kumar .name = "gpio0_pin5_grp", 438*52130b60SViresh Kumar .pins = gpio0_pin5_pins, 439*52130b60SViresh Kumar .npins = ARRAY_SIZE(gpio0_pin5_pins), 440*52130b60SViresh Kumar .modemuxs = gpio0_pin5_modemux, 441*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(gpio0_pin5_modemux), 442*52130b60SViresh Kumar }; 443*52130b60SViresh Kumar 444*52130b60SViresh Kumar static const char *const gpio0_grps[] = { "gpio0_pin0_grp", "gpio0_pin1_grp", 445*52130b60SViresh Kumar "gpio0_pin2_grp", "gpio0_pin3_grp", "gpio0_pin4_grp", "gpio0_pin5_grp", 446*52130b60SViresh Kumar }; 447*52130b60SViresh Kumar struct spear_function spear3xx_gpio0_function = { 448*52130b60SViresh Kumar .name = "gpio0", 449*52130b60SViresh Kumar .groups = gpio0_grps, 450*52130b60SViresh Kumar .ngroups = ARRAY_SIZE(gpio0_grps), 451*52130b60SViresh Kumar }; 452*52130b60SViresh Kumar 453*52130b60SViresh Kumar /* uart0_ext_pins */ 454*52130b60SViresh Kumar static const unsigned uart0_ext_pins[] = { 37, 38, 39, 40, 41, 42 }; 455*52130b60SViresh Kumar static struct spear_muxreg uart0_ext_muxreg[] = { 456*52130b60SViresh Kumar { 457*52130b60SViresh Kumar .reg = -1, 458*52130b60SViresh Kumar .mask = PMX_UART0_MODEM_MASK, 459*52130b60SViresh Kumar .val = PMX_UART0_MODEM_MASK, 460*52130b60SViresh Kumar }, 461*52130b60SViresh Kumar }; 462*52130b60SViresh Kumar 463*52130b60SViresh Kumar static struct spear_modemux uart0_ext_modemux[] = { 464*52130b60SViresh Kumar { 465*52130b60SViresh Kumar .modes = ~0, 466*52130b60SViresh Kumar .muxregs = uart0_ext_muxreg, 467*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(uart0_ext_muxreg), 468*52130b60SViresh Kumar }, 469*52130b60SViresh Kumar }; 470*52130b60SViresh Kumar 471*52130b60SViresh Kumar struct spear_pingroup spear3xx_uart0_ext_pingroup = { 472*52130b60SViresh Kumar .name = "uart0_ext_grp", 473*52130b60SViresh Kumar .pins = uart0_ext_pins, 474*52130b60SViresh Kumar .npins = ARRAY_SIZE(uart0_ext_pins), 475*52130b60SViresh Kumar .modemuxs = uart0_ext_modemux, 476*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(uart0_ext_modemux), 477*52130b60SViresh Kumar }; 478*52130b60SViresh Kumar 479*52130b60SViresh Kumar static const char *const uart0_ext_grps[] = { "uart0_ext_grp" }; 480*52130b60SViresh Kumar struct spear_function spear3xx_uart0_ext_function = { 481*52130b60SViresh Kumar .name = "uart0_ext", 482*52130b60SViresh Kumar .groups = uart0_ext_grps, 483*52130b60SViresh Kumar .ngroups = ARRAY_SIZE(uart0_ext_grps), 484*52130b60SViresh Kumar }; 485*52130b60SViresh Kumar 486*52130b60SViresh Kumar /* uart0_pins */ 487*52130b60SViresh Kumar static const unsigned uart0_pins[] = { 2, 3 }; 488*52130b60SViresh Kumar static struct spear_muxreg uart0_muxreg[] = { 489*52130b60SViresh Kumar { 490*52130b60SViresh Kumar .reg = -1, 491*52130b60SViresh Kumar .mask = PMX_UART0_MASK, 492*52130b60SViresh Kumar .val = PMX_UART0_MASK, 493*52130b60SViresh Kumar }, 494*52130b60SViresh Kumar }; 495*52130b60SViresh Kumar 496*52130b60SViresh Kumar static struct spear_modemux uart0_modemux[] = { 497*52130b60SViresh Kumar { 498*52130b60SViresh Kumar .modes = ~0, 499*52130b60SViresh Kumar .muxregs = uart0_muxreg, 500*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(uart0_muxreg), 501*52130b60SViresh Kumar }, 502*52130b60SViresh Kumar }; 503*52130b60SViresh Kumar 504*52130b60SViresh Kumar struct spear_pingroup spear3xx_uart0_pingroup = { 505*52130b60SViresh Kumar .name = "uart0_grp", 506*52130b60SViresh Kumar .pins = uart0_pins, 507*52130b60SViresh Kumar .npins = ARRAY_SIZE(uart0_pins), 508*52130b60SViresh Kumar .modemuxs = uart0_modemux, 509*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(uart0_modemux), 510*52130b60SViresh Kumar }; 511*52130b60SViresh Kumar 512*52130b60SViresh Kumar static const char *const uart0_grps[] = { "uart0_grp" }; 513*52130b60SViresh Kumar struct spear_function spear3xx_uart0_function = { 514*52130b60SViresh Kumar .name = "uart0", 515*52130b60SViresh Kumar .groups = uart0_grps, 516*52130b60SViresh Kumar .ngroups = ARRAY_SIZE(uart0_grps), 517*52130b60SViresh Kumar }; 518*52130b60SViresh Kumar 519*52130b60SViresh Kumar /* timer_0_1_pins */ 520*52130b60SViresh Kumar static const unsigned timer_0_1_pins[] = { 43, 44, 47, 48 }; 521*52130b60SViresh Kumar static struct spear_muxreg timer_0_1_muxreg[] = { 522*52130b60SViresh Kumar { 523*52130b60SViresh Kumar .reg = -1, 524*52130b60SViresh Kumar .mask = PMX_TIMER_0_1_MASK, 525*52130b60SViresh Kumar .val = PMX_TIMER_0_1_MASK, 526*52130b60SViresh Kumar }, 527*52130b60SViresh Kumar }; 528*52130b60SViresh Kumar 529*52130b60SViresh Kumar static struct spear_modemux timer_0_1_modemux[] = { 530*52130b60SViresh Kumar { 531*52130b60SViresh Kumar .modes = ~0, 532*52130b60SViresh Kumar .muxregs = timer_0_1_muxreg, 533*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(timer_0_1_muxreg), 534*52130b60SViresh Kumar }, 535*52130b60SViresh Kumar }; 536*52130b60SViresh Kumar 537*52130b60SViresh Kumar struct spear_pingroup spear3xx_timer_0_1_pingroup = { 538*52130b60SViresh Kumar .name = "timer_0_1_grp", 539*52130b60SViresh Kumar .pins = timer_0_1_pins, 540*52130b60SViresh Kumar .npins = ARRAY_SIZE(timer_0_1_pins), 541*52130b60SViresh Kumar .modemuxs = timer_0_1_modemux, 542*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(timer_0_1_modemux), 543*52130b60SViresh Kumar }; 544*52130b60SViresh Kumar 545*52130b60SViresh Kumar static const char *const timer_0_1_grps[] = { "timer_0_1_grp" }; 546*52130b60SViresh Kumar struct spear_function spear3xx_timer_0_1_function = { 547*52130b60SViresh Kumar .name = "timer_0_1", 548*52130b60SViresh Kumar .groups = timer_0_1_grps, 549*52130b60SViresh Kumar .ngroups = ARRAY_SIZE(timer_0_1_grps), 550*52130b60SViresh Kumar }; 551*52130b60SViresh Kumar 552*52130b60SViresh Kumar /* timer_2_3_pins */ 553*52130b60SViresh Kumar static const unsigned timer_2_3_pins[] = { 45, 46, 49, 50 }; 554*52130b60SViresh Kumar static struct spear_muxreg timer_2_3_muxreg[] = { 555*52130b60SViresh Kumar { 556*52130b60SViresh Kumar .reg = -1, 557*52130b60SViresh Kumar .mask = PMX_TIMER_2_3_MASK, 558*52130b60SViresh Kumar .val = PMX_TIMER_2_3_MASK, 559*52130b60SViresh Kumar }, 560*52130b60SViresh Kumar }; 561*52130b60SViresh Kumar 562*52130b60SViresh Kumar static struct spear_modemux timer_2_3_modemux[] = { 563*52130b60SViresh Kumar { 564*52130b60SViresh Kumar .modes = ~0, 565*52130b60SViresh Kumar .muxregs = timer_2_3_muxreg, 566*52130b60SViresh Kumar .nmuxregs = ARRAY_SIZE(timer_2_3_muxreg), 567*52130b60SViresh Kumar }, 568*52130b60SViresh Kumar }; 569*52130b60SViresh Kumar 570*52130b60SViresh Kumar struct spear_pingroup spear3xx_timer_2_3_pingroup = { 571*52130b60SViresh Kumar .name = "timer_2_3_grp", 572*52130b60SViresh Kumar .pins = timer_2_3_pins, 573*52130b60SViresh Kumar .npins = ARRAY_SIZE(timer_2_3_pins), 574*52130b60SViresh Kumar .modemuxs = timer_2_3_modemux, 575*52130b60SViresh Kumar .nmodemuxs = ARRAY_SIZE(timer_2_3_modemux), 576*52130b60SViresh Kumar }; 577*52130b60SViresh Kumar 578*52130b60SViresh Kumar static const char *const timer_2_3_grps[] = { "timer_2_3_grp" }; 579*52130b60SViresh Kumar struct spear_function spear3xx_timer_2_3_function = { 580*52130b60SViresh Kumar .name = "timer_2_3", 581*52130b60SViresh Kumar .groups = timer_2_3_grps, 582*52130b60SViresh Kumar .ngroups = ARRAY_SIZE(timer_2_3_grps), 583*52130b60SViresh Kumar }; 584*52130b60SViresh Kumar 585*52130b60SViresh Kumar struct spear_pinctrl_machdata spear3xx_machdata = { 586*52130b60SViresh Kumar .pins = spear3xx_pins, 587*52130b60SViresh Kumar .npins = ARRAY_SIZE(spear3xx_pins), 588*52130b60SViresh Kumar }; 589