1 /* 2 * Copyright (c) 2020, MediaTek Inc. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef MT_GPIO_COMMON_H 8 #define MT_GPIO_COMMON_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 /* GPIO MODE CONTROL VALUE*/ 23 typedef enum { 24 GPIO_MODE_UNSUPPORTED = -1, 25 GPIO_MODE_GPIO = 0, 26 GPIO_MODE_00 = 0, 27 GPIO_MODE_01, 28 GPIO_MODE_02, 29 GPIO_MODE_03, 30 GPIO_MODE_04, 31 GPIO_MODE_05, 32 GPIO_MODE_06, 33 GPIO_MODE_07, 34 35 GPIO_MODE_MAX, 36 GPIO_MODE_DEFAULT = GPIO_MODE_00, 37 } GPIO_MODE; 38 39 /* GPIO DIRECTION */ 40 typedef enum { 41 MT_GPIO_DIR_UNSUPPORTED = -1, 42 MT_GPIO_DIR_OUT = 0, 43 MT_GPIO_DIR_IN = 1, 44 MT_GPIO_DIR_MAX, 45 MT_GPIO_DIR_DEFAULT = MT_GPIO_DIR_IN, 46 } GPIO_DIR; 47 48 /* GPIO PULL ENABLE*/ 49 typedef enum { 50 MT_GPIO_PULL_EN_UNSUPPORTED = -1, 51 MT_GPIO_PULL_DISABLE = 0, 52 MT_GPIO_PULL_ENABLE = 1, 53 MT_GPIO_PULL_ENABLE_R0 = 2, 54 MT_GPIO_PULL_ENABLE_R1 = 3, 55 MT_GPIO_PULL_ENABLE_R0R1 = 4, 56 57 MT_GPIO_PULL_EN_MAX, 58 MT_GPIO_PULL_EN_DEFAULT = MT_GPIO_PULL_ENABLE, 59 } GPIO_PULL_EN; 60 61 /* GPIO PULL-UP/PULL-DOWN*/ 62 typedef enum { 63 MT_GPIO_PULL_UNSUPPORTED = -1, 64 MT_GPIO_PULL_NONE = 0, 65 MT_GPIO_PULL_UP = 1, 66 MT_GPIO_PULL_DOWN = 2, 67 MT_GPIO_PULL_MAX, 68 MT_GPIO_PULL_DEFAULT = MT_GPIO_PULL_DOWN 69 } GPIO_PULL; 70 71 /* GPIO OUTPUT */ 72 typedef enum { 73 MT_GPIO_OUT_UNSUPPORTED = -1, 74 MT_GPIO_OUT_ZERO = 0, 75 MT_GPIO_OUT_ONE = 1, 76 77 MT_GPIO_OUT_MAX, 78 MT_GPIO_OUT_DEFAULT = MT_GPIO_OUT_ZERO, 79 MT_GPIO_DATA_OUT_DEFAULT = MT_GPIO_OUT_ZERO, /*compatible with DCT*/ 80 } GPIO_OUT; 81 82 /* GPIO INPUT */ 83 typedef enum { 84 MT_GPIO_IN_UNSUPPORTED = -1, 85 MT_GPIO_IN_ZERO = 0, 86 MT_GPIO_IN_ONE = 1, 87 88 MT_GPIO_IN_MAX, 89 } GPIO_IN; 90 91 #define PIN(_id, _flag, _bit, _base, _offset) { \ 92 .id = _id, \ 93 .flag = _flag, \ 94 .bit = _bit, \ 95 .base = _base, \ 96 .offset = _offset, \ 97 } 98 99 struct mt_pin_info { 100 uint8_t id; 101 uint8_t flag; 102 uint8_t bit; 103 uint16_t base; 104 uint16_t offset; 105 }; 106 107 void mt_gpio_init(void); 108 uintptr_t mt_gpio_find_reg_addr(uint32_t pin); 109 #endif /* MT_GPIO_COMMON_H */ 110