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