Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pinmux-sh7722.c
Go to the documentation of this file.
1 #include <linux/init.h>
2 #include <linux/kernel.h>
3 #include <linux/gpio.h>
4 #include <cpu/sh7722.h>
5 
6 enum {
8 
47 
77 
98 
110 
141 
210 
247 
274 
295 };
296 
297 static pinmux_enum_t pinmux_data[] = {
298  /* PTA */
307 
308  /* PTB */
317 
318  /* PTC */
325 
326  /* PTD */
335 
336  /* PTE */
343 
344  /* PTF */
352 
353  /* PTG */
359 
360  /* PTH */
369 
370  /* PTJ */
376 
377  /* PTK */
385 
386  /* PTL */
395 
396  /* PTM */
405 
406  /* PTN */
415 
416  /* PTQ */
424 
425  /* PTR */
431 
432  /* PTS */
438 
439  /* PTT */
445 
446  /* PTU */
452 
453  /* PTV */
459 
460  /* PTW */
468 
469  /* PTX */
477 
478  /* PTY */
485 
486  /* PTZ */
492 
493  /* SCIF0 */
499 
500  /* SCIF1 */
506 
507  /* SCIF2 */
513 
514  /* SIO */
522 
523  /* CEU */
553 
554  /* LCDC */
582  /* Main LCD */
589  /* Main LCD - RGB Mode */
593  /* Main LCD - SYS Mode */
598  /* Sub LCD - SYS Mode */
606 
607  /* BSC */
617 
618  /* SBSC */
639 
640  /* IRQ */
645  HIZC11_IRQ3, PTQ0),
650 
651  /* SDHI */
660 
661  /* SIU - Port A */
670 
671  /* SIU - Port B */
680 
681  /* AUD */
687 
688  /* DMAC */
691 
692  /* VOU */
713 
714  /* CPG */
717 
718  /* SIOF0 */
728 
729  /* SIOF1 */
738 
739  /* SIM */
743 
744  /* TSIF */
749 
750  /* IRDA */
754 
755  /* TPU */
757 
758  /* FLCTL */
773 
774  /* KEYSC */
786 };
787 
788 static struct pinmux_gpio pinmux_gpios[] = {
789  /* PTA */
798 
799  /* PTB */
808 
809  /* PTC */
816 
817  /* PTD */
826 
827  /* PTE */
834 
835  /* PTF */
843 
844  /* PTG */
850 
851  /* PTH */
860 
861  /* PTJ */
867 
868  /* PTK */
876 
877  /* PTL */
886 
887  /* PTM */
896 
897  /* PTN */
906 
907  /* PTQ */
915 
916  /* PTR */
922 
923  /* PTS */
929 
930  /* PTT */
936 
937  /* PTU */
943 
944  /* PTV */
950 
951  /* PTW */
959 
960  /* PTX */
968 
969  /* PTY */
976 
977  /* PTZ */
983 
984  /* SCIF0 */
990 
991  /* SCIF1 */
997 
998  /* SCIF2 */
1004 
1005  /* SIO */
1013 
1014  /* CEU */
1041 
1042  /* LCDC */
1068  /* Main LCD */
1073  /* Main LCD - RGB Mode */
1077  /* Main LCD - SYS Mode */
1082  /* Sub LCD - SYS Mode */
1088 
1089  /* BSC */
1099 
1100  /* SBSC */
1121 
1122  /* IRQ */
1131 
1132  /* SDHI */
1141 
1142  /* SIU - Port A */
1151 
1152  /* SIU - Port B */
1161 
1162  /* AUD */
1168 
1169  /* DMAC */
1172 
1173  /* VOU */
1194 
1195  /* CPG */
1198 
1199  /* SIOF0 */
1207 
1208  /* SIOF1 */
1216 
1217  /* SIM */
1221 
1222  /* TSIF */
1227 
1228  /* IRDA */
1231 
1232  /* TPU */
1234 
1235  /* FLCTL */
1250 
1251  /* KEYSC */
1263 };
1264 
1265 static struct pinmux_cfg_reg pinmux_config_regs[] = {
1266  { PINMUX_CFG_REG("PACR", 0xa4050100, 16, 2) {
1270  VIO_D4, 0, PTA4_IN_PD, PTA4_IN,
1271  VIO_D3, 0, PTA3_IN_PD, PTA3_IN,
1272  VIO_D2, 0, PTA2_IN_PD, PTA2_IN,
1273  VIO_D1, 0, PTA1_IN_PD, PTA1_IN,
1275  },
1276  { PINMUX_CFG_REG("PBCR", 0xa4050102, 16, 2) {
1277  HPD55, PTB7_OUT, 0, PTB7_IN,
1278  HPD54, PTB6_OUT, 0, PTB6_IN,
1279  HPD53, PTB5_OUT, 0, PTB5_IN,
1280  HPD52, PTB4_OUT, 0, PTB4_IN,
1281  HPD51, PTB3_OUT, 0, PTB3_IN,
1282  HPD50, PTB2_OUT, 0, PTB2_IN,
1283  HPD49, PTB1_OUT, 0, PTB1_IN,
1284  HPD48, PTB0_OUT, 0, PTB0_IN }
1285  },
1286  { PINMUX_CFG_REG("PCCR", 0xa4050104, 16, 2) {
1287  0, 0, PTC7_IN_PU, PTC7_IN,
1288  0, 0, 0, 0,
1289  IOIS16, 0, PTC5_IN_PU, PTC5_IN,
1290  HPDQM7, PTC4_OUT, 0, PTC4_IN,
1291  HPDQM6, PTC3_OUT, 0, PTC3_IN,
1292  HPDQM5, PTC2_OUT, 0, PTC2_IN,
1293  0, 0, 0, 0,
1294  HPDQM4, PTC0_OUT, 0, PTC0_IN }
1295  },
1296  { PINMUX_CFG_REG("PDCR", 0xa4050106, 16, 2) {
1297  SDHICD, 0, PTD7_IN_PU, PTD7_IN,
1304  SDHICLK, PTD0_OUT, 0, 0 }
1305  },
1306  { PINMUX_CFG_REG("PECR", 0xa4050108, 16, 2) {
1311  0, 0, 0, 0,
1312  0, 0, 0, 0,
1315  },
1316  { PINMUX_CFG_REG("PFCR", 0xa405010a, 16, 2) {
1317  0, 0, 0, 0,
1324  SIOTXD_SIUBOSLD, PTF0_OUT, 0, 0 }
1325  },
1326  { PINMUX_CFG_REG("PGCR", 0xa405010c, 16, 2) {
1327  0, 0, 0, 0,
1328  0, 0, 0, 0,
1329  0, 0, 0, 0,
1330  AUDSYNC, PTG4_OUT, 0, 0,
1331  AUDATA3, PTG3_OUT, 0, 0,
1332  AUDATA2, PTG2_OUT, 0, 0,
1333  AUDATA1, PTG1_OUT, 0, 0,
1334  AUDATA0, PTG0_OUT, 0, 0 }
1335  },
1336  { PINMUX_CFG_REG("PHCR", 0xa405010e, 16, 2) {
1340  LCDDISP_LCDRS, PTH4_OUT, 0, 0,
1341  LCDHSYN_LCDCS, PTH3_OUT, 0, 0,
1342  LCDDON_LCDDON2, PTH2_OUT, 0, 0,
1345  },
1346  { PINMUX_CFG_REG("PJCR", 0xa4050110, 16, 2) {
1347  STATUS0, PTJ7_OUT, 0, 0,
1348  0, PTJ6_OUT, 0, 0,
1349  PDSTATUS, PTJ5_OUT, 0, 0,
1350  0, 0, 0, 0,
1351  0, 0, 0, 0,
1352  0, 0, 0, 0,
1355  },
1356  { PINMUX_CFG_REG("PKCR", 0xa4050112, 16, 2) {
1357  0, 0, 0, 0,
1365  },
1366  { PINMUX_CFG_REG("PLCR", 0xa4050114, 16, 2) {
1375  },
1376  { PINMUX_CFG_REG("PMCR", 0xa4050116, 16, 2) {
1385  },
1386  { PINMUX_CFG_REG("PNCR", 0xa4050118, 16, 2) {
1387  HPD63, PTN7_OUT, 0, PTN7_IN,
1388  HPD62, PTN6_OUT, 0, PTN6_IN,
1389  HPD61, PTN5_OUT, 0, PTN5_IN,
1390  HPD60, PTN4_OUT, 0, PTN4_IN,
1391  HPD59, PTN3_OUT, 0, PTN3_IN,
1392  HPD58, PTN2_OUT, 0, PTN2_IN,
1393  HPD57, PTN1_OUT, 0, PTN1_IN,
1394  HPD56, PTN0_OUT, 0, PTN0_IN }
1395  },
1396  { PINMUX_CFG_REG("PQCR", 0xa405011a, 16, 2) {
1397  0, 0, 0, 0,
1398  SIOF0_SS2_SIM_RST, PTQ6_OUT, 0, 0,
1402  PTQ2, 0, PTQ2_IN_PD, PTQ2_IN,
1403  PTQ1, PTQ1_OUT, 0, 0,
1405  },
1406  { PINMUX_CFG_REG("PRCR", 0xa405011c, 16, 2) {
1407  0, 0, 0, 0,
1408  0, 0, 0, 0,
1409  0, 0, 0, 0,
1410  LCDRD, PTR4_OUT, 0, 0,
1411  CS6B_CE1B_LCDCS2, PTR3_OUT, 0, 0,
1412  WAIT, 0, PTR2_IN_PU, PTR2_IN,
1413  LCDDCK_LCDWR, PTR1_OUT, 0, 0,
1414  LCDVEPWC_LCDVEPWC2, PTR0_OUT, 0, 0 }
1415  },
1416  { PINMUX_CFG_REG("PSCR", 0xa405011e, 16, 2) {
1417  0, 0, 0, 0,
1418  0, 0, 0, 0,
1419  0, 0, 0, 0,
1424  SCIF0_TXD, PTS0_OUT, 0, 0 }
1425  },
1426  { PINMUX_CFG_REG("PTCR", 0xa4050140, 16, 2) {
1427  0, 0, 0, 0,
1428  0, 0, 0, 0,
1429  0, 0, 0, 0,
1433  DREQ0, 0, PTT1_IN_PD, PTT1_IN,
1434  FCDE, PTT0_OUT, 0, 0 }
1435  },
1436  { PINMUX_CFG_REG("PUCR", 0xa4050142, 16, 2) {
1437  0, 0, 0, 0,
1438  0, 0, 0, 0,
1439  0, 0, 0, 0,
1445  },
1446  { PINMUX_CFG_REG("PVCR", 0xa4050144, 16, 2) {
1447  0, 0, 0, 0,
1448  0, 0, 0, 0,
1449  0, 0, 0, 0,
1455  },
1456  { PINMUX_CFG_REG("PWCR", 0xa4050146, 16, 2) {
1457  0, 0, 0, 0,
1459  VIO_CKO_SCIF2_RTS, PTW5_OUT, 0, 0,
1465  },
1466  { PINMUX_CFG_REG("PXCR", 0xa4050148, 16, 2) {
1467  0, 0, 0, 0,
1475  },
1476  { PINMUX_CFG_REG("PYCR", 0xa405014a, 16, 2) {
1477  0, 0, 0, 0,
1478  0, 0, 0, 0,
1483  KEYOUT1, PTY1_OUT, 0, 0,
1485  },
1486  { PINMUX_CFG_REG("PZCR", 0xa405014c, 16, 2) {
1487  0, 0, 0, 0,
1488  0, 0, 0, 0,
1490  KEYIN3, 0, PTZ4_IN_PU, PTZ4_IN,
1491  KEYIN2, 0, PTZ3_IN_PU, PTZ3_IN,
1492  KEYIN1, 0, PTZ2_IN_PU, PTZ2_IN,
1494  0, 0, 0, 0 }
1495  },
1496  { PINMUX_CFG_REG("PSELA", 0xa405014e, 16, 1) {
1499  0, 0,
1500  0, 0,
1501  0, 0,
1502  0, 0,
1503  PSA9_IRQ4, PSA9_BS,
1504  0, 0,
1505  0, 0,
1506  0, 0,
1507  0, 0,
1509  0, 0,
1510  0, 0,
1511  0, 0,
1512  0, 0 }
1513  },
1514  { PINMUX_CFG_REG("PSELB", 0xa4050150, 16, 1) {
1531  },
1532  { PINMUX_CFG_REG("PSELC", 0xa4050152, 16, 1) {
1538  0, 0,
1539  0, 0,
1540  0, 0,
1541  0, 0,
1542  0, 0,
1543  0, 0,
1544  0, 0,
1545  0, 0,
1546  0, 0,
1547  0, 0,
1548  PSC0_NAF, PSC0_VIO }
1549  },
1550  { PINMUX_CFG_REG("PSELD", 0xa4050154, 16, 1) {
1551  0, 0,
1552  0, 0,
1562  0, 0,
1565  0, 0,
1567  },
1568  { PINMUX_CFG_REG("PSELE", 0xa4050156, 16, 1) {
1574  0, 0,
1575  0, 0,
1576  0, 0,
1577  0, 0,
1578  0, 0,
1579  0, 0,
1580  0, 0,
1585  },
1586  { PINMUX_CFG_REG("HIZCRA", 0xa4050158, 16, 1) {
1587  0, 0,
1589  0, 0,
1590  0, 0,
1591  0, 0,
1597  0, 0,
1598  0, 0,
1599  0, 0,
1600  0, 0,
1601  0, 0,
1602  0, 0 }
1603  },
1604  { PINMUX_CFG_REG("HIZCRB", 0xa405015a, 16, 1) {
1605  0, 0,
1606  0, 0,
1607  0, 0,
1608  0, 0,
1609  0, 0,
1610  0, 0,
1611  0, 0,
1612  0, 0,
1613  0, 0,
1614  0, 0,
1615  0, 0,
1617  0, 0,
1618  0, 0,
1620  HIZB0_VIO, HIZB0_HIZ }
1621  },
1622  { PINMUX_CFG_REG("HIZCRC", 0xa405015c, 16, 1) {
1631  0, 0,
1632  0, 0,
1633  0, 0,
1634  0, 0,
1635  0, 0,
1636  0, 0,
1637  0, 0,
1638  0, 0 }
1639  },
1640  { PINMUX_CFG_REG("MSELCRB", 0xa4050182, 16, 1) {
1641  0, 0,
1642  0, 0,
1643  0, 0,
1644  0, 0,
1645  0, 0,
1646  0, 0,
1649  0, 0,
1650  0, 0,
1651  0, 0,
1652  0, 0,
1653  0, 0,
1654  0, 0,
1655  0, 0,
1656  0, 0 }
1657  },
1658  {}
1659 };
1660 
1661 static struct pinmux_data_reg pinmux_data_regs[] = {
1662  { PINMUX_DATA_REG("PADR", 0xa4050120, 8) {
1665  },
1666  { PINMUX_DATA_REG("PBDR", 0xa4050122, 8) {
1669  },
1670  { PINMUX_DATA_REG("PCDR", 0xa4050124, 8) {
1673  },
1674  { PINMUX_DATA_REG("PDDR", 0xa4050126, 8) {
1677  },
1678  { PINMUX_DATA_REG("PEDR", 0xa4050128, 8) {
1680  0, 0, PTE1_DATA, PTE0_DATA }
1681  },
1682  { PINMUX_DATA_REG("PFDR", 0xa405012a, 8) {
1685  },
1686  { PINMUX_DATA_REG("PGDR", 0xa405012c, 8) {
1687  0, 0, 0, PTG4_DATA,
1689  },
1690  { PINMUX_DATA_REG("PHDR", 0xa405012e, 8) {
1693  },
1694  { PINMUX_DATA_REG("PJDR", 0xa4050130, 8) {
1696  0, 0, PTJ1_DATA, PTJ0_DATA }
1697  },
1698  { PINMUX_DATA_REG("PKDR", 0xa4050132, 8) {
1701  },
1702  { PINMUX_DATA_REG("PLDR", 0xa4050134, 8) {
1705  },
1706  { PINMUX_DATA_REG("PMDR", 0xa4050136, 8) {
1709  },
1710  { PINMUX_DATA_REG("PNDR", 0xa4050138, 8) {
1713  },
1714  { PINMUX_DATA_REG("PQDR", 0xa405013a, 8) {
1717  },
1718  { PINMUX_DATA_REG("PRDR", 0xa405013c, 8) {
1719  0, 0, 0, PTR4_DATA,
1721  },
1722  { PINMUX_DATA_REG("PSDR", 0xa405013e, 8) {
1723  0, 0, 0, PTS4_DATA,
1725  },
1726  { PINMUX_DATA_REG("PTDR", 0xa4050160, 8) {
1727  0, 0, 0, PTT4_DATA,
1729  },
1730  { PINMUX_DATA_REG("PUDR", 0xa4050162, 8) {
1731  0, 0, 0, PTU4_DATA,
1733  },
1734  { PINMUX_DATA_REG("PVDR", 0xa4050164, 8) {
1735  0, 0, 0, PTV4_DATA,
1737  },
1738  { PINMUX_DATA_REG("PWDR", 0xa4050166, 8) {
1741  },
1742  { PINMUX_DATA_REG("PXDR", 0xa4050168, 8) {
1745  },
1746  { PINMUX_DATA_REG("PYDR", 0xa405016a, 8) {
1749  },
1750  { PINMUX_DATA_REG("PZDR", 0xa405016c, 8) {
1751  0, 0, PTZ5_DATA, PTZ4_DATA,
1753  },
1754  { },
1755 };
1756 
1757 static struct pinmux_info sh7722_pinmux_info = {
1758  .name = "sh7722_pfc",
1759  .reserved_id = PINMUX_RESERVED,
1760  .data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END },
1761  .input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END },
1764  .output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END },
1765  .mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END },
1766  .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },
1767 
1768  .first_gpio = GPIO_PTA7,
1769  .last_gpio = GPIO_FN_KEYOUT5_IN5,
1770 
1771  .gpios = pinmux_gpios,
1772  .cfg_regs = pinmux_config_regs,
1773  .data_regs = pinmux_data_regs,
1774 
1775  .gpio_data = pinmux_data,
1776  .gpio_data_size = ARRAY_SIZE(pinmux_data),
1777 };
1778 
1779 static int __init plat_pinmux_setup(void)
1780 {
1781  return register_pinmux(&sh7722_pinmux_info);
1782 }
1783 
1784 arch_initcall(plat_pinmux_setup);