1 /* 2 * Driver for the ST Microelectronics SPEAr1310 pinmux 3 * 4 * Copyright (C) 2012 ST Microelectronics 5 * Viresh Kumar <viresh.kumar@st.com> 6 * 7 * This file is licensed under the terms of the GNU General Public 8 * License version 2. This program is licensed "as is" without any 9 * warranty of any kind, whether express or implied. 10 */ 11 12 #include <linux/err.h> 13 #include <linux/init.h> 14 #include <linux/module.h> 15 #include <linux/of_device.h> 16 #include <linux/platform_device.h> 17 #include "pinctrl-spear.h" 18 19 #define DRIVER_NAME "spear1310-pinmux" 20 21 /* pins */ 22 static const struct pinctrl_pin_desc spear1310_pins[] = { 23 SPEAR_PIN_0_TO_101, 24 SPEAR_PIN_102_TO_245, 25 }; 26 27 /* registers */ 28 #define PERIP_CFG 0x32C 29 #define MCIF_SEL_SHIFT 3 30 #define MCIF_SEL_SD (0x1 << MCIF_SEL_SHIFT) 31 #define MCIF_SEL_CF (0x2 << MCIF_SEL_SHIFT) 32 #define MCIF_SEL_XD (0x3 << MCIF_SEL_SHIFT) 33 #define MCIF_SEL_MASK (0x3 << MCIF_SEL_SHIFT) 34 35 #define PCIE_SATA_CFG 0x3A4 36 #define PCIE_SATA2_SEL_PCIE (0 << 31) 37 #define PCIE_SATA1_SEL_PCIE (0 << 30) 38 #define PCIE_SATA0_SEL_PCIE (0 << 29) 39 #define PCIE_SATA2_SEL_SATA (1 << 31) 40 #define PCIE_SATA1_SEL_SATA (1 << 30) 41 #define PCIE_SATA0_SEL_SATA (1 << 29) 42 #define SATA2_CFG_TX_CLK_EN (1 << 27) 43 #define SATA2_CFG_RX_CLK_EN (1 << 26) 44 #define SATA2_CFG_POWERUP_RESET (1 << 25) 45 #define SATA2_CFG_PM_CLK_EN (1 << 24) 46 #define SATA1_CFG_TX_CLK_EN (1 << 23) 47 #define SATA1_CFG_RX_CLK_EN (1 << 22) 48 #define SATA1_CFG_POWERUP_RESET (1 << 21) 49 #define SATA1_CFG_PM_CLK_EN (1 << 20) 50 #define SATA0_CFG_TX_CLK_EN (1 << 19) 51 #define SATA0_CFG_RX_CLK_EN (1 << 18) 52 #define SATA0_CFG_POWERUP_RESET (1 << 17) 53 #define SATA0_CFG_PM_CLK_EN (1 << 16) 54 #define PCIE2_CFG_DEVICE_PRESENT (1 << 11) 55 #define PCIE2_CFG_POWERUP_RESET (1 << 10) 56 #define PCIE2_CFG_CORE_CLK_EN (1 << 9) 57 #define PCIE2_CFG_AUX_CLK_EN (1 << 8) 58 #define PCIE1_CFG_DEVICE_PRESENT (1 << 7) 59 #define PCIE1_CFG_POWERUP_RESET (1 << 6) 60 #define PCIE1_CFG_CORE_CLK_EN (1 << 5) 61 #define PCIE1_CFG_AUX_CLK_EN (1 << 4) 62 #define PCIE0_CFG_DEVICE_PRESENT (1 << 3) 63 #define PCIE0_CFG_POWERUP_RESET (1 << 2) 64 #define PCIE0_CFG_CORE_CLK_EN (1 << 1) 65 #define PCIE0_CFG_AUX_CLK_EN (1 << 0) 66 67 #define PAD_FUNCTION_EN_0 0x650 68 #define PMX_UART0_MASK (1 << 1) 69 #define PMX_I2C0_MASK (1 << 2) 70 #define PMX_I2S0_MASK (1 << 3) 71 #define PMX_SSP0_MASK (1 << 4) 72 #define PMX_CLCD1_MASK (1 << 5) 73 #define PMX_EGPIO00_MASK (1 << 6) 74 #define PMX_EGPIO01_MASK (1 << 7) 75 #define PMX_EGPIO02_MASK (1 << 8) 76 #define PMX_EGPIO03_MASK (1 << 9) 77 #define PMX_EGPIO04_MASK (1 << 10) 78 #define PMX_EGPIO05_MASK (1 << 11) 79 #define PMX_EGPIO06_MASK (1 << 12) 80 #define PMX_EGPIO07_MASK (1 << 13) 81 #define PMX_EGPIO08_MASK (1 << 14) 82 #define PMX_EGPIO09_MASK (1 << 15) 83 #define PMX_SMI_MASK (1 << 16) 84 #define PMX_NAND8_MASK (1 << 17) 85 #define PMX_GMIICLK_MASK (1 << 18) 86 #define PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK (1 << 19) 87 #define PMX_RXCLK_RDV_TXEN_D03_MASK (1 << 20) 88 #define PMX_GMIID47_MASK (1 << 21) 89 #define PMX_MDC_MDIO_MASK (1 << 22) 90 #define PMX_MCI_DATA8_15_MASK (1 << 23) 91 #define PMX_NFAD23_MASK (1 << 24) 92 #define PMX_NFAD24_MASK (1 << 25) 93 #define PMX_NFAD25_MASK (1 << 26) 94 #define PMX_NFCE3_MASK (1 << 27) 95 #define PMX_NFWPRT3_MASK (1 << 28) 96 #define PMX_NFRSTPWDWN0_MASK (1 << 29) 97 #define PMX_NFRSTPWDWN1_MASK (1 << 30) 98 #define PMX_NFRSTPWDWN2_MASK (1 << 31) 99 100 #define PAD_FUNCTION_EN_1 0x654 101 #define PMX_NFRSTPWDWN3_MASK (1 << 0) 102 #define PMX_SMINCS2_MASK (1 << 1) 103 #define PMX_SMINCS3_MASK (1 << 2) 104 #define PMX_CLCD2_MASK (1 << 3) 105 #define PMX_KBD_ROWCOL68_MASK (1 << 4) 106 #define PMX_EGPIO10_MASK (1 << 5) 107 #define PMX_EGPIO11_MASK (1 << 6) 108 #define PMX_EGPIO12_MASK (1 << 7) 109 #define PMX_EGPIO13_MASK (1 << 8) 110 #define PMX_EGPIO14_MASK (1 << 9) 111 #define PMX_EGPIO15_MASK (1 << 10) 112 #define PMX_UART0_MODEM_MASK (1 << 11) 113 #define PMX_GPT0_TMR0_MASK (1 << 12) 114 #define PMX_GPT0_TMR1_MASK (1 << 13) 115 #define PMX_GPT1_TMR0_MASK (1 << 14) 116 #define PMX_GPT1_TMR1_MASK (1 << 15) 117 #define PMX_I2S1_MASK (1 << 16) 118 #define PMX_KBD_ROWCOL25_MASK (1 << 17) 119 #define PMX_NFIO8_15_MASK (1 << 18) 120 #define PMX_KBD_COL1_MASK (1 << 19) 121 #define PMX_NFCE1_MASK (1 << 20) 122 #define PMX_KBD_COL0_MASK (1 << 21) 123 #define PMX_NFCE2_MASK (1 << 22) 124 #define PMX_KBD_ROW1_MASK (1 << 23) 125 #define PMX_NFWPRT1_MASK (1 << 24) 126 #define PMX_KBD_ROW0_MASK (1 << 25) 127 #define PMX_NFWPRT2_MASK (1 << 26) 128 #define PMX_MCIDATA0_MASK (1 << 27) 129 #define PMX_MCIDATA1_MASK (1 << 28) 130 #define PMX_MCIDATA2_MASK (1 << 29) 131 #define PMX_MCIDATA3_MASK (1 << 30) 132 #define PMX_MCIDATA4_MASK (1 << 31) 133 134 #define PAD_FUNCTION_EN_2 0x658 135 #define PMX_MCIDATA5_MASK (1 << 0) 136 #define PMX_MCIDATA6_MASK (1 << 1) 137 #define PMX_MCIDATA7_MASK (1 << 2) 138 #define PMX_MCIDATA1SD_MASK (1 << 3) 139 #define PMX_MCIDATA2SD_MASK (1 << 4) 140 #define PMX_MCIDATA3SD_MASK (1 << 5) 141 #define PMX_MCIADDR0ALE_MASK (1 << 6) 142 #define PMX_MCIADDR1CLECLK_MASK (1 << 7) 143 #define PMX_MCIADDR2_MASK (1 << 8) 144 #define PMX_MCICECF_MASK (1 << 9) 145 #define PMX_MCICEXD_MASK (1 << 10) 146 #define PMX_MCICESDMMC_MASK (1 << 11) 147 #define PMX_MCICDCF1_MASK (1 << 12) 148 #define PMX_MCICDCF2_MASK (1 << 13) 149 #define PMX_MCICDXD_MASK (1 << 14) 150 #define PMX_MCICDSDMMC_MASK (1 << 15) 151 #define PMX_MCIDATADIR_MASK (1 << 16) 152 #define PMX_MCIDMARQWP_MASK (1 << 17) 153 #define PMX_MCIIORDRE_MASK (1 << 18) 154 #define PMX_MCIIOWRWE_MASK (1 << 19) 155 #define PMX_MCIRESETCF_MASK (1 << 20) 156 #define PMX_MCICS0CE_MASK (1 << 21) 157 #define PMX_MCICFINTR_MASK (1 << 22) 158 #define PMX_MCIIORDY_MASK (1 << 23) 159 #define PMX_MCICS1_MASK (1 << 24) 160 #define PMX_MCIDMAACK_MASK (1 << 25) 161 #define PMX_MCISDCMD_MASK (1 << 26) 162 #define PMX_MCILEDS_MASK (1 << 27) 163 #define PMX_TOUCH_XY_MASK (1 << 28) 164 #define PMX_SSP0_CS0_MASK (1 << 29) 165 #define PMX_SSP0_CS1_2_MASK (1 << 30) 166 167 /* combined macros */ 168 #define PMX_GMII_MASK (PMX_GMIICLK_MASK | \ 169 PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK | \ 170 PMX_RXCLK_RDV_TXEN_D03_MASK | \ 171 PMX_GMIID47_MASK | PMX_MDC_MDIO_MASK) 172 173 #define PMX_EGPIO_0_GRP_MASK (PMX_EGPIO00_MASK | PMX_EGPIO01_MASK | \ 174 PMX_EGPIO02_MASK | \ 175 PMX_EGPIO03_MASK | PMX_EGPIO04_MASK | \ 176 PMX_EGPIO05_MASK | PMX_EGPIO06_MASK | \ 177 PMX_EGPIO07_MASK | PMX_EGPIO08_MASK | \ 178 PMX_EGPIO09_MASK) 179 #define PMX_EGPIO_1_GRP_MASK (PMX_EGPIO10_MASK | PMX_EGPIO11_MASK | \ 180 PMX_EGPIO12_MASK | PMX_EGPIO13_MASK | \ 181 PMX_EGPIO14_MASK | PMX_EGPIO15_MASK) 182 183 #define PMX_KEYBOARD_6X6_MASK (PMX_KBD_ROW0_MASK | PMX_KBD_ROW1_MASK | \ 184 PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL0_MASK | \ 185 PMX_KBD_COL1_MASK) 186 187 #define PMX_NAND8BIT_0_MASK (PMX_NAND8_MASK | PMX_NFAD23_MASK | \ 188 PMX_NFAD24_MASK | PMX_NFAD25_MASK | \ 189 PMX_NFWPRT3_MASK | PMX_NFRSTPWDWN0_MASK | \ 190 PMX_NFRSTPWDWN1_MASK | PMX_NFRSTPWDWN2_MASK | \ 191 PMX_NFCE3_MASK) 192 #define PMX_NAND8BIT_1_MASK PMX_NFRSTPWDWN3_MASK 193 194 #define PMX_NAND16BIT_1_MASK (PMX_KBD_ROWCOL25_MASK | PMX_NFIO8_15_MASK) 195 #define PMX_NAND_4CHIPS_MASK (PMX_NFCE1_MASK | PMX_NFCE2_MASK | \ 196 PMX_NFWPRT1_MASK | PMX_NFWPRT2_MASK | \ 197 PMX_KBD_ROW0_MASK | PMX_KBD_ROW1_MASK | \ 198 PMX_KBD_COL0_MASK | PMX_KBD_COL1_MASK) 199 200 #define PMX_MCIFALL_1_MASK 0xF8000000 201 #define PMX_MCIFALL_2_MASK 0x0FFFFFFF 202 203 #define PMX_PCI_REG1_MASK (PMX_SMINCS2_MASK | PMX_SMINCS3_MASK | \ 204 PMX_CLCD2_MASK | PMX_KBD_ROWCOL68_MASK | \ 205 PMX_EGPIO_1_GRP_MASK | PMX_GPT0_TMR0_MASK | \ 206 PMX_GPT0_TMR1_MASK | PMX_GPT1_TMR0_MASK | \ 207 PMX_GPT1_TMR1_MASK | PMX_I2S1_MASK | \ 208 PMX_NFCE2_MASK) 209 #define PMX_PCI_REG2_MASK (PMX_TOUCH_XY_MASK | PMX_SSP0_CS0_MASK | \ 210 PMX_SSP0_CS1_2_MASK) 211 212 #define PMX_SMII_0_1_2_MASK (PMX_CLCD2_MASK | PMX_KBD_ROWCOL68_MASK) 213 #define PMX_RGMII_REG0_MASK (PMX_MCI_DATA8_15_MASK | \ 214 PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK | \ 215 PMX_GMIID47_MASK) 216 #define PMX_RGMII_REG1_MASK (PMX_KBD_ROWCOL68_MASK | PMX_EGPIO_1_GRP_MASK |\ 217 PMX_KBD_ROW1_MASK | PMX_NFWPRT1_MASK | \ 218 PMX_KBD_ROW0_MASK | PMX_NFWPRT2_MASK) 219 #define PMX_RGMII_REG2_MASK (PMX_TOUCH_XY_MASK | PMX_SSP0_CS0_MASK | \ 220 PMX_SSP0_CS1_2_MASK) 221 222 #define PCIE_CFG_VAL(x) (PCIE_SATA##x##_SEL_PCIE | \ 223 PCIE##x##_CFG_AUX_CLK_EN | \ 224 PCIE##x##_CFG_CORE_CLK_EN | \ 225 PCIE##x##_CFG_POWERUP_RESET | \ 226 PCIE##x##_CFG_DEVICE_PRESENT) 227 #define SATA_CFG_VAL(x) (PCIE_SATA##x##_SEL_SATA | \ 228 SATA##x##_CFG_PM_CLK_EN | \ 229 SATA##x##_CFG_POWERUP_RESET | \ 230 SATA##x##_CFG_RX_CLK_EN | \ 231 SATA##x##_CFG_TX_CLK_EN) 232 233 /* Pad multiplexing for i2c0 device */ 234 static const unsigned i2c0_pins[] = { 102, 103 }; 235 static struct spear_muxreg i2c0_muxreg[] = { 236 { 237 .reg = PAD_FUNCTION_EN_0, 238 .mask = PMX_I2C0_MASK, 239 .val = PMX_I2C0_MASK, 240 }, 241 }; 242 243 static struct spear_modemux i2c0_modemux[] = { 244 { 245 .muxregs = i2c0_muxreg, 246 .nmuxregs = ARRAY_SIZE(i2c0_muxreg), 247 }, 248 }; 249 250 static struct spear_pingroup i2c0_pingroup = { 251 .name = "i2c0_grp", 252 .pins = i2c0_pins, 253 .npins = ARRAY_SIZE(i2c0_pins), 254 .modemuxs = i2c0_modemux, 255 .nmodemuxs = ARRAY_SIZE(i2c0_modemux), 256 }; 257 258 static const char *const i2c0_grps[] = { "i2c0_grp" }; 259 static struct spear_function i2c0_function = { 260 .name = "i2c0", 261 .groups = i2c0_grps, 262 .ngroups = ARRAY_SIZE(i2c0_grps), 263 }; 264 265 /* Pad multiplexing for ssp0 device */ 266 static const unsigned ssp0_pins[] = { 109, 110, 111, 112 }; 267 static struct spear_muxreg ssp0_muxreg[] = { 268 { 269 .reg = PAD_FUNCTION_EN_0, 270 .mask = PMX_SSP0_MASK, 271 .val = PMX_SSP0_MASK, 272 }, 273 }; 274 275 static struct spear_modemux ssp0_modemux[] = { 276 { 277 .muxregs = ssp0_muxreg, 278 .nmuxregs = ARRAY_SIZE(ssp0_muxreg), 279 }, 280 }; 281 282 static struct spear_pingroup ssp0_pingroup = { 283 .name = "ssp0_grp", 284 .pins = ssp0_pins, 285 .npins = ARRAY_SIZE(ssp0_pins), 286 .modemuxs = ssp0_modemux, 287 .nmodemuxs = ARRAY_SIZE(ssp0_modemux), 288 }; 289 290 /* Pad multiplexing for ssp0_cs0 device */ 291 static const unsigned ssp0_cs0_pins[] = { 96 }; 292 static struct spear_muxreg ssp0_cs0_muxreg[] = { 293 { 294 .reg = PAD_FUNCTION_EN_2, 295 .mask = PMX_SSP0_CS0_MASK, 296 .val = PMX_SSP0_CS0_MASK, 297 }, 298 }; 299 300 static struct spear_modemux ssp0_cs0_modemux[] = { 301 { 302 .muxregs = ssp0_cs0_muxreg, 303 .nmuxregs = ARRAY_SIZE(ssp0_cs0_muxreg), 304 }, 305 }; 306 307 static struct spear_pingroup ssp0_cs0_pingroup = { 308 .name = "ssp0_cs0_grp", 309 .pins = ssp0_cs0_pins, 310 .npins = ARRAY_SIZE(ssp0_cs0_pins), 311 .modemuxs = ssp0_cs0_modemux, 312 .nmodemuxs = ARRAY_SIZE(ssp0_cs0_modemux), 313 }; 314 315 /* ssp0_cs1_2 device */ 316 static const unsigned ssp0_cs1_2_pins[] = { 94, 95 }; 317 static struct spear_muxreg ssp0_cs1_2_muxreg[] = { 318 { 319 .reg = PAD_FUNCTION_EN_2, 320 .mask = PMX_SSP0_CS1_2_MASK, 321 .val = PMX_SSP0_CS1_2_MASK, 322 }, 323 }; 324 325 static struct spear_modemux ssp0_cs1_2_modemux[] = { 326 { 327 .muxregs = ssp0_cs1_2_muxreg, 328 .nmuxregs = ARRAY_SIZE(ssp0_cs1_2_muxreg), 329 }, 330 }; 331 332 static struct spear_pingroup ssp0_cs1_2_pingroup = { 333 .name = "ssp0_cs1_2_grp", 334 .pins = ssp0_cs1_2_pins, 335 .npins = ARRAY_SIZE(ssp0_cs1_2_pins), 336 .modemuxs = ssp0_cs1_2_modemux, 337 .nmodemuxs = ARRAY_SIZE(ssp0_cs1_2_modemux), 338 }; 339 340 static const char *const ssp0_grps[] = { "ssp0_grp", "ssp0_cs0_grp", 341 "ssp0_cs1_2_grp" }; 342 static struct spear_function ssp0_function = { 343 .name = "ssp0", 344 .groups = ssp0_grps, 345 .ngroups = ARRAY_SIZE(ssp0_grps), 346 }; 347 348 /* Pad multiplexing for i2s0 device */ 349 static const unsigned i2s0_pins[] = { 104, 105, 106, 107, 108 }; 350 static struct spear_muxreg i2s0_muxreg[] = { 351 { 352 .reg = PAD_FUNCTION_EN_0, 353 .mask = PMX_I2S0_MASK, 354 .val = PMX_I2S0_MASK, 355 }, 356 }; 357 358 static struct spear_modemux i2s0_modemux[] = { 359 { 360 .muxregs = i2s0_muxreg, 361 .nmuxregs = ARRAY_SIZE(i2s0_muxreg), 362 }, 363 }; 364 365 static struct spear_pingroup i2s0_pingroup = { 366 .name = "i2s0_grp", 367 .pins = i2s0_pins, 368 .npins = ARRAY_SIZE(i2s0_pins), 369 .modemuxs = i2s0_modemux, 370 .nmodemuxs = ARRAY_SIZE(i2s0_modemux), 371 }; 372 373 static const char *const i2s0_grps[] = { "i2s0_grp" }; 374 static struct spear_function i2s0_function = { 375 .name = "i2s0", 376 .groups = i2s0_grps, 377 .ngroups = ARRAY_SIZE(i2s0_grps), 378 }; 379 380 /* Pad multiplexing for i2s1 device */ 381 static const unsigned i2s1_pins[] = { 0, 1, 2, 3 }; 382 static struct spear_muxreg i2s1_muxreg[] = { 383 { 384 .reg = PAD_FUNCTION_EN_1, 385 .mask = PMX_I2S1_MASK, 386 .val = PMX_I2S1_MASK, 387 }, 388 }; 389 390 static struct spear_modemux i2s1_modemux[] = { 391 { 392 .muxregs = i2s1_muxreg, 393 .nmuxregs = ARRAY_SIZE(i2s1_muxreg), 394 }, 395 }; 396 397 static struct spear_pingroup i2s1_pingroup = { 398 .name = "i2s1_grp", 399 .pins = i2s1_pins, 400 .npins = ARRAY_SIZE(i2s1_pins), 401 .modemuxs = i2s1_modemux, 402 .nmodemuxs = ARRAY_SIZE(i2s1_modemux), 403 }; 404 405 static const char *const i2s1_grps[] = { "i2s1_grp" }; 406 static struct spear_function i2s1_function = { 407 .name = "i2s1", 408 .groups = i2s1_grps, 409 .ngroups = ARRAY_SIZE(i2s1_grps), 410 }; 411 412 /* Pad multiplexing for clcd device */ 413 static const unsigned clcd_pins[] = { 113, 114, 115, 116, 117, 118, 119, 120, 414 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 415 135, 136, 137, 138, 139, 140, 141, 142 }; 416 static struct spear_muxreg clcd_muxreg[] = { 417 { 418 .reg = PAD_FUNCTION_EN_0, 419 .mask = PMX_CLCD1_MASK, 420 .val = PMX_CLCD1_MASK, 421 }, 422 }; 423 424 static struct spear_modemux clcd_modemux[] = { 425 { 426 .muxregs = clcd_muxreg, 427 .nmuxregs = ARRAY_SIZE(clcd_muxreg), 428 }, 429 }; 430 431 static struct spear_pingroup clcd_pingroup = { 432 .name = "clcd_grp", 433 .pins = clcd_pins, 434 .npins = ARRAY_SIZE(clcd_pins), 435 .modemuxs = clcd_modemux, 436 .nmodemuxs = ARRAY_SIZE(clcd_modemux), 437 }; 438 439 static const unsigned clcd_high_res_pins[] = { 30, 31, 32, 33, 34, 35, 36, 37, 440 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 }; 441 static struct spear_muxreg clcd_high_res_muxreg[] = { 442 { 443 .reg = PAD_FUNCTION_EN_1, 444 .mask = PMX_CLCD2_MASK, 445 .val = PMX_CLCD2_MASK, 446 }, 447 }; 448 449 static struct spear_modemux clcd_high_res_modemux[] = { 450 { 451 .muxregs = clcd_high_res_muxreg, 452 .nmuxregs = ARRAY_SIZE(clcd_high_res_muxreg), 453 }, 454 }; 455 456 static struct spear_pingroup clcd_high_res_pingroup = { 457 .name = "clcd_high_res_grp", 458 .pins = clcd_high_res_pins, 459 .npins = ARRAY_SIZE(clcd_high_res_pins), 460 .modemuxs = clcd_high_res_modemux, 461 .nmodemuxs = ARRAY_SIZE(clcd_high_res_modemux), 462 }; 463 464 static const char *const clcd_grps[] = { "clcd_grp", "clcd_high_res" }; 465 static struct spear_function clcd_function = { 466 .name = "clcd", 467 .groups = clcd_grps, 468 .ngroups = ARRAY_SIZE(clcd_grps), 469 }; 470 471 static const unsigned arm_gpio_pins[] = { 18, 19, 20, 21, 22, 23, 143, 144, 145, 472 146, 147, 148, 149, 150, 151, 152 }; 473 static struct spear_muxreg arm_gpio_muxreg[] = { 474 { 475 .reg = PAD_FUNCTION_EN_0, 476 .mask = PMX_EGPIO_0_GRP_MASK, 477 .val = PMX_EGPIO_0_GRP_MASK, 478 }, { 479 .reg = PAD_FUNCTION_EN_1, 480 .mask = PMX_EGPIO_1_GRP_MASK, 481 .val = PMX_EGPIO_1_GRP_MASK, 482 }, 483 }; 484 485 static struct spear_modemux arm_gpio_modemux[] = { 486 { 487 .muxregs = arm_gpio_muxreg, 488 .nmuxregs = ARRAY_SIZE(arm_gpio_muxreg), 489 }, 490 }; 491 492 static struct spear_pingroup arm_gpio_pingroup = { 493 .name = "arm_gpio_grp", 494 .pins = arm_gpio_pins, 495 .npins = ARRAY_SIZE(arm_gpio_pins), 496 .modemuxs = arm_gpio_modemux, 497 .nmodemuxs = ARRAY_SIZE(arm_gpio_modemux), 498 }; 499 500 static const char *const arm_gpio_grps[] = { "arm_gpio_grp" }; 501 static struct spear_function arm_gpio_function = { 502 .name = "arm_gpio", 503 .groups = arm_gpio_grps, 504 .ngroups = ARRAY_SIZE(arm_gpio_grps), 505 }; 506 507 /* Pad multiplexing for smi 2 chips device */ 508 static const unsigned smi_2_chips_pins[] = { 153, 154, 155, 156, 157 }; 509 static struct spear_muxreg smi_2_chips_muxreg[] = { 510 { 511 .reg = PAD_FUNCTION_EN_0, 512 .mask = PMX_SMI_MASK, 513 .val = PMX_SMI_MASK, 514 }, 515 }; 516 517 static struct spear_modemux smi_2_chips_modemux[] = { 518 { 519 .muxregs = smi_2_chips_muxreg, 520 .nmuxregs = ARRAY_SIZE(smi_2_chips_muxreg), 521 }, 522 }; 523 524 static struct spear_pingroup smi_2_chips_pingroup = { 525 .name = "smi_2_chips_grp", 526 .pins = smi_2_chips_pins, 527 .npins = ARRAY_SIZE(smi_2_chips_pins), 528 .modemuxs = smi_2_chips_modemux, 529 .nmodemuxs = ARRAY_SIZE(smi_2_chips_modemux), 530 }; 531 532 static const unsigned smi_4_chips_pins[] = { 54, 55 }; 533 static struct spear_muxreg smi_4_chips_muxreg[] = { 534 { 535 .reg = PAD_FUNCTION_EN_0, 536 .mask = PMX_SMI_MASK, 537 .val = PMX_SMI_MASK, 538 }, { 539 .reg = PAD_FUNCTION_EN_1, 540 .mask = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, 541 .val = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, 542 }, 543 }; 544 545 static struct spear_modemux smi_4_chips_modemux[] = { 546 { 547 .muxregs = smi_4_chips_muxreg, 548 .nmuxregs = ARRAY_SIZE(smi_4_chips_muxreg), 549 }, 550 }; 551 552 static struct spear_pingroup smi_4_chips_pingroup = { 553 .name = "smi_4_chips_grp", 554 .pins = smi_4_chips_pins, 555 .npins = ARRAY_SIZE(smi_4_chips_pins), 556 .modemuxs = smi_4_chips_modemux, 557 .nmodemuxs = ARRAY_SIZE(smi_4_chips_modemux), 558 }; 559 560 static const char *const smi_grps[] = { "smi_2_chips_grp", "smi_4_chips_grp" }; 561 static struct spear_function smi_function = { 562 .name = "smi", 563 .groups = smi_grps, 564 .ngroups = ARRAY_SIZE(smi_grps), 565 }; 566 567 /* Pad multiplexing for gmii device */ 568 static const unsigned gmii_pins[] = { 173, 174, 175, 176, 177, 178, 179, 180, 569 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 570 195, 196, 197, 198, 199, 200 }; 571 static struct spear_muxreg gmii_muxreg[] = { 572 { 573 .reg = PAD_FUNCTION_EN_0, 574 .mask = PMX_GMII_MASK, 575 .val = PMX_GMII_MASK, 576 }, 577 }; 578 579 static struct spear_modemux gmii_modemux[] = { 580 { 581 .muxregs = gmii_muxreg, 582 .nmuxregs = ARRAY_SIZE(gmii_muxreg), 583 }, 584 }; 585 586 static struct spear_pingroup gmii_pingroup = { 587 .name = "gmii_grp", 588 .pins = gmii_pins, 589 .npins = ARRAY_SIZE(gmii_pins), 590 .modemuxs = gmii_modemux, 591 .nmodemuxs = ARRAY_SIZE(gmii_modemux), 592 }; 593 594 static const char *const gmii_grps[] = { "gmii_grp" }; 595 static struct spear_function gmii_function = { 596 .name = "gmii", 597 .groups = gmii_grps, 598 .ngroups = ARRAY_SIZE(gmii_grps), 599 }; 600 601 /* Pad multiplexing for rgmii device */ 602 static const unsigned rgmii_pins[] = { 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 603 28, 29, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 175, 604 180, 181, 182, 183, 185, 188, 193, 194, 195, 196, 197, 198, 211, 212 }; 605 static struct spear_muxreg rgmii_muxreg[] = { 606 { 607 .reg = PAD_FUNCTION_EN_0, 608 .mask = PMX_RGMII_REG0_MASK, 609 .val = 0, 610 }, { 611 .reg = PAD_FUNCTION_EN_1, 612 .mask = PMX_RGMII_REG1_MASK, 613 .val = 0, 614 }, { 615 .reg = PAD_FUNCTION_EN_2, 616 .mask = PMX_RGMII_REG2_MASK, 617 .val = 0, 618 }, 619 }; 620 621 static struct spear_modemux rgmii_modemux[] = { 622 { 623 .muxregs = rgmii_muxreg, 624 .nmuxregs = ARRAY_SIZE(rgmii_muxreg), 625 }, 626 }; 627 628 static struct spear_pingroup rgmii_pingroup = { 629 .name = "rgmii_grp", 630 .pins = rgmii_pins, 631 .npins = ARRAY_SIZE(rgmii_pins), 632 .modemuxs = rgmii_modemux, 633 .nmodemuxs = ARRAY_SIZE(rgmii_modemux), 634 }; 635 636 static const char *const rgmii_grps[] = { "rgmii_grp" }; 637 static struct spear_function rgmii_function = { 638 .name = "rgmii", 639 .groups = rgmii_grps, 640 .ngroups = ARRAY_SIZE(rgmii_grps), 641 }; 642 643 /* Pad multiplexing for smii_0_1_2 device */ 644 static const unsigned smii_0_1_2_pins[] = { 24, 25, 26, 27, 28, 29, 30, 31, 32, 645 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 646 51, 52, 53, 54, 55 }; 647 static struct spear_muxreg smii_0_1_2_muxreg[] = { 648 { 649 .reg = PAD_FUNCTION_EN_1, 650 .mask = PMX_SMII_0_1_2_MASK, 651 .val = 0, 652 }, 653 }; 654 655 static struct spear_modemux smii_0_1_2_modemux[] = { 656 { 657 .muxregs = smii_0_1_2_muxreg, 658 .nmuxregs = ARRAY_SIZE(smii_0_1_2_muxreg), 659 }, 660 }; 661 662 static struct spear_pingroup smii_0_1_2_pingroup = { 663 .name = "smii_0_1_2_grp", 664 .pins = smii_0_1_2_pins, 665 .npins = ARRAY_SIZE(smii_0_1_2_pins), 666 .modemuxs = smii_0_1_2_modemux, 667 .nmodemuxs = ARRAY_SIZE(smii_0_1_2_modemux), 668 }; 669 670 static const char *const smii_0_1_2_grps[] = { "smii_0_1_2_grp" }; 671 static struct spear_function smii_0_1_2_function = { 672 .name = "smii_0_1_2", 673 .groups = smii_0_1_2_grps, 674 .ngroups = ARRAY_SIZE(smii_0_1_2_grps), 675 }; 676 677 /* Pad multiplexing for ras_mii_txclk device */ 678 static const unsigned ras_mii_txclk_pins[] = { 98, 99 }; 679 static struct spear_muxreg ras_mii_txclk_muxreg[] = { 680 { 681 .reg = PAD_FUNCTION_EN_1, 682 .mask = PMX_NFCE2_MASK, 683 .val = 0, 684 }, 685 }; 686 687 static struct spear_modemux ras_mii_txclk_modemux[] = { 688 { 689 .muxregs = ras_mii_txclk_muxreg, 690 .nmuxregs = ARRAY_SIZE(ras_mii_txclk_muxreg), 691 }, 692 }; 693 694 static struct spear_pingroup ras_mii_txclk_pingroup = { 695 .name = "ras_mii_txclk_grp", 696 .pins = ras_mii_txclk_pins, 697 .npins = ARRAY_SIZE(ras_mii_txclk_pins), 698 .modemuxs = ras_mii_txclk_modemux, 699 .nmodemuxs = ARRAY_SIZE(ras_mii_txclk_modemux), 700 }; 701 702 static const char *const ras_mii_txclk_grps[] = { "ras_mii_txclk_grp" }; 703 static struct spear_function ras_mii_txclk_function = { 704 .name = "ras_mii_txclk", 705 .groups = ras_mii_txclk_grps, 706 .ngroups = ARRAY_SIZE(ras_mii_txclk_grps), 707 }; 708 709 /* Pad multiplexing for nand 8bit device (cs0 only) */ 710 static const unsigned nand_8bit_pins[] = { 56, 57, 58, 59, 60, 61, 62, 63, 64, 711 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 712 83, 84, 85, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 713 170, 171, 172, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 714 212 }; 715 static struct spear_muxreg nand_8bit_muxreg[] = { 716 { 717 .reg = PAD_FUNCTION_EN_0, 718 .mask = PMX_NAND8BIT_0_MASK, 719 .val = PMX_NAND8BIT_0_MASK, 720 }, { 721 .reg = PAD_FUNCTION_EN_1, 722 .mask = PMX_NAND8BIT_1_MASK, 723 .val = PMX_NAND8BIT_1_MASK, 724 }, 725 }; 726 727 static struct spear_modemux nand_8bit_modemux[] = { 728 { 729 .muxregs = nand_8bit_muxreg, 730 .nmuxregs = ARRAY_SIZE(nand_8bit_muxreg), 731 }, 732 }; 733 734 static struct spear_pingroup nand_8bit_pingroup = { 735 .name = "nand_8bit_grp", 736 .pins = nand_8bit_pins, 737 .npins = ARRAY_SIZE(nand_8bit_pins), 738 .modemuxs = nand_8bit_modemux, 739 .nmodemuxs = ARRAY_SIZE(nand_8bit_modemux), 740 }; 741 742 /* Pad multiplexing for nand 16bit device */ 743 static const unsigned nand_16bit_pins[] = { 201, 202, 203, 204, 207, 208, 209, 744 210 }; 745 static struct spear_muxreg nand_16bit_muxreg[] = { 746 { 747 .reg = PAD_FUNCTION_EN_1, 748 .mask = PMX_NAND16BIT_1_MASK, 749 .val = PMX_NAND16BIT_1_MASK, 750 }, 751 }; 752 753 static struct spear_modemux nand_16bit_modemux[] = { 754 { 755 .muxregs = nand_16bit_muxreg, 756 .nmuxregs = ARRAY_SIZE(nand_16bit_muxreg), 757 }, 758 }; 759 760 static struct spear_pingroup nand_16bit_pingroup = { 761 .name = "nand_16bit_grp", 762 .pins = nand_16bit_pins, 763 .npins = ARRAY_SIZE(nand_16bit_pins), 764 .modemuxs = nand_16bit_modemux, 765 .nmodemuxs = ARRAY_SIZE(nand_16bit_modemux), 766 }; 767 768 /* Pad multiplexing for nand 4 chips */ 769 static const unsigned nand_4_chips_pins[] = { 205, 206, 211, 212 }; 770 static struct spear_muxreg nand_4_chips_muxreg[] = { 771 { 772 .reg = PAD_FUNCTION_EN_1, 773 .mask = PMX_NAND_4CHIPS_MASK, 774 .val = PMX_NAND_4CHIPS_MASK, 775 }, 776 }; 777 778 static struct spear_modemux nand_4_chips_modemux[] = { 779 { 780 .muxregs = nand_4_chips_muxreg, 781 .nmuxregs = ARRAY_SIZE(nand_4_chips_muxreg), 782 }, 783 }; 784 785 static struct spear_pingroup nand_4_chips_pingroup = { 786 .name = "nand_4_chips_grp", 787 .pins = nand_4_chips_pins, 788 .npins = ARRAY_SIZE(nand_4_chips_pins), 789 .modemuxs = nand_4_chips_modemux, 790 .nmodemuxs = ARRAY_SIZE(nand_4_chips_modemux), 791 }; 792 793 static const char *const nand_grps[] = { "nand_8bit_grp", "nand_16bit_grp", 794 "nand_4_chips_grp" }; 795 static struct spear_function nand_function = { 796 .name = "nand", 797 .groups = nand_grps, 798 .ngroups = ARRAY_SIZE(nand_grps), 799 }; 800 801 /* Pad multiplexing for keyboard_6x6 device */ 802 static const unsigned keyboard_6x6_pins[] = { 201, 202, 203, 204, 205, 206, 207, 803 208, 209, 210, 211, 212 }; 804 static struct spear_muxreg keyboard_6x6_muxreg[] = { 805 { 806 .reg = PAD_FUNCTION_EN_1, 807 .mask = PMX_KEYBOARD_6X6_MASK | PMX_NFIO8_15_MASK | 808 PMX_NFCE1_MASK | PMX_NFCE2_MASK | PMX_NFWPRT1_MASK | 809 PMX_NFWPRT2_MASK, 810 .val = PMX_KEYBOARD_6X6_MASK, 811 }, 812 }; 813 814 static struct spear_modemux keyboard_6x6_modemux[] = { 815 { 816 .muxregs = keyboard_6x6_muxreg, 817 .nmuxregs = ARRAY_SIZE(keyboard_6x6_muxreg), 818 }, 819 }; 820 821 static struct spear_pingroup keyboard_6x6_pingroup = { 822 .name = "keyboard_6x6_grp", 823 .pins = keyboard_6x6_pins, 824 .npins = ARRAY_SIZE(keyboard_6x6_pins), 825 .modemuxs = keyboard_6x6_modemux, 826 .nmodemuxs = ARRAY_SIZE(keyboard_6x6_modemux), 827 }; 828 829 /* Pad multiplexing for keyboard_rowcol6_8 device */ 830 static const unsigned keyboard_rowcol6_8_pins[] = { 24, 25, 26, 27, 28, 29 }; 831 static struct spear_muxreg keyboard_rowcol6_8_muxreg[] = { 832 { 833 .reg = PAD_FUNCTION_EN_1, 834 .mask = PMX_KBD_ROWCOL68_MASK, 835 .val = PMX_KBD_ROWCOL68_MASK, 836 }, 837 }; 838 839 static struct spear_modemux keyboard_rowcol6_8_modemux[] = { 840 { 841 .muxregs = keyboard_rowcol6_8_muxreg, 842 .nmuxregs = ARRAY_SIZE(keyboard_rowcol6_8_muxreg), 843 }, 844 }; 845 846 static struct spear_pingroup keyboard_rowcol6_8_pingroup = { 847 .name = "keyboard_rowcol6_8_grp", 848 .pins = keyboard_rowcol6_8_pins, 849 .npins = ARRAY_SIZE(keyboard_rowcol6_8_pins), 850 .modemuxs = keyboard_rowcol6_8_modemux, 851 .nmodemuxs = ARRAY_SIZE(keyboard_rowcol6_8_modemux), 852 }; 853 854 static const char *const keyboard_grps[] = { "keyboard_6x6_grp", 855 "keyboard_rowcol6_8_grp" }; 856 static struct spear_function keyboard_function = { 857 .name = "keyboard", 858 .groups = keyboard_grps, 859 .ngroups = ARRAY_SIZE(keyboard_grps), 860 }; 861 862 /* Pad multiplexing for uart0 device */ 863 static const unsigned uart0_pins[] = { 100, 101 }; 864 static struct spear_muxreg uart0_muxreg[] = { 865 { 866 .reg = PAD_FUNCTION_EN_0, 867 .mask = PMX_UART0_MASK, 868 .val = PMX_UART0_MASK, 869 }, 870 }; 871 872 static struct spear_modemux uart0_modemux[] = { 873 { 874 .muxregs = uart0_muxreg, 875 .nmuxregs = ARRAY_SIZE(uart0_muxreg), 876 }, 877 }; 878 879 static struct spear_pingroup uart0_pingroup = { 880 .name = "uart0_grp", 881 .pins = uart0_pins, 882 .npins = ARRAY_SIZE(uart0_pins), 883 .modemuxs = uart0_modemux, 884 .nmodemuxs = ARRAY_SIZE(uart0_modemux), 885 }; 886 887 /* Pad multiplexing for uart0_modem device */ 888 static const unsigned uart0_modem_pins[] = { 12, 13, 14, 15, 16, 17 }; 889 static struct spear_muxreg uart0_modem_muxreg[] = { 890 { 891 .reg = PAD_FUNCTION_EN_1, 892 .mask = PMX_UART0_MODEM_MASK, 893 .val = PMX_UART0_MODEM_MASK, 894 }, 895 }; 896 897 static struct spear_modemux uart0_modem_modemux[] = { 898 { 899 .muxregs = uart0_modem_muxreg, 900 .nmuxregs = ARRAY_SIZE(uart0_modem_muxreg), 901 }, 902 }; 903 904 static struct spear_pingroup uart0_modem_pingroup = { 905 .name = "uart0_modem_grp", 906 .pins = uart0_modem_pins, 907 .npins = ARRAY_SIZE(uart0_modem_pins), 908 .modemuxs = uart0_modem_modemux, 909 .nmodemuxs = ARRAY_SIZE(uart0_modem_modemux), 910 }; 911 912 static const char *const uart0_grps[] = { "uart0_grp", "uart0_modem_grp" }; 913 static struct spear_function uart0_function = { 914 .name = "uart0", 915 .groups = uart0_grps, 916 .ngroups = ARRAY_SIZE(uart0_grps), 917 }; 918 919 /* Pad multiplexing for gpt0_tmr0 device */ 920 static const unsigned gpt0_tmr0_pins[] = { 10, 11 }; 921 static struct spear_muxreg gpt0_tmr0_muxreg[] = { 922 { 923 .reg = PAD_FUNCTION_EN_1, 924 .mask = PMX_GPT0_TMR0_MASK, 925 .val = PMX_GPT0_TMR0_MASK, 926 }, 927 }; 928 929 static struct spear_modemux gpt0_tmr0_modemux[] = { 930 { 931 .muxregs = gpt0_tmr0_muxreg, 932 .nmuxregs = ARRAY_SIZE(gpt0_tmr0_muxreg), 933 }, 934 }; 935 936 static struct spear_pingroup gpt0_tmr0_pingroup = { 937 .name = "gpt0_tmr0_grp", 938 .pins = gpt0_tmr0_pins, 939 .npins = ARRAY_SIZE(gpt0_tmr0_pins), 940 .modemuxs = gpt0_tmr0_modemux, 941 .nmodemuxs = ARRAY_SIZE(gpt0_tmr0_modemux), 942 }; 943 944 /* Pad multiplexing for gpt0_tmr1 device */ 945 static const unsigned gpt0_tmr1_pins[] = { 8, 9 }; 946 static struct spear_muxreg gpt0_tmr1_muxreg[] = { 947 { 948 .reg = PAD_FUNCTION_EN_1, 949 .mask = PMX_GPT0_TMR1_MASK, 950 .val = PMX_GPT0_TMR1_MASK, 951 }, 952 }; 953 954 static struct spear_modemux gpt0_tmr1_modemux[] = { 955 { 956 .muxregs = gpt0_tmr1_muxreg, 957 .nmuxregs = ARRAY_SIZE(gpt0_tmr1_muxreg), 958 }, 959 }; 960 961 static struct spear_pingroup gpt0_tmr1_pingroup = { 962 .name = "gpt0_tmr1_grp", 963 .pins = gpt0_tmr1_pins, 964 .npins = ARRAY_SIZE(gpt0_tmr1_pins), 965 .modemuxs = gpt0_tmr1_modemux, 966 .nmodemuxs = ARRAY_SIZE(gpt0_tmr1_modemux), 967 }; 968 969 static const char *const gpt0_grps[] = { "gpt0_tmr0_grp", "gpt0_tmr1_grp" }; 970 static struct spear_function gpt0_function = { 971 .name = "gpt0", 972 .groups = gpt0_grps, 973 .ngroups = ARRAY_SIZE(gpt0_grps), 974 }; 975 976 /* Pad multiplexing for gpt1_tmr0 device */ 977 static const unsigned gpt1_tmr0_pins[] = { 6, 7 }; 978 static struct spear_muxreg gpt1_tmr0_muxreg[] = { 979 { 980 .reg = PAD_FUNCTION_EN_1, 981 .mask = PMX_GPT1_TMR0_MASK, 982 .val = PMX_GPT1_TMR0_MASK, 983 }, 984 }; 985 986 static struct spear_modemux gpt1_tmr0_modemux[] = { 987 { 988 .muxregs = gpt1_tmr0_muxreg, 989 .nmuxregs = ARRAY_SIZE(gpt1_tmr0_muxreg), 990 }, 991 }; 992 993 static struct spear_pingroup gpt1_tmr0_pingroup = { 994 .name = "gpt1_tmr0_grp", 995 .pins = gpt1_tmr0_pins, 996 .npins = ARRAY_SIZE(gpt1_tmr0_pins), 997 .modemuxs = gpt1_tmr0_modemux, 998 .nmodemuxs = ARRAY_SIZE(gpt1_tmr0_modemux), 999 }; 1000 1001 /* Pad multiplexing for gpt1_tmr1 device */ 1002 static const unsigned gpt1_tmr1_pins[] = { 4, 5 }; 1003 static struct spear_muxreg gpt1_tmr1_muxreg[] = { 1004 { 1005 .reg = PAD_FUNCTION_EN_1, 1006 .mask = PMX_GPT1_TMR1_MASK, 1007 .val = PMX_GPT1_TMR1_MASK, 1008 }, 1009 }; 1010 1011 static struct spear_modemux gpt1_tmr1_modemux[] = { 1012 { 1013 .muxregs = gpt1_tmr1_muxreg, 1014 .nmuxregs = ARRAY_SIZE(gpt1_tmr1_muxreg), 1015 }, 1016 }; 1017 1018 static struct spear_pingroup gpt1_tmr1_pingroup = { 1019 .name = "gpt1_tmr1_grp", 1020 .pins = gpt1_tmr1_pins, 1021 .npins = ARRAY_SIZE(gpt1_tmr1_pins), 1022 .modemuxs = gpt1_tmr1_modemux, 1023 .nmodemuxs = ARRAY_SIZE(gpt1_tmr1_modemux), 1024 }; 1025 1026 static const char *const gpt1_grps[] = { "gpt1_tmr1_grp", "gpt1_tmr0_grp" }; 1027 static struct spear_function gpt1_function = { 1028 .name = "gpt1", 1029 .groups = gpt1_grps, 1030 .ngroups = ARRAY_SIZE(gpt1_grps), 1031 }; 1032 1033 /* Pad multiplexing for mcif device */ 1034 static const unsigned mcif_pins[] = { 86, 87, 88, 89, 90, 91, 92, 93, 213, 214, 1035 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 1036 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 1037 243, 244, 245 }; 1038 #define MCIF_MUXREG \ 1039 { \ 1040 .reg = PAD_FUNCTION_EN_0, \ 1041 .mask = PMX_MCI_DATA8_15_MASK, \ 1042 .val = PMX_MCI_DATA8_15_MASK, \ 1043 }, { \ 1044 .reg = PAD_FUNCTION_EN_1, \ 1045 .mask = PMX_MCIFALL_1_MASK | PMX_NFWPRT1_MASK | \ 1046 PMX_NFWPRT2_MASK, \ 1047 .val = PMX_MCIFALL_1_MASK, \ 1048 }, { \ 1049 .reg = PAD_FUNCTION_EN_2, \ 1050 .mask = PMX_MCIFALL_2_MASK, \ 1051 .val = PMX_MCIFALL_2_MASK, \ 1052 } 1053 1054 /* sdhci device */ 1055 static struct spear_muxreg sdhci_muxreg[] = { 1056 MCIF_MUXREG, 1057 { 1058 .reg = PERIP_CFG, 1059 .mask = MCIF_SEL_MASK, 1060 .val = MCIF_SEL_SD, 1061 }, 1062 }; 1063 1064 static struct spear_modemux sdhci_modemux[] = { 1065 { 1066 .muxregs = sdhci_muxreg, 1067 .nmuxregs = ARRAY_SIZE(sdhci_muxreg), 1068 }, 1069 }; 1070 1071 static struct spear_pingroup sdhci_pingroup = { 1072 .name = "sdhci_grp", 1073 .pins = mcif_pins, 1074 .npins = ARRAY_SIZE(mcif_pins), 1075 .modemuxs = sdhci_modemux, 1076 .nmodemuxs = ARRAY_SIZE(sdhci_modemux), 1077 }; 1078 1079 static const char *const sdhci_grps[] = { "sdhci_grp" }; 1080 static struct spear_function sdhci_function = { 1081 .name = "sdhci", 1082 .groups = sdhci_grps, 1083 .ngroups = ARRAY_SIZE(sdhci_grps), 1084 }; 1085 1086 /* cf device */ 1087 static struct spear_muxreg cf_muxreg[] = { 1088 MCIF_MUXREG, 1089 { 1090 .reg = PERIP_CFG, 1091 .mask = MCIF_SEL_MASK, 1092 .val = MCIF_SEL_CF, 1093 }, 1094 }; 1095 1096 static struct spear_modemux cf_modemux[] = { 1097 { 1098 .muxregs = cf_muxreg, 1099 .nmuxregs = ARRAY_SIZE(cf_muxreg), 1100 }, 1101 }; 1102 1103 static struct spear_pingroup cf_pingroup = { 1104 .name = "cf_grp", 1105 .pins = mcif_pins, 1106 .npins = ARRAY_SIZE(mcif_pins), 1107 .modemuxs = cf_modemux, 1108 .nmodemuxs = ARRAY_SIZE(cf_modemux), 1109 }; 1110 1111 static const char *const cf_grps[] = { "cf_grp" }; 1112 static struct spear_function cf_function = { 1113 .name = "cf", 1114 .groups = cf_grps, 1115 .ngroups = ARRAY_SIZE(cf_grps), 1116 }; 1117 1118 /* xd device */ 1119 static struct spear_muxreg xd_muxreg[] = { 1120 MCIF_MUXREG, 1121 { 1122 .reg = PERIP_CFG, 1123 .mask = MCIF_SEL_MASK, 1124 .val = MCIF_SEL_XD, 1125 }, 1126 }; 1127 1128 static struct spear_modemux xd_modemux[] = { 1129 { 1130 .muxregs = xd_muxreg, 1131 .nmuxregs = ARRAY_SIZE(xd_muxreg), 1132 }, 1133 }; 1134 1135 static struct spear_pingroup xd_pingroup = { 1136 .name = "xd_grp", 1137 .pins = mcif_pins, 1138 .npins = ARRAY_SIZE(mcif_pins), 1139 .modemuxs = xd_modemux, 1140 .nmodemuxs = ARRAY_SIZE(xd_modemux), 1141 }; 1142 1143 static const char *const xd_grps[] = { "xd_grp" }; 1144 static struct spear_function xd_function = { 1145 .name = "xd", 1146 .groups = xd_grps, 1147 .ngroups = ARRAY_SIZE(xd_grps), 1148 }; 1149 1150 /* Pad multiplexing for touch_xy device */ 1151 static const unsigned touch_xy_pins[] = { 97 }; 1152 static struct spear_muxreg touch_xy_muxreg[] = { 1153 { 1154 .reg = PAD_FUNCTION_EN_2, 1155 .mask = PMX_TOUCH_XY_MASK, 1156 .val = PMX_TOUCH_XY_MASK, 1157 }, 1158 }; 1159 1160 static struct spear_modemux touch_xy_modemux[] = { 1161 { 1162 .muxregs = touch_xy_muxreg, 1163 .nmuxregs = ARRAY_SIZE(touch_xy_muxreg), 1164 }, 1165 }; 1166 1167 static struct spear_pingroup touch_xy_pingroup = { 1168 .name = "touch_xy_grp", 1169 .pins = touch_xy_pins, 1170 .npins = ARRAY_SIZE(touch_xy_pins), 1171 .modemuxs = touch_xy_modemux, 1172 .nmodemuxs = ARRAY_SIZE(touch_xy_modemux), 1173 }; 1174 1175 static const char *const touch_xy_grps[] = { "touch_xy_grp" }; 1176 static struct spear_function touch_xy_function = { 1177 .name = "touchscreen", 1178 .groups = touch_xy_grps, 1179 .ngroups = ARRAY_SIZE(touch_xy_grps), 1180 }; 1181 1182 /* Pad multiplexing for uart1 device */ 1183 /* Muxed with I2C */ 1184 static const unsigned uart1_dis_i2c_pins[] = { 102, 103 }; 1185 static struct spear_muxreg uart1_dis_i2c_muxreg[] = { 1186 { 1187 .reg = PAD_FUNCTION_EN_0, 1188 .mask = PMX_I2C0_MASK, 1189 .val = 0, 1190 }, 1191 }; 1192 1193 static struct spear_modemux uart1_dis_i2c_modemux[] = { 1194 { 1195 .muxregs = uart1_dis_i2c_muxreg, 1196 .nmuxregs = ARRAY_SIZE(uart1_dis_i2c_muxreg), 1197 }, 1198 }; 1199 1200 static struct spear_pingroup uart_1_dis_i2c_pingroup = { 1201 .name = "uart1_disable_i2c_grp", 1202 .pins = uart1_dis_i2c_pins, 1203 .npins = ARRAY_SIZE(uart1_dis_i2c_pins), 1204 .modemuxs = uart1_dis_i2c_modemux, 1205 .nmodemuxs = ARRAY_SIZE(uart1_dis_i2c_modemux), 1206 }; 1207 1208 /* Muxed with SD/MMC */ 1209 static const unsigned uart1_dis_sd_pins[] = { 214, 215 }; 1210 static struct spear_muxreg uart1_dis_sd_muxreg[] = { 1211 { 1212 .reg = PAD_FUNCTION_EN_1, 1213 .mask = PMX_MCIDATA1_MASK | 1214 PMX_MCIDATA2_MASK, 1215 .val = 0, 1216 }, 1217 }; 1218 1219 static struct spear_modemux uart1_dis_sd_modemux[] = { 1220 { 1221 .muxregs = uart1_dis_sd_muxreg, 1222 .nmuxregs = ARRAY_SIZE(uart1_dis_sd_muxreg), 1223 }, 1224 }; 1225 1226 static struct spear_pingroup uart_1_dis_sd_pingroup = { 1227 .name = "uart1_disable_sd_grp", 1228 .pins = uart1_dis_sd_pins, 1229 .npins = ARRAY_SIZE(uart1_dis_sd_pins), 1230 .modemuxs = uart1_dis_sd_modemux, 1231 .nmodemuxs = ARRAY_SIZE(uart1_dis_sd_modemux), 1232 }; 1233 1234 static const char *const uart1_grps[] = { "uart1_disable_i2c_grp", 1235 "uart1_disable_sd_grp" }; 1236 static struct spear_function uart1_function = { 1237 .name = "uart1", 1238 .groups = uart1_grps, 1239 .ngroups = ARRAY_SIZE(uart1_grps), 1240 }; 1241 1242 /* Pad multiplexing for uart2_3 device */ 1243 static const unsigned uart2_3_pins[] = { 104, 105, 106, 107 }; 1244 static struct spear_muxreg uart2_3_muxreg[] = { 1245 { 1246 .reg = PAD_FUNCTION_EN_0, 1247 .mask = PMX_I2S0_MASK, 1248 .val = 0, 1249 }, 1250 }; 1251 1252 static struct spear_modemux uart2_3_modemux[] = { 1253 { 1254 .muxregs = uart2_3_muxreg, 1255 .nmuxregs = ARRAY_SIZE(uart2_3_muxreg), 1256 }, 1257 }; 1258 1259 static struct spear_pingroup uart_2_3_pingroup = { 1260 .name = "uart2_3_grp", 1261 .pins = uart2_3_pins, 1262 .npins = ARRAY_SIZE(uart2_3_pins), 1263 .modemuxs = uart2_3_modemux, 1264 .nmodemuxs = ARRAY_SIZE(uart2_3_modemux), 1265 }; 1266 1267 static const char *const uart2_3_grps[] = { "uart2_3_grp" }; 1268 static struct spear_function uart2_3_function = { 1269 .name = "uart2_3", 1270 .groups = uart2_3_grps, 1271 .ngroups = ARRAY_SIZE(uart2_3_grps), 1272 }; 1273 1274 /* Pad multiplexing for uart4 device */ 1275 static const unsigned uart4_pins[] = { 108, 113 }; 1276 static struct spear_muxreg uart4_muxreg[] = { 1277 { 1278 .reg = PAD_FUNCTION_EN_0, 1279 .mask = PMX_I2S0_MASK | PMX_CLCD1_MASK, 1280 .val = 0, 1281 }, 1282 }; 1283 1284 static struct spear_modemux uart4_modemux[] = { 1285 { 1286 .muxregs = uart4_muxreg, 1287 .nmuxregs = ARRAY_SIZE(uart4_muxreg), 1288 }, 1289 }; 1290 1291 static struct spear_pingroup uart_4_pingroup = { 1292 .name = "uart4_grp", 1293 .pins = uart4_pins, 1294 .npins = ARRAY_SIZE(uart4_pins), 1295 .modemuxs = uart4_modemux, 1296 .nmodemuxs = ARRAY_SIZE(uart4_modemux), 1297 }; 1298 1299 static const char *const uart4_grps[] = { "uart4_grp" }; 1300 static struct spear_function uart4_function = { 1301 .name = "uart4", 1302 .groups = uart4_grps, 1303 .ngroups = ARRAY_SIZE(uart4_grps), 1304 }; 1305 1306 /* Pad multiplexing for uart5 device */ 1307 static const unsigned uart5_pins[] = { 114, 115 }; 1308 static struct spear_muxreg uart5_muxreg[] = { 1309 { 1310 .reg = PAD_FUNCTION_EN_0, 1311 .mask = PMX_CLCD1_MASK, 1312 .val = 0, 1313 }, 1314 }; 1315 1316 static struct spear_modemux uart5_modemux[] = { 1317 { 1318 .muxregs = uart5_muxreg, 1319 .nmuxregs = ARRAY_SIZE(uart5_muxreg), 1320 }, 1321 }; 1322 1323 static struct spear_pingroup uart_5_pingroup = { 1324 .name = "uart5_grp", 1325 .pins = uart5_pins, 1326 .npins = ARRAY_SIZE(uart5_pins), 1327 .modemuxs = uart5_modemux, 1328 .nmodemuxs = ARRAY_SIZE(uart5_modemux), 1329 }; 1330 1331 static const char *const uart5_grps[] = { "uart5_grp" }; 1332 static struct spear_function uart5_function = { 1333 .name = "uart5", 1334 .groups = uart5_grps, 1335 .ngroups = ARRAY_SIZE(uart5_grps), 1336 }; 1337 1338 /* Pad multiplexing for rs485_0_1_tdm_0_1 device */ 1339 static const unsigned rs485_0_1_tdm_0_1_pins[] = { 116, 117, 118, 119, 120, 121, 1340 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 1341 136, 137 }; 1342 static struct spear_muxreg rs485_0_1_tdm_0_1_muxreg[] = { 1343 { 1344 .reg = PAD_FUNCTION_EN_0, 1345 .mask = PMX_CLCD1_MASK, 1346 .val = 0, 1347 }, 1348 }; 1349 1350 static struct spear_modemux rs485_0_1_tdm_0_1_modemux[] = { 1351 { 1352 .muxregs = rs485_0_1_tdm_0_1_muxreg, 1353 .nmuxregs = ARRAY_SIZE(rs485_0_1_tdm_0_1_muxreg), 1354 }, 1355 }; 1356 1357 static struct spear_pingroup rs485_0_1_tdm_0_1_pingroup = { 1358 .name = "rs485_0_1_tdm_0_1_grp", 1359 .pins = rs485_0_1_tdm_0_1_pins, 1360 .npins = ARRAY_SIZE(rs485_0_1_tdm_0_1_pins), 1361 .modemuxs = rs485_0_1_tdm_0_1_modemux, 1362 .nmodemuxs = ARRAY_SIZE(rs485_0_1_tdm_0_1_modemux), 1363 }; 1364 1365 static const char *const rs485_0_1_tdm_0_1_grps[] = { "rs485_0_1_tdm_0_1_grp" }; 1366 static struct spear_function rs485_0_1_tdm_0_1_function = { 1367 .name = "rs485_0_1_tdm_0_1", 1368 .groups = rs485_0_1_tdm_0_1_grps, 1369 .ngroups = ARRAY_SIZE(rs485_0_1_tdm_0_1_grps), 1370 }; 1371 1372 /* Pad multiplexing for i2c_1_2 device */ 1373 static const unsigned i2c_1_2_pins[] = { 138, 139, 140, 141 }; 1374 static struct spear_muxreg i2c_1_2_muxreg[] = { 1375 { 1376 .reg = PAD_FUNCTION_EN_0, 1377 .mask = PMX_CLCD1_MASK, 1378 .val = 0, 1379 }, 1380 }; 1381 1382 static struct spear_modemux i2c_1_2_modemux[] = { 1383 { 1384 .muxregs = i2c_1_2_muxreg, 1385 .nmuxregs = ARRAY_SIZE(i2c_1_2_muxreg), 1386 }, 1387 }; 1388 1389 static struct spear_pingroup i2c_1_2_pingroup = { 1390 .name = "i2c_1_2_grp", 1391 .pins = i2c_1_2_pins, 1392 .npins = ARRAY_SIZE(i2c_1_2_pins), 1393 .modemuxs = i2c_1_2_modemux, 1394 .nmodemuxs = ARRAY_SIZE(i2c_1_2_modemux), 1395 }; 1396 1397 static const char *const i2c_1_2_grps[] = { "i2c_1_2_grp" }; 1398 static struct spear_function i2c_1_2_function = { 1399 .name = "i2c_1_2", 1400 .groups = i2c_1_2_grps, 1401 .ngroups = ARRAY_SIZE(i2c_1_2_grps), 1402 }; 1403 1404 /* Pad multiplexing for i2c3_dis_smi_clcd device */ 1405 /* Muxed with SMI & CLCD */ 1406 static const unsigned i2c3_dis_smi_clcd_pins[] = { 142, 153 }; 1407 static struct spear_muxreg i2c3_dis_smi_clcd_muxreg[] = { 1408 { 1409 .reg = PAD_FUNCTION_EN_0, 1410 .mask = PMX_CLCD1_MASK | PMX_SMI_MASK, 1411 .val = 0, 1412 }, 1413 }; 1414 1415 static struct spear_modemux i2c3_dis_smi_clcd_modemux[] = { 1416 { 1417 .muxregs = i2c3_dis_smi_clcd_muxreg, 1418 .nmuxregs = ARRAY_SIZE(i2c3_dis_smi_clcd_muxreg), 1419 }, 1420 }; 1421 1422 static struct spear_pingroup i2c3_dis_smi_clcd_pingroup = { 1423 .name = "i2c3_dis_smi_clcd_grp", 1424 .pins = i2c3_dis_smi_clcd_pins, 1425 .npins = ARRAY_SIZE(i2c3_dis_smi_clcd_pins), 1426 .modemuxs = i2c3_dis_smi_clcd_modemux, 1427 .nmodemuxs = ARRAY_SIZE(i2c3_dis_smi_clcd_modemux), 1428 }; 1429 1430 /* Pad multiplexing for i2c3_dis_sd_i2s0 device */ 1431 /* Muxed with SD/MMC & I2S1 */ 1432 static const unsigned i2c3_dis_sd_i2s0_pins[] = { 0, 216 }; 1433 static struct spear_muxreg i2c3_dis_sd_i2s0_muxreg[] = { 1434 { 1435 .reg = PAD_FUNCTION_EN_1, 1436 .mask = PMX_I2S1_MASK | PMX_MCIDATA3_MASK, 1437 .val = 0, 1438 }, 1439 }; 1440 1441 static struct spear_modemux i2c3_dis_sd_i2s0_modemux[] = { 1442 { 1443 .muxregs = i2c3_dis_sd_i2s0_muxreg, 1444 .nmuxregs = ARRAY_SIZE(i2c3_dis_sd_i2s0_muxreg), 1445 }, 1446 }; 1447 1448 static struct spear_pingroup i2c3_dis_sd_i2s0_pingroup = { 1449 .name = "i2c3_dis_sd_i2s0_grp", 1450 .pins = i2c3_dis_sd_i2s0_pins, 1451 .npins = ARRAY_SIZE(i2c3_dis_sd_i2s0_pins), 1452 .modemuxs = i2c3_dis_sd_i2s0_modemux, 1453 .nmodemuxs = ARRAY_SIZE(i2c3_dis_sd_i2s0_modemux), 1454 }; 1455 1456 static const char *const i2c3_grps[] = { "i2c3_dis_smi_clcd_grp", 1457 "i2c3_dis_sd_i2s0_grp" }; 1458 static struct spear_function i2c3_unction = { 1459 .name = "i2c3_i2s1", 1460 .groups = i2c3_grps, 1461 .ngroups = ARRAY_SIZE(i2c3_grps), 1462 }; 1463 1464 /* Pad multiplexing for i2c_4_5_dis_smi device */ 1465 /* Muxed with SMI */ 1466 static const unsigned i2c_4_5_dis_smi_pins[] = { 154, 155, 156, 157 }; 1467 static struct spear_muxreg i2c_4_5_dis_smi_muxreg[] = { 1468 { 1469 .reg = PAD_FUNCTION_EN_0, 1470 .mask = PMX_SMI_MASK, 1471 .val = 0, 1472 }, 1473 }; 1474 1475 static struct spear_modemux i2c_4_5_dis_smi_modemux[] = { 1476 { 1477 .muxregs = i2c_4_5_dis_smi_muxreg, 1478 .nmuxregs = ARRAY_SIZE(i2c_4_5_dis_smi_muxreg), 1479 }, 1480 }; 1481 1482 static struct spear_pingroup i2c_4_5_dis_smi_pingroup = { 1483 .name = "i2c_4_5_dis_smi_grp", 1484 .pins = i2c_4_5_dis_smi_pins, 1485 .npins = ARRAY_SIZE(i2c_4_5_dis_smi_pins), 1486 .modemuxs = i2c_4_5_dis_smi_modemux, 1487 .nmodemuxs = ARRAY_SIZE(i2c_4_5_dis_smi_modemux), 1488 }; 1489 1490 /* Pad multiplexing for i2c4_dis_sd device */ 1491 /* Muxed with SD/MMC */ 1492 static const unsigned i2c4_dis_sd_pins[] = { 217, 218 }; 1493 static struct spear_muxreg i2c4_dis_sd_muxreg[] = { 1494 { 1495 .reg = PAD_FUNCTION_EN_1, 1496 .mask = PMX_MCIDATA4_MASK, 1497 .val = 0, 1498 }, { 1499 .reg = PAD_FUNCTION_EN_2, 1500 .mask = PMX_MCIDATA5_MASK, 1501 .val = 0, 1502 }, 1503 }; 1504 1505 static struct spear_modemux i2c4_dis_sd_modemux[] = { 1506 { 1507 .muxregs = i2c4_dis_sd_muxreg, 1508 .nmuxregs = ARRAY_SIZE(i2c4_dis_sd_muxreg), 1509 }, 1510 }; 1511 1512 static struct spear_pingroup i2c4_dis_sd_pingroup = { 1513 .name = "i2c4_dis_sd_grp", 1514 .pins = i2c4_dis_sd_pins, 1515 .npins = ARRAY_SIZE(i2c4_dis_sd_pins), 1516 .modemuxs = i2c4_dis_sd_modemux, 1517 .nmodemuxs = ARRAY_SIZE(i2c4_dis_sd_modemux), 1518 }; 1519 1520 /* Pad multiplexing for i2c5_dis_sd device */ 1521 /* Muxed with SD/MMC */ 1522 static const unsigned i2c5_dis_sd_pins[] = { 219, 220 }; 1523 static struct spear_muxreg i2c5_dis_sd_muxreg[] = { 1524 { 1525 .reg = PAD_FUNCTION_EN_2, 1526 .mask = PMX_MCIDATA6_MASK | 1527 PMX_MCIDATA7_MASK, 1528 .val = 0, 1529 }, 1530 }; 1531 1532 static struct spear_modemux i2c5_dis_sd_modemux[] = { 1533 { 1534 .muxregs = i2c5_dis_sd_muxreg, 1535 .nmuxregs = ARRAY_SIZE(i2c5_dis_sd_muxreg), 1536 }, 1537 }; 1538 1539 static struct spear_pingroup i2c5_dis_sd_pingroup = { 1540 .name = "i2c5_dis_sd_grp", 1541 .pins = i2c5_dis_sd_pins, 1542 .npins = ARRAY_SIZE(i2c5_dis_sd_pins), 1543 .modemuxs = i2c5_dis_sd_modemux, 1544 .nmodemuxs = ARRAY_SIZE(i2c5_dis_sd_modemux), 1545 }; 1546 1547 static const char *const i2c_4_5_grps[] = { "i2c5_dis_sd_grp", 1548 "i2c4_dis_sd_grp", "i2c_4_5_dis_smi_grp" }; 1549 static struct spear_function i2c_4_5_function = { 1550 .name = "i2c_4_5", 1551 .groups = i2c_4_5_grps, 1552 .ngroups = ARRAY_SIZE(i2c_4_5_grps), 1553 }; 1554 1555 /* Pad multiplexing for i2c_6_7_dis_kbd device */ 1556 /* Muxed with KBD */ 1557 static const unsigned i2c_6_7_dis_kbd_pins[] = { 207, 208, 209, 210 }; 1558 static struct spear_muxreg i2c_6_7_dis_kbd_muxreg[] = { 1559 { 1560 .reg = PAD_FUNCTION_EN_1, 1561 .mask = PMX_KBD_ROWCOL25_MASK, 1562 .val = 0, 1563 }, 1564 }; 1565 1566 static struct spear_modemux i2c_6_7_dis_kbd_modemux[] = { 1567 { 1568 .muxregs = i2c_6_7_dis_kbd_muxreg, 1569 .nmuxregs = ARRAY_SIZE(i2c_6_7_dis_kbd_muxreg), 1570 }, 1571 }; 1572 1573 static struct spear_pingroup i2c_6_7_dis_kbd_pingroup = { 1574 .name = "i2c_6_7_dis_kbd_grp", 1575 .pins = i2c_6_7_dis_kbd_pins, 1576 .npins = ARRAY_SIZE(i2c_6_7_dis_kbd_pins), 1577 .modemuxs = i2c_6_7_dis_kbd_modemux, 1578 .nmodemuxs = ARRAY_SIZE(i2c_6_7_dis_kbd_modemux), 1579 }; 1580 1581 /* Pad multiplexing for i2c6_dis_sd device */ 1582 /* Muxed with SD/MMC */ 1583 static const unsigned i2c6_dis_sd_pins[] = { 236, 237 }; 1584 static struct spear_muxreg i2c6_dis_sd_muxreg[] = { 1585 { 1586 .reg = PAD_FUNCTION_EN_2, 1587 .mask = PMX_MCIIORDRE_MASK | 1588 PMX_MCIIOWRWE_MASK, 1589 .val = 0, 1590 }, 1591 }; 1592 1593 static struct spear_modemux i2c6_dis_sd_modemux[] = { 1594 { 1595 .muxregs = i2c6_dis_sd_muxreg, 1596 .nmuxregs = ARRAY_SIZE(i2c6_dis_sd_muxreg), 1597 }, 1598 }; 1599 1600 static struct spear_pingroup i2c6_dis_sd_pingroup = { 1601 .name = "i2c6_dis_sd_grp", 1602 .pins = i2c6_dis_sd_pins, 1603 .npins = ARRAY_SIZE(i2c6_dis_sd_pins), 1604 .modemuxs = i2c6_dis_sd_modemux, 1605 .nmodemuxs = ARRAY_SIZE(i2c6_dis_sd_modemux), 1606 }; 1607 1608 /* Pad multiplexing for i2c7_dis_sd device */ 1609 static const unsigned i2c7_dis_sd_pins[] = { 238, 239 }; 1610 static struct spear_muxreg i2c7_dis_sd_muxreg[] = { 1611 { 1612 .reg = PAD_FUNCTION_EN_2, 1613 .mask = PMX_MCIRESETCF_MASK | 1614 PMX_MCICS0CE_MASK, 1615 .val = 0, 1616 }, 1617 }; 1618 1619 static struct spear_modemux i2c7_dis_sd_modemux[] = { 1620 { 1621 .muxregs = i2c7_dis_sd_muxreg, 1622 .nmuxregs = ARRAY_SIZE(i2c7_dis_sd_muxreg), 1623 }, 1624 }; 1625 1626 static struct spear_pingroup i2c7_dis_sd_pingroup = { 1627 .name = "i2c7_dis_sd_grp", 1628 .pins = i2c7_dis_sd_pins, 1629 .npins = ARRAY_SIZE(i2c7_dis_sd_pins), 1630 .modemuxs = i2c7_dis_sd_modemux, 1631 .nmodemuxs = ARRAY_SIZE(i2c7_dis_sd_modemux), 1632 }; 1633 1634 static const char *const i2c_6_7_grps[] = { "i2c6_dis_sd_grp", 1635 "i2c7_dis_sd_grp", "i2c_6_7_dis_kbd_grp" }; 1636 static struct spear_function i2c_6_7_function = { 1637 .name = "i2c_6_7", 1638 .groups = i2c_6_7_grps, 1639 .ngroups = ARRAY_SIZE(i2c_6_7_grps), 1640 }; 1641 1642 /* Pad multiplexing for can0_dis_nor device */ 1643 /* Muxed with NOR */ 1644 static const unsigned can0_dis_nor_pins[] = { 56, 57 }; 1645 static struct spear_muxreg can0_dis_nor_muxreg[] = { 1646 { 1647 .reg = PAD_FUNCTION_EN_0, 1648 .mask = PMX_NFRSTPWDWN2_MASK, 1649 .val = 0, 1650 }, { 1651 .reg = PAD_FUNCTION_EN_1, 1652 .mask = PMX_NFRSTPWDWN3_MASK, 1653 .val = 0, 1654 }, 1655 }; 1656 1657 static struct spear_modemux can0_dis_nor_modemux[] = { 1658 { 1659 .muxregs = can0_dis_nor_muxreg, 1660 .nmuxregs = ARRAY_SIZE(can0_dis_nor_muxreg), 1661 }, 1662 }; 1663 1664 static struct spear_pingroup can0_dis_nor_pingroup = { 1665 .name = "can0_dis_nor_grp", 1666 .pins = can0_dis_nor_pins, 1667 .npins = ARRAY_SIZE(can0_dis_nor_pins), 1668 .modemuxs = can0_dis_nor_modemux, 1669 .nmodemuxs = ARRAY_SIZE(can0_dis_nor_modemux), 1670 }; 1671 1672 /* Pad multiplexing for can0_dis_sd device */ 1673 /* Muxed with SD/MMC */ 1674 static const unsigned can0_dis_sd_pins[] = { 240, 241 }; 1675 static struct spear_muxreg can0_dis_sd_muxreg[] = { 1676 { 1677 .reg = PAD_FUNCTION_EN_2, 1678 .mask = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK, 1679 .val = 0, 1680 }, 1681 }; 1682 1683 static struct spear_modemux can0_dis_sd_modemux[] = { 1684 { 1685 .muxregs = can0_dis_sd_muxreg, 1686 .nmuxregs = ARRAY_SIZE(can0_dis_sd_muxreg), 1687 }, 1688 }; 1689 1690 static struct spear_pingroup can0_dis_sd_pingroup = { 1691 .name = "can0_dis_sd_grp", 1692 .pins = can0_dis_sd_pins, 1693 .npins = ARRAY_SIZE(can0_dis_sd_pins), 1694 .modemuxs = can0_dis_sd_modemux, 1695 .nmodemuxs = ARRAY_SIZE(can0_dis_sd_modemux), 1696 }; 1697 1698 static const char *const can0_grps[] = { "can0_dis_nor_grp", "can0_dis_sd_grp" 1699 }; 1700 static struct spear_function can0_function = { 1701 .name = "can0", 1702 .groups = can0_grps, 1703 .ngroups = ARRAY_SIZE(can0_grps), 1704 }; 1705 1706 /* Pad multiplexing for can1_dis_sd device */ 1707 /* Muxed with SD/MMC */ 1708 static const unsigned can1_dis_sd_pins[] = { 242, 243 }; 1709 static struct spear_muxreg can1_dis_sd_muxreg[] = { 1710 { 1711 .reg = PAD_FUNCTION_EN_2, 1712 .mask = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK, 1713 .val = 0, 1714 }, 1715 }; 1716 1717 static struct spear_modemux can1_dis_sd_modemux[] = { 1718 { 1719 .muxregs = can1_dis_sd_muxreg, 1720 .nmuxregs = ARRAY_SIZE(can1_dis_sd_muxreg), 1721 }, 1722 }; 1723 1724 static struct spear_pingroup can1_dis_sd_pingroup = { 1725 .name = "can1_dis_sd_grp", 1726 .pins = can1_dis_sd_pins, 1727 .npins = ARRAY_SIZE(can1_dis_sd_pins), 1728 .modemuxs = can1_dis_sd_modemux, 1729 .nmodemuxs = ARRAY_SIZE(can1_dis_sd_modemux), 1730 }; 1731 1732 /* Pad multiplexing for can1_dis_kbd device */ 1733 /* Muxed with KBD */ 1734 static const unsigned can1_dis_kbd_pins[] = { 201, 202 }; 1735 static struct spear_muxreg can1_dis_kbd_muxreg[] = { 1736 { 1737 .reg = PAD_FUNCTION_EN_1, 1738 .mask = PMX_KBD_ROWCOL25_MASK, 1739 .val = 0, 1740 }, 1741 }; 1742 1743 static struct spear_modemux can1_dis_kbd_modemux[] = { 1744 { 1745 .muxregs = can1_dis_kbd_muxreg, 1746 .nmuxregs = ARRAY_SIZE(can1_dis_kbd_muxreg), 1747 }, 1748 }; 1749 1750 static struct spear_pingroup can1_dis_kbd_pingroup = { 1751 .name = "can1_dis_kbd_grp", 1752 .pins = can1_dis_kbd_pins, 1753 .npins = ARRAY_SIZE(can1_dis_kbd_pins), 1754 .modemuxs = can1_dis_kbd_modemux, 1755 .nmodemuxs = ARRAY_SIZE(can1_dis_kbd_modemux), 1756 }; 1757 1758 static const char *const can1_grps[] = { "can1_dis_sd_grp", "can1_dis_kbd_grp" 1759 }; 1760 static struct spear_function can1_function = { 1761 .name = "can1", 1762 .groups = can1_grps, 1763 .ngroups = ARRAY_SIZE(can1_grps), 1764 }; 1765 1766 /* Pad multiplexing for pci device */ 1767 static const unsigned pci_sata_pins[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 1768 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 1769 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 1770 55, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 }; 1771 #define PCI_SATA_MUXREG \ 1772 { \ 1773 .reg = PAD_FUNCTION_EN_0, \ 1774 .mask = PMX_MCI_DATA8_15_MASK, \ 1775 .val = 0, \ 1776 }, { \ 1777 .reg = PAD_FUNCTION_EN_1, \ 1778 .mask = PMX_PCI_REG1_MASK, \ 1779 .val = 0, \ 1780 }, { \ 1781 .reg = PAD_FUNCTION_EN_2, \ 1782 .mask = PMX_PCI_REG2_MASK, \ 1783 .val = 0, \ 1784 } 1785 1786 /* pad multiplexing for pcie0 device */ 1787 static struct spear_muxreg pcie0_muxreg[] = { 1788 PCI_SATA_MUXREG, 1789 { 1790 .reg = PCIE_SATA_CFG, 1791 .mask = PCIE_CFG_VAL(0), 1792 .val = PCIE_CFG_VAL(0), 1793 }, 1794 }; 1795 1796 static struct spear_modemux pcie0_modemux[] = { 1797 { 1798 .muxregs = pcie0_muxreg, 1799 .nmuxregs = ARRAY_SIZE(pcie0_muxreg), 1800 }, 1801 }; 1802 1803 static struct spear_pingroup pcie0_pingroup = { 1804 .name = "pcie0_grp", 1805 .pins = pci_sata_pins, 1806 .npins = ARRAY_SIZE(pci_sata_pins), 1807 .modemuxs = pcie0_modemux, 1808 .nmodemuxs = ARRAY_SIZE(pcie0_modemux), 1809 }; 1810 1811 /* pad multiplexing for pcie1 device */ 1812 static struct spear_muxreg pcie1_muxreg[] = { 1813 PCI_SATA_MUXREG, 1814 { 1815 .reg = PCIE_SATA_CFG, 1816 .mask = PCIE_CFG_VAL(1), 1817 .val = PCIE_CFG_VAL(1), 1818 }, 1819 }; 1820 1821 static struct spear_modemux pcie1_modemux[] = { 1822 { 1823 .muxregs = pcie1_muxreg, 1824 .nmuxregs = ARRAY_SIZE(pcie1_muxreg), 1825 }, 1826 }; 1827 1828 static struct spear_pingroup pcie1_pingroup = { 1829 .name = "pcie1_grp", 1830 .pins = pci_sata_pins, 1831 .npins = ARRAY_SIZE(pci_sata_pins), 1832 .modemuxs = pcie1_modemux, 1833 .nmodemuxs = ARRAY_SIZE(pcie1_modemux), 1834 }; 1835 1836 /* pad multiplexing for pcie2 device */ 1837 static struct spear_muxreg pcie2_muxreg[] = { 1838 PCI_SATA_MUXREG, 1839 { 1840 .reg = PCIE_SATA_CFG, 1841 .mask = PCIE_CFG_VAL(2), 1842 .val = PCIE_CFG_VAL(2), 1843 }, 1844 }; 1845 1846 static struct spear_modemux pcie2_modemux[] = { 1847 { 1848 .muxregs = pcie2_muxreg, 1849 .nmuxregs = ARRAY_SIZE(pcie2_muxreg), 1850 }, 1851 }; 1852 1853 static struct spear_pingroup pcie2_pingroup = { 1854 .name = "pcie2_grp", 1855 .pins = pci_sata_pins, 1856 .npins = ARRAY_SIZE(pci_sata_pins), 1857 .modemuxs = pcie2_modemux, 1858 .nmodemuxs = ARRAY_SIZE(pcie2_modemux), 1859 }; 1860 1861 static const char *const pci_grps[] = { "pcie0_grp", "pcie1_grp", "pcie2_grp" }; 1862 static struct spear_function pci_function = { 1863 .name = "pci", 1864 .groups = pci_grps, 1865 .ngroups = ARRAY_SIZE(pci_grps), 1866 }; 1867 1868 /* pad multiplexing for sata0 device */ 1869 static struct spear_muxreg sata0_muxreg[] = { 1870 PCI_SATA_MUXREG, 1871 { 1872 .reg = PCIE_SATA_CFG, 1873 .mask = SATA_CFG_VAL(0), 1874 .val = SATA_CFG_VAL(0), 1875 }, 1876 }; 1877 1878 static struct spear_modemux sata0_modemux[] = { 1879 { 1880 .muxregs = sata0_muxreg, 1881 .nmuxregs = ARRAY_SIZE(sata0_muxreg), 1882 }, 1883 }; 1884 1885 static struct spear_pingroup sata0_pingroup = { 1886 .name = "sata0_grp", 1887 .pins = pci_sata_pins, 1888 .npins = ARRAY_SIZE(pci_sata_pins), 1889 .modemuxs = sata0_modemux, 1890 .nmodemuxs = ARRAY_SIZE(sata0_modemux), 1891 }; 1892 1893 /* pad multiplexing for sata1 device */ 1894 static struct spear_muxreg sata1_muxreg[] = { 1895 PCI_SATA_MUXREG, 1896 { 1897 .reg = PCIE_SATA_CFG, 1898 .mask = SATA_CFG_VAL(1), 1899 .val = SATA_CFG_VAL(1), 1900 }, 1901 }; 1902 1903 static struct spear_modemux sata1_modemux[] = { 1904 { 1905 .muxregs = sata1_muxreg, 1906 .nmuxregs = ARRAY_SIZE(sata1_muxreg), 1907 }, 1908 }; 1909 1910 static struct spear_pingroup sata1_pingroup = { 1911 .name = "sata1_grp", 1912 .pins = pci_sata_pins, 1913 .npins = ARRAY_SIZE(pci_sata_pins), 1914 .modemuxs = sata1_modemux, 1915 .nmodemuxs = ARRAY_SIZE(sata1_modemux), 1916 }; 1917 1918 /* pad multiplexing for sata2 device */ 1919 static struct spear_muxreg sata2_muxreg[] = { 1920 PCI_SATA_MUXREG, 1921 { 1922 .reg = PCIE_SATA_CFG, 1923 .mask = SATA_CFG_VAL(2), 1924 .val = SATA_CFG_VAL(2), 1925 }, 1926 }; 1927 1928 static struct spear_modemux sata2_modemux[] = { 1929 { 1930 .muxregs = sata2_muxreg, 1931 .nmuxregs = ARRAY_SIZE(sata2_muxreg), 1932 }, 1933 }; 1934 1935 static struct spear_pingroup sata2_pingroup = { 1936 .name = "sata2_grp", 1937 .pins = pci_sata_pins, 1938 .npins = ARRAY_SIZE(pci_sata_pins), 1939 .modemuxs = sata2_modemux, 1940 .nmodemuxs = ARRAY_SIZE(sata2_modemux), 1941 }; 1942 1943 static const char *const sata_grps[] = { "sata0_grp", "sata1_grp", "sata2_grp" 1944 }; 1945 static struct spear_function sata_function = { 1946 .name = "sata", 1947 .groups = sata_grps, 1948 .ngroups = ARRAY_SIZE(sata_grps), 1949 }; 1950 1951 /* Pad multiplexing for ssp1_dis_kbd device */ 1952 static const unsigned ssp1_dis_kbd_pins[] = { 203, 204, 205, 206 }; 1953 static struct spear_muxreg ssp1_dis_kbd_muxreg[] = { 1954 { 1955 .reg = PAD_FUNCTION_EN_1, 1956 .mask = PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL1_MASK | 1957 PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK | 1958 PMX_NFCE2_MASK, 1959 .val = 0, 1960 }, 1961 }; 1962 1963 static struct spear_modemux ssp1_dis_kbd_modemux[] = { 1964 { 1965 .muxregs = ssp1_dis_kbd_muxreg, 1966 .nmuxregs = ARRAY_SIZE(ssp1_dis_kbd_muxreg), 1967 }, 1968 }; 1969 1970 static struct spear_pingroup ssp1_dis_kbd_pingroup = { 1971 .name = "ssp1_dis_kbd_grp", 1972 .pins = ssp1_dis_kbd_pins, 1973 .npins = ARRAY_SIZE(ssp1_dis_kbd_pins), 1974 .modemuxs = ssp1_dis_kbd_modemux, 1975 .nmodemuxs = ARRAY_SIZE(ssp1_dis_kbd_modemux), 1976 }; 1977 1978 /* Pad multiplexing for ssp1_dis_sd device */ 1979 static const unsigned ssp1_dis_sd_pins[] = { 224, 226, 227, 228 }; 1980 static struct spear_muxreg ssp1_dis_sd_muxreg[] = { 1981 { 1982 .reg = PAD_FUNCTION_EN_2, 1983 .mask = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK | 1984 PMX_MCICECF_MASK | PMX_MCICEXD_MASK, 1985 .val = 0, 1986 }, 1987 }; 1988 1989 static struct spear_modemux ssp1_dis_sd_modemux[] = { 1990 { 1991 .muxregs = ssp1_dis_sd_muxreg, 1992 .nmuxregs = ARRAY_SIZE(ssp1_dis_sd_muxreg), 1993 }, 1994 }; 1995 1996 static struct spear_pingroup ssp1_dis_sd_pingroup = { 1997 .name = "ssp1_dis_sd_grp", 1998 .pins = ssp1_dis_sd_pins, 1999 .npins = ARRAY_SIZE(ssp1_dis_sd_pins), 2000 .modemuxs = ssp1_dis_sd_modemux, 2001 .nmodemuxs = ARRAY_SIZE(ssp1_dis_sd_modemux), 2002 }; 2003 2004 static const char *const ssp1_grps[] = { "ssp1_dis_kbd_grp", 2005 "ssp1_dis_sd_grp" }; 2006 static struct spear_function ssp1_function = { 2007 .name = "ssp1", 2008 .groups = ssp1_grps, 2009 .ngroups = ARRAY_SIZE(ssp1_grps), 2010 }; 2011 2012 /* Pad multiplexing for gpt64 device */ 2013 static const unsigned gpt64_pins[] = { 230, 231, 232, 245 }; 2014 static struct spear_muxreg gpt64_muxreg[] = { 2015 { 2016 .reg = PAD_FUNCTION_EN_2, 2017 .mask = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK 2018 | PMX_MCILEDS_MASK, 2019 .val = 0, 2020 }, 2021 }; 2022 2023 static struct spear_modemux gpt64_modemux[] = { 2024 { 2025 .muxregs = gpt64_muxreg, 2026 .nmuxregs = ARRAY_SIZE(gpt64_muxreg), 2027 }, 2028 }; 2029 2030 static struct spear_pingroup gpt64_pingroup = { 2031 .name = "gpt64_grp", 2032 .pins = gpt64_pins, 2033 .npins = ARRAY_SIZE(gpt64_pins), 2034 .modemuxs = gpt64_modemux, 2035 .nmodemuxs = ARRAY_SIZE(gpt64_modemux), 2036 }; 2037 2038 static const char *const gpt64_grps[] = { "gpt64_grp" }; 2039 static struct spear_function gpt64_function = { 2040 .name = "gpt64", 2041 .groups = gpt64_grps, 2042 .ngroups = ARRAY_SIZE(gpt64_grps), 2043 }; 2044 2045 /* pingroups */ 2046 static struct spear_pingroup *spear1310_pingroups[] = { 2047 &i2c0_pingroup, 2048 &ssp0_pingroup, 2049 &i2s0_pingroup, 2050 &i2s1_pingroup, 2051 &clcd_pingroup, 2052 &clcd_high_res_pingroup, 2053 &arm_gpio_pingroup, 2054 &smi_2_chips_pingroup, 2055 &smi_4_chips_pingroup, 2056 &gmii_pingroup, 2057 &rgmii_pingroup, 2058 &smii_0_1_2_pingroup, 2059 &ras_mii_txclk_pingroup, 2060 &nand_8bit_pingroup, 2061 &nand_16bit_pingroup, 2062 &nand_4_chips_pingroup, 2063 &keyboard_6x6_pingroup, 2064 &keyboard_rowcol6_8_pingroup, 2065 &uart0_pingroup, 2066 &uart0_modem_pingroup, 2067 &gpt0_tmr0_pingroup, 2068 &gpt0_tmr1_pingroup, 2069 &gpt1_tmr0_pingroup, 2070 &gpt1_tmr1_pingroup, 2071 &sdhci_pingroup, 2072 &cf_pingroup, 2073 &xd_pingroup, 2074 &touch_xy_pingroup, 2075 &ssp0_cs0_pingroup, 2076 &ssp0_cs1_2_pingroup, 2077 &uart_1_dis_i2c_pingroup, 2078 &uart_1_dis_sd_pingroup, 2079 &uart_2_3_pingroup, 2080 &uart_4_pingroup, 2081 &uart_5_pingroup, 2082 &rs485_0_1_tdm_0_1_pingroup, 2083 &i2c_1_2_pingroup, 2084 &i2c3_dis_smi_clcd_pingroup, 2085 &i2c3_dis_sd_i2s0_pingroup, 2086 &i2c_4_5_dis_smi_pingroup, 2087 &i2c4_dis_sd_pingroup, 2088 &i2c5_dis_sd_pingroup, 2089 &i2c_6_7_dis_kbd_pingroup, 2090 &i2c6_dis_sd_pingroup, 2091 &i2c7_dis_sd_pingroup, 2092 &can0_dis_nor_pingroup, 2093 &can0_dis_sd_pingroup, 2094 &can1_dis_sd_pingroup, 2095 &can1_dis_kbd_pingroup, 2096 &pcie0_pingroup, 2097 &pcie1_pingroup, 2098 &pcie2_pingroup, 2099 &sata0_pingroup, 2100 &sata1_pingroup, 2101 &sata2_pingroup, 2102 &ssp1_dis_kbd_pingroup, 2103 &ssp1_dis_sd_pingroup, 2104 &gpt64_pingroup, 2105 }; 2106 2107 /* functions */ 2108 static struct spear_function *spear1310_functions[] = { 2109 &i2c0_function, 2110 &ssp0_function, 2111 &i2s0_function, 2112 &i2s1_function, 2113 &clcd_function, 2114 &arm_gpio_function, 2115 &smi_function, 2116 &gmii_function, 2117 &rgmii_function, 2118 &smii_0_1_2_function, 2119 &ras_mii_txclk_function, 2120 &nand_function, 2121 &keyboard_function, 2122 &uart0_function, 2123 &gpt0_function, 2124 &gpt1_function, 2125 &sdhci_function, 2126 &cf_function, 2127 &xd_function, 2128 &touch_xy_function, 2129 &uart1_function, 2130 &uart2_3_function, 2131 &uart4_function, 2132 &uart5_function, 2133 &rs485_0_1_tdm_0_1_function, 2134 &i2c_1_2_function, 2135 &i2c3_unction, 2136 &i2c_4_5_function, 2137 &i2c_6_7_function, 2138 &can0_function, 2139 &can1_function, 2140 &pci_function, 2141 &sata_function, 2142 &ssp1_function, 2143 &gpt64_function, 2144 }; 2145 2146 static struct spear_pinctrl_machdata spear1310_machdata = { 2147 .pins = spear1310_pins, 2148 .npins = ARRAY_SIZE(spear1310_pins), 2149 .groups = spear1310_pingroups, 2150 .ngroups = ARRAY_SIZE(spear1310_pingroups), 2151 .functions = spear1310_functions, 2152 .nfunctions = ARRAY_SIZE(spear1310_functions), 2153 .modes_supported = false, 2154 }; 2155 2156 static struct of_device_id spear1310_pinctrl_of_match[] __devinitdata = { 2157 { 2158 .compatible = "st,spear1310-pinmux", 2159 }, 2160 {}, 2161 }; 2162 2163 static int __devinit spear1310_pinctrl_probe(struct platform_device *pdev) 2164 { 2165 return spear_pinctrl_probe(pdev, &spear1310_machdata); 2166 } 2167 2168 static int __devexit spear1310_pinctrl_remove(struct platform_device *pdev) 2169 { 2170 return spear_pinctrl_remove(pdev); 2171 } 2172 2173 static struct platform_driver spear1310_pinctrl_driver = { 2174 .driver = { 2175 .name = DRIVER_NAME, 2176 .owner = THIS_MODULE, 2177 .of_match_table = spear1310_pinctrl_of_match, 2178 }, 2179 .probe = spear1310_pinctrl_probe, 2180 .remove = __devexit_p(spear1310_pinctrl_remove), 2181 }; 2182 2183 static int __init spear1310_pinctrl_init(void) 2184 { 2185 return platform_driver_register(&spear1310_pinctrl_driver); 2186 } 2187 arch_initcall(spear1310_pinctrl_init); 2188 2189 static void __exit spear1310_pinctrl_exit(void) 2190 { 2191 platform_driver_unregister(&spear1310_pinctrl_driver); 2192 } 2193 module_exit(spear1310_pinctrl_exit); 2194 2195 MODULE_AUTHOR("Viresh Kumar <viresh.kumar@st.com>"); 2196 MODULE_DESCRIPTION("ST Microelectronics SPEAr1310 pinctrl driver"); 2197 MODULE_LICENSE("GPL v2"); 2198 MODULE_DEVICE_TABLE(of, spear1310_pinctrl_of_match); 2199