#include <linux/clk.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/irqdomain.h>
#include <linux/kernel.h>
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/spinlock.h>
#define CTRL_STRIDE_OFF(_t, _r) …
#define CHANCTRL …
#define CHANMASK(n, t) …
#define CHANSET(n, t) …
#define CHANSTATUS(n, t) …
#define CHAN_MINTDIS(t) …
#define CHAN_MASTRSTAT(t) …
#define CHAN_MAX_OUTPUT_INT …
struct irqsteer_data { … };
static int imx_irqsteer_get_reg_index(struct irqsteer_data *data,
unsigned long irqnum)
{ … }
static void imx_irqsteer_irq_unmask(struct irq_data *d)
{ … }
static void imx_irqsteer_irq_mask(struct irq_data *d)
{ … }
static void imx_irqsteer_irq_bus_lock(struct irq_data *d)
{ … }
static void imx_irqsteer_irq_bus_sync_unlock(struct irq_data *d)
{ … }
static const struct irq_chip imx_irqsteer_irq_chip = …;
static int imx_irqsteer_irq_map(struct irq_domain *h, unsigned int irq,
irq_hw_number_t hwirq)
{ … }
static const struct irq_domain_ops imx_irqsteer_domain_ops = …;
static int imx_irqsteer_get_hwirq_base(struct irqsteer_data *data, u32 irq)
{ … }
static void imx_irqsteer_irq_handler(struct irq_desc *desc)
{ … }
static int imx_irqsteer_probe(struct platform_device *pdev)
{ … }
static void imx_irqsteer_remove(struct platform_device *pdev)
{ … }
#ifdef CONFIG_PM
static void imx_irqsteer_save_regs(struct irqsteer_data *data)
{ … }
static void imx_irqsteer_restore_regs(struct irqsteer_data *data)
{ … }
static int imx_irqsteer_suspend(struct device *dev)
{ … }
static int imx_irqsteer_resume(struct device *dev)
{ … }
#endif
static const struct dev_pm_ops imx_irqsteer_pm_ops = …;
static const struct of_device_id imx_irqsteer_dt_ids[] = …;
static struct platform_driver imx_irqsteer_driver = …;
builtin_platform_driver(…) …;