diff options
author | Mark Brown <broonie@linaro.org> | 2013-10-28 21:01:34 +0100 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-10-28 21:01:34 +0100 |
commit | 6cf3d823230794a6e6b3f99541cdb91176614036 (patch) | |
tree | 51ccc28e05926f87f223044d8f765acb6cc9bb51 | |
parent | Merge remote-tracking branch 'regmap/topic/field' into regmap-next (diff) | |
parent | regmap: irq: clear status when disable irq (diff) | |
download | linux-6cf3d823230794a6e6b3f99541cdb91176614036.tar.xz linux-6cf3d823230794a6e6b3f99541cdb91176614036.zip |
Merge remote-tracking branch 'regmap/topic/irq' into regmap-next
-rw-r--r-- | drivers/base/regmap/regmap-irq.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/base/regmap/regmap-irq.c b/drivers/base/regmap/regmap-irq.c index d10456ffd811..763c60d3d277 100644 --- a/drivers/base/regmap/regmap-irq.c +++ b/drivers/base/regmap/regmap-irq.c @@ -105,6 +105,22 @@ static void regmap_irq_sync_unlock(struct irq_data *data) "Failed to sync wakes in %x: %d\n", reg, ret); } + + if (!d->chip->init_ack_masked) + continue; + /* + * Ack all the masked interrupts uncondictionly, + * OR if there is masked interrupt which hasn't been Acked, + * it'll be ignored in irq handler, then may introduce irq storm + */ + if (d->mask_buf[i] && d->chip->ack_base) { + reg = d->chip->ack_base + + (i * map->reg_stride * d->irq_reg_stride); + ret = regmap_write(map, reg, d->mask_buf[i]); + if (ret != 0) + dev_err(d->map->dev, "Failed to ack 0x%x: %d\n", + reg, ret); + } } if (d->chip->runtime_pm) |