1
2
3
4
5
6
7
8
9#ifndef __MTK_EINT_H
10#define __MTK_EINT_H
11
12#include <linux/irqdomain.h>
13
14struct mtk_eint_regs {
15 unsigned int stat;
16 unsigned int ack;
17 unsigned int mask;
18 unsigned int mask_set;
19 unsigned int mask_clr;
20 unsigned int sens;
21 unsigned int sens_set;
22 unsigned int sens_clr;
23 unsigned int soft;
24 unsigned int soft_set;
25 unsigned int soft_clr;
26 unsigned int pol;
27 unsigned int pol_set;
28 unsigned int pol_clr;
29 unsigned int dom_en;
30 unsigned int dbnc_ctrl;
31 unsigned int dbnc_set;
32 unsigned int dbnc_clr;
33};
34
35struct mtk_eint_hw {
36 u8 port_mask;
37 u8 ports;
38 unsigned int ap_num;
39 unsigned int db_cnt;
40};
41
42struct mtk_eint;
43
44struct mtk_eint_xt {
45 int (*get_gpio_n)(void *data, unsigned long eint_n,
46 unsigned int *gpio_n,
47 struct gpio_chip **gpio_chip);
48 int (*get_gpio_state)(void *data, unsigned long eint_n);
49 int (*set_gpio_as_eint)(void *data, unsigned long eint_n);
50};
51
52struct mtk_eint {
53 struct device *dev;
54 void __iomem *base;
55 struct irq_domain *domain;
56 int irq;
57
58 int *dual_edge;
59 u32 *wake_mask;
60 u32 *cur_mask;
61
62
63 const struct mtk_eint_hw *hw;
64 const struct mtk_eint_regs *regs;
65
66
67 void *pctl;
68 const struct mtk_eint_xt *gpio_xlate;
69};
70
71#if IS_ENABLED(CONFIG_EINT_MTK)
72int mtk_eint_do_init(struct mtk_eint *eint);
73int mtk_eint_do_suspend(struct mtk_eint *eint);
74int mtk_eint_do_resume(struct mtk_eint *eint);
75int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_n,
76 unsigned int debounce);
77int mtk_eint_find_irq(struct mtk_eint *eint, unsigned long eint_n);
78
79#else
80static inline int mtk_eint_do_init(struct mtk_eint *eint)
81{
82 return -EOPNOTSUPP;
83}
84
85static inline int mtk_eint_do_suspend(struct mtk_eint *eint)
86{
87 return -EOPNOTSUPP;
88}
89
90static inline int mtk_eint_do_resume(struct mtk_eint *eint)
91{
92 return -EOPNOTSUPP;
93}
94
95int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_n,
96 unsigned int debounce)
97{
98 return -EOPNOTSUPP;
99}
100
101int mtk_eint_find_irq(struct mtk_eint *eint, unsigned long eint_n)
102{
103 return -EOPNOTSUPP;
104}
105#endif
106#endif
107