regmap: irq: Only update mask bits when doing initial mask
Mark Brown [Wed, 1 Aug 2012 19:29:14 +0000 (20:29 +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>
(cherry picked from commit 0eb46ad0c8d60943c1f46cef795fc537fbffd177)

Change-Id: I4e9f42422e961f9f842ab793227af7be25ca82cf
Signed-off-by: Mallikarjun Kasoju <mkasoju@nvidia.com>
Reviewed-on: http://git-master/r/161549
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
GVS: Gerrit_Virtual_Submit

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);