Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'pinctrl-for-v3.7-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl

Pull pinctrl fixes from Linus Walleij:

- A set of SPEAr pinctrl fixes that recently arrived

- A fixup for the Samsung/Exynos Kconfig deps

* tag 'pinctrl-for-v3.7-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl:
pinctrl: samsung and exynos need to depend on OF && GPIOLIB
pinctrl: SPEAr1340: Add clcd sleep mode pin configuration
pinctrl: SPEAr1340: Make DDR reset & clock pads as gpio
pinctrl: SPEAr1310: add register entries for enabling pad direction
pinctrl: SPEAr1310: Separate out pci pins from pcie_sata pin group
pinctrl: SPEAr1310: Fix value of PERIP_CFG reigster and MCIF_SEL_SHIFT
pinctrl: SPEAr1310: fix clcd high resolution pin group name
pinctrl: SPEAr320: Correct pad mux entries for rmii/smii
pinctrl: SPEAr3xx: correct register space to configure pwm
pinctrl: SPEAr: Don't update all non muxreg bits on pinctrl_disable

+369 -50
+2
drivers/pinctrl/Kconfig
··· 179 179 180 180 config PINCTRL_SAMSUNG 181 181 bool "Samsung pinctrl driver" 182 + depends on OF && GPIOLIB 182 183 select PINMUX 183 184 select PINCONF 184 185 185 186 config PINCTRL_EXYNOS4 186 187 bool "Pinctrl driver data for Exynos4 SoC" 188 + depends on OF && GPIOLIB 187 189 select PINCTRL_SAMSUNG 188 190 189 191 config PINCTRL_MVEBU
+1 -1
drivers/pinctrl/spear/pinctrl-spear.c
··· 244 244 else 245 245 temp = ~muxreg->val; 246 246 247 - val |= temp; 247 + val |= muxreg->mask & temp; 248 248 pmx_writel(pmx, val, muxreg->reg); 249 249 } 250 250 }
+320 -45
drivers/pinctrl/spear/pinctrl-spear1310.c
··· 25 25 }; 26 26 27 27 /* registers */ 28 - #define PERIP_CFG 0x32C 29 - #define MCIF_SEL_SHIFT 3 28 + #define PERIP_CFG 0x3B0 29 + #define MCIF_SEL_SHIFT 5 30 30 #define MCIF_SEL_SD (0x1 << MCIF_SEL_SHIFT) 31 31 #define MCIF_SEL_CF (0x2 << MCIF_SEL_SHIFT) 32 32 #define MCIF_SEL_XD (0x3 << MCIF_SEL_SHIFT) ··· 164 164 #define PMX_SSP0_CS0_MASK (1 << 29) 165 165 #define PMX_SSP0_CS1_2_MASK (1 << 30) 166 166 167 + #define PAD_DIRECTION_SEL_0 0x65C 168 + #define PAD_DIRECTION_SEL_1 0x660 169 + #define PAD_DIRECTION_SEL_2 0x664 170 + 167 171 /* combined macros */ 168 172 #define PMX_GMII_MASK (PMX_GMIICLK_MASK | \ 169 173 PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK | \ ··· 241 237 .reg = PAD_FUNCTION_EN_0, 242 238 .mask = PMX_I2C0_MASK, 243 239 .val = PMX_I2C0_MASK, 240 + }, { 241 + .reg = PAD_DIRECTION_SEL_0, 242 + .mask = PMX_I2C0_MASK, 243 + .val = PMX_I2C0_MASK, 244 244 }, 245 245 }; 246 246 ··· 277 269 .reg = PAD_FUNCTION_EN_0, 278 270 .mask = PMX_SSP0_MASK, 279 271 .val = PMX_SSP0_MASK, 272 + }, { 273 + .reg = PAD_DIRECTION_SEL_0, 274 + .mask = PMX_SSP0_MASK, 275 + .val = PMX_SSP0_MASK, 280 276 }, 281 277 }; 282 278 ··· 306 294 .reg = PAD_FUNCTION_EN_2, 307 295 .mask = PMX_SSP0_CS0_MASK, 308 296 .val = PMX_SSP0_CS0_MASK, 297 + }, { 298 + .reg = PAD_DIRECTION_SEL_2, 299 + .mask = PMX_SSP0_CS0_MASK, 300 + .val = PMX_SSP0_CS0_MASK, 309 301 }, 310 302 }; 311 303 ··· 333 317 static struct spear_muxreg ssp0_cs1_2_muxreg[] = { 334 318 { 335 319 .reg = PAD_FUNCTION_EN_2, 320 + .mask = PMX_SSP0_CS1_2_MASK, 321 + .val = PMX_SSP0_CS1_2_MASK, 322 + }, { 323 + .reg = PAD_DIRECTION_SEL_2, 336 324 .mask = PMX_SSP0_CS1_2_MASK, 337 325 .val = PMX_SSP0_CS1_2_MASK, 338 326 }, ··· 372 352 .reg = PAD_FUNCTION_EN_0, 373 353 .mask = PMX_I2S0_MASK, 374 354 .val = PMX_I2S0_MASK, 355 + }, { 356 + .reg = PAD_DIRECTION_SEL_0, 357 + .mask = PMX_I2S0_MASK, 358 + .val = PMX_I2S0_MASK, 375 359 }, 376 360 }; 377 361 ··· 406 382 static struct spear_muxreg i2s1_muxreg[] = { 407 383 { 408 384 .reg = PAD_FUNCTION_EN_1, 385 + .mask = PMX_I2S1_MASK, 386 + .val = PMX_I2S1_MASK, 387 + }, { 388 + .reg = PAD_DIRECTION_SEL_1, 409 389 .mask = PMX_I2S1_MASK, 410 390 .val = PMX_I2S1_MASK, 411 391 }, ··· 446 418 .reg = PAD_FUNCTION_EN_0, 447 419 .mask = PMX_CLCD1_MASK, 448 420 .val = PMX_CLCD1_MASK, 421 + }, { 422 + .reg = PAD_DIRECTION_SEL_0, 423 + .mask = PMX_CLCD1_MASK, 424 + .val = PMX_CLCD1_MASK, 449 425 }, 450 426 }; 451 427 ··· 475 443 .reg = PAD_FUNCTION_EN_1, 476 444 .mask = PMX_CLCD2_MASK, 477 445 .val = PMX_CLCD2_MASK, 446 + }, { 447 + .reg = PAD_DIRECTION_SEL_1, 448 + .mask = PMX_CLCD2_MASK, 449 + .val = PMX_CLCD2_MASK, 478 450 }, 479 451 }; 480 452 ··· 497 461 .nmodemuxs = ARRAY_SIZE(clcd_high_res_modemux), 498 462 }; 499 463 500 - static const char *const clcd_grps[] = { "clcd_grp", "clcd_high_res" }; 464 + static const char *const clcd_grps[] = { "clcd_grp", "clcd_high_res_grp" }; 501 465 static struct spear_function clcd_function = { 502 466 .name = "clcd", 503 467 .groups = clcd_grps, ··· 513 477 .val = PMX_EGPIO_0_GRP_MASK, 514 478 }, { 515 479 .reg = PAD_FUNCTION_EN_1, 480 + .mask = PMX_EGPIO_1_GRP_MASK, 481 + .val = PMX_EGPIO_1_GRP_MASK, 482 + }, { 483 + .reg = PAD_DIRECTION_SEL_0, 484 + .mask = PMX_EGPIO_0_GRP_MASK, 485 + .val = PMX_EGPIO_0_GRP_MASK, 486 + }, { 487 + .reg = PAD_DIRECTION_SEL_1, 516 488 .mask = PMX_EGPIO_1_GRP_MASK, 517 489 .val = PMX_EGPIO_1_GRP_MASK, 518 490 }, ··· 555 511 .reg = PAD_FUNCTION_EN_0, 556 512 .mask = PMX_SMI_MASK, 557 513 .val = PMX_SMI_MASK, 514 + }, { 515 + .reg = PAD_DIRECTION_SEL_0, 516 + .mask = PMX_SMI_MASK, 517 + .val = PMX_SMI_MASK, 558 518 }, 559 519 }; 560 520 ··· 585 537 .val = PMX_SMI_MASK, 586 538 }, { 587 539 .reg = PAD_FUNCTION_EN_1, 540 + .mask = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, 541 + .val = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, 542 + }, { 543 + .reg = PAD_DIRECTION_SEL_0, 544 + .mask = PMX_SMI_MASK, 545 + .val = PMX_SMI_MASK, 546 + }, { 547 + .reg = PAD_DIRECTION_SEL_1, 588 548 .mask = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, 589 549 .val = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, 590 550 }, ··· 627 571 static struct spear_muxreg gmii_muxreg[] = { 628 572 { 629 573 .reg = PAD_FUNCTION_EN_0, 574 + .mask = PMX_GMII_MASK, 575 + .val = PMX_GMII_MASK, 576 + }, { 577 + .reg = PAD_DIRECTION_SEL_0, 630 578 .mask = PMX_GMII_MASK, 631 579 .val = PMX_GMII_MASK, 632 580 }, ··· 675 615 .reg = PAD_FUNCTION_EN_2, 676 616 .mask = PMX_RGMII_REG2_MASK, 677 617 .val = 0, 618 + }, { 619 + .reg = PAD_DIRECTION_SEL_0, 620 + .mask = PMX_RGMII_REG0_MASK, 621 + .val = PMX_RGMII_REG0_MASK, 622 + }, { 623 + .reg = PAD_DIRECTION_SEL_1, 624 + .mask = PMX_RGMII_REG1_MASK, 625 + .val = PMX_RGMII_REG1_MASK, 626 + }, { 627 + .reg = PAD_DIRECTION_SEL_2, 628 + .mask = PMX_RGMII_REG2_MASK, 629 + .val = PMX_RGMII_REG2_MASK, 678 630 }, 679 631 }; 680 632 ··· 721 649 .reg = PAD_FUNCTION_EN_1, 722 650 .mask = PMX_SMII_0_1_2_MASK, 723 651 .val = 0, 652 + }, { 653 + .reg = PAD_DIRECTION_SEL_1, 654 + .mask = PMX_SMII_0_1_2_MASK, 655 + .val = PMX_SMII_0_1_2_MASK, 724 656 }, 725 657 }; 726 658 ··· 757 681 .reg = PAD_FUNCTION_EN_1, 758 682 .mask = PMX_NFCE2_MASK, 759 683 .val = 0, 684 + }, { 685 + .reg = PAD_DIRECTION_SEL_1, 686 + .mask = PMX_NFCE2_MASK, 687 + .val = PMX_NFCE2_MASK, 760 688 }, 761 689 }; 762 690 ··· 801 721 .reg = PAD_FUNCTION_EN_1, 802 722 .mask = PMX_NAND8BIT_1_MASK, 803 723 .val = PMX_NAND8BIT_1_MASK, 724 + }, { 725 + .reg = PAD_DIRECTION_SEL_0, 726 + .mask = PMX_NAND8BIT_0_MASK, 727 + .val = PMX_NAND8BIT_0_MASK, 728 + }, { 729 + .reg = PAD_DIRECTION_SEL_1, 730 + .mask = PMX_NAND8BIT_1_MASK, 731 + .val = PMX_NAND8BIT_1_MASK, 804 732 }, 805 733 }; 806 734 ··· 835 747 .reg = PAD_FUNCTION_EN_1, 836 748 .mask = PMX_NAND16BIT_1_MASK, 837 749 .val = PMX_NAND16BIT_1_MASK, 750 + }, { 751 + .reg = PAD_DIRECTION_SEL_1, 752 + .mask = PMX_NAND16BIT_1_MASK, 753 + .val = PMX_NAND16BIT_1_MASK, 838 754 }, 839 755 }; 840 756 ··· 862 770 static struct spear_muxreg nand_4_chips_muxreg[] = { 863 771 { 864 772 .reg = PAD_FUNCTION_EN_1, 773 + .mask = PMX_NAND_4CHIPS_MASK, 774 + .val = PMX_NAND_4CHIPS_MASK, 775 + }, { 776 + .reg = PAD_DIRECTION_SEL_1, 865 777 .mask = PMX_NAND_4CHIPS_MASK, 866 778 .val = PMX_NAND_4CHIPS_MASK, 867 779 }, ··· 929 833 .reg = PAD_FUNCTION_EN_1, 930 834 .mask = PMX_KBD_ROWCOL68_MASK, 931 835 .val = PMX_KBD_ROWCOL68_MASK, 836 + }, { 837 + .reg = PAD_DIRECTION_SEL_1, 838 + .mask = PMX_KBD_ROWCOL68_MASK, 839 + .val = PMX_KBD_ROWCOL68_MASK, 932 840 }, 933 841 }; 934 842 ··· 966 866 .reg = PAD_FUNCTION_EN_0, 967 867 .mask = PMX_UART0_MASK, 968 868 .val = PMX_UART0_MASK, 869 + }, { 870 + .reg = PAD_DIRECTION_SEL_0, 871 + .mask = PMX_UART0_MASK, 872 + .val = PMX_UART0_MASK, 969 873 }, 970 874 }; 971 875 ··· 993 889 static struct spear_muxreg uart0_modem_muxreg[] = { 994 890 { 995 891 .reg = PAD_FUNCTION_EN_1, 892 + .mask = PMX_UART0_MODEM_MASK, 893 + .val = PMX_UART0_MODEM_MASK, 894 + }, { 895 + .reg = PAD_DIRECTION_SEL_1, 996 896 .mask = PMX_UART0_MODEM_MASK, 997 897 .val = PMX_UART0_MODEM_MASK, 998 898 }, ··· 1031 923 .reg = PAD_FUNCTION_EN_1, 1032 924 .mask = PMX_GPT0_TMR0_MASK, 1033 925 .val = PMX_GPT0_TMR0_MASK, 926 + }, { 927 + .reg = PAD_DIRECTION_SEL_1, 928 + .mask = PMX_GPT0_TMR0_MASK, 929 + .val = PMX_GPT0_TMR0_MASK, 1034 930 }, 1035 931 }; 1036 932 ··· 1058 946 static struct spear_muxreg gpt0_tmr1_muxreg[] = { 1059 947 { 1060 948 .reg = PAD_FUNCTION_EN_1, 949 + .mask = PMX_GPT0_TMR1_MASK, 950 + .val = PMX_GPT0_TMR1_MASK, 951 + }, { 952 + .reg = PAD_DIRECTION_SEL_1, 1061 953 .mask = PMX_GPT0_TMR1_MASK, 1062 954 .val = PMX_GPT0_TMR1_MASK, 1063 955 }, ··· 1096 980 .reg = PAD_FUNCTION_EN_1, 1097 981 .mask = PMX_GPT1_TMR0_MASK, 1098 982 .val = PMX_GPT1_TMR0_MASK, 983 + }, { 984 + .reg = PAD_DIRECTION_SEL_1, 985 + .mask = PMX_GPT1_TMR0_MASK, 986 + .val = PMX_GPT1_TMR0_MASK, 1099 987 }, 1100 988 }; 1101 989 ··· 1123 1003 static struct spear_muxreg gpt1_tmr1_muxreg[] = { 1124 1004 { 1125 1005 .reg = PAD_FUNCTION_EN_1, 1006 + .mask = PMX_GPT1_TMR1_MASK, 1007 + .val = PMX_GPT1_TMR1_MASK, 1008 + }, { 1009 + .reg = PAD_DIRECTION_SEL_1, 1126 1010 .mask = PMX_GPT1_TMR1_MASK, 1127 1011 .val = PMX_GPT1_TMR1_MASK, 1128 1012 }, ··· 1171 1047 .val = PMX_MCIFALL_1_MASK, \ 1172 1048 }, { \ 1173 1049 .reg = PAD_FUNCTION_EN_2, \ 1050 + .mask = PMX_MCIFALL_2_MASK, \ 1051 + .val = PMX_MCIFALL_2_MASK, \ 1052 + }, { \ 1053 + .reg = PAD_DIRECTION_SEL_0, \ 1054 + .mask = PMX_MCI_DATA8_15_MASK, \ 1055 + .val = PMX_MCI_DATA8_15_MASK, \ 1056 + }, { \ 1057 + .reg = PAD_DIRECTION_SEL_1, \ 1058 + .mask = PMX_MCIFALL_1_MASK | PMX_NFWPRT1_MASK | \ 1059 + PMX_NFWPRT2_MASK, \ 1060 + .val = PMX_MCIFALL_1_MASK | PMX_NFWPRT1_MASK | \ 1061 + PMX_NFWPRT2_MASK, \ 1062 + }, { \ 1063 + .reg = PAD_DIRECTION_SEL_2, \ 1174 1064 .mask = PMX_MCIFALL_2_MASK, \ 1175 1065 .val = PMX_MCIFALL_2_MASK, \ 1176 1066 } ··· 1292 1154 .reg = PAD_FUNCTION_EN_2, 1293 1155 .mask = PMX_TOUCH_XY_MASK, 1294 1156 .val = PMX_TOUCH_XY_MASK, 1157 + }, { 1158 + .reg = PAD_DIRECTION_SEL_2, 1159 + .mask = PMX_TOUCH_XY_MASK, 1160 + .val = PMX_TOUCH_XY_MASK, 1295 1161 }, 1296 1162 }; 1297 1163 ··· 1329 1187 .reg = PAD_FUNCTION_EN_0, 1330 1188 .mask = PMX_I2C0_MASK, 1331 1189 .val = 0, 1190 + }, { 1191 + .reg = PAD_DIRECTION_SEL_0, 1192 + .mask = PMX_I2C0_MASK, 1193 + .val = PMX_I2C0_MASK, 1332 1194 }, 1333 1195 }; 1334 1196 ··· 1359 1213 .mask = PMX_MCIDATA1_MASK | 1360 1214 PMX_MCIDATA2_MASK, 1361 1215 .val = 0, 1216 + }, { 1217 + .reg = PAD_DIRECTION_SEL_1, 1218 + .mask = PMX_MCIDATA1_MASK | 1219 + PMX_MCIDATA2_MASK, 1220 + .val = PMX_MCIDATA1_MASK | 1221 + PMX_MCIDATA2_MASK, 1362 1222 }, 1363 1223 }; 1364 1224 ··· 1398 1246 .reg = PAD_FUNCTION_EN_0, 1399 1247 .mask = PMX_I2S0_MASK, 1400 1248 .val = 0, 1249 + }, { 1250 + .reg = PAD_DIRECTION_SEL_0, 1251 + .mask = PMX_I2S0_MASK, 1252 + .val = PMX_I2S0_MASK, 1401 1253 }, 1402 1254 }; 1403 1255 ··· 1434 1278 .reg = PAD_FUNCTION_EN_0, 1435 1279 .mask = PMX_I2S0_MASK | PMX_CLCD1_MASK, 1436 1280 .val = 0, 1281 + }, { 1282 + .reg = PAD_DIRECTION_SEL_0, 1283 + .mask = PMX_I2S0_MASK | PMX_CLCD1_MASK, 1284 + .val = PMX_I2S0_MASK | PMX_CLCD1_MASK, 1437 1285 }, 1438 1286 }; 1439 1287 ··· 1470 1310 .reg = PAD_FUNCTION_EN_0, 1471 1311 .mask = PMX_CLCD1_MASK, 1472 1312 .val = 0, 1313 + }, { 1314 + .reg = PAD_DIRECTION_SEL_0, 1315 + .mask = PMX_CLCD1_MASK, 1316 + .val = PMX_CLCD1_MASK, 1473 1317 }, 1474 1318 }; 1475 1319 ··· 1508 1344 .reg = PAD_FUNCTION_EN_0, 1509 1345 .mask = PMX_CLCD1_MASK, 1510 1346 .val = 0, 1347 + }, { 1348 + .reg = PAD_DIRECTION_SEL_0, 1349 + .mask = PMX_CLCD1_MASK, 1350 + .val = PMX_CLCD1_MASK, 1511 1351 }, 1512 1352 }; 1513 1353 ··· 1544 1376 .reg = PAD_FUNCTION_EN_0, 1545 1377 .mask = PMX_CLCD1_MASK, 1546 1378 .val = 0, 1379 + }, { 1380 + .reg = PAD_DIRECTION_SEL_0, 1381 + .mask = PMX_CLCD1_MASK, 1382 + .val = PMX_CLCD1_MASK, 1547 1383 }, 1548 1384 }; 1549 1385 ··· 1581 1409 .reg = PAD_FUNCTION_EN_0, 1582 1410 .mask = PMX_CLCD1_MASK | PMX_SMI_MASK, 1583 1411 .val = 0, 1412 + }, { 1413 + .reg = PAD_DIRECTION_SEL_0, 1414 + .mask = PMX_CLCD1_MASK | PMX_SMI_MASK, 1415 + .val = PMX_CLCD1_MASK | PMX_SMI_MASK, 1584 1416 }, 1585 1417 }; 1586 1418 ··· 1611 1435 .reg = PAD_FUNCTION_EN_1, 1612 1436 .mask = PMX_I2S1_MASK | PMX_MCIDATA3_MASK, 1613 1437 .val = 0, 1438 + }, { 1439 + .reg = PAD_DIRECTION_SEL_1, 1440 + .mask = PMX_I2S1_MASK | PMX_MCIDATA3_MASK, 1441 + .val = PMX_I2S1_MASK | PMX_MCIDATA3_MASK, 1614 1442 }, 1615 1443 }; 1616 1444 ··· 1649 1469 .reg = PAD_FUNCTION_EN_0, 1650 1470 .mask = PMX_SMI_MASK, 1651 1471 .val = 0, 1472 + }, { 1473 + .reg = PAD_DIRECTION_SEL_0, 1474 + .mask = PMX_SMI_MASK, 1475 + .val = PMX_SMI_MASK, 1652 1476 }, 1653 1477 }; 1654 1478 ··· 1683 1499 .reg = PAD_FUNCTION_EN_2, 1684 1500 .mask = PMX_MCIDATA5_MASK, 1685 1501 .val = 0, 1502 + }, { 1503 + .reg = PAD_DIRECTION_SEL_1, 1504 + .mask = PMX_MCIDATA4_MASK, 1505 + .val = PMX_MCIDATA4_MASK, 1506 + }, { 1507 + .reg = PAD_DIRECTION_SEL_2, 1508 + .mask = PMX_MCIDATA5_MASK, 1509 + .val = PMX_MCIDATA5_MASK, 1686 1510 }, 1687 1511 }; 1688 1512 ··· 1718 1526 .mask = PMX_MCIDATA6_MASK | 1719 1527 PMX_MCIDATA7_MASK, 1720 1528 .val = 0, 1529 + }, { 1530 + .reg = PAD_DIRECTION_SEL_2, 1531 + .mask = PMX_MCIDATA6_MASK | 1532 + PMX_MCIDATA7_MASK, 1533 + .val = PMX_MCIDATA6_MASK | 1534 + PMX_MCIDATA7_MASK, 1721 1535 }, 1722 1536 }; 1723 1537 ··· 1758 1560 .reg = PAD_FUNCTION_EN_1, 1759 1561 .mask = PMX_KBD_ROWCOL25_MASK, 1760 1562 .val = 0, 1563 + }, { 1564 + .reg = PAD_DIRECTION_SEL_1, 1565 + .mask = PMX_KBD_ROWCOL25_MASK, 1566 + .val = PMX_KBD_ROWCOL25_MASK, 1761 1567 }, 1762 1568 }; 1763 1569 ··· 1789 1587 .mask = PMX_MCIIORDRE_MASK | 1790 1588 PMX_MCIIOWRWE_MASK, 1791 1589 .val = 0, 1590 + }, { 1591 + .reg = PAD_DIRECTION_SEL_2, 1592 + .mask = PMX_MCIIORDRE_MASK | 1593 + PMX_MCIIOWRWE_MASK, 1594 + .val = PMX_MCIIORDRE_MASK | 1595 + PMX_MCIIOWRWE_MASK, 1792 1596 }, 1793 1597 }; 1794 1598 ··· 1821 1613 .mask = PMX_MCIRESETCF_MASK | 1822 1614 PMX_MCICS0CE_MASK, 1823 1615 .val = 0, 1616 + }, { 1617 + .reg = PAD_DIRECTION_SEL_2, 1618 + .mask = PMX_MCIRESETCF_MASK | 1619 + PMX_MCICS0CE_MASK, 1620 + .val = PMX_MCIRESETCF_MASK | 1621 + PMX_MCICS0CE_MASK, 1824 1622 }, 1825 1623 }; 1826 1624 ··· 1865 1651 .reg = PAD_FUNCTION_EN_1, 1866 1652 .mask = PMX_NFRSTPWDWN3_MASK, 1867 1653 .val = 0, 1654 + }, { 1655 + .reg = PAD_DIRECTION_SEL_0, 1656 + .mask = PMX_NFRSTPWDWN2_MASK, 1657 + .val = PMX_NFRSTPWDWN2_MASK, 1658 + }, { 1659 + .reg = PAD_DIRECTION_SEL_1, 1660 + .mask = PMX_NFRSTPWDWN3_MASK, 1661 + .val = PMX_NFRSTPWDWN3_MASK, 1868 1662 }, 1869 1663 }; 1870 1664 ··· 1899 1677 .reg = PAD_FUNCTION_EN_2, 1900 1678 .mask = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK, 1901 1679 .val = 0, 1680 + }, { 1681 + .reg = PAD_DIRECTION_SEL_2, 1682 + .mask = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK, 1683 + .val = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK, 1902 1684 }, 1903 1685 }; 1904 1686 ··· 1937 1711 .reg = PAD_FUNCTION_EN_2, 1938 1712 .mask = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK, 1939 1713 .val = 0, 1714 + }, { 1715 + .reg = PAD_DIRECTION_SEL_2, 1716 + .mask = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK, 1717 + .val = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK, 1940 1718 }, 1941 1719 }; 1942 1720 ··· 1967 1737 .reg = PAD_FUNCTION_EN_1, 1968 1738 .mask = PMX_KBD_ROWCOL25_MASK, 1969 1739 .val = 0, 1740 + }, { 1741 + .reg = PAD_DIRECTION_SEL_1, 1742 + .mask = PMX_KBD_ROWCOL25_MASK, 1743 + .val = PMX_KBD_ROWCOL25_MASK, 1970 1744 }, 1971 1745 }; 1972 1746 ··· 1997 1763 .ngroups = ARRAY_SIZE(can1_grps), 1998 1764 }; 1999 1765 2000 - /* Pad multiplexing for pci device */ 2001 - static const unsigned pci_sata_pins[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 1766 + /* Pad multiplexing for (ras-ip) pci device */ 1767 + static const unsigned pci_pins[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 2002 1768 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 2003 1769 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 2004 1770 55, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 }; 2005 - #define PCI_SATA_MUXREG \ 2006 - { \ 2007 - .reg = PAD_FUNCTION_EN_0, \ 2008 - .mask = PMX_MCI_DATA8_15_MASK, \ 2009 - .val = 0, \ 2010 - }, { \ 2011 - .reg = PAD_FUNCTION_EN_1, \ 2012 - .mask = PMX_PCI_REG1_MASK, \ 2013 - .val = 0, \ 2014 - }, { \ 2015 - .reg = PAD_FUNCTION_EN_2, \ 2016 - .mask = PMX_PCI_REG2_MASK, \ 2017 - .val = 0, \ 2018 - } 2019 1771 2020 - /* pad multiplexing for pcie0 device */ 1772 + static struct spear_muxreg pci_muxreg[] = { 1773 + { 1774 + .reg = PAD_FUNCTION_EN_0, 1775 + .mask = PMX_MCI_DATA8_15_MASK, 1776 + .val = 0, 1777 + }, { 1778 + .reg = PAD_FUNCTION_EN_1, 1779 + .mask = PMX_PCI_REG1_MASK, 1780 + .val = 0, 1781 + }, { 1782 + .reg = PAD_FUNCTION_EN_2, 1783 + .mask = PMX_PCI_REG2_MASK, 1784 + .val = 0, 1785 + }, { 1786 + .reg = PAD_DIRECTION_SEL_0, 1787 + .mask = PMX_MCI_DATA8_15_MASK, 1788 + .val = PMX_MCI_DATA8_15_MASK, 1789 + }, { 1790 + .reg = PAD_DIRECTION_SEL_1, 1791 + .mask = PMX_PCI_REG1_MASK, 1792 + .val = PMX_PCI_REG1_MASK, 1793 + }, { 1794 + .reg = PAD_DIRECTION_SEL_2, 1795 + .mask = PMX_PCI_REG2_MASK, 1796 + .val = PMX_PCI_REG2_MASK, 1797 + }, 1798 + }; 1799 + 1800 + static struct spear_modemux pci_modemux[] = { 1801 + { 1802 + .muxregs = pci_muxreg, 1803 + .nmuxregs = ARRAY_SIZE(pci_muxreg), 1804 + }, 1805 + }; 1806 + 1807 + static struct spear_pingroup pci_pingroup = { 1808 + .name = "pci_grp", 1809 + .pins = pci_pins, 1810 + .npins = ARRAY_SIZE(pci_pins), 1811 + .modemuxs = pci_modemux, 1812 + .nmodemuxs = ARRAY_SIZE(pci_modemux), 1813 + }; 1814 + 1815 + static const char *const pci_grps[] = { "pci_grp" }; 1816 + static struct spear_function pci_function = { 1817 + .name = "pci", 1818 + .groups = pci_grps, 1819 + .ngroups = ARRAY_SIZE(pci_grps), 1820 + }; 1821 + 1822 + /* pad multiplexing for (fix-part) pcie0 device */ 2021 1823 static struct spear_muxreg pcie0_muxreg[] = { 2022 - PCI_SATA_MUXREG, 2023 1824 { 2024 1825 .reg = PCIE_SATA_CFG, 2025 1826 .mask = PCIE_CFG_VAL(0), ··· 2071 1802 2072 1803 static struct spear_pingroup pcie0_pingroup = { 2073 1804 .name = "pcie0_grp", 2074 - .pins = pci_sata_pins, 2075 - .npins = ARRAY_SIZE(pci_sata_pins), 2076 1805 .modemuxs = pcie0_modemux, 2077 1806 .nmodemuxs = ARRAY_SIZE(pcie0_modemux), 2078 1807 }; 2079 1808 2080 - /* pad multiplexing for pcie1 device */ 1809 + /* pad multiplexing for (fix-part) pcie1 device */ 2081 1810 static struct spear_muxreg pcie1_muxreg[] = { 2082 - PCI_SATA_MUXREG, 2083 1811 { 2084 1812 .reg = PCIE_SATA_CFG, 2085 1813 .mask = PCIE_CFG_VAL(1), ··· 2093 1827 2094 1828 static struct spear_pingroup pcie1_pingroup = { 2095 1829 .name = "pcie1_grp", 2096 - .pins = pci_sata_pins, 2097 - .npins = ARRAY_SIZE(pci_sata_pins), 2098 1830 .modemuxs = pcie1_modemux, 2099 1831 .nmodemuxs = ARRAY_SIZE(pcie1_modemux), 2100 1832 }; 2101 1833 2102 - /* pad multiplexing for pcie2 device */ 1834 + /* pad multiplexing for (fix-part) pcie2 device */ 2103 1835 static struct spear_muxreg pcie2_muxreg[] = { 2104 - PCI_SATA_MUXREG, 2105 1836 { 2106 1837 .reg = PCIE_SATA_CFG, 2107 1838 .mask = PCIE_CFG_VAL(2), ··· 2115 1852 2116 1853 static struct spear_pingroup pcie2_pingroup = { 2117 1854 .name = "pcie2_grp", 2118 - .pins = pci_sata_pins, 2119 - .npins = ARRAY_SIZE(pci_sata_pins), 2120 1855 .modemuxs = pcie2_modemux, 2121 1856 .nmodemuxs = ARRAY_SIZE(pcie2_modemux), 2122 1857 }; 2123 1858 2124 - static const char *const pci_grps[] = { "pcie0_grp", "pcie1_grp", "pcie2_grp" }; 2125 - static struct spear_function pci_function = { 2126 - .name = "pci", 2127 - .groups = pci_grps, 2128 - .ngroups = ARRAY_SIZE(pci_grps), 1859 + static const char *const pcie_grps[] = { "pcie0_grp", "pcie1_grp", "pcie2_grp" 1860 + }; 1861 + static struct spear_function pcie_function = { 1862 + .name = "pci_express", 1863 + .groups = pcie_grps, 1864 + .ngroups = ARRAY_SIZE(pcie_grps), 2129 1865 }; 2130 1866 2131 1867 /* pad multiplexing for sata0 device */ 2132 1868 static struct spear_muxreg sata0_muxreg[] = { 2133 - PCI_SATA_MUXREG, 2134 1869 { 2135 1870 .reg = PCIE_SATA_CFG, 2136 1871 .mask = SATA_CFG_VAL(0), ··· 2145 1884 2146 1885 static struct spear_pingroup sata0_pingroup = { 2147 1886 .name = "sata0_grp", 2148 - .pins = pci_sata_pins, 2149 - .npins = ARRAY_SIZE(pci_sata_pins), 2150 1887 .modemuxs = sata0_modemux, 2151 1888 .nmodemuxs = ARRAY_SIZE(sata0_modemux), 2152 1889 }; 2153 1890 2154 1891 /* pad multiplexing for sata1 device */ 2155 1892 static struct spear_muxreg sata1_muxreg[] = { 2156 - PCI_SATA_MUXREG, 2157 1893 { 2158 1894 .reg = PCIE_SATA_CFG, 2159 1895 .mask = SATA_CFG_VAL(1), ··· 2167 1909 2168 1910 static struct spear_pingroup sata1_pingroup = { 2169 1911 .name = "sata1_grp", 2170 - .pins = pci_sata_pins, 2171 - .npins = ARRAY_SIZE(pci_sata_pins), 2172 1912 .modemuxs = sata1_modemux, 2173 1913 .nmodemuxs = ARRAY_SIZE(sata1_modemux), 2174 1914 }; 2175 1915 2176 1916 /* pad multiplexing for sata2 device */ 2177 1917 static struct spear_muxreg sata2_muxreg[] = { 2178 - PCI_SATA_MUXREG, 2179 1918 { 2180 1919 .reg = PCIE_SATA_CFG, 2181 1920 .mask = SATA_CFG_VAL(2), ··· 2189 1934 2190 1935 static struct spear_pingroup sata2_pingroup = { 2191 1936 .name = "sata2_grp", 2192 - .pins = pci_sata_pins, 2193 - .npins = ARRAY_SIZE(pci_sata_pins), 2194 1937 .modemuxs = sata2_modemux, 2195 1938 .nmodemuxs = ARRAY_SIZE(sata2_modemux), 2196 1939 }; ··· 2210 1957 PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK | 2211 1958 PMX_NFCE2_MASK, 2212 1959 .val = 0, 1960 + }, { 1961 + .reg = PAD_DIRECTION_SEL_1, 1962 + .mask = PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL1_MASK | 1963 + PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK | 1964 + PMX_NFCE2_MASK, 1965 + .val = PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL1_MASK | 1966 + PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK | 1967 + PMX_NFCE2_MASK, 2213 1968 }, 2214 1969 }; 2215 1970 ··· 2244 1983 .mask = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK | 2245 1984 PMX_MCICECF_MASK | PMX_MCICEXD_MASK, 2246 1985 .val = 0, 1986 + }, { 1987 + .reg = PAD_DIRECTION_SEL_2, 1988 + .mask = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK | 1989 + PMX_MCICECF_MASK | PMX_MCICEXD_MASK, 1990 + .val = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK | 1991 + PMX_MCICECF_MASK | PMX_MCICEXD_MASK, 2247 1992 }, 2248 1993 }; 2249 1994 ··· 2284 2017 .mask = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK 2285 2018 | PMX_MCILEDS_MASK, 2286 2019 .val = 0, 2020 + }, { 2021 + .reg = PAD_DIRECTION_SEL_2, 2022 + .mask = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK 2023 + | PMX_MCILEDS_MASK, 2024 + .val = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK 2025 + | PMX_MCILEDS_MASK, 2287 2026 }, 2288 2027 }; 2289 2028 ··· 2366 2093 &can0_dis_sd_pingroup, 2367 2094 &can1_dis_sd_pingroup, 2368 2095 &can1_dis_kbd_pingroup, 2096 + &pci_pingroup, 2369 2097 &pcie0_pingroup, 2370 2098 &pcie1_pingroup, 2371 2099 &pcie2_pingroup, ··· 2412 2138 &can0_function, 2413 2139 &can1_function, 2414 2140 &pci_function, 2141 + &pcie_function, 2415 2142 &sata_function, 2416 2143 &ssp1_function, 2417 2144 &gpt64_function,
+39 -2
drivers/pinctrl/spear/pinctrl-spear1340.c
··· 213 213 * Pad multiplexing for making all pads as gpio's. This is done to override the 214 214 * values passed from bootloader and start from scratch. 215 215 */ 216 - static const unsigned pads_as_gpio_pins[] = { 251 }; 216 + static const unsigned pads_as_gpio_pins[] = { 12, 88, 89, 251 }; 217 217 static struct spear_muxreg pads_as_gpio_muxreg[] = { 218 218 { 219 219 .reg = PAD_FUNCTION_EN_1, ··· 1692 1692 .nmodemuxs = ARRAY_SIZE(clcd_modemux), 1693 1693 }; 1694 1694 1695 - static const char *const clcd_grps[] = { "clcd_grp" }; 1695 + /* Disable cld runtime to save panel damage */ 1696 + static struct spear_muxreg clcd_sleep_muxreg[] = { 1697 + { 1698 + .reg = PAD_SHARED_IP_EN_1, 1699 + .mask = ARM_TRACE_MASK | MIPHY_DBG_MASK, 1700 + .val = 0, 1701 + }, { 1702 + .reg = PAD_FUNCTION_EN_5, 1703 + .mask = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK, 1704 + .val = 0x0, 1705 + }, { 1706 + .reg = PAD_FUNCTION_EN_6, 1707 + .mask = CLCD_AND_ARM_TRACE_REG5_MASK, 1708 + .val = 0x0, 1709 + }, { 1710 + .reg = PAD_FUNCTION_EN_7, 1711 + .mask = CLCD_AND_ARM_TRACE_REG6_MASK, 1712 + .val = 0x0, 1713 + }, 1714 + }; 1715 + 1716 + static struct spear_modemux clcd_sleep_modemux[] = { 1717 + { 1718 + .muxregs = clcd_sleep_muxreg, 1719 + .nmuxregs = ARRAY_SIZE(clcd_sleep_muxreg), 1720 + }, 1721 + }; 1722 + 1723 + static struct spear_pingroup clcd_sleep_pingroup = { 1724 + .name = "clcd_sleep_grp", 1725 + .pins = clcd_pins, 1726 + .npins = ARRAY_SIZE(clcd_pins), 1727 + .modemuxs = clcd_sleep_modemux, 1728 + .nmodemuxs = ARRAY_SIZE(clcd_sleep_modemux), 1729 + }; 1730 + 1731 + static const char *const clcd_grps[] = { "clcd_grp", "clcd_sleep_grp" }; 1696 1732 static struct spear_function clcd_function = { 1697 1733 .name = "clcd", 1698 1734 .groups = clcd_grps, ··· 1929 1893 &sdhci_pingroup, 1930 1894 &cf_pingroup, 1931 1895 &xd_pingroup, 1896 + &clcd_sleep_pingroup, 1932 1897 &clcd_pingroup, 1933 1898 &arm_trace_pingroup, 1934 1899 &miphy_dbg_pingroup,
+6 -2
drivers/pinctrl/spear/pinctrl-spear320.c
··· 2240 2240 .mask = PMX_SSP_CS_MASK, 2241 2241 .val = 0, 2242 2242 }, { 2243 + .reg = MODE_CONFIG_REG, 2244 + .mask = PMX_PWM_MASK, 2245 + .val = PMX_PWM_MASK, 2246 + }, { 2243 2247 .reg = IP_SEL_PAD_30_39_REG, 2244 2248 .mask = PMX_PL_34_MASK, 2245 2249 .val = PMX_PWM2_PL_34_VAL, ··· 2960 2956 }; 2961 2957 2962 2958 /* Pad multiplexing for cadence mii 1_2 as smii or rmii device */ 2963 - static const unsigned smii0_1_pins[] = { 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 2959 + static const unsigned rmii0_1_pins[] = { 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 2964 2960 21, 22, 23, 24, 25, 26, 27 }; 2965 - static const unsigned rmii0_1_pins[] = { 10, 11, 21, 22, 23, 24, 25, 26, 27 }; 2961 + static const unsigned smii0_1_pins[] = { 10, 11, 21, 22, 23, 24, 25, 26, 27 }; 2966 2962 static struct spear_muxreg mii0_1_muxreg[] = { 2967 2963 { 2968 2964 .reg = PMX_CONFIG_REG,
+1
drivers/pinctrl/spear/pinctrl-spear3xx.h
··· 15 15 #include "pinctrl-spear.h" 16 16 17 17 /* pad mux declarations */ 18 + #define PMX_PWM_MASK (1 << 16) 18 19 #define PMX_FIRDA_MASK (1 << 14) 19 20 #define PMX_I2C_MASK (1 << 13) 20 21 #define PMX_SSP_CS_MASK (1 << 12)