blob: 68d96e5330cbcca32b6958e9fabe6d79d4916bdd [file] [log] [blame]
developer912c7d22021-03-31 14:53:43 +08001/*
developerfe14b9f2022-09-05 11:18:04 +08002 * Copyright (c) 2020-2022, MediaTek Inc. All rights reserved.
developer912c7d22021-03-31 14:53:43 +08003 *
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*/
23typedef 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 */
40typedef 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*/
49typedef 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*/
62typedef 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 */
72typedef 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 */
83typedef 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
99struct 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
107void mt_gpio_init(void);
108uintptr_t mt_gpio_find_reg_addr(uint32_t pin);
109#endif /* MT_GPIO_COMMON_H */