lkml.org 
[lkml]   [2023]   [May]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 1/4] regmap-irq: Remove type registers
    Date
    No remaining users, these have been replaced by config registers.

    Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@gmail.com>
    ---
    drivers/base/regmap/regmap-irq.c | 82 ++++----------------------------
    include/linux/regmap.h | 7 ---
    2 files changed, 8 insertions(+), 81 deletions(-)

    diff --git a/drivers/base/regmap/regmap-irq.c b/drivers/base/regmap/regmap-irq.c
    index 48bff842cc31..c11295e3fe5e 100644
    --- a/drivers/base/regmap/regmap-irq.c
    +++ b/drivers/base/regmap/regmap-irq.c
    @@ -181,20 +181,6 @@ static void regmap_irq_sync_unlock(struct irq_data *data)
    }
    }

    - /* Don't update the type bits if we're using mask bits for irq type. */
    - if (!d->chip->type_in_mask) {
    - for (i = 0; i < d->chip->num_type_reg; i++) {
    - if (!d->type_buf_def[i])
    - continue;
    - reg = d->get_irq_reg(d, d->chip->type_base, i);
    - ret = regmap_update_bits(d->map, reg,
    - d->type_buf_def[i], d->type_buf[i]);
    - if (ret != 0)
    - dev_err(d->map->dev, "Failed to sync type in %x\n",
    - reg);
    - }
    - }
    -
    for (i = 0; i < d->chip->num_config_bases; i++) {
    for (j = 0; j < d->chip->num_config_regs; j++) {
    reg = d->get_irq_reg(d, d->chip->config_base[i], j);
    @@ -273,36 +259,11 @@ static int regmap_irq_set_type(struct irq_data *data, unsigned int type)

    reg = t->type_reg_offset / map->reg_stride;

    - if (t->type_reg_mask)
    - d->type_buf[reg] &= ~t->type_reg_mask;
    - else
    - d->type_buf[reg] &= ~(t->type_falling_val |
    - t->type_rising_val |
    - t->type_level_low_val |
    - t->type_level_high_val);
    - switch (type) {
    - case IRQ_TYPE_EDGE_FALLING:
    - d->type_buf[reg] |= t->type_falling_val;
    - break;
    -
    - case IRQ_TYPE_EDGE_RISING:
    - d->type_buf[reg] |= t->type_rising_val;
    - break;
    -
    - case IRQ_TYPE_EDGE_BOTH:
    - d->type_buf[reg] |= (t->type_falling_val |
    - t->type_rising_val);
    - break;
    -
    - case IRQ_TYPE_LEVEL_HIGH:
    - d->type_buf[reg] |= t->type_level_high_val;
    - break;
    -
    - case IRQ_TYPE_LEVEL_LOW:
    - d->type_buf[reg] |= t->type_level_low_val;
    - break;
    - default:
    - return -EINVAL;
    + if (d->chip->type_in_mask) {
    + ret = regmap_irq_set_type_config_simple(&d->type_buf, type,
    + irq_data, reg, d->chip->irq_drv_data);
    + if (ret)
    + return ret;
    }

    if (d->chip->set_type_config) {
    @@ -707,8 +668,6 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
    struct regmap_irq_chip_data *d;
    int i;
    int ret = -ENOMEM;
    - int num_type_reg;
    - int num_regs;
    u32 reg;

    if (chip->num_regs <= 0)
    @@ -733,9 +692,6 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
    return -EINVAL;
    }

    - if (chip->num_type_reg)
    - dev_warn(map->dev, "type registers are deprecated; use config registers instead");
    -
    if (irq_base) {
    irq_base = irq_alloc_descs(irq_base, 0, chip->num_irqs, 0);
    if (irq_base < 0) {
    @@ -780,21 +736,13 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
    goto err_alloc;
    }

    - /*
    - * Use num_config_regs if defined, otherwise fall back to num_type_reg
    - * to maintain backward compatibility.
    - */
    - num_type_reg = chip->num_config_regs ? chip->num_config_regs
    - : chip->num_type_reg;
    - num_regs = chip->type_in_mask ? chip->num_regs : num_type_reg;
    - if (num_regs) {
    - d->type_buf_def = kcalloc(num_regs,
    + if (chip->type_in_mask) {
    + d->type_buf_def = kcalloc(chip->num_regs,
    sizeof(*d->type_buf_def), GFP_KERNEL);
    if (!d->type_buf_def)
    goto err_alloc;

    - d->type_buf = kcalloc(num_regs, sizeof(*d->type_buf),
    - GFP_KERNEL);
    + d->type_buf = kcalloc(chip->num_regs, sizeof(*d->type_buf), GFP_KERNEL);
    if (!d->type_buf)
    goto err_alloc;
    }
    @@ -970,20 +918,6 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
    }
    }

    - if (chip->num_type_reg && !chip->type_in_mask) {
    - for (i = 0; i < chip->num_type_reg; ++i) {
    - reg = d->get_irq_reg(d, d->chip->type_base, i);
    -
    - ret = regmap_read(map, reg, &d->type_buf_def[i]);
    -
    - if (ret) {
    - dev_err(map->dev, "Failed to get type defaults at 0x%x: %d\n",
    - reg, ret);
    - goto err_alloc;
    - }
    - }
    - }
    -
    if (irq_base)
    d->domain = irq_domain_create_legacy(fwnode, chip->num_irqs,
    irq_base, 0,
    diff --git a/include/linux/regmap.h b/include/linux/regmap.h
    index 2ad0e3d77b95..0b4b9eca480d 100644
    --- a/include/linux/regmap.h
    +++ b/include/linux/regmap.h
    @@ -1542,8 +1542,6 @@ struct regmap_irq_chip_data;
    * @ack_base: Base ack address. If zero then the chip is clear on read.
    * Using zero value is possible with @use_ack bit.
    * @wake_base: Base address for wake enables. If zero unsupported.
    - * @type_base: Base address for irq type. If zero unsupported. Deprecated,
    - * use @config_base instead.
    * @config_base: Base address for IRQ type config regs. If null unsupported.
    * @irq_reg_stride: Stride to use for chips where registers are not contiguous.
    * @init_ack_masked: Ack all masked interrupts once during initalization.
    @@ -1581,9 +1579,6 @@ struct regmap_irq_chip_data;
    * @irqs: Descriptors for individual IRQs. Interrupt numbers are
    * assigned based on the index in the array of the interrupt.
    * @num_irqs: Number of descriptors.
    - *
    - * @num_type_reg: Number of type registers. Deprecated, use config registers
    - * instead.
    * @num_config_bases: Number of config base registers.
    * @num_config_regs: Number of config registers for each config base register.
    *
    @@ -1621,7 +1616,6 @@ struct regmap_irq_chip {
    unsigned int unmask_base;
    unsigned int ack_base;
    unsigned int wake_base;
    - unsigned int type_base;
    const unsigned int *config_base;
    unsigned int irq_reg_stride;
    unsigned int init_ack_masked:1;
    @@ -1642,7 +1636,6 @@ struct regmap_irq_chip {
    const struct regmap_irq *irqs;
    int num_irqs;

    - int num_type_reg;
    int num_config_bases;
    int num_config_regs;

    --
    2.39.2
    \
     
     \ /
      Last update: 2023-05-11 11:14    [W:2.319 / U:0.208 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site