1 /* 2 * Copyright (c) 2020, MediaTek Inc. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef MT_GPIO_H 8 #define MT_GPIO_H 9 10 #include <stdbool.h> 11 #include <stdint.h> 12 13 #include <plat/common/common_def.h> 14 15 /* Error Code No. */ 16 #define RSUCCESS 0 17 #define ERACCESS 1 18 #define ERINVAL 2 19 #define ERWRAPPER 3 20 #define MAX_GPIO_PIN MT_GPIO_BASE_MAX 21 22 /* Enumeration for GPIO pin */ 23 typedef enum GPIO_PIN { 24 GPIO_UNSUPPORTED = -1, 25 26 GPIO0, GPIO1, GPIO2, GPIO3, GPIO4, GPIO5, GPIO6, GPIO7, 27 GPIO8, GPIO9, GPIO10, GPIO11, GPIO12, GPIO13, GPIO14, GPIO15, 28 GPIO16, GPIO17, GPIO18, GPIO19, GPIO20, GPIO21, GPIO22, GPIO23, 29 GPIO24, GPIO25, GPIO26, GPIO27, GPIO28, GPIO29, GPIO30, GPIO31, 30 GPIO32, GPIO33, GPIO34, GPIO35, GPIO36, GPIO37, GPIO38, GPIO39, 31 GPIO40, GPIO41, GPIO42, GPIO43, GPIO44, GPIO45, GPIO46, GPIO47, 32 GPIO48, GPIO49, GPIO50, GPIO51, GPIO52, GPIO53, GPIO54, GPIO55, 33 GPIO56, GPIO57, GPIO58, GPIO59, GPIO60, GPIO61, GPIO62, GPIO63, 34 GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70, GPIO71, 35 GPIO72, GPIO73, GPIO74, GPIO75, GPIO76, GPIO77, GPIO78, GPIO79, 36 GPIO80, GPIO81, GPIO82, GPIO83, GPIO84, GPIO85, GPIO86, GPIO87, 37 GPIO88, GPIO89, GPIO90, GPIO91, GPIO92, GPIO93, GPIO94, GPIO95, 38 GPIO96, GPIO97, GPIO98, GPIO99, GPIO100, GPIO101, GPIO102, GPIO103, 39 GPIO104, GPIO105, GPIO106, GPIO107, GPIO108, GPIO109, GPIO110, GPIO111, 40 GPIO112, GPIO113, GPIO114, GPIO115, GPIO116, GPIO117, GPIO118, GPIO119, 41 GPIO120, GPIO121, GPIO122, GPIO123, GPIO124, GPIO125, GPIO126, GPIO127, 42 GPIO128, GPIO129, GPIO130, GPIO131, GPIO132, GPIO133, GPIO134, GPIO135, 43 GPIO136, GPIO137, GPIO138, GPIO139, GPIO140, GPIO141, GPIO142, GPIO143, 44 GPIO144, GPIO145, GPIO146, GPIO147, GPIO148, GPIO149, GPIO150, GPIO151, 45 GPIO152, GPIO153, GPIO154, GPIO155, GPIO156, GPIO157, GPIO158, GPIO159, 46 GPIO160, GPIO161, GPIO162, GPIO163, GPIO164, GPIO165, GPIO166, GPIO167, 47 GPIO168, GPIO169, GPIO170, GPIO171, GPIO172, GPIO173, GPIO174, GPIO175, 48 GPIO176, GPIO177, GPIO178, GPIO179, GPIO180, GPIO181, GPIO182, GPIO183, 49 GPIO184, GPIO185, GPIO186, GPIO187, GPIO188, GPIO189, GPIO190, GPIO191, 50 GPIO192, GPIO193, GPIO194, GPIO195, GPIO196, GPIO197, GPIO198, GPIO199, 51 GPIO200, GPIO201, GPIO202, GPIO203, GPIO204, GPIO205, GPIO206, GPIO207, 52 GPIO208, GPIO209, GPIO210, GPIO211, GPIO212, GPIO213, GPIO214, GPIO215, 53 GPIO216, GPIO217, GPIO218, GPIO219, 54 MT_GPIO_BASE_MAX 55 } GPIO_PIN; 56 57 /* GPIO MODE CONTROL VALUE*/ 58 typedef enum { 59 GPIO_MODE_UNSUPPORTED = -1, 60 GPIO_MODE_GPIO = 0, 61 GPIO_MODE_00 = 0, 62 GPIO_MODE_01, 63 GPIO_MODE_02, 64 GPIO_MODE_03, 65 GPIO_MODE_04, 66 GPIO_MODE_05, 67 GPIO_MODE_06, 68 GPIO_MODE_07, 69 70 GPIO_MODE_MAX, 71 GPIO_MODE_DEFAULT = GPIO_MODE_00, 72 } GPIO_MODE; 73 74 /* GPIO DIRECTION */ 75 typedef enum { 76 MT_GPIO_DIR_UNSUPPORTED = -1, 77 MT_GPIO_DIR_OUT = 0, 78 MT_GPIO_DIR_IN = 1, 79 MT_GPIO_DIR_MAX, 80 MT_GPIO_DIR_DEFAULT = MT_GPIO_DIR_IN, 81 } GPIO_DIR; 82 83 /* GPIO PULL ENABLE*/ 84 typedef enum { 85 MT_GPIO_PULL_EN_UNSUPPORTED = -1, 86 MT_GPIO_PULL_DISABLE = 0, 87 MT_GPIO_PULL_ENABLE = 1, 88 MT_GPIO_PULL_ENABLE_R0 = 2, 89 MT_GPIO_PULL_ENABLE_R1 = 3, 90 MT_GPIO_PULL_ENABLE_R0R1 = 4, 91 92 MT_GPIO_PULL_EN_MAX, 93 MT_GPIO_PULL_EN_DEFAULT = MT_GPIO_PULL_ENABLE, 94 } GPIO_PULL_EN; 95 96 /* GPIO PULL-UP/PULL-DOWN*/ 97 typedef enum { 98 MT_GPIO_PULL_UNSUPPORTED = -1, 99 MT_GPIO_PULL_NONE = 0, 100 MT_GPIO_PULL_UP = 1, 101 MT_GPIO_PULL_DOWN = 2, 102 MT_GPIO_PULL_MAX, 103 MT_GPIO_PULL_DEFAULT = MT_GPIO_PULL_DOWN 104 } GPIO_PULL; 105 106 /* GPIO OUTPUT */ 107 typedef enum { 108 MT_GPIO_OUT_UNSUPPORTED = -1, 109 MT_GPIO_OUT_ZERO = 0, 110 MT_GPIO_OUT_ONE = 1, 111 112 MT_GPIO_OUT_MAX, 113 MT_GPIO_OUT_DEFAULT = MT_GPIO_OUT_ZERO, 114 MT_GPIO_DATA_OUT_DEFAULT = MT_GPIO_OUT_ZERO, /*compatible with DCT*/ 115 } GPIO_OUT; 116 117 /* GPIO INPUT */ 118 typedef enum { 119 MT_GPIO_IN_UNSUPPORTED = -1, 120 MT_GPIO_IN_ZERO = 0, 121 MT_GPIO_IN_ONE = 1, 122 123 MT_GPIO_IN_MAX, 124 } GPIO_IN; 125 126 typedef struct { 127 uint32_t val; 128 uint32_t set; 129 uint32_t rst; 130 uint32_t _align1; 131 } VAL_REGS; 132 133 typedef struct { 134 VAL_REGS dir[7]; 135 uint8_t rsv00[144]; 136 VAL_REGS dout[7]; 137 uint8_t rsv01[144]; 138 VAL_REGS din[7]; 139 uint8_t rsv02[144]; 140 VAL_REGS mode[28]; 141 } GPIO_REGS; 142 143 144 #define PIN(_id, _flag, _bit, _base, _offset) { \ 145 .id = _id, \ 146 .flag = _flag, \ 147 .bit = _bit, \ 148 .base = _base, \ 149 .offset = _offset, \ 150 } 151 152 struct mt_pin_info { 153 uint8_t id; 154 uint8_t flag; 155 uint8_t bit; 156 uint16_t base; 157 uint16_t offset; 158 }; 159 160 static const struct mt_pin_info mt8192_pin_infos[] = { 161 PIN(0, 0, 9, 0x23, 0xb0), 162 PIN(1, 0, 10, 0x23, 0xb0), 163 PIN(2, 0, 11, 0x23, 0xb0), 164 PIN(3, 0, 12, 0x23, 0xb0), 165 PIN(4, 0, 13, 0x23, 0xb0), 166 PIN(5, 0, 14, 0x23, 0xb0), 167 PIN(6, 0, 15, 0x23, 0xb0), 168 PIN(7, 0, 16, 0x23, 0xb0), 169 PIN(8, 0, 17, 0x23, 0xb0), 170 PIN(9, 0, 18, 0x23, 0xb0), 171 PIN(10, 1, 0, 0x15, 0x20), 172 PIN(11, 1, 1, 0x15, 0x20), 173 PIN(12, 1, 2, 0x15, 0x20), 174 PIN(13, 1, 3, 0x15, 0x20), 175 PIN(14, 1, 4, 0x15, 0x20), 176 PIN(15, 1, 5, 0x15, 0x20), 177 PIN(16, 0, 2, 0x17, 0x50), 178 PIN(17, 0, 3, 0x17, 0x50), 179 PIN(18, 0, 21, 0x36, 0xa0), 180 PIN(19, 0, 22, 0x36, 0xa0), 181 PIN(20, 0, 23, 0x36, 0xa0), 182 PIN(21, 0, 24, 0x36, 0xa0), 183 PIN(22, 0, 3, 0x21, 0x90), 184 PIN(23, 0, 4, 0x21, 0x90), 185 PIN(24, 0, 5, 0x21, 0x90), 186 PIN(25, 0, 6, 0x21, 0x90), 187 PIN(26, 0, 5, 0x22, 0x80), 188 PIN(27, 0, 6, 0x22, 0x80), 189 PIN(28, 0, 7, 0x22, 0x80), 190 PIN(29, 0, 8, 0x22, 0x80), 191 PIN(30, 0, 9, 0x22, 0x80), 192 PIN(31, 0, 27, 0x22, 0x70), 193 PIN(32, 0, 24, 0x22, 0x70), 194 PIN(33, 0, 26, 0x22, 0x70), 195 PIN(34, 0, 23, 0x22, 0x70), 196 PIN(35, 0, 25, 0x22, 0x70), 197 PIN(36, 0, 20, 0x21, 0x90), 198 PIN(37, 0, 21, 0x21, 0x90), 199 PIN(38, 0, 22, 0x21, 0x90), 200 PIN(39, 0, 23, 0x21, 0x90), 201 PIN(40, 0, 0, 0x17, 0x50), 202 PIN(41, 0, 1, 0x17, 0x50), 203 PIN(42, 0, 4, 0x17, 0x50), 204 PIN(43, 0, 25, 0x36, 0xa0), 205 PIN(44, 0, 26, 0x36, 0xa0), 206 PIN(45, 1, 9, 0x20, 0x60), 207 PIN(46, 1, 11, 0x20, 0x60), 208 PIN(47, 1, 10, 0x20, 0x60), 209 PIN(48, 1, 7, 0x20, 0x60), 210 PIN(49, 1, 8, 0x20, 0x60), 211 PIN(50, 1, 6, 0x20, 0x60), 212 PIN(51, 1, 0, 0x20, 0x60), 213 PIN(52, 1, 1, 0x20, 0x60), 214 PIN(53, 1, 5, 0x20, 0x60), 215 PIN(54, 1, 2, 0x20, 0x60), 216 PIN(55, 1, 4, 0x20, 0x60), 217 PIN(56, 1, 3, 0x20, 0x60), 218 PIN(57, 0, 1, 0x22, 0x80), 219 PIN(58, 0, 2, 0x22, 0x80), 220 PIN(59, 0, 3, 0x22, 0x80), 221 PIN(60, 0, 4, 0x22, 0x80), 222 PIN(61, 0, 28, 0x22, 0x70), 223 PIN(62, 0, 22, 0x22, 0x70), 224 PIN(63, 0, 0, 0x22, 0x70), 225 PIN(64, 0, 1, 0x22, 0x70), 226 PIN(65, 0, 12, 0x22, 0x70), 227 PIN(66, 0, 15, 0x22, 0x70), 228 PIN(67, 0, 16, 0x22, 0x70), 229 PIN(68, 0, 17, 0x22, 0x70), 230 PIN(69, 0, 18, 0x22, 0x70), 231 PIN(70, 0, 19, 0x22, 0x70), 232 PIN(71, 0, 20, 0x22, 0x70), 233 PIN(72, 0, 21, 0x22, 0x70), 234 PIN(73, 0, 2, 0x22, 0x70), 235 PIN(74, 0, 3, 0x22, 0x70), 236 PIN(75, 0, 4, 0x22, 0x70), 237 PIN(76, 0, 5, 0x22, 0x70), 238 PIN(77, 0, 6, 0x22, 0x70), 239 PIN(78, 0, 7, 0x22, 0x70), 240 PIN(79, 0, 8, 0x22, 0x70), 241 PIN(80, 0, 9, 0x22, 0x70), 242 PIN(81, 0, 10, 0x22, 0x70), 243 PIN(82, 0, 11, 0x22, 0x70), 244 PIN(83, 0, 13, 0x22, 0x70), 245 PIN(84, 0, 14, 0x22, 0x70), 246 PIN(85, 0, 31, 0x22, 0x70), 247 PIN(86, 0, 0, 0x22, 0x80), 248 PIN(87, 0, 29, 0x22, 0x70), 249 PIN(88, 0, 30, 0x22, 0x70), 250 PIN(89, 0, 24, 0x21, 0x90), 251 PIN(90, 0, 25, 0x21, 0x90), 252 PIN(91, 0, 0, 0x21, 0x90), 253 PIN(92, 0, 2, 0x21, 0xa0), 254 PIN(93, 0, 4, 0x21, 0xa0), 255 PIN(94, 0, 3, 0x21, 0xa0), 256 PIN(95, 0, 5, 0x21, 0xa0), 257 PIN(96, 0, 31, 0x21, 0x90), 258 PIN(97, 0, 26, 0x21, 0x90), 259 PIN(98, 0, 0, 0x21, 0xa0), 260 PIN(99, 0, 27, 0x21, 0x90), 261 PIN(100, 0, 28, 0x21, 0x90), 262 PIN(101, 0, 29, 0x21, 0x90), 263 PIN(102, 0, 30, 0x21, 0x90), 264 PIN(103, 0, 18, 0x21, 0x90), 265 PIN(104, 0, 17, 0x21, 0x90), 266 PIN(105, 0, 19, 0x21, 0x90), 267 PIN(106, 0, 16, 0x21, 0x90), 268 PIN(107, 0, 1, 0x21, 0x90), 269 PIN(108, 0, 2, 0x21, 0x90), 270 PIN(109, 0, 10, 0x21, 0x90), 271 PIN(110, 0, 7, 0x21, 0x90), 272 PIN(111, 0, 9, 0x21, 0x90), 273 PIN(112, 0, 11, 0x21, 0x90), 274 PIN(113, 0, 8, 0x21, 0x90), 275 PIN(114, 0, 14, 0x21, 0x90), 276 PIN(115, 0, 13, 0x21, 0x90), 277 PIN(116, 0, 15, 0x21, 0x90), 278 PIN(117, 0, 12, 0x21, 0x90), 279 PIN(118, 0, 23, 0x23, 0xb0), 280 PIN(119, 0, 29, 0x23, 0xb0), 281 PIN(120, 0, 28, 0x23, 0xb0), 282 PIN(121, 0, 2, 0x23, 0xc0), 283 PIN(122, 0, 27, 0x23, 0xb0), 284 PIN(123, 0, 1, 0x23, 0xc0), 285 PIN(124, 0, 26, 0x23, 0xb0), 286 PIN(125, 0, 0, 0x23, 0xc0), 287 PIN(126, 0, 19, 0x23, 0xb0), 288 PIN(127, 0, 20, 0x23, 0xb0), 289 PIN(128, 0, 21, 0x23, 0xb0), 290 PIN(129, 0, 22, 0x23, 0xb0), 291 PIN(130, 0, 6, 0x23, 0xb0), 292 PIN(131, 0, 7, 0x23, 0xb0), 293 PIN(132, 0, 8, 0x23, 0xb0), 294 PIN(133, 0, 3, 0x23, 0xb0), 295 PIN(134, 0, 4, 0x23, 0xb0), 296 PIN(135, 0, 5, 0x23, 0xb0), 297 PIN(136, 0, 0, 0x23, 0xb0), 298 PIN(137, 0, 1, 0x23, 0xb0), 299 PIN(138, 0, 2, 0x23, 0xb0), 300 PIN(139, 0, 25, 0x23, 0xb0), 301 PIN(140, 0, 31, 0x23, 0xb0), 302 PIN(141, 0, 24, 0x23, 0xb0), 303 PIN(142, 0, 30, 0x23, 0xb0), 304 PIN(143, 0, 6, 0x20, 0x70), 305 PIN(144, 0, 7, 0x20, 0x70), 306 PIN(145, 0, 8, 0x20, 0x70), 307 PIN(146, 0, 3, 0x20, 0x70), 308 PIN(147, 0, 4, 0x20, 0x70), 309 PIN(148, 0, 5, 0x20, 0x70), 310 PIN(149, 0, 0, 0x20, 0x70), 311 PIN(150, 0, 1, 0x20, 0x70), 312 PIN(151, 0, 2, 0x20, 0x70), 313 PIN(152, 1, 3, 0x36, 0x90), 314 PIN(153, 1, 2, 0x36, 0x90), 315 PIN(154, 1, 0, 0x36, 0x906), 316 PIN(155, 1, 1, 0x36, 0x90), 317 PIN(156, 0, 29, 0x36, 0xa0), 318 PIN(157, 0, 30, 0x36, 0xa0), 319 PIN(158, 0, 31, 0x36, 0xa0), 320 PIN(159, 0, 0, 0x36, 0xb0), 321 PIN(160, 0, 27, 0x36, 0xa04), 322 PIN(161, 0, 28, 0x36, 0xa0), 323 PIN(162, 0, 0, 0x36, 0xa0), 324 PIN(163, 0, 1, 0x36, 0xa0), 325 PIN(164, 0, 2, 0x36, 0xa0), 326 PIN(165, 0, 3, 0x36, 0xa0), 327 PIN(166, 0, 4, 0x36, 0xa0), 328 PIN(167, 0, 5, 0x36, 0xa0), 329 PIN(168, 0, 6, 0x36, 0xa0), 330 PIN(169, 0, 7, 0x36, 0xa0), 331 PIN(170, 0, 8, 0x36, 0xa0), 332 PIN(171, 0, 9, 0x36, 0xa0), 333 PIN(172, 0, 13, 0x36, 0xa0), 334 PIN(173, 0, 14, 0x36, 0xa0), 335 PIN(174, 0, 12, 0x36, 0xa0), 336 PIN(175, 0, 15, 0x36, 0xa0), 337 PIN(176, 0, 10, 0x36, 0xa0), 338 PIN(177, 0, 11, 0x36, 0xa0), 339 PIN(178, 0, 16, 0x36, 0xa0), 340 PIN(179, 0, 17, 0x36, 0xa0), 341 PIN(180, 0, 18, 0x36, 0xa0), 342 PIN(181, 0, 19, 0x36, 0xa0), 343 PIN(182, 0, 20, 0x36, 0xa0), 344 PIN(183, 1, 1, 0x18, 0x30), 345 PIN(184, 1, 2, 0x18, 0x30), 346 PIN(185, 1, 4, 0x18, 0x30), 347 PIN(186, 1, 6, 0x18, 0x30), 348 PIN(187, 1, 8, 0x18, 0x30), 349 PIN(188, 1, 3, 0x18, 0x30), 350 PIN(189, 1, 7, 0x18, 0x30), 351 PIN(190, 1, 9, 0x18, 0x30), 352 PIN(191, 1, 10, 0x18, 0x30), 353 PIN(192, 1, 0, 0x18, 0x30), 354 PIN(193, 1, 5, 0x18, 0x30), 355 PIN(194, 1, 11, 0x18, 0x30), 356 PIN(195, 0, 16, 0x14, 0x50), 357 PIN(196, 0, 6, 0x14, 0x50), 358 PIN(197, 0, 8, 0x14, 0x50), 359 PIN(198, 0, 7, 0x14, 0x50), 360 PIN(199, 0, 3, 0x14, 0x50), 361 PIN(200, 0, 6, 0x17, 0x50), 362 PIN(201, 0, 8, 0x17, 0x50), 363 PIN(202, 0, 15, 0x14, 0x50), 364 PIN(203, 0, 17, 0x14, 0x50), 365 PIN(204, 0, 5, 0x17, 0x50), 366 PIN(205, 0, 7, 0x17, 0x50), 367 PIN(206, 0, 18, 0x14, 0x50), 368 PIN(207, 0, 19, 0x14, 0x50), 369 PIN(208, 0, 20, 0x14, 0x50), 370 PIN(209, 0, 12, 0x14, 0x50), 371 PIN(210, 0, 11, 0x14, 0x50), 372 PIN(211, 0, 13, 0x14, 0x50), 373 PIN(212, 0, 10, 0x14, 0x50), 374 PIN(213, 0, 14, 0x14, 0x50), 375 PIN(214, 0, 0, 0x14, 0x50), 376 PIN(215, 0, 9, 0x14, 0x50), 377 PIN(216, 0, 4, 0x14, 0x50), 378 PIN(217, 0, 5, 0x14, 0x50), 379 PIN(218, 0, 1, 0x14, 0x50), 380 PIN(219, 0, 2, 0x14, 0x50), 381 }; 382 383 void plat_mt8192_gpio_init(void); 384 #endif /* MT_GPIO_H */ 385