Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pinmux-sh7724.c
Go to the documentation of this file.
1 /*
2  * SH7724 Pinmux
3  *
4  * Copyright (C) 2009 Renesas Solutions Corp.
5  *
6  * Kuninori Morimoto <[email protected]>
7  *
8  * Based on SH7723 Pinmux
9  * Copyright (C) 2008 Magnus Damm
10  *
11  * This file is subject to the terms and conditions of the GNU General Public
12  * License. See the file "COPYING" in the main directory of this archive
13  * for more details.
14  */
15 
16 #include <linux/init.h>
17 #include <linux/kernel.h>
18 #include <linux/gpio.h>
19 #include <cpu/sh7724.h>
20 
21 enum {
23 
72 
118 
164 
213 
261 
262 
277 
293 
309 
326 
344 
346  /*PTA*/
355 
356  /*PTB*/
365 
366  /*PTC*/
375 
376  /*PTD*/
385 
386  /*PTE*/
395 
396  /*PTF*/
405 
406  /*PTG*/
413 
414  /*PTH*/
423 
424  /*PTJ*/
432 
433  /*PTK*/
442 
443  /*PTL*/
452 
453  /*PTM*/
462 
463  /*PTN*/
472 
473  /*PTQ*/
482 
483  /*PTR*/
492 
493  /*PTS*/
501 
502  /*PTT*/
511 
512  /*PTU*/
521 
522  /*PTV*/
531 
532  /*PTW*/
541 
542  /*PTX*/
551 
552  /*PTY*/
561 
562  /*PTZ*/
572 };
573 
574 static pinmux_enum_t pinmux_data[] = {
575  /* PTA GPIO */
584 
585  /* PTB GPIO */
594 
595  /* PTC GPIO */
604 
605  /* PTD GPIO */
614 
615  /* PTE GPIO */
624 
625  /* PTF GPIO */
634 
635  /* PTG GPIO */
642 
643  /* PTH GPIO */
652 
653  /* PTJ GPIO */
661 
662  /* PTK GPIO */
671 
672  /* PTL GPIO */
681 
682  /* PTM GPIO */
691 
692  /* PTN GPIO */
701 
702  /* PTQ GPIO */
711 
712  /* PTR GPIO */
721 
722  /* PTS GPIO */
730 
731  /* PTT GPIO */
740 
741  /* PTU GPIO */
750 
751  /* PTV GPIO */
760 
761  /* PTW GPIO */
770 
771  /* PTX GPIO */
780 
781  /* PTY GPIO */
790 
791  /* PTZ GPIO */
800 
801  /* PTA FN */
810 
819 
828 
829  /* PTB FN */
838 
847 
850 
854 
855  /* PTC FN */
864 
865  /* PTD FN */
874 
875  /* PTE FN */
878 
885 
890 
891  /* PTF FN */
900 
904 
908 
909  /* PTG FN */
916 
917  /* PTH FN */
926 
927  /* PTJ FN */
936 
937  /* PTK FN */
944 
951 
958 
961 
962  /* PTL FN */
971 
978 
985 
987 
988  /* PTM FN */
995 
1004 
1007 
1010 
1011  /* PTN FN */
1014 
1021 
1027 
1030 
1031  /* PTQ FN */
1040 
1041  /* PTR FN */
1050 
1052 
1054 
1058 
1059  /* PTS FN */
1061 
1063 
1065 
1072 
1076 
1079 
1082 
1083  /* PTT FN */
1092 
1093  /* PTU FN */
1096 
1103 
1104  /* PTV FN */
1113 
1123 
1124  /* PTW FN */
1133 
1142 
1147 
1148  /* PTX FN */
1151 
1154 
1159 
1163 
1166 
1167  /* PTY FN */
1176 
1177  /* PTZ FN */
1186 
1192 };
1193 
1194 static struct pinmux_gpio pinmux_gpios[] = {
1195  /* PTA */
1204 
1205  /* PTB */
1214 
1215  /* PTC */
1224 
1225  /* PTD */
1234 
1235  /* PTE */
1244 
1245  /* PTF */
1254 
1255  /* PTG */
1262 
1263  /* PTH */
1272 
1273  /* PTJ */
1281 
1282  /* PTK */
1291 
1292  /* PTL */
1301 
1302  /* PTM */
1311 
1312  /* PTN */
1321 
1322  /* PTQ */
1331 
1332  /* PTR */
1341 
1342  /* PTS */
1350 
1351  /* PTT */
1360 
1361  /* PTU */
1370 
1371  /* PTV */
1380 
1381  /* PTW */
1390 
1391  /* PTX */
1400 
1401  /* PTY */
1410 
1411  /* PTZ */
1420 
1421  /* BSC */
1467 
1468  /* KEYSC */
1480 
1481  /* ATAPI */
1512 
1513  /* TPU */
1520 
1521  /* LCDC */
1558 
1559  /* SCIF0 */
1563 
1564  /* SCIF1 */
1568 
1569  /* SCIF2 */
1576 
1577  /* SCIF3 */
1588 
1589  /* SCIF4 */
1593 
1594  /* SCIF5 */
1598 
1599  /* FSI */
1616 
1617  /* AUD */
1624 
1625  /* VIO */
1627 
1628  /* VIO0 */
1649 
1650  /* VIO1 */
1663 
1664  /* Eth */
1676 
1677  /* System */
1681 
1682  /* VOU */
1703 
1704  /* MSIOF0 */
1714 
1715  /* MSIOF1 */
1725 
1726  /* DMAC */
1731 
1732  /* SDHI0 */
1741 
1742  /* SDHI1 */
1751 
1752  /* MMC */
1763 
1764  /* IrDA */
1767 
1768  /* TSIF */
1773 
1774  /* IRQ */
1783  };
1784 
1785 static struct pinmux_cfg_reg pinmux_config_regs[] = {
1786  { PINMUX_CFG_REG("PACR", 0xa4050100, 16, 2) {
1795  },
1796  { PINMUX_CFG_REG("PBCR", 0xa4050102, 16, 2) {
1805  },
1806  { PINMUX_CFG_REG("PCCR", 0xa4050104, 16, 2) {
1815  },
1816  { PINMUX_CFG_REG("PDCR", 0xa4050106, 16, 2) {
1825  },
1826  { PINMUX_CFG_REG("PECR", 0xa4050108, 16, 2) {
1835  },
1836  { PINMUX_CFG_REG("PFCR", 0xa405010a, 16, 2) {
1845  },
1846  { PINMUX_CFG_REG("PGCR", 0xa405010c, 16, 2) {
1847  0, 0, 0, 0,
1848  0, 0, 0, 0,
1849  PTG5_FN, PTG5_OUT, 0, 0,
1850  PTG4_FN, PTG4_OUT, 0, 0,
1851  PTG3_FN, PTG3_OUT, 0, 0,
1852  PTG2_FN, PTG2_OUT, 0, 0,
1853  PTG1_FN, PTG1_OUT, 0, 0,
1854  PTG0_FN, PTG0_OUT, 0, 0 }
1855  },
1856  { PINMUX_CFG_REG("PHCR", 0xa405010e, 16, 2) {
1865  },
1866  { PINMUX_CFG_REG("PJCR", 0xa4050110, 16, 2) {
1867  PTJ7_FN, PTJ7_OUT, 0, 0,
1868  PTJ6_FN, PTJ6_OUT, 0, 0,
1869  PTJ5_FN, PTJ5_OUT, 0, 0,
1870  0, 0, 0, 0,
1875  },
1876  { PINMUX_CFG_REG("PKCR", 0xa4050112, 16, 2) {
1885  },
1886  { PINMUX_CFG_REG("PLCR", 0xa4050114, 16, 2) {
1895  },
1896  { PINMUX_CFG_REG("PMCR", 0xa4050116, 16, 2) {
1905  },
1906  { PINMUX_CFG_REG("PNCR", 0xa4050118, 16, 2) {
1915  },
1916  { PINMUX_CFG_REG("PQCR", 0xa405011a, 16, 2) {
1925  },
1926  { PINMUX_CFG_REG("PRCR", 0xa405011c, 16, 2) {
1931  PTR3_FN, 0, PTR3_IN_PU, PTR3_IN,
1932  PTR2_FN, 0, PTR2_IN_PU, PTR2_IN,
1935  },
1936  { PINMUX_CFG_REG("PSCR", 0xa405011e, 16, 2) {
1937  0, 0, 0, 0,
1945  },
1946  { PINMUX_CFG_REG("PTCR", 0xa4050140, 16, 2) {
1955  },
1956  { PINMUX_CFG_REG("PUCR", 0xa4050142, 16, 2) {
1965  },
1966  { PINMUX_CFG_REG("PVCR", 0xa4050144, 16, 2) {
1975  },
1976  { PINMUX_CFG_REG("PWCR", 0xa4050146, 16, 2) {
1985  },
1986  { PINMUX_CFG_REG("PXCR", 0xa4050148, 16, 2) {
1995  },
1996  { PINMUX_CFG_REG("PYCR", 0xa405014a, 16, 2) {
2005  },
2006  { PINMUX_CFG_REG("PZCR", 0xa405014c, 16, 2) {
2015  },
2016  { PINMUX_CFG_REG("PSELA", 0xa405014e, 16, 1) {
2017  PSA15_0, PSA15_1,
2018  PSA14_0, PSA14_1,
2019  PSA13_0, PSA13_1,
2020  PSA12_0, PSA12_1,
2021  0, 0,
2022  PSA10_0, PSA10_1,
2023  PSA9_0, PSA9_1,
2024  PSA8_0, PSA8_1,
2025  PSA7_0, PSA7_1,
2026  PSA6_0, PSA6_1,
2027  PSA5_0, PSA5_1,
2028  0, 0,
2029  PSA3_0, PSA3_1,
2030  PSA2_0, PSA2_1,
2031  PSA1_0, PSA1_1,
2032  PSA0_0, PSA0_1}
2033  },
2034  { PINMUX_CFG_REG("PSELB", 0xa4050150, 16, 1) {
2035  0, 0,
2036  PSB14_0, PSB14_1,
2037  PSB13_0, PSB13_1,
2038  PSB12_0, PSB12_1,
2039  PSB11_0, PSB11_1,
2040  PSB10_0, PSB10_1,
2041  PSB9_0, PSB9_1,
2042  PSB8_0, PSB8_1,
2043  PSB7_0, PSB7_1,
2044  PSB6_0, PSB6_1,
2045  PSB5_0, PSB5_1,
2046  PSB4_0, PSB4_1,
2047  PSB3_0, PSB3_1,
2048  PSB2_0, PSB2_1,
2049  PSB1_0, PSB1_1,
2050  PSB0_0, PSB0_1}
2051  },
2052  { PINMUX_CFG_REG("PSELC", 0xa4050152, 16, 1) {
2053  PSC15_0, PSC15_1,
2054  PSC14_0, PSC14_1,
2055  PSC13_0, PSC13_1,
2056  PSC12_0, PSC12_1,
2057  PSC11_0, PSC11_1,
2058  PSC10_0, PSC10_1,
2059  PSC9_0, PSC9_1,
2060  PSC8_0, PSC8_1,
2061  PSC7_0, PSC7_1,
2062  PSC6_0, PSC6_1,
2063  PSC5_0, PSC5_1,
2064  PSC4_0, PSC4_1,
2065  0, 0,
2066  PSC2_0, PSC2_1,
2067  PSC1_0, PSC1_1,
2068  PSC0_0, PSC0_1}
2069  },
2070  { PINMUX_CFG_REG("PSELD", 0xa4050154, 16, 1) {
2071  PSD15_0, PSD15_1,
2072  PSD14_0, PSD14_1,
2073  PSD13_0, PSD13_1,
2074  PSD12_0, PSD12_1,
2075  PSD11_0, PSD11_1,
2076  PSD10_0, PSD10_1,
2077  PSD9_0, PSD9_1,
2078  PSD8_0, PSD8_1,
2079  PSD7_0, PSD7_1,
2080  PSD6_0, PSD6_1,
2081  PSD5_0, PSD5_1,
2082  PSD4_0, PSD4_1,
2083  PSD3_0, PSD3_1,
2084  PSD2_0, PSD2_1,
2085  PSD1_0, PSD1_1,
2086  PSD0_0, PSD0_1}
2087  },
2088  { PINMUX_CFG_REG("PSELE", 0xa4050156, 16, 1) {
2089  PSE15_0, PSE15_1,
2090  PSE14_0, PSE14_1,
2091  PSE13_0, PSE13_1,
2092  PSE12_0, PSE12_1,
2093  PSE11_0, PSE11_1,
2094  PSE10_0, PSE10_1,
2095  PSE9_0, PSE9_1,
2096  PSE8_0, PSE8_1,
2097  PSE7_0, PSE7_1,
2098  PSE6_0, PSE6_1,
2099  PSE5_0, PSE5_1,
2100  PSE4_0, PSE4_1,
2101  PSE3_0, PSE3_1,
2102  PSE2_0, PSE2_1,
2103  PSE1_0, PSE1_1,
2104  PSE0_0, PSE0_1}
2105  },
2106  {}
2107 };
2108 
2109 static struct pinmux_data_reg pinmux_data_regs[] = {
2110  { PINMUX_DATA_REG("PADR", 0xa4050120, 8) {
2113  },
2114  { PINMUX_DATA_REG("PBDR", 0xa4050122, 8) {
2117  },
2118  { PINMUX_DATA_REG("PCDR", 0xa4050124, 8) {
2121  },
2122  { PINMUX_DATA_REG("PDDR", 0xa4050126, 8) {
2125  },
2126  { PINMUX_DATA_REG("PEDR", 0xa4050128, 8) {
2129  },
2130  { PINMUX_DATA_REG("PFDR", 0xa405012a, 8) {
2133  },
2134  { PINMUX_DATA_REG("PGDR", 0xa405012c, 8) {
2135  0, 0, PTG5_DATA, PTG4_DATA,
2137  },
2138  { PINMUX_DATA_REG("PHDR", 0xa405012e, 8) {
2141  },
2142  { PINMUX_DATA_REG("PJDR", 0xa4050130, 8) {
2145  },
2146  { PINMUX_DATA_REG("PKDR", 0xa4050132, 8) {
2149  },
2150  { PINMUX_DATA_REG("PLDR", 0xa4050134, 8) {
2153  },
2154  { PINMUX_DATA_REG("PMDR", 0xa4050136, 8) {
2157  },
2158  { PINMUX_DATA_REG("PNDR", 0xa4050138, 8) {
2161  },
2162  { PINMUX_DATA_REG("PQDR", 0xa405013a, 8) {
2165  },
2166  { PINMUX_DATA_REG("PRDR", 0xa405013c, 8) {
2169  },
2170  { PINMUX_DATA_REG("PSDR", 0xa405013e, 8) {
2173  },
2174  { PINMUX_DATA_REG("PTDR", 0xa4050160, 8) {
2177  },
2178  { PINMUX_DATA_REG("PUDR", 0xa4050162, 8) {
2181  },
2182  { PINMUX_DATA_REG("PVDR", 0xa4050164, 8) {
2185  },
2186  { PINMUX_DATA_REG("PWDR", 0xa4050166, 8) {
2189  },
2190  { PINMUX_DATA_REG("PXDR", 0xa4050168, 8) {
2193  },
2194  { PINMUX_DATA_REG("PYDR", 0xa405016a, 8) {
2197  },
2198  { PINMUX_DATA_REG("PZDR", 0xa405016c, 8) {
2201  },
2202  { },
2203 };
2204 
2205 static struct pinmux_info sh7724_pinmux_info = {
2206  .name = "sh7724_pfc",
2207  .reserved_id = PINMUX_RESERVED,
2208  .data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END },
2209  .input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END },
2211  .output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END },
2212  .mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END },
2213  .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },
2214 
2215  .first_gpio = GPIO_PTA7,
2216  .last_gpio = GPIO_FN_INTC_IRQ0,
2217 
2218  .gpios = pinmux_gpios,
2219  .cfg_regs = pinmux_config_regs,
2220  .data_regs = pinmux_data_regs,
2221 
2222  .gpio_data = pinmux_data,
2223  .gpio_data_size = ARRAY_SIZE(pinmux_data),
2224 };
2225 
2226 static int __init plat_pinmux_setup(void)
2227 {
2228  return register_pinmux(&sh7724_pinmux_info);
2229 }
2230 arch_initcall(plat_pinmux_setup);