diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2012-03-01 17:26:13 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-03-02 18:08:37 -0800 |
commit | eaf17073cdb8ecdb00ef0d6f00c176576f13bcf6 (patch) | |
tree | 1d3482be574d74f605afa4b644086fa9d32773db /drivers/mfd | |
parent | 31ed5b131a741032bd335d1c6e208916e79bcea5 (diff) |
mfd: tps6591x: implement irq_set_wake() for tps6591x interrupts
Implementing the function irq_set_wake() for the interrupts
supported by pmu.
Change-Id: I7dab75d82becbb557af5e1c38f6ed7c93e6761cb
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/86907
Diffstat (limited to 'drivers/mfd')
-rw-r--r-- | drivers/mfd/tps6591x.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/mfd/tps6591x.c b/drivers/mfd/tps6591x.c index b475e06712d5..bd60e09c3168 100644 --- a/drivers/mfd/tps6591x.c +++ b/drivers/mfd/tps6591x.c @@ -115,6 +115,7 @@ struct tps6591x { struct irq_chip irq_chip; struct mutex irq_lock; int irq_base; + int irq_main; u32 irq_en; u8 mask_cache[3]; u8 mask_reg[3]; @@ -509,6 +510,17 @@ static int tps6591x_irq_set_type(struct irq_data *irq_data, unsigned int type) return 0; } +#ifdef CONFIG_PM_SLEEP +static int tps6591x_irq_set_wake(struct irq_data *irq_data, unsigned int on) +{ + struct tps6591x *tps6591x = irq_data_get_irq_chip_data(irq_data); + return irq_set_irq_wake(tps6591x->irq_main, on); +} +#else +#define tps6591x_irq_set_wake NULL +#endif + + static irqreturn_t tps6591x_irq(int irq, void *data) { struct tps6591x *tps6591x = data; @@ -580,6 +592,7 @@ static int __devinit tps6591x_irq_init(struct tps6591x *tps6591x, int irq, tps6591x_write(tps6591x->dev, TPS6591X_INT_STS + 2*i, 0xff); tps6591x->irq_base = irq_base; + tps6591x->irq_main = irq; tps6591x->irq_chip.name = "tps6591x"; tps6591x->irq_chip.irq_mask = tps6591x_irq_mask; @@ -587,6 +600,7 @@ static int __devinit tps6591x_irq_init(struct tps6591x *tps6591x, int irq, tps6591x->irq_chip.irq_bus_lock = tps6591x_irq_lock; tps6591x->irq_chip.irq_bus_sync_unlock = tps6591x_irq_sync_unlock; tps6591x->irq_chip.irq_set_type = tps6591x_irq_set_type; + tps6591x->irq_chip.irq_set_wake = tps6591x_irq_set_wake; for (i = 0; i < ARRAY_SIZE(tps6591x_irqs); i++) { int __irq = i + tps6591x->irq_base; |