Loading drivers/base/regmap/regmap-irq.c +9 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,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); Loading Loading @@ -361,6 +364,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); Loading Loading @@ -569,6 +575,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); Loading include/linux/regmap.h +1 −0 Original line number Diff line number Diff line Loading @@ -1000,6 +1000,7 @@ struct regmap_irq_chip { bool mask_invert:1; bool use_ack:1; bool ack_invert:1; bool clear_ack:1; bool wake_invert:1; bool runtime_pm:1; bool type_invert:1; Loading Loading
drivers/base/regmap/regmap-irq.c +9 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,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); Loading Loading @@ -361,6 +364,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); Loading Loading @@ -569,6 +575,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); Loading
include/linux/regmap.h +1 −0 Original line number Diff line number Diff line Loading @@ -1000,6 +1000,7 @@ struct regmap_irq_chip { bool mask_invert:1; bool use_ack:1; bool ack_invert:1; bool clear_ack:1; bool wake_invert:1; bool runtime_pm:1; bool type_invert:1; Loading