]> git.karo-electronics.de Git - linux-beck.git/commitdiff
regmap: Suppress noop writes in regmap_update_bits()
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 18 Nov 2011 16:03:50 +0000 (16:03 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 20 Nov 2011 20:56:38 +0000 (20:56 +0000)
If the new register value is identical to the original one then suppress
the write to the hardware in regmap_update_bits(), saving some I/O cost.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/base/regmap/regmap.c

index e533368e5598bec983e1c85117519a20fa78f6ae..10ecbba32e10992504a5fb1e65716d7d38b3a266 100644 (file)
@@ -583,18 +583,19 @@ int regmap_update_bits(struct regmap *map, unsigned int reg,
                       unsigned int mask, unsigned int val)
 {
        int ret;
-       unsigned int tmp;
+       unsigned int tmp, orig;
 
        mutex_lock(&map->lock);
 
-       ret = _regmap_read(map, reg, &tmp);
+       ret = _regmap_read(map, reg, &orig);
        if (ret != 0)
                goto out;
 
-       tmp &= ~mask;
+       tmp = orig & ~mask;
        tmp |= val & mask;
 
-       ret = _regmap_write(map, reg, tmp);
+       if (tmp != orig)
+               ret = _regmap_write(map, reg, tmp);
 
 out:
        mutex_unlock(&map->lock);