forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.3 KiB
106 lines
2.3 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
/* |
|
* Copyright (C) 2014-2018 MediaTek Inc. |
|
* |
|
* Author: Maoguang Meng <[email protected]> |
|
* Sean Wang <[email protected]> |
|
* |
|
*/ |
|
#ifndef __MTK_EINT_H |
|
#define __MTK_EINT_H |
|
|
|
#include <linux/irqdomain.h> |
|
|
|
struct mtk_eint_regs { |
|
unsigned int stat; |
|
unsigned int ack; |
|
unsigned int mask; |
|
unsigned int mask_set; |
|
unsigned int mask_clr; |
|
unsigned int sens; |
|
unsigned int sens_set; |
|
unsigned int sens_clr; |
|
unsigned int soft; |
|
unsigned int soft_set; |
|
unsigned int soft_clr; |
|
unsigned int pol; |
|
unsigned int pol_set; |
|
unsigned int pol_clr; |
|
unsigned int dom_en; |
|
unsigned int dbnc_ctrl; |
|
unsigned int dbnc_set; |
|
unsigned int dbnc_clr; |
|
}; |
|
|
|
struct mtk_eint_hw { |
|
u8 port_mask; |
|
u8 ports; |
|
unsigned int ap_num; |
|
unsigned int db_cnt; |
|
}; |
|
|
|
struct mtk_eint; |
|
|
|
struct mtk_eint_xt { |
|
int (*get_gpio_n)(void *data, unsigned long eint_n, |
|
unsigned int *gpio_n, |
|
struct gpio_chip **gpio_chip); |
|
int (*get_gpio_state)(void *data, unsigned long eint_n); |
|
int (*set_gpio_as_eint)(void *data, unsigned long eint_n); |
|
}; |
|
|
|
struct mtk_eint { |
|
struct device *dev; |
|
void __iomem *base; |
|
struct irq_domain *domain; |
|
int irq; |
|
|
|
int *dual_edge; |
|
u32 *wake_mask; |
|
u32 *cur_mask; |
|
|
|
/* Used to fit into various EINT device */ |
|
const struct mtk_eint_hw *hw; |
|
const struct mtk_eint_regs *regs; |
|
|
|
/* Used to fit into various pinctrl device */ |
|
void *pctl; |
|
const struct mtk_eint_xt *gpio_xlate; |
|
}; |
|
|
|
#if IS_ENABLED(CONFIG_EINT_MTK) |
|
int mtk_eint_do_init(struct mtk_eint *eint); |
|
int mtk_eint_do_suspend(struct mtk_eint *eint); |
|
int mtk_eint_do_resume(struct mtk_eint *eint); |
|
int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_n, |
|
unsigned int debounce); |
|
int mtk_eint_find_irq(struct mtk_eint *eint, unsigned long eint_n); |
|
|
|
#else |
|
static inline int mtk_eint_do_init(struct mtk_eint *eint) |
|
{ |
|
return -EOPNOTSUPP; |
|
} |
|
|
|
static inline int mtk_eint_do_suspend(struct mtk_eint *eint) |
|
{ |
|
return -EOPNOTSUPP; |
|
} |
|
|
|
static inline int mtk_eint_do_resume(struct mtk_eint *eint) |
|
{ |
|
return -EOPNOTSUPP; |
|
} |
|
|
|
static inline int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_n, |
|
unsigned int debounce) |
|
{ |
|
return -EOPNOTSUPP; |
|
} |
|
|
|
static inline int mtk_eint_find_irq(struct mtk_eint *eint, unsigned long eint_n) |
|
{ |
|
return -EOPNOTSUPP; |
|
} |
|
#endif |
|
#endif /* __MTK_EINT_H */
|
|
|