1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2019, MediaTek Inc. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef MT_GPIO_H 8*91f16700Schasinglulu #define MT_GPIO_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <stdint.h> 11*91f16700Schasinglulu #include <plat/common/common_def.h> 12*91f16700Schasinglulu 13*91f16700Schasinglulu /* Error Code No. */ 14*91f16700Schasinglulu #define RSUCCESS 0 15*91f16700Schasinglulu #define ERACCESS 1 16*91f16700Schasinglulu #define ERINVAL 2 17*91f16700Schasinglulu #define ERWRAPPER 3 18*91f16700Schasinglulu #define MAX_GPIO_PIN MT_GPIO_BASE_MAX 19*91f16700Schasinglulu 20*91f16700Schasinglulu /* Enumeration for GPIO pin */ 21*91f16700Schasinglulu typedef enum GPIO_PIN { 22*91f16700Schasinglulu GPIO_UNSUPPORTED = -1, 23*91f16700Schasinglulu 24*91f16700Schasinglulu GPIO0, GPIO1, GPIO2, GPIO3, GPIO4, GPIO5, GPIO6, GPIO7, 25*91f16700Schasinglulu GPIO8, GPIO9, GPIO10, GPIO11, GPIO12, GPIO13, GPIO14, GPIO15, 26*91f16700Schasinglulu GPIO16, GPIO17, GPIO18, GPIO19, GPIO20, GPIO21, GPIO22, GPIO23, 27*91f16700Schasinglulu GPIO24, GPIO25, GPIO26, GPIO27, GPIO28, GPIO29, GPIO30, GPIO31, 28*91f16700Schasinglulu GPIO32, GPIO33, GPIO34, GPIO35, GPIO36, GPIO37, GPIO38, GPIO39, 29*91f16700Schasinglulu GPIO40, GPIO41, GPIO42, GPIO43, GPIO44, GPIO45, GPIO46, GPIO47, 30*91f16700Schasinglulu GPIO48, GPIO49, GPIO50, GPIO51, GPIO52, GPIO53, GPIO54, GPIO55, 31*91f16700Schasinglulu GPIO56, GPIO57, GPIO58, GPIO59, GPIO60, GPIO61, GPIO62, GPIO63, 32*91f16700Schasinglulu GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70, GPIO71, 33*91f16700Schasinglulu GPIO72, GPIO73, GPIO74, GPIO75, GPIO76, GPIO77, GPIO78, GPIO79, 34*91f16700Schasinglulu GPIO80, GPIO81, GPIO82, GPIO83, GPIO84, GPIO85, GPIO86, GPIO87, 35*91f16700Schasinglulu GPIO88, GPIO89, GPIO90, GPIO91, GPIO92, GPIO93, GPIO94, GPIO95, 36*91f16700Schasinglulu GPIO96, GPIO97, GPIO98, GPIO99, GPIO100, GPIO101, GPIO102, GPIO103, 37*91f16700Schasinglulu GPIO104, GPIO105, GPIO106, GPIO107, GPIO108, GPIO109, GPIO110, GPIO111, 38*91f16700Schasinglulu GPIO112, GPIO113, GPIO114, GPIO115, GPIO116, GPIO117, GPIO118, GPIO119, 39*91f16700Schasinglulu GPIO120, GPIO121, GPIO122, GPIO123, GPIO124, GPIO125, GPIO126, GPIO127, 40*91f16700Schasinglulu GPIO128, GPIO129, GPIO130, GPIO131, GPIO132, GPIO133, GPIO134, GPIO135, 41*91f16700Schasinglulu GPIO136, GPIO137, GPIO138, GPIO139, GPIO140, GPIO141, GPIO142, GPIO143, 42*91f16700Schasinglulu GPIO144, GPIO145, GPIO146, GPIO147, GPIO148, GPIO149, GPIO150, GPIO151, 43*91f16700Schasinglulu GPIO152, GPIO153, GPIO154, GPIO155, GPIO156, GPIO157, GPIO158, GPIO159, 44*91f16700Schasinglulu GPIO160, GPIO161, GPIO162, GPIO163, GPIO164, GPIO165, GPIO166, GPIO167, 45*91f16700Schasinglulu GPIO168, GPIO169, GPIO170, GPIO171, GPIO172, GPIO173, GPIO174, GPIO175, 46*91f16700Schasinglulu GPIO176, GPIO177, GPIO178, GPIO179, 47*91f16700Schasinglulu MT_GPIO_BASE_MAX 48*91f16700Schasinglulu } GPIO_PIN; 49*91f16700Schasinglulu 50*91f16700Schasinglulu /* GPIO MODE CONTROL VALUE*/ 51*91f16700Schasinglulu typedef enum { 52*91f16700Schasinglulu GPIO_MODE_UNSUPPORTED = -1, 53*91f16700Schasinglulu GPIO_MODE_GPIO = 0, 54*91f16700Schasinglulu GPIO_MODE_00 = 0, 55*91f16700Schasinglulu GPIO_MODE_01, 56*91f16700Schasinglulu GPIO_MODE_02, 57*91f16700Schasinglulu GPIO_MODE_03, 58*91f16700Schasinglulu GPIO_MODE_04, 59*91f16700Schasinglulu GPIO_MODE_05, 60*91f16700Schasinglulu GPIO_MODE_06, 61*91f16700Schasinglulu GPIO_MODE_07, 62*91f16700Schasinglulu 63*91f16700Schasinglulu GPIO_MODE_MAX, 64*91f16700Schasinglulu GPIO_MODE_DEFAULT = GPIO_MODE_00, 65*91f16700Schasinglulu } GPIO_MODE; 66*91f16700Schasinglulu 67*91f16700Schasinglulu /* GPIO DIRECTION */ 68*91f16700Schasinglulu typedef enum { 69*91f16700Schasinglulu GPIO_DIR_UNSUPPORTED = -1, 70*91f16700Schasinglulu GPIO_DIR_OUT = 0, 71*91f16700Schasinglulu GPIO_DIR_IN = 1, 72*91f16700Schasinglulu GPIO_DIR_MAX, 73*91f16700Schasinglulu GPIO_DIR_DEFAULT = GPIO_DIR_IN, 74*91f16700Schasinglulu } GPIO_DIR; 75*91f16700Schasinglulu 76*91f16700Schasinglulu /* GPIO PULL ENABLE*/ 77*91f16700Schasinglulu typedef enum { 78*91f16700Schasinglulu GPIO_PULL_EN_UNSUPPORTED = -1, 79*91f16700Schasinglulu GPIO_PULL_DISABLE = 0, 80*91f16700Schasinglulu GPIO_PULL_ENABLE = 1, 81*91f16700Schasinglulu GPIO_PULL_ENABLE_R0 = 2, 82*91f16700Schasinglulu GPIO_PULL_ENABLE_R1 = 3, 83*91f16700Schasinglulu GPIO_PULL_ENABLE_R0R1 = 4, 84*91f16700Schasinglulu 85*91f16700Schasinglulu GPIO_PULL_EN_MAX, 86*91f16700Schasinglulu GPIO_PULL_EN_DEFAULT = GPIO_PULL_ENABLE, 87*91f16700Schasinglulu } GPIO_PULL_EN; 88*91f16700Schasinglulu 89*91f16700Schasinglulu /* GPIO PULL-UP/PULL-DOWN*/ 90*91f16700Schasinglulu typedef enum { 91*91f16700Schasinglulu GPIO_PULL_UNSUPPORTED = -1, 92*91f16700Schasinglulu GPIO_PULL_NONE = 0, 93*91f16700Schasinglulu GPIO_PULL_UP = 1, 94*91f16700Schasinglulu GPIO_PULL_DOWN = 2, 95*91f16700Schasinglulu GPIO_PULL_MAX, 96*91f16700Schasinglulu GPIO_PULL_DEFAULT = GPIO_PULL_DOWN 97*91f16700Schasinglulu } GPIO_PULL; 98*91f16700Schasinglulu 99*91f16700Schasinglulu /* GPIO OUTPUT */ 100*91f16700Schasinglulu typedef enum { 101*91f16700Schasinglulu GPIO_OUT_UNSUPPORTED = -1, 102*91f16700Schasinglulu GPIO_OUT_ZERO = 0, 103*91f16700Schasinglulu GPIO_OUT_ONE = 1, 104*91f16700Schasinglulu 105*91f16700Schasinglulu GPIO_OUT_MAX, 106*91f16700Schasinglulu GPIO_OUT_DEFAULT = GPIO_OUT_ZERO, 107*91f16700Schasinglulu GPIO_DATA_OUT_DEFAULT = GPIO_OUT_ZERO, /*compatible with DCT*/ 108*91f16700Schasinglulu } GPIO_OUT; 109*91f16700Schasinglulu 110*91f16700Schasinglulu /* GPIO INPUT */ 111*91f16700Schasinglulu typedef enum { 112*91f16700Schasinglulu GPIO_IN_UNSUPPORTED = -1, 113*91f16700Schasinglulu GPIO_IN_ZERO = 0, 114*91f16700Schasinglulu GPIO_IN_ONE = 1, 115*91f16700Schasinglulu 116*91f16700Schasinglulu GPIO_IN_MAX, 117*91f16700Schasinglulu } GPIO_IN; 118*91f16700Schasinglulu 119*91f16700Schasinglulu typedef struct { 120*91f16700Schasinglulu uint32_t val; 121*91f16700Schasinglulu uint32_t set; 122*91f16700Schasinglulu uint32_t rst; 123*91f16700Schasinglulu uint32_t _align1; 124*91f16700Schasinglulu } VAL_REGS; 125*91f16700Schasinglulu 126*91f16700Schasinglulu typedef struct { 127*91f16700Schasinglulu VAL_REGS dir[6]; /*0x0000 ~ 0x005F: 96 bytes */ 128*91f16700Schasinglulu uint8_t rsv00[160]; /*0x0060 ~ 0x00FF: 160 bytes */ 129*91f16700Schasinglulu VAL_REGS dout[6]; /*0x0100 ~ 0x015F: 96 bytes */ 130*91f16700Schasinglulu uint8_t rsv01[160]; /*0x0160 ~ 0x01FF: 160 bytes */ 131*91f16700Schasinglulu VAL_REGS din[6]; /*0x0200 ~ 0x025F: 96 bytes */ 132*91f16700Schasinglulu uint8_t rsv02[160]; /*0x0260 ~ 0x02FF: 160 bytes */ 133*91f16700Schasinglulu VAL_REGS mode[23]; /*0x0300 ~ 0x046F: 368 bytes */ 134*91f16700Schasinglulu } GPIO_REGS; 135*91f16700Schasinglulu 136*91f16700Schasinglulu /* GPIO Driver interface */ 137*91f16700Schasinglulu /*direction*/ 138*91f16700Schasinglulu void mt_set_gpio_dir(int gpio, int direction); 139*91f16700Schasinglulu int mt_get_gpio_dir(int gpio); 140*91f16700Schasinglulu 141*91f16700Schasinglulu /*pull select*/ 142*91f16700Schasinglulu void mt_set_gpio_pull(int gpio, int pull); 143*91f16700Schasinglulu int mt_get_gpio_pull(int gpio); 144*91f16700Schasinglulu 145*91f16700Schasinglulu /*input/output*/ 146*91f16700Schasinglulu void mt_set_gpio_out(int gpio, int value); 147*91f16700Schasinglulu int mt_get_gpio_out(int gpio); 148*91f16700Schasinglulu int mt_get_gpio_in(int gpio); 149*91f16700Schasinglulu 150*91f16700Schasinglulu /*mode control*/ 151*91f16700Schasinglulu void mt_set_gpio_mode(int gpio, int mode); 152*91f16700Schasinglulu int mt_get_gpio_mode(int gpio); 153*91f16700Schasinglulu 154*91f16700Schasinglulu #endif /* MT_GPIO_H */ 155