brintos

brintos / linux-shallow public Read only

0
0
Text · 2.5 KiB · 6139b16 Raw
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