aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/regmap/regmap-irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/base/regmap/regmap-irq.c')
-rw-r--r--drivers/base/regmap/regmap-irq.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/base/regmap/regmap-irq.c b/drivers/base/regmap/regmap-irq.c
index 1643e889bafc..d10456ffd811 100644
--- a/drivers/base/regmap/regmap-irq.c
+++ b/drivers/base/regmap/regmap-irq.c
@@ -418,6 +418,31 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
418 reg, ret); 418 reg, ret);
419 goto err_alloc; 419 goto err_alloc;
420 } 420 }
421
422 if (!chip->init_ack_masked)
423 continue;
424
425 /* Ack masked but set interrupts */
426 reg = chip->status_base +
427 (i * map->reg_stride * d->irq_reg_stride);
428 ret = regmap_read(map, reg, &d->status_buf[i]);
429 if (ret != 0) {
430 dev_err(map->dev, "Failed to read IRQ status: %d\n",
431 ret);
432 goto err_alloc;
433 }
434
435 if (d->status_buf[i] && chip->ack_base) {
436 reg = chip->ack_base +
437 (i * map->reg_stride * d->irq_reg_stride);
438 ret = regmap_write(map, reg,
439 d->status_buf[i] & d->mask_buf[i]);
440 if (ret != 0) {
441 dev_err(map->dev, "Failed to ack 0x%x: %d\n",
442 reg, ret);
443 goto err_alloc;
444 }
445 }
421 } 446 }
422 447
423 /* Wake is disabled by default */ 448 /* Wake is disabled by default */