regmap: irq: Only update mask bits when doing initial mask
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 1 Aug 2012 19:29:14 +0000 (20:29 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sat, 4 Aug 2012 11:13:53 +0000 (12:13 +0100)
Don't write the full register, it's possible there's bits other than the
masks in the same register which we shouldn't be changing.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Tested-by: Stephen Warren <swarren@wwwdotorg.org>
drivers/base/regmap/regmap-irq.c

index c7e5b18..4a52743 100644 (file)
@@ -306,7 +306,8 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
                d->mask_buf[i] = d->mask_buf_def[i];
                reg = chip->mask_base +
                        (i * map->reg_stride * d->irq_reg_stride);
-               ret = regmap_write(map, reg, d->mask_buf[i]);
+               ret = regmap_update_bits(map, reg,
+                                        d->mask_buf[i], d->mask_buf[i]);
                if (ret != 0) {
                        dev_err(map->dev, "Failed to set masks in 0x%x: %d\n",
                                reg, ret);