diff options
Diffstat (limited to 'drivers/mfd/tps65910.c')
| -rw-r--r-- | drivers/mfd/tps65910.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c index 15f2c8dea2f..dbf85fc07d2 100644 --- a/drivers/mfd/tps65910.c +++ b/drivers/mfd/tps65910.c @@ -26,6 +26,7 @@ #include <linux/regmap.h> #include <linux/mfd/tps65910.h> #include <linux/of_device.h> +#include <linux/suspend.h> static struct resource rtc_resources[] = { { @@ -225,6 +226,29 @@ static struct regmap_irq_chip tps65910_irq_chip = { .ack_base = TPS65910_INT_STS, }; +static int tps65910_irq; + +static int tps65910_irq_pm_notifier(struct notifier_block *notifier, + unsigned long pm_event, void *unused) +{ + switch (pm_event) { + case PM_SUSPEND_PREPARE: + disable_irq(tps65910_irq); + break; + case PM_POST_SUSPEND: + enable_irq(tps65910_irq); + break; + default: + break; + } + + return NOTIFY_DONE; +} + +static struct notifier_block tps65910_irq_pm_notifier_block = { + .notifier_call = tps65910_irq_pm_notifier, +}; + static int tps65910_irq_init(struct tps65910 *tps65910, int irq, struct tps65910_platform_data *pdata) { @@ -251,6 +275,8 @@ static int tps65910_irq_init(struct tps65910 *tps65910, int irq, } tps65910->chip_irq = irq; + tps65910_irq = irq; + register_pm_notifier(&tps65910_irq_pm_notifier_block); ret = regmap_add_irq_chip(tps65910->regmap, tps65910->chip_irq, IRQF_ONESHOT, pdata->irq_base, tps6591x_irqs_chip, &tps65910->irq_data); |