#include <linux/device.h>
#include <linux/interrupt.h>
#include <linux/irqdomain.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/mfd/core.h>
#include <linux/mfd/tps65217.h>
static struct resource charger_resources[] = {
DEFINE_RES_IRQ_NAMED(TPS65217_IRQ_AC, "AC"),
DEFINE_RES_IRQ_NAMED(TPS65217_IRQ_USB, "USB"),
static struct resource pb_resources[] = {
DEFINE_RES_IRQ_NAMED(TPS65217_IRQ_PB, "PB"),
static void tps65217_irq_lock(struct irq_data *data)
struct tps65217 *tps = irq_data_get_irq_chip_data(data);
mutex_lock(&tps->irq_lock);
static void tps65217_irq_sync_unlock(struct irq_data *data)
struct tps65217 *tps = irq_data_get_irq_chip_data(data);
ret = tps65217_set_bits(tps, TPS65217_REG_INT, TPS65217_INT_MASK,
tps->irq_mask, TPS65217_PROTECT_NONE);
dev_err(tps->dev, "Failed to sync IRQ masks\n");
mutex_unlock(&tps->irq_lock);
static void tps65217_irq_enable(struct irq_data *data)
struct tps65217 *tps = irq_data_get_irq_chip_data(data);
u8 mask = BIT(data->hwirq) << TPS65217_INT_SHIFT;
static void tps65217_irq_disable(struct irq_data *data)
struct tps65217 *tps = irq_data_get_irq_chip_data(data);
u8 mask = BIT(data->hwirq) << TPS65217_INT_SHIFT;
static struct irq_chip tps65217_irq_chip = {
.irq_bus_lock = tps65217_irq_lock,
.irq_bus_sync_unlock = tps65217_irq_sync_unlock,
.irq_enable = tps65217_irq_enable,
.irq_disable = tps65217_irq_disable,
static struct mfd_cell tps65217s[] = {
.of_compatible = "ti,tps65217-pmic",