113 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Copyright (C) 2014-2018 MediaTek Inc.4 *5 * Author: Maoguang Meng <maoguang.meng@mediatek.com>6 * Sean Wang <sean.wang@mediatek.com>7 *8 */9#ifndef __MTK_EINT_H10#define __MTK_EINT_H11 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 const unsigned int *db_time;41};42 43extern const unsigned int debounce_time_mt2701[];44extern const unsigned int debounce_time_mt6765[];45extern const unsigned int debounce_time_mt6795[];46 47struct mtk_eint;48 49struct mtk_eint_xt {50 int (*get_gpio_n)(void *data, unsigned long eint_n,51 unsigned int *gpio_n,52 struct gpio_chip **gpio_chip);53 int (*get_gpio_state)(void *data, unsigned long eint_n);54 int (*set_gpio_as_eint)(void *data, unsigned long eint_n);55};56 57struct mtk_eint {58 struct device *dev;59 void __iomem *base;60 struct irq_domain *domain;61 int irq;62 63 int *dual_edge;64 u32 *wake_mask;65 u32 *cur_mask;66 67 /* Used to fit into various EINT device */68 const struct mtk_eint_hw *hw;69 const struct mtk_eint_regs *regs;70 u16 num_db_time;71 72 /* Used to fit into various pinctrl device */73 void *pctl;74 const struct mtk_eint_xt *gpio_xlate;75};76 77#if IS_ENABLED(CONFIG_EINT_MTK)78int mtk_eint_do_init(struct mtk_eint *eint);79int mtk_eint_do_suspend(struct mtk_eint *eint);80int mtk_eint_do_resume(struct mtk_eint *eint);81int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_n,82 unsigned int debounce);83int mtk_eint_find_irq(struct mtk_eint *eint, unsigned long eint_n);84 85#else86static inline int mtk_eint_do_init(struct mtk_eint *eint)87{88 return -EOPNOTSUPP;89}90 91static inline int mtk_eint_do_suspend(struct mtk_eint *eint)92{93 return -EOPNOTSUPP;94}95 96static inline int mtk_eint_do_resume(struct mtk_eint *eint)97{98 return -EOPNOTSUPP;99}100 101static inline int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_n,102 unsigned int debounce)103{104 return -EOPNOTSUPP;105}106 107static inline int mtk_eint_find_irq(struct mtk_eint *eint, unsigned long eint_n)108{109 return -EOPNOTSUPP;110}111#endif112#endif /* __MTK_EINT_H */113