#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <linux/ioport.h>
#include <linux/io.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
#define IRQC_IRQ_MAX …
#define IRQC_REQ_STS …
#define IRQC_EN_STS …
#define IRQC_EN_SET …
#define IRQC_INT_CPU_BASE(n) …
#define DETECT_STATUS …
#define MONITOR …
#define HLVL_STS …
#define LLVL_STS …
#define S_R_EDGE_STS …
#define S_F_EDGE_STS …
#define A_R_EDGE_STS …
#define A_F_EDGE_STS …
#define CHTEN_STS …
#define IRQC_CONFIG(n) …
struct irqc_irq { … };
struct irqc_priv { … };
static struct irqc_priv *irq_data_to_priv(struct irq_data *data)
{ … }
static void irqc_dbg(struct irqc_irq *i, char *str)
{ … }
static unsigned char irqc_sense[IRQ_TYPE_SENSE_MASK + 1] = …;
static int irqc_irq_set_type(struct irq_data *d, unsigned int type)
{ … }
static int irqc_irq_set_wake(struct irq_data *d, unsigned int on)
{ … }
static irqreturn_t irqc_irq_handler(int irq, void *dev_id)
{ … }
static int irqc_probe(struct platform_device *pdev)
{ … }
static void irqc_remove(struct platform_device *pdev)
{ … }
static int __maybe_unused irqc_suspend(struct device *dev)
{ … }
static SIMPLE_DEV_PM_OPS(irqc_pm_ops, irqc_suspend, NULL);
static const struct of_device_id irqc_dt_ids[] = …;
MODULE_DEVICE_TABLE(of, irqc_dt_ids);
static struct platform_driver irqc_device_driver = …;
static int __init irqc_init(void)
{ … }
postcore_initcall(irqc_init);
static void __exit irqc_exit(void)
{ … }
module_exit(irqc_exit);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;