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