regmap: irq: enable wake support by default
Laxman Dewangan [Fri, 19 Apr 2013 13:43:16 +0000 (18:43 +0530)]
regmap-irq framework is used vastly by mfd drivers and some of
devices like TPS65910, TPS80036 do not support the wake base
register to enable wake.

Currently wake in regmap-irq only supported if client driver
passes the wake base register.

As the regmap-irq is mostly used by mfd devices and it is require
to have wake support from these devices in most of use cases,
enabling wake support by default in regmap-irq.

(Cherrypicked from mainline
55ac85e942c6783e728964861df36fc80e8ced93)

Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

Change-Id: I7efb78dea797711e7c243b24039c91311d417237
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/221067
GVS: Gerrit_Virtual_Submit

drivers/base/regmap/regmap-irq.c

index 1913d39..e9fb4ef 100644 (file)
@@ -118,16 +118,15 @@ static int regmap_irq_set_wake(struct irq_data *data, unsigned int on)
        struct regmap *map = d->map;
        const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
 
-       if (!d->chip->wake_base)
-               return -EINVAL;
-
        if (on) {
-               d->wake_buf[irq_data->reg_offset / map->reg_stride]
-                       &= ~irq_data->mask;
+               if (d->wake_buf)
+                       d->wake_buf[irq_data->reg_offset / map->reg_stride]
+                               &= ~irq_data->mask;
                d->wake_count++;
        } else {
-               d->wake_buf[irq_data->reg_offset / map->reg_stride]
-                       |= irq_data->mask;
+               if (d->wake_buf)
+                       d->wake_buf[irq_data->reg_offset / map->reg_stride]
+                               |= irq_data->mask;
                d->wake_count--;
        }
 
@@ -291,11 +290,6 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
 
        d->irq_chip = regmap_irq_chip;
        d->irq_chip.name = chip->name;
-       if (!chip->wake_base) {
-               d->irq_chip.irq_set_wake = NULL;
-               d->irq_chip.flags |= IRQCHIP_MASK_ON_SUSPEND |
-                                    IRQCHIP_SKIP_SET_WAKE;
-       }
        d->irq = irq;
        d->map = map;
        d->chip = chip;