Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pinmux-sh7785.c
Go to the documentation of this file.
1 /*
2  * SH7785 Pinmux
3  *
4  * Copyright (C) 2008 Magnus Damm
5  *
6  * This file is subject to the terms and conditions of the GNU General Public
7  * License. See the file "COPYING" in the main directory of this archive
8  * for more details.
9  */
10 
11 #include <linux/init.h>
12 #include <linux/kernel.h>
13 #include <linux/gpio.h>
14 #include <cpu/sh7785.h>
15 
16 enum {
18 
48 
78 
108 
138 
187 
355 };
356 
357 static pinmux_enum_t pinmux_data[] = {
358 
359  /* PA GPIO */
368 
369  /* PB GPIO */
378 
379  /* PC GPIO */
388 
389  /* PD GPIO */
398 
399  /* PE GPIO */
406 
407  /* PF GPIO */
416 
417  /* PG GPIO */
426 
427  /* PH GPIO */
436 
437  /* PJ GPIO */
446 
447  /* PK GPIO */
456 
457  /* PL GPIO */
466 
467  /* PM GPIO */
470 
471  /* PN GPIO */
480 
481  /* PP GPIO */
488 
489  /* PQ GPIO */
495 
496  /* PR GPIO */
501 
502  /* PA FN */
511 
512  /* PB FN */
521 
522  /* PC FN */
531 
532  /* PD FN */
541 
542  /* PE FN */
550 
551  /* PF FN */
560 
561  /* PF FN */
570 
571  /* PH FN */
590 
591  /* PJ FN */
613 
614  /* PK FN */
633 
634  /* PL FN */
651 
652  /* PM FN */
655 
656  /* PN FN */
675 
676  /* PP FN */
683 
684  /* PQ FN */
690 
691  /* PR FN */
696 
697  /* MISC FN */
702 };
703 
704 static struct pinmux_gpio pinmux_gpios[] = {
705  /* PA */
714 
715  /* PB */
724 
725  /* PC */
734 
735  /* PD */
744 
745  /* PE */
752 
753  /* PF */
762 
763  /* PG */
772 
773  /* PH */
782 
783  /* PJ */
792 
793  /* PK */
802 
803  /* PL */
812 
813  /* PM */
816 
817  /* PN */
826 
827  /* PP */
834 
835  /* PQ */
841 
842  /* PR */
847 
848  /* FN */
1014 };
1015 
1016 static struct pinmux_cfg_reg pinmux_config_regs[] = {
1017  { PINMUX_CFG_REG("PACR", 0xffe70000, 16, 2) {
1026  },
1027  { PINMUX_CFG_REG("PBCR", 0xffe70002, 16, 2) {
1036  },
1037  { PINMUX_CFG_REG("PCCR", 0xffe70004, 16, 2) {
1046  },
1047  { PINMUX_CFG_REG("PDCR", 0xffe70006, 16, 2) {
1056  },
1057  { PINMUX_CFG_REG("PECR", 0xffe70008, 16, 2) {
1058  0, 0, 0, 0,
1059  0, 0, 0, 0,
1066  },
1067  { PINMUX_CFG_REG("PFCR", 0xffe7000a, 16, 2) {
1076  },
1077  { PINMUX_CFG_REG("PGCR", 0xffe7000c, 16, 2) {
1086  },
1087  { PINMUX_CFG_REG("PHCR", 0xffe7000e, 16, 2) {
1096  },
1097  { PINMUX_CFG_REG("PJCR", 0xffe70010, 16, 2) {
1106  },
1107  { PINMUX_CFG_REG("PKCR", 0xffe70012, 16, 2) {
1116  },
1117  { PINMUX_CFG_REG("PLCR", 0xffe70014, 16, 2) {
1126  },
1127  { PINMUX_CFG_REG("PMCR", 0xffe70016, 16, 2) {
1128  0, 0, 0, 0,
1129  0, 0, 0, 0,
1130  0, 0, 0, 0,
1131  0, 0, 0, 0,
1132  0, 0, 0, 0,
1133  0, 0, 0, 0,
1136  },
1137  { PINMUX_CFG_REG("PNCR", 0xffe70018, 16, 2) {
1146  },
1147  { PINMUX_CFG_REG("PPCR", 0xffe7001a, 16, 2) {
1148  0, 0, 0, 0,
1149  0, 0, 0, 0,
1156  },
1157  { PINMUX_CFG_REG("PQCR", 0xffe7001c, 16, 2) {
1158  0, 0, 0, 0,
1159  0, 0, 0, 0,
1160  0, 0, 0, 0,
1166  },
1167  { PINMUX_CFG_REG("PRCR", 0xffe7001e, 16, 2) {
1168  0, 0, 0, 0,
1169  0, 0, 0, 0,
1170  0, 0, 0, 0,
1171  0, 0, 0, 0,
1176  },
1177  { PINMUX_CFG_REG("P1MSELR", 0xffe70080, 16, 1) {
1188  P1MSEL5_0, 0,
1193  P1MSEL0_0, P1MSEL0_1 }
1194  },
1195  { PINMUX_CFG_REG("P2MSELR", 0xffe70082, 16, 1) {
1196  0, 0,
1197  0, 0,
1198  0, 0,
1199  0, 0,
1200  0, 0,
1201  0, 0,
1202  0, 0,
1203  0, 0,
1204  0, 0,
1205  0, 0,
1206  0, 0,
1207  0, 0,
1208  0, 0,
1211  P2MSEL0_0, P2MSEL0_1 }
1212  },
1213  {}
1214 };
1215 
1216 static struct pinmux_data_reg pinmux_data_regs[] = {
1217  { PINMUX_DATA_REG("PADR", 0xffe70020, 8) {
1220  },
1221  { PINMUX_DATA_REG("PBDR", 0xffe70022, 8) {
1224  },
1225  { PINMUX_DATA_REG("PCDR", 0xffe70024, 8) {
1228  },
1229  { PINMUX_DATA_REG("PDDR", 0xffe70026, 8) {
1232  },
1233  { PINMUX_DATA_REG("PEDR", 0xffe70028, 8) {
1234  0, 0, PE5_DATA, PE4_DATA,
1236  },
1237  { PINMUX_DATA_REG("PFDR", 0xffe7002a, 8) {
1240  },
1241  { PINMUX_DATA_REG("PGDR", 0xffe7002c, 8) {
1244  },
1245  { PINMUX_DATA_REG("PHDR", 0xffe7002e, 8) {
1248  },
1249  { PINMUX_DATA_REG("PJDR", 0xffe70030, 8) {
1252  },
1253  { PINMUX_DATA_REG("PKDR", 0xffe70032, 8) {
1256  },
1257  { PINMUX_DATA_REG("PLDR", 0xffe70034, 8) {
1260  },
1261  { PINMUX_DATA_REG("PMDR", 0xffe70036, 8) {
1262  0, 0, 0, 0,
1263  0, 0, PM1_DATA, PM0_DATA }
1264  },
1265  { PINMUX_DATA_REG("PNDR", 0xffe70038, 8) {
1268  },
1269  { PINMUX_DATA_REG("PPDR", 0xffe7003a, 8) {
1270  0, 0, PP5_DATA, PP4_DATA,
1272  },
1273  { PINMUX_DATA_REG("PQDR", 0xffe7003c, 8) {
1274  0, 0, 0, PQ4_DATA,
1276  },
1277  { PINMUX_DATA_REG("PRDR", 0xffe7003e, 8) {
1278  0, 0, 0, 0,
1280  },
1281  { },
1282 };
1283 
1284 static struct pinmux_info sh7785_pinmux_info = {
1285  .name = "sh7785_pfc",
1286  .reserved_id = PINMUX_RESERVED,
1287  .data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END },
1288  .input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END },
1290  .output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END },
1291  .mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END },
1292  .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },
1293 
1294  .first_gpio = GPIO_PA7,
1295  .last_gpio = GPIO_FN_IRQOUT,
1296 
1297  .gpios = pinmux_gpios,
1298  .cfg_regs = pinmux_config_regs,
1299  .data_regs = pinmux_data_regs,
1300 
1301  .gpio_data = pinmux_data,
1302  .gpio_data_size = ARRAY_SIZE(pinmux_data),
1303 };
1304 
1305 static int __init plat_pinmux_setup(void)
1306 {
1307  return register_pinmux(&sh7785_pinmux_info);
1308 }
1309 
1310 arch_initcall(plat_pinmux_setup);