regmap: irq: Fix sync of wake statuses to hardware
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 4 Jan 2013 16:32:54 +0000 (16:32 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 4 Jan 2013 20:53:43 +0000 (20:53 +0000)
This wasn't implemented but happened to work on test systems due to lack
of wake mask inversion support.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/base/regmap/regmap-irq.c

index aaf599a320b3eeb949137118511cf338460b5186..be5579964be06ecb852badebb9481e26b046d25a 100644 (file)
@@ -88,6 +88,17 @@ static void regmap_irq_sync_unlock(struct irq_data *data)
                if (ret != 0)
                        dev_err(d->map->dev, "Failed to sync masks in %x\n",
                                reg);
+
+               reg = d->chip->wake_base +
+                       (i * map->reg_stride * d->irq_reg_stride);
+               if (d->wake_buf) {
+                       ret = regmap_update_bits(d->map, reg,
+                                        d->mask_buf_def[i], d->wake_buf[i]);
+                       if (ret != 0)
+                               dev_err(d->map->dev,
+                                       "Failed to sync wakes in %x: %d\n",
+                                       reg, ret);
+               }
        }
 
        if (d->chip->runtime_pm)