2018-05-21 01:01:48 +08:00
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright ( C ) 2014 - 2018 MediaTek Inc .
*
* Author : Maoguang Meng < maoguang . meng @ mediatek . com >
* Sean Wang < sean . wang @ mediatek . com >
*
*/
# 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 ;
}
2018-09-26 21:38:09 +02:00
static inline int mtk_eint_set_debounce ( struct mtk_eint * eint , unsigned long eint_n ,
2018-05-21 01:01:48 +08:00
unsigned int debounce )
{
return - EOPNOTSUPP ;
}
2018-09-26 21:38:09 +02:00
static inline int mtk_eint_find_irq ( struct mtk_eint * eint , unsigned long eint_n )
2018-05-21 01:01:48 +08:00
{
return - EOPNOTSUPP ;
}
# endif
# endif /* __MTK_EINT_H */