#include <linux/bitops.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/ioport.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
#include <linux/mfd/core.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/pinctrl/consumer.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#define I2C_INTR_STATUS_BASE …
#define INT_RT_STS_OFFSET …
#define INT_SET_TYPE_OFFSET …
#define INT_POL_HIGH_OFFSET …
#define INT_POL_LOW_OFFSET …
#define INT_LATCHED_CLR_OFFSET …
#define INT_EN_SET_OFFSET …
#define INT_EN_CLR_OFFSET …
#define INT_LATCHED_STS_OFFSET …
enum { … };
#define PM8008_PERIPH_0_BASE …
#define PM8008_PERIPH_1_BASE …
#define PM8008_PERIPH_2_BASE …
#define PM8008_PERIPH_3_BASE …
#define PM8008_TEMP_ALARM_ADDR …
#define PM8008_GPIO1_ADDR …
#define PM8008_GPIO2_ADDR …
#define PM8008_IRQ_MISC_UVLO …
#define PM8008_IRQ_MISC_OVLO …
#define PM8008_IRQ_MISC_OTST2 …
#define PM8008_IRQ_MISC_OTST3 …
#define PM8008_IRQ_MISC_LDO_OCP …
#define PM8008_IRQ_TEMP_ALARM …
#define PM8008_IRQ_GPIO1 …
#define PM8008_IRQ_GPIO2 …
enum { … };
static const unsigned int pm8008_config_regs[] = …;
#define _IRQ(_irq, _off, _mask, _types) …
static const struct regmap_irq pm8008_irqs[] = …;
static const unsigned int pm8008_periph_base[] = …;
static unsigned int pm8008_get_irq_reg(struct regmap_irq_chip_data *data,
unsigned int base, int index)
{ … }
static int pm8008_set_type_config(unsigned int **buf, unsigned int type,
const struct regmap_irq *irq_data, int idx,
void *irq_drv_data)
{ … }
static const struct regmap_irq_chip pm8008_irq_chip = …;
static const struct regmap_config qcom_mfd_regmap_cfg = …;
static const struct regmap_config pm8008_regmap_cfg_2 = …;
static const struct resource pm8008_temp_res[] = …;
static const struct mfd_cell pm8008_cells[] = …;
static void devm_irq_domain_fwnode_release(void *data)
{ … }
static int pm8008_probe(struct i2c_client *client)
{ … }
static const struct of_device_id pm8008_match[] = …;
MODULE_DEVICE_TABLE(of, pm8008_match);
static struct i2c_driver pm8008_mfd_driver = …;
module_i2c_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;