summaryrefslogtreecommitdiff
path: root/drivers/mfd/tps65910.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mfd/tps65910.c')
-rw-r--r--drivers/mfd/tps65910.c26
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);