aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2013-10-28 16:01:34 -0400
committerMark Brown <broonie@linaro.org>2013-10-28 16:01:34 -0400
commit6cf3d823230794a6e6b3f99541cdb91176614036 (patch)
tree51ccc28e05926f87f223044d8f765acb6cc9bb51
parentf2783f0e9cac215df5b7ee0a903adfeabde90b24 (diff)
parent4bd7145b194af7cd96fc56d2ebee583b3edf03d3 (diff)
Merge remote-tracking branch 'regmap/topic/irq' into regmap-next
-rw-r--r--drivers/base/regmap/regmap-irq.c16
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)
105 "Failed to sync wakes in %x: %d\n", 105 "Failed to sync wakes in %x: %d\n",
106 reg, ret); 106 reg, ret);
107 } 107 }
108
109 if (!d->chip->init_ack_masked)
110 continue;
111 /*
112 * Ack all the masked interrupts uncondictionly,
113 * OR if there is masked interrupt which hasn't been Acked,
114 * it'll be ignored in irq handler, then may introduce irq storm
115 */
116 if (d->mask_buf[i] && d->chip->ack_base) {
117 reg = d->chip->ack_base +
118 (i * map->reg_stride * d->irq_reg_stride);
119 ret = regmap_write(map, reg, d->mask_buf[i]);
120 if (ret != 0)
121 dev_err(d->map->dev, "Failed to ack 0x%x: %d\n",
122 reg, ret);
123 }
108 } 124 }
109 125
110 if (d->chip->runtime_pm) 126 if (d->chip->runtime_pm)