1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Driver for the ST Microelectronics SPEAr3xx pinmux 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2012 ST Microelectronics 5*4882a593Smuzhiyun * Viresh Kumar <vireshk@kernel.org> 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * This file is licensed under the terms of the GNU General Public 8*4882a593Smuzhiyun * License version 2. This program is licensed "as is" without any 9*4882a593Smuzhiyun * warranty of any kind, whether express or implied. 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <linux/pinctrl/pinctrl.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #include "pinctrl-spear3xx.h" 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* pins */ 17*4882a593Smuzhiyun static const struct pinctrl_pin_desc spear3xx_pins[] = { 18*4882a593Smuzhiyun SPEAR_PIN_0_TO_101, 19*4882a593Smuzhiyun }; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* firda_pins */ 22*4882a593Smuzhiyun static const unsigned firda_pins[] = { 0, 1 }; 23*4882a593Smuzhiyun static struct spear_muxreg firda_muxreg[] = { 24*4882a593Smuzhiyun { 25*4882a593Smuzhiyun .reg = -1, 26*4882a593Smuzhiyun .mask = PMX_FIRDA_MASK, 27*4882a593Smuzhiyun .val = PMX_FIRDA_MASK, 28*4882a593Smuzhiyun }, 29*4882a593Smuzhiyun }; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun static struct spear_modemux firda_modemux[] = { 32*4882a593Smuzhiyun { 33*4882a593Smuzhiyun .modes = ~0, 34*4882a593Smuzhiyun .muxregs = firda_muxreg, 35*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(firda_muxreg), 36*4882a593Smuzhiyun }, 37*4882a593Smuzhiyun }; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun struct spear_pingroup spear3xx_firda_pingroup = { 40*4882a593Smuzhiyun .name = "firda_grp", 41*4882a593Smuzhiyun .pins = firda_pins, 42*4882a593Smuzhiyun .npins = ARRAY_SIZE(firda_pins), 43*4882a593Smuzhiyun .modemuxs = firda_modemux, 44*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(firda_modemux), 45*4882a593Smuzhiyun }; 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun static const char *const firda_grps[] = { "firda_grp" }; 48*4882a593Smuzhiyun struct spear_function spear3xx_firda_function = { 49*4882a593Smuzhiyun .name = "firda", 50*4882a593Smuzhiyun .groups = firda_grps, 51*4882a593Smuzhiyun .ngroups = ARRAY_SIZE(firda_grps), 52*4882a593Smuzhiyun }; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /* i2c_pins */ 55*4882a593Smuzhiyun static const unsigned i2c_pins[] = { 4, 5 }; 56*4882a593Smuzhiyun static struct spear_muxreg i2c_muxreg[] = { 57*4882a593Smuzhiyun { 58*4882a593Smuzhiyun .reg = -1, 59*4882a593Smuzhiyun .mask = PMX_I2C_MASK, 60*4882a593Smuzhiyun .val = PMX_I2C_MASK, 61*4882a593Smuzhiyun }, 62*4882a593Smuzhiyun }; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun static struct spear_modemux i2c_modemux[] = { 65*4882a593Smuzhiyun { 66*4882a593Smuzhiyun .modes = ~0, 67*4882a593Smuzhiyun .muxregs = i2c_muxreg, 68*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(i2c_muxreg), 69*4882a593Smuzhiyun }, 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun struct spear_pingroup spear3xx_i2c_pingroup = { 73*4882a593Smuzhiyun .name = "i2c0_grp", 74*4882a593Smuzhiyun .pins = i2c_pins, 75*4882a593Smuzhiyun .npins = ARRAY_SIZE(i2c_pins), 76*4882a593Smuzhiyun .modemuxs = i2c_modemux, 77*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(i2c_modemux), 78*4882a593Smuzhiyun }; 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun static const char *const i2c_grps[] = { "i2c0_grp" }; 81*4882a593Smuzhiyun struct spear_function spear3xx_i2c_function = { 82*4882a593Smuzhiyun .name = "i2c0", 83*4882a593Smuzhiyun .groups = i2c_grps, 84*4882a593Smuzhiyun .ngroups = ARRAY_SIZE(i2c_grps), 85*4882a593Smuzhiyun }; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun /* ssp_cs_pins */ 88*4882a593Smuzhiyun static const unsigned ssp_cs_pins[] = { 34, 35, 36 }; 89*4882a593Smuzhiyun static struct spear_muxreg ssp_cs_muxreg[] = { 90*4882a593Smuzhiyun { 91*4882a593Smuzhiyun .reg = -1, 92*4882a593Smuzhiyun .mask = PMX_SSP_CS_MASK, 93*4882a593Smuzhiyun .val = PMX_SSP_CS_MASK, 94*4882a593Smuzhiyun }, 95*4882a593Smuzhiyun }; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun static struct spear_modemux ssp_cs_modemux[] = { 98*4882a593Smuzhiyun { 99*4882a593Smuzhiyun .modes = ~0, 100*4882a593Smuzhiyun .muxregs = ssp_cs_muxreg, 101*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(ssp_cs_muxreg), 102*4882a593Smuzhiyun }, 103*4882a593Smuzhiyun }; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun struct spear_pingroup spear3xx_ssp_cs_pingroup = { 106*4882a593Smuzhiyun .name = "ssp_cs_grp", 107*4882a593Smuzhiyun .pins = ssp_cs_pins, 108*4882a593Smuzhiyun .npins = ARRAY_SIZE(ssp_cs_pins), 109*4882a593Smuzhiyun .modemuxs = ssp_cs_modemux, 110*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(ssp_cs_modemux), 111*4882a593Smuzhiyun }; 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun static const char *const ssp_cs_grps[] = { "ssp_cs_grp" }; 114*4882a593Smuzhiyun struct spear_function spear3xx_ssp_cs_function = { 115*4882a593Smuzhiyun .name = "ssp_cs", 116*4882a593Smuzhiyun .groups = ssp_cs_grps, 117*4882a593Smuzhiyun .ngroups = ARRAY_SIZE(ssp_cs_grps), 118*4882a593Smuzhiyun }; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun /* ssp_pins */ 121*4882a593Smuzhiyun static const unsigned ssp_pins[] = { 6, 7, 8, 9 }; 122*4882a593Smuzhiyun static struct spear_muxreg ssp_muxreg[] = { 123*4882a593Smuzhiyun { 124*4882a593Smuzhiyun .reg = -1, 125*4882a593Smuzhiyun .mask = PMX_SSP_MASK, 126*4882a593Smuzhiyun .val = PMX_SSP_MASK, 127*4882a593Smuzhiyun }, 128*4882a593Smuzhiyun }; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun static struct spear_modemux ssp_modemux[] = { 131*4882a593Smuzhiyun { 132*4882a593Smuzhiyun .modes = ~0, 133*4882a593Smuzhiyun .muxregs = ssp_muxreg, 134*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(ssp_muxreg), 135*4882a593Smuzhiyun }, 136*4882a593Smuzhiyun }; 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun struct spear_pingroup spear3xx_ssp_pingroup = { 139*4882a593Smuzhiyun .name = "ssp0_grp", 140*4882a593Smuzhiyun .pins = ssp_pins, 141*4882a593Smuzhiyun .npins = ARRAY_SIZE(ssp_pins), 142*4882a593Smuzhiyun .modemuxs = ssp_modemux, 143*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(ssp_modemux), 144*4882a593Smuzhiyun }; 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun static const char *const ssp_grps[] = { "ssp0_grp" }; 147*4882a593Smuzhiyun struct spear_function spear3xx_ssp_function = { 148*4882a593Smuzhiyun .name = "ssp0", 149*4882a593Smuzhiyun .groups = ssp_grps, 150*4882a593Smuzhiyun .ngroups = ARRAY_SIZE(ssp_grps), 151*4882a593Smuzhiyun }; 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun /* mii_pins */ 154*4882a593Smuzhiyun static const unsigned mii_pins[] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 155*4882a593Smuzhiyun 21, 22, 23, 24, 25, 26, 27 }; 156*4882a593Smuzhiyun static struct spear_muxreg mii_muxreg[] = { 157*4882a593Smuzhiyun { 158*4882a593Smuzhiyun .reg = -1, 159*4882a593Smuzhiyun .mask = PMX_MII_MASK, 160*4882a593Smuzhiyun .val = PMX_MII_MASK, 161*4882a593Smuzhiyun }, 162*4882a593Smuzhiyun }; 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun static struct spear_modemux mii_modemux[] = { 165*4882a593Smuzhiyun { 166*4882a593Smuzhiyun .modes = ~0, 167*4882a593Smuzhiyun .muxregs = mii_muxreg, 168*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(mii_muxreg), 169*4882a593Smuzhiyun }, 170*4882a593Smuzhiyun }; 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun struct spear_pingroup spear3xx_mii_pingroup = { 173*4882a593Smuzhiyun .name = "mii0_grp", 174*4882a593Smuzhiyun .pins = mii_pins, 175*4882a593Smuzhiyun .npins = ARRAY_SIZE(mii_pins), 176*4882a593Smuzhiyun .modemuxs = mii_modemux, 177*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(mii_modemux), 178*4882a593Smuzhiyun }; 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun static const char *const mii_grps[] = { "mii0_grp" }; 181*4882a593Smuzhiyun struct spear_function spear3xx_mii_function = { 182*4882a593Smuzhiyun .name = "mii0", 183*4882a593Smuzhiyun .groups = mii_grps, 184*4882a593Smuzhiyun .ngroups = ARRAY_SIZE(mii_grps), 185*4882a593Smuzhiyun }; 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun /* gpio0_pin0_pins */ 188*4882a593Smuzhiyun static const unsigned gpio0_pin0_pins[] = { 28 }; 189*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin0_muxreg[] = { 190*4882a593Smuzhiyun { 191*4882a593Smuzhiyun .reg = -1, 192*4882a593Smuzhiyun .mask = PMX_GPIO_PIN0_MASK, 193*4882a593Smuzhiyun .val = PMX_GPIO_PIN0_MASK, 194*4882a593Smuzhiyun }, 195*4882a593Smuzhiyun }; 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun static struct spear_modemux gpio0_pin0_modemux[] = { 198*4882a593Smuzhiyun { 199*4882a593Smuzhiyun .modes = ~0, 200*4882a593Smuzhiyun .muxregs = gpio0_pin0_muxreg, 201*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(gpio0_pin0_muxreg), 202*4882a593Smuzhiyun }, 203*4882a593Smuzhiyun }; 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin0_pingroup = { 206*4882a593Smuzhiyun .name = "gpio0_pin0_grp", 207*4882a593Smuzhiyun .pins = gpio0_pin0_pins, 208*4882a593Smuzhiyun .npins = ARRAY_SIZE(gpio0_pin0_pins), 209*4882a593Smuzhiyun .modemuxs = gpio0_pin0_modemux, 210*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(gpio0_pin0_modemux), 211*4882a593Smuzhiyun }; 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun /* gpio0_pin1_pins */ 214*4882a593Smuzhiyun static const unsigned gpio0_pin1_pins[] = { 29 }; 215*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin1_muxreg[] = { 216*4882a593Smuzhiyun { 217*4882a593Smuzhiyun .reg = -1, 218*4882a593Smuzhiyun .mask = PMX_GPIO_PIN1_MASK, 219*4882a593Smuzhiyun .val = PMX_GPIO_PIN1_MASK, 220*4882a593Smuzhiyun }, 221*4882a593Smuzhiyun }; 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun static struct spear_modemux gpio0_pin1_modemux[] = { 224*4882a593Smuzhiyun { 225*4882a593Smuzhiyun .modes = ~0, 226*4882a593Smuzhiyun .muxregs = gpio0_pin1_muxreg, 227*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(gpio0_pin1_muxreg), 228*4882a593Smuzhiyun }, 229*4882a593Smuzhiyun }; 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin1_pingroup = { 232*4882a593Smuzhiyun .name = "gpio0_pin1_grp", 233*4882a593Smuzhiyun .pins = gpio0_pin1_pins, 234*4882a593Smuzhiyun .npins = ARRAY_SIZE(gpio0_pin1_pins), 235*4882a593Smuzhiyun .modemuxs = gpio0_pin1_modemux, 236*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(gpio0_pin1_modemux), 237*4882a593Smuzhiyun }; 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun /* gpio0_pin2_pins */ 240*4882a593Smuzhiyun static const unsigned gpio0_pin2_pins[] = { 30 }; 241*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin2_muxreg[] = { 242*4882a593Smuzhiyun { 243*4882a593Smuzhiyun .reg = -1, 244*4882a593Smuzhiyun .mask = PMX_GPIO_PIN2_MASK, 245*4882a593Smuzhiyun .val = PMX_GPIO_PIN2_MASK, 246*4882a593Smuzhiyun }, 247*4882a593Smuzhiyun }; 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun static struct spear_modemux gpio0_pin2_modemux[] = { 250*4882a593Smuzhiyun { 251*4882a593Smuzhiyun .modes = ~0, 252*4882a593Smuzhiyun .muxregs = gpio0_pin2_muxreg, 253*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(gpio0_pin2_muxreg), 254*4882a593Smuzhiyun }, 255*4882a593Smuzhiyun }; 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin2_pingroup = { 258*4882a593Smuzhiyun .name = "gpio0_pin2_grp", 259*4882a593Smuzhiyun .pins = gpio0_pin2_pins, 260*4882a593Smuzhiyun .npins = ARRAY_SIZE(gpio0_pin2_pins), 261*4882a593Smuzhiyun .modemuxs = gpio0_pin2_modemux, 262*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(gpio0_pin2_modemux), 263*4882a593Smuzhiyun }; 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun /* gpio0_pin3_pins */ 266*4882a593Smuzhiyun static const unsigned gpio0_pin3_pins[] = { 31 }; 267*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin3_muxreg[] = { 268*4882a593Smuzhiyun { 269*4882a593Smuzhiyun .reg = -1, 270*4882a593Smuzhiyun .mask = PMX_GPIO_PIN3_MASK, 271*4882a593Smuzhiyun .val = PMX_GPIO_PIN3_MASK, 272*4882a593Smuzhiyun }, 273*4882a593Smuzhiyun }; 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun static struct spear_modemux gpio0_pin3_modemux[] = { 276*4882a593Smuzhiyun { 277*4882a593Smuzhiyun .modes = ~0, 278*4882a593Smuzhiyun .muxregs = gpio0_pin3_muxreg, 279*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(gpio0_pin3_muxreg), 280*4882a593Smuzhiyun }, 281*4882a593Smuzhiyun }; 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin3_pingroup = { 284*4882a593Smuzhiyun .name = "gpio0_pin3_grp", 285*4882a593Smuzhiyun .pins = gpio0_pin3_pins, 286*4882a593Smuzhiyun .npins = ARRAY_SIZE(gpio0_pin3_pins), 287*4882a593Smuzhiyun .modemuxs = gpio0_pin3_modemux, 288*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(gpio0_pin3_modemux), 289*4882a593Smuzhiyun }; 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun /* gpio0_pin4_pins */ 292*4882a593Smuzhiyun static const unsigned gpio0_pin4_pins[] = { 32 }; 293*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin4_muxreg[] = { 294*4882a593Smuzhiyun { 295*4882a593Smuzhiyun .reg = -1, 296*4882a593Smuzhiyun .mask = PMX_GPIO_PIN4_MASK, 297*4882a593Smuzhiyun .val = PMX_GPIO_PIN4_MASK, 298*4882a593Smuzhiyun }, 299*4882a593Smuzhiyun }; 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun static struct spear_modemux gpio0_pin4_modemux[] = { 302*4882a593Smuzhiyun { 303*4882a593Smuzhiyun .modes = ~0, 304*4882a593Smuzhiyun .muxregs = gpio0_pin4_muxreg, 305*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(gpio0_pin4_muxreg), 306*4882a593Smuzhiyun }, 307*4882a593Smuzhiyun }; 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin4_pingroup = { 310*4882a593Smuzhiyun .name = "gpio0_pin4_grp", 311*4882a593Smuzhiyun .pins = gpio0_pin4_pins, 312*4882a593Smuzhiyun .npins = ARRAY_SIZE(gpio0_pin4_pins), 313*4882a593Smuzhiyun .modemuxs = gpio0_pin4_modemux, 314*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(gpio0_pin4_modemux), 315*4882a593Smuzhiyun }; 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun /* gpio0_pin5_pins */ 318*4882a593Smuzhiyun static const unsigned gpio0_pin5_pins[] = { 33 }; 319*4882a593Smuzhiyun static struct spear_muxreg gpio0_pin5_muxreg[] = { 320*4882a593Smuzhiyun { 321*4882a593Smuzhiyun .reg = -1, 322*4882a593Smuzhiyun .mask = PMX_GPIO_PIN5_MASK, 323*4882a593Smuzhiyun .val = PMX_GPIO_PIN5_MASK, 324*4882a593Smuzhiyun }, 325*4882a593Smuzhiyun }; 326*4882a593Smuzhiyun 327*4882a593Smuzhiyun static struct spear_modemux gpio0_pin5_modemux[] = { 328*4882a593Smuzhiyun { 329*4882a593Smuzhiyun .modes = ~0, 330*4882a593Smuzhiyun .muxregs = gpio0_pin5_muxreg, 331*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(gpio0_pin5_muxreg), 332*4882a593Smuzhiyun }, 333*4882a593Smuzhiyun }; 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun struct spear_pingroup spear3xx_gpio0_pin5_pingroup = { 336*4882a593Smuzhiyun .name = "gpio0_pin5_grp", 337*4882a593Smuzhiyun .pins = gpio0_pin5_pins, 338*4882a593Smuzhiyun .npins = ARRAY_SIZE(gpio0_pin5_pins), 339*4882a593Smuzhiyun .modemuxs = gpio0_pin5_modemux, 340*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(gpio0_pin5_modemux), 341*4882a593Smuzhiyun }; 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun static const char *const gpio0_grps[] = { "gpio0_pin0_grp", "gpio0_pin1_grp", 344*4882a593Smuzhiyun "gpio0_pin2_grp", "gpio0_pin3_grp", "gpio0_pin4_grp", "gpio0_pin5_grp", 345*4882a593Smuzhiyun }; 346*4882a593Smuzhiyun struct spear_function spear3xx_gpio0_function = { 347*4882a593Smuzhiyun .name = "gpio0", 348*4882a593Smuzhiyun .groups = gpio0_grps, 349*4882a593Smuzhiyun .ngroups = ARRAY_SIZE(gpio0_grps), 350*4882a593Smuzhiyun }; 351*4882a593Smuzhiyun 352*4882a593Smuzhiyun /* uart0_ext_pins */ 353*4882a593Smuzhiyun static const unsigned uart0_ext_pins[] = { 37, 38, 39, 40, 41, 42 }; 354*4882a593Smuzhiyun static struct spear_muxreg uart0_ext_muxreg[] = { 355*4882a593Smuzhiyun { 356*4882a593Smuzhiyun .reg = -1, 357*4882a593Smuzhiyun .mask = PMX_UART0_MODEM_MASK, 358*4882a593Smuzhiyun .val = PMX_UART0_MODEM_MASK, 359*4882a593Smuzhiyun }, 360*4882a593Smuzhiyun }; 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun static struct spear_modemux uart0_ext_modemux[] = { 363*4882a593Smuzhiyun { 364*4882a593Smuzhiyun .modes = ~0, 365*4882a593Smuzhiyun .muxregs = uart0_ext_muxreg, 366*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(uart0_ext_muxreg), 367*4882a593Smuzhiyun }, 368*4882a593Smuzhiyun }; 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun struct spear_pingroup spear3xx_uart0_ext_pingroup = { 371*4882a593Smuzhiyun .name = "uart0_ext_grp", 372*4882a593Smuzhiyun .pins = uart0_ext_pins, 373*4882a593Smuzhiyun .npins = ARRAY_SIZE(uart0_ext_pins), 374*4882a593Smuzhiyun .modemuxs = uart0_ext_modemux, 375*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(uart0_ext_modemux), 376*4882a593Smuzhiyun }; 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun static const char *const uart0_ext_grps[] = { "uart0_ext_grp" }; 379*4882a593Smuzhiyun struct spear_function spear3xx_uart0_ext_function = { 380*4882a593Smuzhiyun .name = "uart0_ext", 381*4882a593Smuzhiyun .groups = uart0_ext_grps, 382*4882a593Smuzhiyun .ngroups = ARRAY_SIZE(uart0_ext_grps), 383*4882a593Smuzhiyun }; 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun /* uart0_pins */ 386*4882a593Smuzhiyun static const unsigned uart0_pins[] = { 2, 3 }; 387*4882a593Smuzhiyun static struct spear_muxreg uart0_muxreg[] = { 388*4882a593Smuzhiyun { 389*4882a593Smuzhiyun .reg = -1, 390*4882a593Smuzhiyun .mask = PMX_UART0_MASK, 391*4882a593Smuzhiyun .val = PMX_UART0_MASK, 392*4882a593Smuzhiyun }, 393*4882a593Smuzhiyun }; 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun static struct spear_modemux uart0_modemux[] = { 396*4882a593Smuzhiyun { 397*4882a593Smuzhiyun .modes = ~0, 398*4882a593Smuzhiyun .muxregs = uart0_muxreg, 399*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(uart0_muxreg), 400*4882a593Smuzhiyun }, 401*4882a593Smuzhiyun }; 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun struct spear_pingroup spear3xx_uart0_pingroup = { 404*4882a593Smuzhiyun .name = "uart0_grp", 405*4882a593Smuzhiyun .pins = uart0_pins, 406*4882a593Smuzhiyun .npins = ARRAY_SIZE(uart0_pins), 407*4882a593Smuzhiyun .modemuxs = uart0_modemux, 408*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(uart0_modemux), 409*4882a593Smuzhiyun }; 410*4882a593Smuzhiyun 411*4882a593Smuzhiyun static const char *const uart0_grps[] = { "uart0_grp" }; 412*4882a593Smuzhiyun struct spear_function spear3xx_uart0_function = { 413*4882a593Smuzhiyun .name = "uart0", 414*4882a593Smuzhiyun .groups = uart0_grps, 415*4882a593Smuzhiyun .ngroups = ARRAY_SIZE(uart0_grps), 416*4882a593Smuzhiyun }; 417*4882a593Smuzhiyun 418*4882a593Smuzhiyun /* timer_0_1_pins */ 419*4882a593Smuzhiyun static const unsigned timer_0_1_pins[] = { 43, 44, 47, 48 }; 420*4882a593Smuzhiyun static struct spear_muxreg timer_0_1_muxreg[] = { 421*4882a593Smuzhiyun { 422*4882a593Smuzhiyun .reg = -1, 423*4882a593Smuzhiyun .mask = PMX_TIMER_0_1_MASK, 424*4882a593Smuzhiyun .val = PMX_TIMER_0_1_MASK, 425*4882a593Smuzhiyun }, 426*4882a593Smuzhiyun }; 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun static struct spear_modemux timer_0_1_modemux[] = { 429*4882a593Smuzhiyun { 430*4882a593Smuzhiyun .modes = ~0, 431*4882a593Smuzhiyun .muxregs = timer_0_1_muxreg, 432*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(timer_0_1_muxreg), 433*4882a593Smuzhiyun }, 434*4882a593Smuzhiyun }; 435*4882a593Smuzhiyun 436*4882a593Smuzhiyun struct spear_pingroup spear3xx_timer_0_1_pingroup = { 437*4882a593Smuzhiyun .name = "timer_0_1_grp", 438*4882a593Smuzhiyun .pins = timer_0_1_pins, 439*4882a593Smuzhiyun .npins = ARRAY_SIZE(timer_0_1_pins), 440*4882a593Smuzhiyun .modemuxs = timer_0_1_modemux, 441*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(timer_0_1_modemux), 442*4882a593Smuzhiyun }; 443*4882a593Smuzhiyun 444*4882a593Smuzhiyun static const char *const timer_0_1_grps[] = { "timer_0_1_grp" }; 445*4882a593Smuzhiyun struct spear_function spear3xx_timer_0_1_function = { 446*4882a593Smuzhiyun .name = "timer_0_1", 447*4882a593Smuzhiyun .groups = timer_0_1_grps, 448*4882a593Smuzhiyun .ngroups = ARRAY_SIZE(timer_0_1_grps), 449*4882a593Smuzhiyun }; 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun /* timer_2_3_pins */ 452*4882a593Smuzhiyun static const unsigned timer_2_3_pins[] = { 45, 46, 49, 50 }; 453*4882a593Smuzhiyun static struct spear_muxreg timer_2_3_muxreg[] = { 454*4882a593Smuzhiyun { 455*4882a593Smuzhiyun .reg = -1, 456*4882a593Smuzhiyun .mask = PMX_TIMER_2_3_MASK, 457*4882a593Smuzhiyun .val = PMX_TIMER_2_3_MASK, 458*4882a593Smuzhiyun }, 459*4882a593Smuzhiyun }; 460*4882a593Smuzhiyun 461*4882a593Smuzhiyun static struct spear_modemux timer_2_3_modemux[] = { 462*4882a593Smuzhiyun { 463*4882a593Smuzhiyun .modes = ~0, 464*4882a593Smuzhiyun .muxregs = timer_2_3_muxreg, 465*4882a593Smuzhiyun .nmuxregs = ARRAY_SIZE(timer_2_3_muxreg), 466*4882a593Smuzhiyun }, 467*4882a593Smuzhiyun }; 468*4882a593Smuzhiyun 469*4882a593Smuzhiyun struct spear_pingroup spear3xx_timer_2_3_pingroup = { 470*4882a593Smuzhiyun .name = "timer_2_3_grp", 471*4882a593Smuzhiyun .pins = timer_2_3_pins, 472*4882a593Smuzhiyun .npins = ARRAY_SIZE(timer_2_3_pins), 473*4882a593Smuzhiyun .modemuxs = timer_2_3_modemux, 474*4882a593Smuzhiyun .nmodemuxs = ARRAY_SIZE(timer_2_3_modemux), 475*4882a593Smuzhiyun }; 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun static const char *const timer_2_3_grps[] = { "timer_2_3_grp" }; 478*4882a593Smuzhiyun struct spear_function spear3xx_timer_2_3_function = { 479*4882a593Smuzhiyun .name = "timer_2_3", 480*4882a593Smuzhiyun .groups = timer_2_3_grps, 481*4882a593Smuzhiyun .ngroups = ARRAY_SIZE(timer_2_3_grps), 482*4882a593Smuzhiyun }; 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun /* Define muxreg arrays */ 485*4882a593Smuzhiyun DEFINE_MUXREG(firda_pins, 0, PMX_FIRDA_MASK, 0); 486*4882a593Smuzhiyun DEFINE_MUXREG(i2c_pins, 0, PMX_I2C_MASK, 0); 487*4882a593Smuzhiyun DEFINE_MUXREG(ssp_cs_pins, 0, PMX_SSP_CS_MASK, 0); 488*4882a593Smuzhiyun DEFINE_MUXREG(ssp_pins, 0, PMX_SSP_MASK, 0); 489*4882a593Smuzhiyun DEFINE_MUXREG(mii_pins, 0, PMX_MII_MASK, 0); 490*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin0_pins, 0, PMX_GPIO_PIN0_MASK, 0); 491*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin1_pins, 0, PMX_GPIO_PIN1_MASK, 0); 492*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin2_pins, 0, PMX_GPIO_PIN2_MASK, 0); 493*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin3_pins, 0, PMX_GPIO_PIN3_MASK, 0); 494*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin4_pins, 0, PMX_GPIO_PIN4_MASK, 0); 495*4882a593Smuzhiyun DEFINE_MUXREG(gpio0_pin5_pins, 0, PMX_GPIO_PIN5_MASK, 0); 496*4882a593Smuzhiyun DEFINE_MUXREG(uart0_ext_pins, 0, PMX_UART0_MODEM_MASK, 0); 497*4882a593Smuzhiyun DEFINE_MUXREG(uart0_pins, 0, PMX_UART0_MASK, 0); 498*4882a593Smuzhiyun DEFINE_MUXREG(timer_0_1_pins, 0, PMX_TIMER_0_1_MASK, 0); 499*4882a593Smuzhiyun DEFINE_MUXREG(timer_2_3_pins, 0, PMX_TIMER_2_3_MASK, 0); 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun static struct spear_gpio_pingroup spear3xx_gpio_pingroup[] = { 502*4882a593Smuzhiyun GPIO_PINGROUP(firda_pins), 503*4882a593Smuzhiyun GPIO_PINGROUP(i2c_pins), 504*4882a593Smuzhiyun GPIO_PINGROUP(ssp_cs_pins), 505*4882a593Smuzhiyun GPIO_PINGROUP(ssp_pins), 506*4882a593Smuzhiyun GPIO_PINGROUP(mii_pins), 507*4882a593Smuzhiyun GPIO_PINGROUP(gpio0_pin0_pins), 508*4882a593Smuzhiyun GPIO_PINGROUP(gpio0_pin1_pins), 509*4882a593Smuzhiyun GPIO_PINGROUP(gpio0_pin2_pins), 510*4882a593Smuzhiyun GPIO_PINGROUP(gpio0_pin3_pins), 511*4882a593Smuzhiyun GPIO_PINGROUP(gpio0_pin4_pins), 512*4882a593Smuzhiyun GPIO_PINGROUP(gpio0_pin5_pins), 513*4882a593Smuzhiyun GPIO_PINGROUP(uart0_ext_pins), 514*4882a593Smuzhiyun GPIO_PINGROUP(uart0_pins), 515*4882a593Smuzhiyun GPIO_PINGROUP(timer_0_1_pins), 516*4882a593Smuzhiyun GPIO_PINGROUP(timer_2_3_pins), 517*4882a593Smuzhiyun }; 518*4882a593Smuzhiyun 519*4882a593Smuzhiyun struct spear_pinctrl_machdata spear3xx_machdata = { 520*4882a593Smuzhiyun .pins = spear3xx_pins, 521*4882a593Smuzhiyun .npins = ARRAY_SIZE(spear3xx_pins), 522*4882a593Smuzhiyun .gpio_pingroups = spear3xx_gpio_pingroup, 523*4882a593Smuzhiyun .ngpio_pingroups = ARRAY_SIZE(spear3xx_gpio_pingroup), 524*4882a593Smuzhiyun }; 525