blob: 6959d87ff72c0f0b36e8ee0afdc656fdb4320f28 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001#ifndef __MT6290_EINT_SW_H__
2#define __MT6290_EINT_SW_H__
3#include "irqid.h"
4#include "drv_comm.h"
5#include "intrCtrl.h"
6//#include "kal_debug.h"
7//#include "eint_hw.h"
8#ifdef __CUST_NEW__
9#include "eint_drv.h"
10#endif
11
12#define IRQ_EIT_CODE IRQ_EINT_SHARE_CODE
13#define DEDICATED_EINT_IRQ0 IRQ_EINT0_CODE
14#define DEDICATED_EINT_IRQ1 IRQ_EINT1_CODE
15#define DEDICATED_EINT_IRQ2 IRQ_EINT2_CODE
16#define DEDICATED_EINT_IRQ3 IRQ_EINT3_CODE
17
18#if defined(__MD97__) || defined(__MD97P__)
19#define DEDICATED_EINT_TOTAL_CHANNEL 4
20#define EINT_MAX_CHANNEL 12
21#define EINT_TOTAL_CHANNEL 12
22#define EINT_SRCPIN_HWTIED0 12
23#define EINT_SRC_PIN_MAX 13
24#else
25#define DEDICATED_EINT_TOTAL_CHANNEL 4
26#define EINT_MAX_CHANNEL 4
27#define EINT_TOTAL_CHANNEL 4
28#define EINT_SRCPIN_HWTIED0 4
29#define EINT_SRC_PIN_MAX 5
30#endif
31//only for mt6297,As not support dws
32#if defined(MT6297)
33//For SIM
34#define SIM1_SWAP_EINT_SRCPIN 1
35#define SIM1_SWAP_EINT_NUM 1
36#define SIM2_SWAP_EINT_SRCPIN 2
37#define SIM2_SWAP_EINT_NUM 2
38
39//For TYPEC/USB
40#define TYPEC_OE_EINT_SRCPIN 7
41#define TYPEC_OE_EINT_NUM 7
42#define USB_RESUME_EINT_SRCPIN 11
43#define USB_RESUME_EINT_NUM 11
44#endif
45
46#if defined(CHIP10992)
47 #define PCIE1_EINT_SRCPIN 6
48 #define PCIE1_EINT_NUM 6
49 #define PCIE2_EINT_SRCPIN 8
50 #define PCIE2_EINT_NUM 8
51 #define USB_RESUME_EINT_SRCPIN 11
52 #define USB_RESUME_EINT_NUM 11
53#endif
54#ifdef __CUST_NEW__
55#define EINT_HARDWARE_DEBOUNCE (((EINT0_DEBOUNCE_TIME_DELAY>0)?1:0)<<0 | ((EINT1_DEBOUNCE_TIME_DELAY>0)?1:0)<<1 | ((EINT2_DEBOUNCE_TIME_DELAY>0)?1:0)<<2 |\
56 ((EINT3_DEBOUNCE_TIME_DELAY>0)?1:0)<<3 | ((EINT4_DEBOUNCE_TIME_DELAY>0)?1:0)<<4 | ((EINT5_DEBOUNCE_TIME_DELAY>0)?1:0)<<5 |\
57 ((EINT6_DEBOUNCE_TIME_DELAY>0)?1:0)<<6 | ((EINT7_DEBOUNCE_TIME_DELAY>0)?1:0)<<7 | ((EINT8_DEBOUNCE_TIME_DELAY>0)?1:0)<<8 |\
58 ((EINT9_DEBOUNCE_TIME_DELAY>0)?1:0)<<9 | ((EINT10_DEBOUNCE_TIME_DELAY>0)?1:0)<<10 |((EINT11_DEBOUNCE_TIME_DELAY>0)?1:0)<<11|\
59 ((EINT12_DEBOUNCE_TIME_DELAY>0)?1:0)<<12|((EINT13_DEBOUNCE_TIME_DELAY>0)?1:0)<<13| ((EINT14_DEBOUNCE_TIME_DELAY>0)?1:0)<<14|\
60 ((EINT15_DEBOUNCE_TIME_DELAY>0)?1:0)<<15)
61#else
62#define EINT_HARDWARE_DEBOUNCE 0x0000000F
63#endif
64
65#define EINT_OWNERSHIP_AP 1
66#define EINT_OWNERSHIP_MD 0
67#define EINT_NEGATIVE_POLARITY 0
68#define EINT_POSITIVE_POLARITY 1
69
70
71#define EINT_SRC_OFFSET 0x4
72#define EINT_SRC_NUM_PER_REG 4
73#define EINT_SRC_SHIFT_BIT 8
74
75#define BU_G_FLD(_i,_ms,_ls) (((_i)<<(31-(_ms))) >> (31- (_ms) + (_ls)))
76#define BU_G_BIT(_i,_n) BU_G_FLD(_i, _n, _n)
77#ifdef __MTK_TARGET__
78#define EN_EINT_PRINTF 1
79
80#if EN_EINT_PRINTF
81extern void dbg_print(char *fmt,...);
82
83#define EINT_PRINT(fmt, var ...) do {dbg_print(fmt"\n\r", ##var);} while (0)
84#define EINT_PRINTN(fmt, var ...) do {dbg_print(fmt, ##var);} while (0)
85#define EINT_ERR(fmt, var ...) do {EINT_PRINT("ERROR [%s:%d]"fmt, __FUNCTION__, __LINE__, ##var);} while (0)
86#define EINT_WARN(fmt, var ...) do {EINT_PRINT("WARNING [%s:%d]"fmt, __FUNCTION__, __LINE__, ##var);} while (0)
87#else
88#define EINT_PRINT(fmt, var ...)
89#define EINT_PRINTN(fmt, var ...)
90#define EINT_ERR(fmt, var ...)
91#define EINT_WARN(fmt, var ...)
92#endif
93#endif
94#define REG32(addr) (*((volatile unsigned int*)(addr)))
95#define REG32_WRITE(addr, value) do {(*((volatile unsigned int*)(addr))) = (unsigned int)(value);}while (0)
96
97
98#define EINT_NUM EINT_TOTAL_CHANNEL
99#define EINT_OK (0)
100#define EINT_FAIL (-1)
101#define EINT_ENABLE 1
102#define EINT_DISABLE 0
103#define EINT_NEGATIVE_POLARITY 0
104#define EINT_POSITIVE_POLARITY 1
105#define EINT_EDGE_SENSITIVITY 0
106#define EINT_LEVEL_SENSITIVITY 1
107#define EINT_DB_DUR_DEFAULT 0x400
108#define EINT_DB_DUR_MAX 0xFFFF
109#define EINT_HW_DB_TIME_MAX 2000 //ms
110#define GPIO_DEINT_SENS_EDGE 1
111#define GPIO_DEINT_SENS_LEVEL 0
112
113/**
114 * @brief GPIO EINT Configuration Enumeration
115 */
116typedef enum{
117 GPIO_EINT0=0,
118 GPIO_EINT1,
119 GPIO_EINT2,
120 GPIO_EINT3,
121 GPIO_EINT4,
122 GPIO_EINT5,
123 GPIO_EINT6,
124 GPIO_EINT7,
125 GPIO_EINT8,
126 GPIO_EINT9,
127 GPIO_EINT10,
128 GPIO_EINT11,
129 GPIO_EINT12,
130 GPIO_EINT13,
131 GPIO_EINT14,
132 GPIO_EINT15,
133}eint_e;
134
135typedef enum{
136 DEDICATED_EINT0=0,
137 DEDICATED_EINT1,
138 DEDICATED_EINT2,
139 DEDICATED_EINT3,
140}dedicated_eint_e;
141
142/**
143* @brief set the polarity parameter of the eint
144* @param eint : the eint index to be set
145* @param pol : the polarity value to set, it should be 0~1
146* 0: set pol to negative polarity
147* 1: set pol to positive polarity
148* @return EINT_OK : set successful, EINT_FAIL : set failed
149*/
150extern kal_int32 eint_set_pol(eint_e eint, kal_uint32 pol);
151
152/**
153* @brief set the debounce enable parameter of the eint
154* @param eint : the eint index to be set
155* @param debounce_en : the debounce enable value to set, it should be 0~1
156* 0: enable debounce function
157* 1: disable debounce function
158* @return EINT_OK : set successful, EINT_FAIL : set failed
159*/
160extern kal_int32 eint_set_debounce_enable(eint_e eint, kal_uint32 debounce_en);
161
162
163/**
164* @brief set the debounce duration parameter of the eint
165* @param eint : the eint index to be set
166* @param duration : the debounce duration value to set, it should be 0~0x3fff
167* @return EINT_OK : set successful, EINT_FAIL : set failed
168*/
169extern kal_int32 eint_set_debounce_duration(eint_e eint, kal_uint32 duration);
170
171
172/**
173* @brief set the irqen parameter of the eint
174* @param eint : the eint index to be set
175* @param enable : the irq enable register value to set, it should be 0~1
176* 0: disable eint irq send to cirq/gic module
177* 1: enable eint irq send to cirq/gic module
178* @return EINT_OK : set successful, EINT_FAIL : set failed
179*/
180extern kal_int32 eint_set_irqen(eint_e eint,kal_uint32 enable);
181
182extern void eint_set_mask_all(kal_uint32 mask_bits);
183
184extern void eint_set_unmask_all(kal_uint32 unmask_bits);
185
186
187/**
188 * @brief get eint debounce enable value of eint
189 * @param eint : The eint to be read.
190 * @return return the eint debounce parameter's value of eint
191 * 0: current debounce is disable
192 * 1: current debounce is enable
193 * EINT_FAIL: eint is out of range
194 */
195extern kal_int32 eint_get_debounce_enable(eint_e eint);
196
197/**
198 * @brief get eint IRQEN value of eint
199 * @return return the eint debounce parameter's value of eint
200 * 0: current eint is unmask
201 * 1: current eint is mask
202 * EINT_FAIL: eint is out of range
203 */
204extern kal_int32 eint_get_irqen(void);
205
206
207/**
208* @brief set the sensitivity parameter of the eint
209* @param eint : the eint index to be set
210* @param type : the sensitivity value to set, it should be 0~1
211* 0: set sensitivity to edge(pulse)
212* 1: set sensitivity to level
213* @return EINT_OK : set successful, EINT_FAIL : set failed
214*/
215extern kal_int32 eint_set_type(eint_e eint, kal_uint32 type);
216
217/**
218* @brief set eint ownership register
219* @param eint : the eint index to set ownerhsip
220* @param ownership : the ownership register bit value to set ,it should be 0~1
221* 0: set ownership to MD
222* 1: set ownership to AP
223* @return GPIO_OK : set successful, GPIO_FAIL : set failed
224*/
225extern kal_int32 eint_set_ownership(kal_uint32 eint,kal_uint32 ownership);
226
227/**
228* @brief set the source gpio index parameter of the eint
229* @param eint : the eint index to be set
230* @param gpio_pin : The pin which is to set as source gpio of eint. it should be 0~63
231* @return GPIO_OK : set successful, GPIO_FAIL : set failed
232*/
233extern kal_int32 gpio_set_eint_src(eint_e eint, kal_uint8 gpio_pin);
234
235/**
236 * @brief set dedicated eint enable value of deint
237 * @param deint : The dedicated eint to be set.
238 * @param eint: the l2 eint index to set as source eint of deint,it should be 0~15
239 * @param enable: the enable register value to set,it should be 0~1
240 * 0: enable dedicated eint
241 * 1: disable dedicated eint
242 * @return GPIO_OK : set successful, GPIO_FAIL : set failed
243 */
244extern kal_int32 gpio_set_l1_eint(dedicated_eint_e deint,eint_e eint,kal_uint32 enable);
245
246extern kal_int32 eint_get_l1_irqen(dedicated_eint_e deint);
247extern kal_int32 eint_set_l1_eint_enable(dedicated_eint_e deint , kal_uint32 enable);
248/**
249 * @brief get dedicated eint source l2 eint index value of l1_deint
250 * @param l1_deint : The dedicated eint to be read.
251 * @return return the dedicated eint source l2 eint index value of l1_deint
252 * src_eint: 0~0xf , l2 eint index
253 * GPIO_FAIL: l1_deint is out of range
254 */
255extern kal_int32 gpio_get_l1_eint_src(kal_uint32 l1_deint);
256
257
258/**
259 * @brief get eint type parameter's value of eint
260 * @param eint : The eint to be read.
261 * @return return the eint type parameter's value of eint
262 * 0: current is edge(pulse) sensitivity
263 * 1: current is level sensitivity
264 * GPIO_FAIL: eint is out of range
265 */
266extern kal_int32 gpio_get_eint_type(eint_e eint);
267
268/**
269 * @brief get eint source gpio id of eint
270 * @param eint : The eint to be read.
271 * @return return the eint source parameter's value of eint
272 * gpio_pin: 0~64 the gpio index of eint source
273 * GPIO_FAIL: eint is out of range
274 */
275extern kal_int32 gpio_get_eint_src(eint_e eint);
276
277
278/**
279 * @brief get eint polarity value of eint
280 * @param eint : The eint to be read.
281 * @return return the eint polarity parameter's value of eint
282 * 0: current is negative polarity
283 * 1: current is positive polarity
284 * GPIO_FAIL: eint is out of range
285 */
286extern kal_int32 gpio_get_eint_pol(eint_e eint);
287#endif