1 /* SPDX-License-Identifier: GPL-2.0+ */
3 * (C) Copyright 2010 Samsung Electronics
4 * Minkyu Kang <mk7.kang@samsung.com>
7 #ifndef __ASM_ARCH_GPIO_H
8 #define __ASM_ARCH_GPIO_H
11 struct s5p_gpio_bank {
17 unsigned int pdn_pull;
18 unsigned char res1[8];
21 /* GPIO pins per bank */
22 #define GPIO_PER_BANK 8
24 /* A list of valid GPIO numbers for the asm-generic/gpio.h interface */
25 enum exynos4_gpio_pin {
26 /* GPIO_PART1_STARTS */
27 EXYNOS4_GPIO_A00, /* 0 */
35 EXYNOS4_GPIO_A10, /* 8 */
43 EXYNOS4_GPIO_B0, /* 16 0x10 */
51 EXYNOS4_GPIO_C00, /* 24 0x18 */
59 EXYNOS4_GPIO_C10, /* 32 0x20*/
67 EXYNOS4_GPIO_D00, /* 40 0x28 */
75 EXYNOS4_GPIO_D10, /* 48 0x30 */
83 EXYNOS4_GPIO_E00, /* 56 0x38 */
91 EXYNOS4_GPIO_E10, /* 64 0x40 */
99 EXYNOS4_GPIO_E20, /* 72 0x48 */
107 EXYNOS4_GPIO_E30, /* 80 0x50 */
115 EXYNOS4_GPIO_E40, /* 88 0x58 */
123 EXYNOS4_GPIO_F00, /* 96 0x60 */
131 EXYNOS4_GPIO_F10, /* 104 0x68 */
139 EXYNOS4_GPIO_F20, /* 112 0x70 */
147 EXYNOS4_GPIO_F30, /* 120 0x78 */
156 /* GPIO_PART2_STARTS */
157 EXYNOS4_GPIO_MAX_PORT_PART_1, /* 128 0x80 */
158 EXYNOS4_GPIO_J00 = EXYNOS4_GPIO_MAX_PORT_PART_1,
166 EXYNOS4_GPIO_J10, /* 136 0x88 */
174 EXYNOS4_GPIO_K00, /* 144 0x90 */
182 EXYNOS4_GPIO_K10, /* 152 0x98 */
190 EXYNOS4_GPIO_K20, /* 160 0xA0 */
198 EXYNOS4_GPIO_K30, /* 168 0xA8 */
206 EXYNOS4_GPIO_L00, /* 176 0xB0 */
214 EXYNOS4_GPIO_L10, /* 184 0xB8 */
222 EXYNOS4_GPIO_L20, /* 192 0xC0 */
230 EXYNOS4_GPIO_Y00, /* 200 0xC8 */
238 EXYNOS4_GPIO_Y10, /* 208 0xD0 */
246 EXYNOS4_GPIO_Y20, /* 216 0xD8 */
254 EXYNOS4_GPIO_Y30, /* 224 0xE0 */
262 EXYNOS4_GPIO_Y40, /* 232 0xE8 */
270 EXYNOS4_GPIO_Y50, /* 240 0xF0 */
278 EXYNOS4_GPIO_Y60, /* 248 0xF8 */
287 /* GPIO_PART2_1 STARTS */
288 EXYNOS4_GPIO_MAX_PORT_PART_2_0, /* 256 0x100 */
289 EXYNOS4_GPIO_X00 = EXYNOS4_GPIO_MAX_PORT_PART_2_0,
297 EXYNOS4_GPIO_X10, /* 264 0x108 */
305 EXYNOS4_GPIO_X20, /* 272 0x110 */
313 EXYNOS4_GPIO_X30, /* 280 0x118 */
322 /* GPIO_PART3_STARTS */
323 EXYNOS4_GPIO_MAX_PORT_PART_2_1, /* 288 0x120 */
324 EXYNOS4_GPIO_Z0 = EXYNOS4_GPIO_MAX_PORT_PART_2_1,
333 EXYNOS4_GPIO_MAX_PORT
336 enum exynos4X12_gpio_pin {
337 /* EXYNOS4X12_GPIO_PART1_0 starts here */
338 EXYNOS4X12_GPIO_A00, /* 0 */
346 EXYNOS4X12_GPIO_A10, /* 8 */
354 EXYNOS4X12_GPIO_B0, /* 16 0x10 */
362 EXYNOS4X12_GPIO_C00, /* 24 0x18 */
370 EXYNOS4X12_GPIO_C10, /* 32 0x20 */
378 EXYNOS4X12_GPIO_D00, /* 40 0x28 */
386 EXYNOS4X12_GPIO_D10, /* 48 0x30 */
394 EXYNOS4X12_GPIO_MAX_PORT_PART_1_0, /* 56 0x38 */
395 /* EXYNOS4X12_GPIO_PART1_1 starts here */
396 EXYNOS4X12_GPIO_F00 = EXYNOS4X12_GPIO_MAX_PORT_PART_1_0,
404 EXYNOS4X12_GPIO_F10, /* 64 0x40 */
412 EXYNOS4X12_GPIO_F20, /* 72 0x48 */
420 EXYNOS4X12_GPIO_F30, /* 80 0x50 */
428 EXYNOS4X12_GPIO_MAX_PORT_PART_1_1, /* 88 0x58 */
429 /* EXYNOS4X12_GPIO_PART1_2 starts here */
430 EXYNOS4X12_GPIO_J00 = EXYNOS4X12_GPIO_MAX_PORT_PART_1_1,
438 EXYNOS4X12_GPIO_J10, /* 96 0x60 */
448 * EXYNOS4X12_GPIO_PART2_0 is not used
449 * EXYNOS4X12_GPIO_PART2_1 starts here
451 EXYNOS4X12_GPIO_MAX_PORT_PART_1_2, /* 104 0x66 */
452 EXYNOS4X12_GPIO_K00 = EXYNOS4X12_GPIO_MAX_PORT_PART_1_2,
460 EXYNOS4X12_GPIO_K10, /* 112 0x70 */
468 EXYNOS4X12_GPIO_K20, /* 120 0x78 */
476 EXYNOS4X12_GPIO_K30, /* 128 0x80 */
484 EXYNOS4X12_GPIO_L00, /* 136 0x88 */
492 EXYNOS4X12_GPIO_L10, /* 144 0x90 */
500 EXYNOS4X12_GPIO_L20, /* 152 0x98 */
508 EXYNOS4X12_GPIO_Y00, /* 160 0xa0 */
516 EXYNOS4X12_GPIO_Y10, /* 168 0xa8 */
524 EXYNOS4X12_GPIO_Y20, /* 176 0xb0 */
532 EXYNOS4X12_GPIO_Y30, /* 184 0xb8 */
540 EXYNOS4X12_GPIO_Y40, /* 192 0xc0 */
548 EXYNOS4X12_GPIO_Y50, /* 200 0xc8 */
556 EXYNOS4X12_GPIO_Y60, /* 208 0xd0 */
564 EXYNOS4X12_GPIO_MAX_PORT_PART_2_1, /* 216 0xd8 */
565 /* EXYNOS4X12_GPIO_PART2_2 starts here */
566 EXYNOS4X12_GPIO_M00 = EXYNOS4X12_GPIO_MAX_PORT_PART_2_1,
574 EXYNOS4X12_GPIO_M10, /* 224 0xe0 */
582 EXYNOS4X12_GPIO_M20, /* 232 0xe8 */
590 EXYNOS4X12_GPIO_M30, /* 240 0xf0 */
598 EXYNOS4X12_GPIO_M40, /* 248 0xf8 */
606 EXYNOS4X12_GPIO_MAX_PORT_PART_2_2, /* 256 0x100 */
607 /* EXYNOS4X12_GPIO_PART2_3 starts here */
608 EXYNOS4X12_GPIO_X00 = EXYNOS4X12_GPIO_MAX_PORT_PART_2_2,
616 EXYNOS4X12_GPIO_X10, /* 264 0x108 */
624 EXYNOS4X12_GPIO_X20, /* 272 0x110 */
632 EXYNOS4X12_GPIO_X30, /* 280 0x118 */
641 /* EXYNOS4X12_GPIO_PART3 starts here */
642 EXYNOS4X12_GPIO_MAX_PORT_PART_2_3, /* 288 0x120 */
643 EXYNOS4X12_GPIO_Z0 = EXYNOS4X12_GPIO_MAX_PORT_PART_2_3,
652 /* EXYNOS4X12_GPIO_PART4 starts here */
653 EXYNOS4X12_GPIO_MAX_PORT_PART_3,/* 296 0x128 */
654 EXYNOS4X12_GPIO_V00 = EXYNOS4X12_GPIO_MAX_PORT_PART_3,
662 EXYNOS4X12_GPIO_V10, /* 304 0x130 */
670 EXYNOS4X12_GPIO_V20, /* 312 0x138 */
678 EXYNOS4X12_GPIO_V30, /* 320 0x140 */
686 EXYNOS4X12_GPIO_V40, /* 328 0x148 */
695 EXYNOS4X12_GPIO_MAX_PORT
698 enum exynos5_gpio_pin {
699 /* GPIO_PART1_STARTS */
700 EXYNOS5_GPIO_A00, /* 0 */
708 EXYNOS5_GPIO_A10, /* 8 */
716 EXYNOS5_GPIO_A20, /* 16 0x10 */
724 EXYNOS5_GPIO_B00, /* 24 0x18 */
732 EXYNOS5_GPIO_B10, /* 32 0x20 */
740 EXYNOS5_GPIO_B20, /* 40 0x28 */
748 EXYNOS5_GPIO_B30, /* 48 0x39 */
756 EXYNOS5_GPIO_C00, /* 56 0x38 */
764 EXYNOS5_GPIO_C10, /* 64 0x40 */
772 EXYNOS5_GPIO_C20, /* 72 0x48 */
780 EXYNOS5_GPIO_C30, /* 80 0x50 */
788 EXYNOS5_GPIO_D00, /* 88 0x58 */
796 EXYNOS5_GPIO_D10, /* 96 0x60 */
804 EXYNOS5_GPIO_Y00, /* 104 0x68 */
812 EXYNOS5_GPIO_Y10, /* 112 0x70 */
820 EXYNOS5_GPIO_Y20, /* 120 0x78 */
828 EXYNOS5_GPIO_Y30, /* 128 0x80 */
836 EXYNOS5_GPIO_Y40, /* 136 0x88 */
844 EXYNOS5_GPIO_Y50, /* 144 0x90 */
852 EXYNOS5_GPIO_Y60, /* 152 0x98 */
861 /* GPIO_PART2_STARTS */
862 EXYNOS5_GPIO_MAX_PORT_PART_1, /* 160 0xa0 */
863 EXYNOS5_GPIO_C40 = EXYNOS5_GPIO_MAX_PORT_PART_1,
872 /* GPIO_PART3_STARTS */
873 EXYNOS5_GPIO_MAX_PORT_PART_2, /* 168 0xa8 */
874 EXYNOS5_GPIO_X00 = EXYNOS5_GPIO_MAX_PORT_PART_2,
882 EXYNOS5_GPIO_X10, /* 176 0xb0 */
890 EXYNOS5_GPIO_X20, /* 184 0xb8 */
898 EXYNOS5_GPIO_X30, /* 192 0xc0 */
907 /* GPIO_PART4_STARTS */
908 EXYNOS5_GPIO_MAX_PORT_PART_3, /* 200 0xc8 */
909 EXYNOS5_GPIO_E00 = EXYNOS5_GPIO_MAX_PORT_PART_3,
917 EXYNOS5_GPIO_E10, /* 208 0xd0 */
925 EXYNOS5_GPIO_F00, /* 216 0xd8 */
933 EXYNOS5_GPIO_F10, /* 224 0xe0 */
941 EXYNOS5_GPIO_G00, /* 232 0xe8 */
949 EXYNOS5_GPIO_G10, /* 240 0xf0 */
957 EXYNOS5_GPIO_G20, /* 248 0xf8 */
965 EXYNOS5_GPIO_H00, /* 256 0x100 */
973 EXYNOS5_GPIO_H10, /* 264 0x108 */
982 /* GPIO_PART4_STARTS */
983 EXYNOS5_GPIO_MAX_PORT_PART_4, /* 272 0x110 */
984 EXYNOS5_GPIO_V00 = EXYNOS5_GPIO_MAX_PORT_PART_4,
992 EXYNOS5_GPIO_V10, /* 280 0x118 */
1001 /* GPIO_PART5_STARTS */
1002 EXYNOS5_GPIO_MAX_PORT_PART_5, /* 288 0x120 */
1003 EXYNOS5_GPIO_V20 = EXYNOS5_GPIO_MAX_PORT_PART_5,
1011 EXYNOS5_GPIO_V30, /* 296 0x128 */
1020 /* GPIO_PART6_STARTS */
1021 EXYNOS5_GPIO_MAX_PORT_PART_6, /* 304 0x130 */
1022 EXYNOS5_GPIO_V40 = EXYNOS5_GPIO_MAX_PORT_PART_6,
1031 /* GPIO_PART7_STARTS */ /* 312 0x138 */
1032 EXYNOS5_GPIO_MAX_PORT_PART_7,
1033 EXYNOS5_GPIO_Z0 = EXYNOS5_GPIO_MAX_PORT_PART_7,
1040 EXYNOS5_GPIO_MAX_PORT
1043 enum exynos5420_gpio_pin {
1044 /* GPIO_PART1_STARTS */
1045 EXYNOS5420_GPIO_A00, /* 0 */
1046 EXYNOS5420_GPIO_A01,
1047 EXYNOS5420_GPIO_A02,
1048 EXYNOS5420_GPIO_A03,
1049 EXYNOS5420_GPIO_A04,
1050 EXYNOS5420_GPIO_A05,
1051 EXYNOS5420_GPIO_A06,
1052 EXYNOS5420_GPIO_A07,
1053 EXYNOS5420_GPIO_A10, /* 8 */
1054 EXYNOS5420_GPIO_A11,
1055 EXYNOS5420_GPIO_A12,
1056 EXYNOS5420_GPIO_A13,
1057 EXYNOS5420_GPIO_A14,
1058 EXYNOS5420_GPIO_A15,
1059 EXYNOS5420_GPIO_A16,
1060 EXYNOS5420_GPIO_A17,
1061 EXYNOS5420_GPIO_A20, /* 16 0x10 */
1062 EXYNOS5420_GPIO_A21,
1063 EXYNOS5420_GPIO_A22,
1064 EXYNOS5420_GPIO_A23,
1065 EXYNOS5420_GPIO_A24,
1066 EXYNOS5420_GPIO_A25,
1067 EXYNOS5420_GPIO_A26,
1068 EXYNOS5420_GPIO_A27,
1069 EXYNOS5420_GPIO_B00, /* 24 0x18 */
1070 EXYNOS5420_GPIO_B01,
1071 EXYNOS5420_GPIO_B02,
1072 EXYNOS5420_GPIO_B03,
1073 EXYNOS5420_GPIO_B04,
1074 EXYNOS5420_GPIO_B05,
1075 EXYNOS5420_GPIO_B06,
1076 EXYNOS5420_GPIO_B07,
1077 EXYNOS5420_GPIO_B10, /* 32 0x20 */
1078 EXYNOS5420_GPIO_B11,
1079 EXYNOS5420_GPIO_B12,
1080 EXYNOS5420_GPIO_B13,
1081 EXYNOS5420_GPIO_B14,
1082 EXYNOS5420_GPIO_B15,
1083 EXYNOS5420_GPIO_B16,
1084 EXYNOS5420_GPIO_B17,
1085 EXYNOS5420_GPIO_B20, /* 40 0x28 */
1086 EXYNOS5420_GPIO_B21,
1087 EXYNOS5420_GPIO_B22,
1088 EXYNOS5420_GPIO_B23,
1089 EXYNOS5420_GPIO_B24,
1090 EXYNOS5420_GPIO_B25,
1091 EXYNOS5420_GPIO_B26,
1092 EXYNOS5420_GPIO_B27,
1093 EXYNOS5420_GPIO_B30, /* 48 0x30 */
1094 EXYNOS5420_GPIO_B31,
1095 EXYNOS5420_GPIO_B32,
1096 EXYNOS5420_GPIO_B33,
1097 EXYNOS5420_GPIO_B34,
1098 EXYNOS5420_GPIO_B35,
1099 EXYNOS5420_GPIO_B36,
1100 EXYNOS5420_GPIO_B37,
1101 EXYNOS5420_GPIO_B40, /* 56 0x38 */
1102 EXYNOS5420_GPIO_B41,
1103 EXYNOS5420_GPIO_B42,
1104 EXYNOS5420_GPIO_B43,
1105 EXYNOS5420_GPIO_B44,
1106 EXYNOS5420_GPIO_B45,
1107 EXYNOS5420_GPIO_B46,
1108 EXYNOS5420_GPIO_B47,
1109 EXYNOS5420_GPIO_H00, /* 64 0x40 */
1110 EXYNOS5420_GPIO_H01,
1111 EXYNOS5420_GPIO_H02,
1112 EXYNOS5420_GPIO_H03,
1113 EXYNOS5420_GPIO_H04,
1114 EXYNOS5420_GPIO_H05,
1115 EXYNOS5420_GPIO_H06,
1116 EXYNOS5420_GPIO_H07,
1118 /* GPIO PART 2 STARTS*/
1119 EXYNOS5420_GPIO_MAX_PORT_PART_1,/* 72 0x48 */
1120 EXYNOS5420_GPIO_Y70 = EXYNOS5420_GPIO_MAX_PORT_PART_1,
1121 EXYNOS5420_GPIO_Y71,
1122 EXYNOS5420_GPIO_Y72,
1123 EXYNOS5420_GPIO_Y73,
1124 EXYNOS5420_GPIO_Y74,
1125 EXYNOS5420_GPIO_Y75,
1126 EXYNOS5420_GPIO_Y76,
1127 EXYNOS5420_GPIO_Y77,
1129 /* GPIO PART 3 STARTS*/
1130 EXYNOS5420_GPIO_MAX_PORT_PART_2,/* 80 0x50 */
1131 EXYNOS5420_GPIO_X00 = EXYNOS5420_GPIO_MAX_PORT_PART_2,
1132 EXYNOS5420_GPIO_X01,
1133 EXYNOS5420_GPIO_X02,
1134 EXYNOS5420_GPIO_X03,
1135 EXYNOS5420_GPIO_X04,
1136 EXYNOS5420_GPIO_X05,
1137 EXYNOS5420_GPIO_X06,
1138 EXYNOS5420_GPIO_X07,
1139 EXYNOS5420_GPIO_X10, /* 88 0x58 */
1140 EXYNOS5420_GPIO_X11,
1141 EXYNOS5420_GPIO_X12,
1142 EXYNOS5420_GPIO_X13,
1143 EXYNOS5420_GPIO_X14,
1144 EXYNOS5420_GPIO_X15,
1145 EXYNOS5420_GPIO_X16,
1146 EXYNOS5420_GPIO_X17,
1147 EXYNOS5420_GPIO_X20, /* 96 0x60 */
1148 EXYNOS5420_GPIO_X21,
1149 EXYNOS5420_GPIO_X22,
1150 EXYNOS5420_GPIO_X23,
1151 EXYNOS5420_GPIO_X24,
1152 EXYNOS5420_GPIO_X25,
1153 EXYNOS5420_GPIO_X26,
1154 EXYNOS5420_GPIO_X27,
1155 EXYNOS5420_GPIO_X30, /* 104 0x68 */
1156 EXYNOS5420_GPIO_X31,
1157 EXYNOS5420_GPIO_X32,
1158 EXYNOS5420_GPIO_X33,
1159 EXYNOS5420_GPIO_X34,
1160 EXYNOS5420_GPIO_X35,
1161 EXYNOS5420_GPIO_X36,
1162 EXYNOS5420_GPIO_X37,
1164 /* GPIO PART 4 STARTS*/
1165 EXYNOS5420_GPIO_MAX_PORT_PART_3,/* 112 0x70 */
1166 EXYNOS5420_GPIO_C00 = EXYNOS5420_GPIO_MAX_PORT_PART_3,
1167 EXYNOS5420_GPIO_C01,
1168 EXYNOS5420_GPIO_C02,
1169 EXYNOS5420_GPIO_C03,
1170 EXYNOS5420_GPIO_C04,
1171 EXYNOS5420_GPIO_C05,
1172 EXYNOS5420_GPIO_C06,
1173 EXYNOS5420_GPIO_C07,
1174 EXYNOS5420_GPIO_C10, /* 120 0x78 */
1175 EXYNOS5420_GPIO_C11,
1176 EXYNOS5420_GPIO_C12,
1177 EXYNOS5420_GPIO_C13,
1178 EXYNOS5420_GPIO_C14,
1179 EXYNOS5420_GPIO_C15,
1180 EXYNOS5420_GPIO_C16,
1181 EXYNOS5420_GPIO_C17,
1182 EXYNOS5420_GPIO_C20, /* 128 0x80 */
1183 EXYNOS5420_GPIO_C21,
1184 EXYNOS5420_GPIO_C22,
1185 EXYNOS5420_GPIO_C23,
1186 EXYNOS5420_GPIO_C24,
1187 EXYNOS5420_GPIO_C25,
1188 EXYNOS5420_GPIO_C26,
1189 EXYNOS5420_GPIO_C27,
1190 EXYNOS5420_GPIO_C30, /* 136 0x88 */
1191 EXYNOS5420_GPIO_C31,
1192 EXYNOS5420_GPIO_C32,
1193 EXYNOS5420_GPIO_C33,
1194 EXYNOS5420_GPIO_C34,
1195 EXYNOS5420_GPIO_C35,
1196 EXYNOS5420_GPIO_C36,
1197 EXYNOS5420_GPIO_C37,
1198 EXYNOS5420_GPIO_C40, /* 144 0x90 */
1199 EXYNOS5420_GPIO_C41,
1200 EXYNOS5420_GPIO_C42,
1201 EXYNOS5420_GPIO_C43,
1202 EXYNOS5420_GPIO_C44,
1203 EXYNOS5420_GPIO_C45,
1204 EXYNOS5420_GPIO_C46,
1205 EXYNOS5420_GPIO_C47,
1206 EXYNOS5420_GPIO_D10, /* 152 0x98 */
1207 EXYNOS5420_GPIO_D11,
1208 EXYNOS5420_GPIO_D12,
1209 EXYNOS5420_GPIO_D13,
1210 EXYNOS5420_GPIO_D14,
1211 EXYNOS5420_GPIO_D15,
1212 EXYNOS5420_GPIO_D16,
1213 EXYNOS5420_GPIO_D17,
1214 EXYNOS5420_GPIO_Y00, /* 160 0xa0 */
1215 EXYNOS5420_GPIO_Y01,
1216 EXYNOS5420_GPIO_Y02,
1217 EXYNOS5420_GPIO_Y03,
1218 EXYNOS5420_GPIO_Y04,
1219 EXYNOS5420_GPIO_Y05,
1220 EXYNOS5420_GPIO_Y06,
1221 EXYNOS5420_GPIO_Y07,
1222 EXYNOS5420_GPIO_Y10, /* 168 0xa8 */
1223 EXYNOS5420_GPIO_Y11,
1224 EXYNOS5420_GPIO_Y12,
1225 EXYNOS5420_GPIO_Y13,
1226 EXYNOS5420_GPIO_Y14,
1227 EXYNOS5420_GPIO_Y15,
1228 EXYNOS5420_GPIO_Y16,
1229 EXYNOS5420_GPIO_Y17,
1230 EXYNOS5420_GPIO_Y20, /* 176 0xb0 */
1231 EXYNOS5420_GPIO_Y21,
1232 EXYNOS5420_GPIO_Y22,
1233 EXYNOS5420_GPIO_Y23,
1234 EXYNOS5420_GPIO_Y24,
1235 EXYNOS5420_GPIO_Y25,
1236 EXYNOS5420_GPIO_Y26,
1237 EXYNOS5420_GPIO_Y27,
1238 EXYNOS5420_GPIO_Y30, /* 184 0xb8 */
1239 EXYNOS5420_GPIO_Y31,
1240 EXYNOS5420_GPIO_Y32,
1241 EXYNOS5420_GPIO_Y33,
1242 EXYNOS5420_GPIO_Y34,
1243 EXYNOS5420_GPIO_Y35,
1244 EXYNOS5420_GPIO_Y36,
1245 EXYNOS5420_GPIO_Y37,
1246 EXYNOS5420_GPIO_Y40, /* 192 0xc0 */
1247 EXYNOS5420_GPIO_Y41,
1248 EXYNOS5420_GPIO_Y42,
1249 EXYNOS5420_GPIO_Y43,
1250 EXYNOS5420_GPIO_Y44,
1251 EXYNOS5420_GPIO_Y45,
1252 EXYNOS5420_GPIO_Y46,
1253 EXYNOS5420_GPIO_Y47,
1254 EXYNOS5420_GPIO_Y50, /* 200 0xc8 */
1255 EXYNOS5420_GPIO_Y51,
1256 EXYNOS5420_GPIO_Y52,
1257 EXYNOS5420_GPIO_Y53,
1258 EXYNOS5420_GPIO_Y54,
1259 EXYNOS5420_GPIO_Y55,
1260 EXYNOS5420_GPIO_Y56,
1261 EXYNOS5420_GPIO_Y57,
1262 EXYNOS5420_GPIO_Y60, /* 208 0xd0 */
1263 EXYNOS5420_GPIO_Y61,
1264 EXYNOS5420_GPIO_Y62,
1265 EXYNOS5420_GPIO_Y63,
1266 EXYNOS5420_GPIO_Y64,
1267 EXYNOS5420_GPIO_Y65,
1268 EXYNOS5420_GPIO_Y66,
1269 EXYNOS5420_GPIO_Y67,
1271 /* GPIO_PART5_STARTS */
1272 EXYNOS5420_GPIO_MAX_PORT_PART_4,/* 216 0xd8 */
1273 EXYNOS5420_GPIO_E00 = EXYNOS5420_GPIO_MAX_PORT_PART_4,
1274 EXYNOS5420_GPIO_E01,
1275 EXYNOS5420_GPIO_E02,
1276 EXYNOS5420_GPIO_E03,
1277 EXYNOS5420_GPIO_E04,
1278 EXYNOS5420_GPIO_E05,
1279 EXYNOS5420_GPIO_E06,
1280 EXYNOS5420_GPIO_E07,
1281 EXYNOS5420_GPIO_E10, /* 224 0xe0 */
1282 EXYNOS5420_GPIO_E11,
1283 EXYNOS5420_GPIO_E12,
1284 EXYNOS5420_GPIO_E13,
1285 EXYNOS5420_GPIO_E14,
1286 EXYNOS5420_GPIO_E15,
1287 EXYNOS5420_GPIO_E16,
1288 EXYNOS5420_GPIO_E17,
1289 EXYNOS5420_GPIO_F00, /* 232 0xe8 */
1290 EXYNOS5420_GPIO_F01,
1291 EXYNOS5420_GPIO_F02,
1292 EXYNOS5420_GPIO_F03,
1293 EXYNOS5420_GPIO_F04,
1294 EXYNOS5420_GPIO_F05,
1295 EXYNOS5420_GPIO_F06,
1296 EXYNOS5420_GPIO_F07,
1297 EXYNOS5420_GPIO_F10, /* 240 0xf0 */
1298 EXYNOS5420_GPIO_F11,
1299 EXYNOS5420_GPIO_F12,
1300 EXYNOS5420_GPIO_F13,
1301 EXYNOS5420_GPIO_F14,
1302 EXYNOS5420_GPIO_F15,
1303 EXYNOS5420_GPIO_F16,
1304 EXYNOS5420_GPIO_F17,
1305 EXYNOS5420_GPIO_G00, /* 248 0xf8 */
1306 EXYNOS5420_GPIO_G01,
1307 EXYNOS5420_GPIO_G02,
1308 EXYNOS5420_GPIO_G03,
1309 EXYNOS5420_GPIO_G04,
1310 EXYNOS5420_GPIO_G05,
1311 EXYNOS5420_GPIO_G06,
1312 EXYNOS5420_GPIO_G07,
1313 EXYNOS5420_GPIO_G10, /* 256 0x100 */
1314 EXYNOS5420_GPIO_G11,
1315 EXYNOS5420_GPIO_G12,
1316 EXYNOS5420_GPIO_G13,
1317 EXYNOS5420_GPIO_G14,
1318 EXYNOS5420_GPIO_G15,
1319 EXYNOS5420_GPIO_G16,
1320 EXYNOS5420_GPIO_G17,
1321 EXYNOS5420_GPIO_G20, /* 264 0x108 */
1322 EXYNOS5420_GPIO_G21,
1323 EXYNOS5420_GPIO_G22,
1324 EXYNOS5420_GPIO_G23,
1325 EXYNOS5420_GPIO_G24,
1326 EXYNOS5420_GPIO_G25,
1327 EXYNOS5420_GPIO_G26,
1328 EXYNOS5420_GPIO_G27,
1329 EXYNOS5420_GPIO_J40, /* 272 0x110 */
1330 EXYNOS5420_GPIO_J41,
1331 EXYNOS5420_GPIO_J42,
1332 EXYNOS5420_GPIO_J43,
1333 EXYNOS5420_GPIO_J44,
1334 EXYNOS5420_GPIO_J45,
1335 EXYNOS5420_GPIO_J46,
1336 EXYNOS5420_GPIO_J47,
1338 /* GPIO_PART6_STARTS */
1339 EXYNOS5420_GPIO_MAX_PORT_PART_5,/* 280 0x118 */
1340 EXYNOS5420_GPIO_Z0 = EXYNOS5420_GPIO_MAX_PORT_PART_5,
1347 EXYNOS5420_GPIO_MAX_PORT
1351 unsigned long reg_addr; /* Address of register for this part */
1352 unsigned int max_gpio; /* Maximum GPIO in this part */
1355 #define EXYNOS4_GPIO_NUM_PARTS 4
1356 static struct gpio_info exynos4_gpio_data[EXYNOS4_GPIO_NUM_PARTS] = {
1357 { EXYNOS4_GPIO_PART1_BASE, EXYNOS4_GPIO_MAX_PORT_PART_1 },
1358 { EXYNOS4_GPIO_PART2_0, EXYNOS4_GPIO_MAX_PORT_PART_2_0 },
1359 { EXYNOS4_GPIO_PART2_1, EXYNOS4_GPIO_MAX_PORT_PART_2_1 },
1360 { EXYNOS4_GPIO_PART3_BASE, EXYNOS4_GPIO_MAX_PORT },
1363 #define EXYNOS4X12_GPIO_NUM_PARTS 8
1364 static struct gpio_info exynos4x12_gpio_data[EXYNOS4X12_GPIO_NUM_PARTS] = {
1365 { EXYNOS4X12_GPIO_PART1_0, EXYNOS4X12_GPIO_MAX_PORT_PART_1_0 },
1366 { EXYNOS4X12_GPIO_PART1_1, EXYNOS4X12_GPIO_MAX_PORT_PART_1_1 },
1367 { EXYNOS4X12_GPIO_PART1_2, EXYNOS4X12_GPIO_MAX_PORT_PART_1_2 },
1368 { EXYNOS4X12_GPIO_PART2_1, EXYNOS4X12_GPIO_MAX_PORT_PART_2_1 },
1369 { EXYNOS4X12_GPIO_PART2_2, EXYNOS4X12_GPIO_MAX_PORT_PART_2_2 },
1370 { EXYNOS4X12_GPIO_PART2_3, EXYNOS4X12_GPIO_MAX_PORT_PART_2_3 },
1371 { EXYNOS4X12_GPIO_PART3_BASE, EXYNOS4X12_GPIO_MAX_PORT_PART_3 },
1372 { EXYNOS4X12_GPIO_PART4_BASE, EXYNOS4X12_GPIO_MAX_PORT },
1375 #define EXYNOS5_GPIO_NUM_PARTS 8
1376 static struct gpio_info exynos5_gpio_data[EXYNOS5_GPIO_NUM_PARTS] = {
1377 { EXYNOS5_GPIO_PART1_BASE, EXYNOS5_GPIO_MAX_PORT_PART_1 },
1378 { EXYNOS5_GPIO_PART2_BASE, EXYNOS5_GPIO_MAX_PORT_PART_2 },
1379 { EXYNOS5_GPIO_PART3_BASE, EXYNOS5_GPIO_MAX_PORT_PART_3 },
1380 { EXYNOS5_GPIO_PART4_BASE, EXYNOS5_GPIO_MAX_PORT_PART_4 },
1381 { EXYNOS5_GPIO_PART5_BASE, EXYNOS5_GPIO_MAX_PORT_PART_5 },
1382 { EXYNOS5_GPIO_PART6_BASE, EXYNOS5_GPIO_MAX_PORT_PART_6 },
1383 { EXYNOS5_GPIO_PART7_BASE, EXYNOS5_GPIO_MAX_PORT_PART_7 },
1384 { EXYNOS5_GPIO_PART8_BASE, EXYNOS5_GPIO_MAX_PORT },
1387 #define EXYNOS5420_GPIO_NUM_PARTS 6
1388 static struct gpio_info exynos5420_gpio_data[EXYNOS5420_GPIO_NUM_PARTS] = {
1389 { EXYNOS5420_GPIO_PART1_BASE, EXYNOS5420_GPIO_MAX_PORT_PART_1 },
1390 { EXYNOS5420_GPIO_PART2_BASE, EXYNOS5420_GPIO_MAX_PORT_PART_2 },
1391 { EXYNOS5420_GPIO_PART3_BASE, EXYNOS5420_GPIO_MAX_PORT_PART_3 },
1392 { EXYNOS5420_GPIO_PART4_BASE, EXYNOS5420_GPIO_MAX_PORT_PART_4 },
1393 { EXYNOS5420_GPIO_PART5_BASE, EXYNOS5420_GPIO_MAX_PORT_PART_5 },
1394 { EXYNOS5420_GPIO_PART6_BASE, EXYNOS5420_GPIO_MAX_PORT },
1397 static inline struct gpio_info *get_gpio_data(void)
1399 if (cpu_is_exynos5()) {
1400 if (proid_is_exynos5420() || proid_is_exynos5422())
1401 return exynos5420_gpio_data;
1403 return exynos5_gpio_data;
1404 } else if (cpu_is_exynos4()) {
1405 if (proid_is_exynos4412())
1406 return exynos4x12_gpio_data;
1408 return exynos4_gpio_data;
1414 static inline unsigned int get_bank_num(void)
1416 if (cpu_is_exynos5()) {
1417 if (proid_is_exynos5420() || proid_is_exynos5422())
1418 return EXYNOS5420_GPIO_NUM_PARTS;
1420 return EXYNOS5_GPIO_NUM_PARTS;
1421 } else if (cpu_is_exynos4()) {
1422 if (proid_is_exynos4412())
1423 return EXYNOS4X12_GPIO_NUM_PARTS;
1425 return EXYNOS4_GPIO_NUM_PARTS;
1432 * This structure helps mapping symbolic GPIO names into indices from
1433 * exynos5_gpio_pin/exynos5420_gpio_pin enums.
1435 * By convention, symbolic GPIO name is defined as follows:
1437 * g[p]<bank><set><bit>, where
1439 * <bank> - a single character bank name, as defined by the SOC
1440 * <set> - a single digit set number
1441 * <bit> - bit number within the set (in 0..7 range).
1443 * <set><bit> essentially form an octal number of the GPIO pin within the bank
1444 * space. On the 5420 architecture some banks' sets do not start not from zero
1445 * ('d' starts from 1 and 'j' starts from 4). To compensate for that and
1446 * maintain flat number space withoout holes, those banks use offsets to be
1447 * deducted from the pin number.
1449 struct gpio_name_num_table {
1450 char bank; /* bank name symbol */
1451 unsigned int bank_size; /* total number of pins in the bank */
1452 char bank_offset; /* offset of the first bank's pin */
1453 unsigned int base; /* index of the first bank's pin in the enum */
1456 #define GPIO_ENTRY(name, base, top, offset) { name, top - base, offset, base }
1457 static const struct gpio_name_num_table exynos4_gpio_table[] = {
1458 GPIO_ENTRY('a', EXYNOS4_GPIO_A00, EXYNOS4_GPIO_B0, 0),
1459 GPIO_ENTRY('b', EXYNOS4_GPIO_B0, EXYNOS4_GPIO_C00, 0),
1460 GPIO_ENTRY('c', EXYNOS4_GPIO_C00, EXYNOS4_GPIO_D00, 0),
1461 GPIO_ENTRY('d', EXYNOS4_GPIO_D00, EXYNOS4_GPIO_E00, 0),
1462 GPIO_ENTRY('e', EXYNOS4_GPIO_E00, EXYNOS4_GPIO_F00, 0),
1463 GPIO_ENTRY('f', EXYNOS4_GPIO_F00, EXYNOS4_GPIO_J00, 0),
1464 GPIO_ENTRY('j', EXYNOS4_GPIO_J00, EXYNOS4_GPIO_K00, 0),
1465 GPIO_ENTRY('k', EXYNOS4_GPIO_K00, EXYNOS4_GPIO_L00, 0),
1466 GPIO_ENTRY('l', EXYNOS4_GPIO_L00, EXYNOS4_GPIO_Y00, 0),
1467 GPIO_ENTRY('y', EXYNOS4_GPIO_Y00, EXYNOS4_GPIO_X00, 0),
1468 GPIO_ENTRY('x', EXYNOS4_GPIO_X00, EXYNOS4_GPIO_Z0, 0),
1469 GPIO_ENTRY('z', EXYNOS4_GPIO_Z0, EXYNOS4_GPIO_MAX_PORT, 0),
1473 static const struct gpio_name_num_table exynos4x12_gpio_table[] = {
1474 GPIO_ENTRY('a', EXYNOS4X12_GPIO_A00, EXYNOS4X12_GPIO_B0, 0),
1475 GPIO_ENTRY('b', EXYNOS4X12_GPIO_B0, EXYNOS4X12_GPIO_C00, 0),
1476 GPIO_ENTRY('c', EXYNOS4X12_GPIO_C00, EXYNOS4X12_GPIO_D00, 0),
1477 GPIO_ENTRY('d', EXYNOS4X12_GPIO_D00, EXYNOS4X12_GPIO_F00, 0),
1478 GPIO_ENTRY('f', EXYNOS4X12_GPIO_F00, EXYNOS4X12_GPIO_J00, 0),
1479 GPIO_ENTRY('j', EXYNOS4X12_GPIO_J00, EXYNOS4X12_GPIO_K00, 0),
1480 GPIO_ENTRY('k', EXYNOS4X12_GPIO_K00, EXYNOS4X12_GPIO_L00, 0),
1481 GPIO_ENTRY('l', EXYNOS4X12_GPIO_L00, EXYNOS4X12_GPIO_Y00, 0),
1482 GPIO_ENTRY('y', EXYNOS4X12_GPIO_Y00, EXYNOS4X12_GPIO_M00, 0),
1483 GPIO_ENTRY('m', EXYNOS4X12_GPIO_M00, EXYNOS4X12_GPIO_X00, 0),
1484 GPIO_ENTRY('x', EXYNOS4X12_GPIO_X00, EXYNOS4X12_GPIO_Z0, 0),
1485 GPIO_ENTRY('z', EXYNOS4X12_GPIO_Z0, EXYNOS4X12_GPIO_V00, 0),
1486 GPIO_ENTRY('v', EXYNOS4X12_GPIO_V00, EXYNOS4X12_GPIO_MAX_PORT, 0),
1490 static const struct gpio_name_num_table exynos5_gpio_table[] = {
1491 GPIO_ENTRY('a', EXYNOS5_GPIO_A00, EXYNOS5_GPIO_B00, 0),
1492 GPIO_ENTRY('b', EXYNOS5_GPIO_B00, EXYNOS5_GPIO_C00, 0),
1493 GPIO_ENTRY('c', EXYNOS5_GPIO_C00, EXYNOS5_GPIO_D00, 0),
1494 GPIO_ENTRY('d', EXYNOS5_GPIO_D00, EXYNOS5_GPIO_Y00, 0),
1495 GPIO_ENTRY('y', EXYNOS5_GPIO_Y00, EXYNOS5_GPIO_C40, 0),
1496 GPIO_ENTRY('x', EXYNOS5_GPIO_X00, EXYNOS5_GPIO_E00, 0),
1497 GPIO_ENTRY('e', EXYNOS5_GPIO_E00, EXYNOS5_GPIO_F00, 0),
1498 GPIO_ENTRY('f', EXYNOS5_GPIO_F00, EXYNOS5_GPIO_G00, 0),
1499 GPIO_ENTRY('g', EXYNOS5_GPIO_G00, EXYNOS5_GPIO_H00, 0),
1500 GPIO_ENTRY('h', EXYNOS5_GPIO_H00, EXYNOS5_GPIO_V00, 0),
1501 GPIO_ENTRY('v', EXYNOS5_GPIO_V00, EXYNOS5_GPIO_Z0, 0),
1502 GPIO_ENTRY('z', EXYNOS5_GPIO_Z0, EXYNOS5_GPIO_MAX_PORT, 0),
1506 static const struct gpio_name_num_table exynos5420_gpio_table[] = {
1507 GPIO_ENTRY('a', EXYNOS5420_GPIO_A00, EXYNOS5420_GPIO_B00, 0),
1508 GPIO_ENTRY('b', EXYNOS5420_GPIO_B00, EXYNOS5420_GPIO_H00, 0),
1509 GPIO_ENTRY('h', EXYNOS5420_GPIO_H00, EXYNOS5420_GPIO_Y70, 0),
1510 GPIO_ENTRY('x', EXYNOS5420_GPIO_X00, EXYNOS5420_GPIO_C00, 0),
1511 GPIO_ENTRY('c', EXYNOS5420_GPIO_C00, EXYNOS5420_GPIO_D10, 0),
1512 GPIO_ENTRY('d', EXYNOS5420_GPIO_D10, EXYNOS5420_GPIO_Y00, 010),
1513 GPIO_ENTRY('y', EXYNOS5420_GPIO_Y00, EXYNOS5420_GPIO_E00, 0),
1514 GPIO_ENTRY('e', EXYNOS5420_GPIO_E00, EXYNOS5420_GPIO_F00, 0),
1515 GPIO_ENTRY('f', EXYNOS5420_GPIO_F00, EXYNOS5420_GPIO_G00, 0),
1516 GPIO_ENTRY('g', EXYNOS5420_GPIO_G00, EXYNOS5420_GPIO_J40, 0),
1517 GPIO_ENTRY('j', EXYNOS5420_GPIO_J40, EXYNOS5420_GPIO_Z0, 040),
1518 GPIO_ENTRY('z', EXYNOS5420_GPIO_Z0, EXYNOS5420_GPIO_MAX_PORT, 0),
1522 void gpio_cfg_pin(int gpio, int cfg);
1523 void gpio_set_pull(int gpio, int mode);
1524 void gpio_set_drv(int gpio, int mode);
1525 void gpio_set_rate(int gpio, int mode);
1526 int s5p_gpio_get_pin(unsigned gpio);
1529 /* Pin configurations */
1530 #define S5P_GPIO_INPUT 0x0
1531 #define S5P_GPIO_OUTPUT 0x1
1532 #define S5P_GPIO_IRQ 0xf
1533 #define S5P_GPIO_FUNC(x) (x)
1536 #define S5P_GPIO_PULL_NONE 0x0
1537 #define S5P_GPIO_PULL_DOWN 0x1
1538 #define S5P_GPIO_PULL_UP 0x3
1540 /* Drive Strength level */
1541 #define S5P_GPIO_DRV_1X 0x0
1542 #define S5P_GPIO_DRV_3X 0x1
1543 #define S5P_GPIO_DRV_2X 0x2
1544 #define S5P_GPIO_DRV_4X 0x3
1545 #define S5P_GPIO_DRV_FAST 0x0
1546 #define S5P_GPIO_DRV_SLOW 0x1