#define pr_fmt(fmt) …
#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/err.h>
#include <linux/ssbi.h>
#include <linux/regmap.h>
#include <linux/of_platform.h>
#include <linux/mfd/core.h>
#define SSBI_REG_ADDR_IRQ_BASE …
#define SSBI_REG_ADDR_IRQ_ROOT …
#define SSBI_REG_ADDR_IRQ_M_STATUS1 …
#define SSBI_REG_ADDR_IRQ_M_STATUS2 …
#define SSBI_REG_ADDR_IRQ_M_STATUS3 …
#define SSBI_REG_ADDR_IRQ_M_STATUS4 …
#define SSBI_REG_ADDR_IRQ_BLK_SEL …
#define SSBI_REG_ADDR_IRQ_IT_STATUS …
#define SSBI_REG_ADDR_IRQ_CONFIG …
#define SSBI_REG_ADDR_IRQ_RT_STATUS …
#define PM8821_SSBI_REG_ADDR_IRQ_BASE …
#define PM8821_SSBI_REG_ADDR_IRQ_MASTER0 …
#define PM8821_SSBI_REG_ADDR_IRQ_MASTER1 …
#define PM8821_SSBI_REG(m, b, offset) …
#define PM8821_SSBI_ADDR_IRQ_ROOT(m, b) …
#define PM8821_SSBI_ADDR_IRQ_CLEAR(m, b) …
#define PM8821_SSBI_ADDR_IRQ_MASK(m, b) …
#define PM8821_SSBI_ADDR_IRQ_RT_STATUS(m, b) …
#define PM8821_BLOCKS_PER_MASTER …
#define PM_IRQF_LVL_SEL …
#define PM_IRQF_MASK_FE …
#define PM_IRQF_MASK_RE …
#define PM_IRQF_CLR …
#define PM_IRQF_BITS_MASK …
#define PM_IRQF_BITS_SHIFT …
#define PM_IRQF_WRITE …
#define PM_IRQF_MASK_ALL …
#define REG_HWREV …
#define REG_HWREV_2 …
#define PM8XXX_NR_IRQS …
#define PM8821_NR_IRQS …
struct pm_irq_data { … };
struct pm_irq_chip { … };
static int pm8xxx_read_block_irq(struct pm_irq_chip *chip, unsigned int bp,
unsigned int *ip)
{ … }
static int
pm8xxx_config_irq(struct pm_irq_chip *chip, unsigned int bp, unsigned int cp)
{ … }
static int pm8xxx_irq_block_handler(struct pm_irq_chip *chip, int block)
{ … }
static int pm8xxx_irq_master_handler(struct pm_irq_chip *chip, int master)
{ … }
static irqreturn_t pm8xxx_irq_handler(int irq, void *data)
{ … }
static void pm8821_irq_block_handler(struct pm_irq_chip *chip,
int master, int block)
{ … }
static inline void pm8821_irq_master_handler(struct pm_irq_chip *chip,
int master, u8 master_val)
{ … }
static irqreturn_t pm8821_irq_handler(int irq, void *data)
{ … }
static void pm8xxx_irq_mask_ack(struct irq_data *d)
{ … }
static void pm8xxx_irq_unmask(struct irq_data *d)
{ … }
static int pm8xxx_irq_set_type(struct irq_data *d, unsigned int flow_type)
{ … }
static int pm8xxx_irq_get_irqchip_state(struct irq_data *d,
enum irqchip_irq_state which,
bool *state)
{ … }
static struct irq_chip pm8xxx_irq_chip = …;
static void pm8xxx_irq_domain_map(struct pm_irq_chip *chip,
struct irq_domain *domain, unsigned int irq,
irq_hw_number_t hwirq, unsigned int type)
{ … }
static int pm8xxx_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
unsigned int nr_irqs, void *data)
{ … }
static const struct irq_domain_ops pm8xxx_irq_domain_ops = …;
static void pm8821_irq_mask_ack(struct irq_data *d)
{ … }
static void pm8821_irq_unmask(struct irq_data *d)
{ … }
static int pm8821_irq_get_irqchip_state(struct irq_data *d,
enum irqchip_irq_state which,
bool *state)
{ … }
static struct irq_chip pm8821_irq_chip = …;
static const struct regmap_config ssbi_regmap_config = …;
static const struct pm_irq_data pm8xxx_data = …;
static const struct pm_irq_data pm8821_data = …;
static const struct of_device_id pm8xxx_id_table[] = …;
MODULE_DEVICE_TABLE(of, pm8xxx_id_table);
static int pm8xxx_probe(struct platform_device *pdev)
{ … }
static int pm8xxx_remove_child(struct device *dev, void *unused)
{ … }
static void pm8xxx_remove(struct platform_device *pdev)
{ … }
static struct platform_driver pm8xxx_driver = …;
static int __init pm8xxx_init(void)
{ … }
subsys_initcall(pm8xxx_init);
static void __exit pm8xxx_exit(void)
{ … }
module_exit(pm8xxx_exit);
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_VERSION(…) …;
MODULE_ALIAS(…) …;