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