regmap: regmap-irq: Remove default irq type setting from core
authorMatti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Tue, 18 Dec 2018 10:58:13 +0000 (12:58 +0200)
committerMark Brown <broonie@kernel.org>
Wed, 19 Dec 2018 17:52:54 +0000 (17:52 +0000)
The common code should not set IRQ type. Read HW defaults to the
cache at startup instead of forcing type to EDGE_BOTH. If
default setting is needed this should be done via normal
mechanisms or by chip specific code if normal mechanisms are not
suitable for some reason. Common regmap-irq code should not have
defaults hard-coded but keep the HW/boot defaults untouched.

Signed-off-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Tested-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/base/regmap/regmap-irq.c

index 603b1554f81c98e8714b7b58e5bec25608231540..8b216b2e2c1915a01df2ee0964e30b06db7d6321 100644 (file)
@@ -625,26 +625,20 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
        }
 
        if (chip->num_type_reg && !chip->type_in_mask) {
-               for (i = 0; i < chip->num_irqs; i++) {
-                       reg = chip->irqs[i].type_reg_offset / map->reg_stride;
-                       d->type_buf_def[reg] |= chip->irqs[i].type_rising_mask |
-                                       chip->irqs[i].type_falling_mask;
-               }
                for (i = 0; i < chip->num_type_reg; ++i) {
                        if (!d->type_buf_def[i])
                                continue;
 
                        reg = chip->type_base +
                                (i * map->reg_stride * d->type_reg_stride);
-                       if (chip->type_invert)
-                               ret = regmap_irq_update_bits(d, reg,
-                                       d->type_buf_def[i], 0xFF);
-                       else
-                               ret = regmap_irq_update_bits(d, reg,
-                                       d->type_buf_def[i], 0x0);
-                       if (ret != 0) {
-                               dev_err(map->dev,
-                                       "Failed to set type in 0x%x: %x\n",
+
+                       ret = regmap_read(map, reg, &d->type_buf_def[i]);
+
+                       if (d->chip->type_invert)
+                               d->type_buf_def[i] = ~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;
                        }