ANDROID: GKI: regmap: irq: Add support to clear ack registers
WCD codec requires clear registers to be written '1' and '0' for clearing interrupts. Add this support in regmap irq to clear ack registers. Change-Id: I399592fc0ee7f3a01a32267684a9be340076ffb1 Signed-off-by: Ramprasad Katkam <katkam@codeaurora.org> Bug: 153500481 [saravanak Minor edit to commit text] (cherry picked from commit 25401ed921044cafdf588efb2e6ba19e8454f14a) Signed-off-by: Saravana Kannan <saravanak@google.com>
This commit is contained in:
committed by
Saravana Kannan
parent
6b5a4bd4a4
commit
171d2c87ca
@ -154,6 +154,9 @@ static void regmap_irq_sync_unlock(struct irq_data *data)
|
||||
ret = regmap_write(map, reg, ~d->mask_buf[i]);
|
||||
else
|
||||
ret = regmap_write(map, reg, d->mask_buf[i]);
|
||||
/* some chips needs to clear ack reg after ack */
|
||||
if (d->chip->clear_ack)
|
||||
ret = regmap_write(map, reg, 0x0);
|
||||
if (ret != 0)
|
||||
dev_err(d->map->dev, "Failed to ack 0x%x: %d\n",
|
||||
reg, ret);
|
||||
@ -364,6 +367,9 @@ static irqreturn_t regmap_irq_thread(int irq, void *d)
|
||||
reg = chip->ack_base +
|
||||
(i * map->reg_stride * data->irq_reg_stride);
|
||||
ret = regmap_write(map, reg, data->status_buf[i]);
|
||||
/* some chips needs to clear ack reg after ack */
|
||||
if (chip->clear_ack)
|
||||
ret = regmap_write(map, reg, 0x0);
|
||||
if (ret != 0)
|
||||
dev_err(map->dev, "Failed to ack 0x%x: %d\n",
|
||||
reg, ret);
|
||||
@ -575,6 +581,9 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
|
||||
else
|
||||
ret = regmap_write(map, reg,
|
||||
d->status_buf[i] & d->mask_buf[i]);
|
||||
/* some chips needs to clear ack reg after ack */
|
||||
if (chip->clear_ack)
|
||||
ret = regmap_write(map, reg, 0x0);
|
||||
if (ret != 0) {
|
||||
dev_err(map->dev, "Failed to ack 0x%x: %d\n",
|
||||
reg, ret);
|
||||
|
||||
@ -1145,6 +1145,7 @@ struct regmap_irq_chip {
|
||||
unsigned int wake_base;
|
||||
unsigned int type_base;
|
||||
unsigned int irq_reg_stride;
|
||||
unsigned int clear_ack;
|
||||
bool mask_writeonly:1;
|
||||
bool init_ack_masked:1;
|
||||
bool mask_invert:1;
|
||||
|
||||
Reference in New Issue
Block a user