Skip to content

Commit

Permalink
regmap-irq: Refactor checks for status bulk read support
Browse files Browse the repository at this point in the history
There are several conditions that must be satisfied to support
bulk read of status registers. Move the check into a function
to avoid duplicating it in two places.

Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@gmail.com>
Link: https://lore.kernel.org/r/20220623211420.918875-8-aidanmacdonald.0x0@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Aidan MacDonald authored and Mark Brown committed Jun 29, 2022
1 parent ad22b3e commit f7cc506
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions drivers/base/regmap/regmap-irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,14 @@ struct regmap_irq *irq_to_regmap_irq(struct regmap_irq_chip_data *data,
return &data->chip->irqs[irq];
}

static bool regmap_irq_can_bulk_read_status(struct regmap_irq_chip_data *data)
{
struct regmap *map = data->map;

return data->irq_reg_stride == 1 && map->reg_stride == 1 &&
!map->use_single_read;
}

static void regmap_irq_lock(struct irq_data *data)
{
struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
Expand Down Expand Up @@ -467,8 +475,7 @@ static irqreturn_t regmap_irq_thread(int irq, void *d)
}

}
} else if (!map->use_single_read && map->reg_stride == 1 &&
data->irq_reg_stride == 1) {
} else if (regmap_irq_can_bulk_read_status(data)) {

u8 *buf8 = data->status_reg_buf;
u16 *buf16 = data->status_reg_buf;
Expand Down Expand Up @@ -729,8 +736,7 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
else
d->irq_reg_stride = 1;

if (!map->use_single_read && map->reg_stride == 1 &&
d->irq_reg_stride == 1) {
if (regmap_irq_can_bulk_read_status(d)) {
d->status_reg_buf = kmalloc_array(chip->num_regs,
map->format.val_bytes,
GFP_KERNEL);
Expand Down

0 comments on commit f7cc506

Please sign in to comment.