#include <linux/err.h>
#include <linux/export.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/slab.h>
#include <linux/syscore_ops.h>
#include <linux/irqdomain.h>
#include <linux/irqchip.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/interrupt.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#define COMBINER_ENABLE_SET …
#define COMBINER_ENABLE_CLEAR …
#define COMBINER_INT_STATUS …
#define IRQ_IN_COMBINER …
static DEFINE_SPINLOCK(irq_controller_lock);
struct combiner_chip_data { … };
static struct combiner_chip_data *combiner_data;
static struct irq_domain *combiner_irq_domain;
static unsigned int max_nr = …;
static inline void __iomem *combiner_base(struct irq_data *data)
{ … }
static void combiner_mask_irq(struct irq_data *data)
{ … }
static void combiner_unmask_irq(struct irq_data *data)
{ … }
static void combiner_handle_cascade_irq(struct irq_desc *desc)
{ … }
#ifdef CONFIG_SMP
static int combiner_set_affinity(struct irq_data *d,
const struct cpumask *mask_val, bool force)
{ … }
#endif
static struct irq_chip combiner_chip = …;
static void __init combiner_cascade_irq(struct combiner_chip_data *combiner_data,
unsigned int irq)
{ … }
static void __init combiner_init_one(struct combiner_chip_data *combiner_data,
unsigned int combiner_nr,
void __iomem *base, unsigned int irq)
{ … }
static int combiner_irq_domain_xlate(struct irq_domain *d,
struct device_node *controller,
const u32 *intspec, unsigned int intsize,
unsigned long *out_hwirq,
unsigned int *out_type)
{ … }
static int combiner_irq_domain_map(struct irq_domain *d, unsigned int irq,
irq_hw_number_t hw)
{ … }
static const struct irq_domain_ops combiner_irq_domain_ops = …;
static void __init combiner_init(void __iomem *combiner_base,
struct device_node *np)
{ … }
#ifdef CONFIG_PM
static int combiner_suspend(void)
{ … }
static void combiner_resume(void)
{ … }
#else
#define combiner_suspend …
#define combiner_resume …
#endif
static struct syscore_ops combiner_syscore_ops = …;
static int __init combiner_of_init(struct device_node *np,
struct device_node *parent)
{ … }
IRQCHIP_DECLARE(exynos4210_combiner, "samsung,exynos4210-combiner",
combiner_of_init);