regmap: Add helper function for checking if a register range is volatile
Lars-Peter Clausen [Tue, 8 Nov 2011 17:37:25 +0000 (18:37 +0100)]
We already have the same code for checking whether a register range is volatile
in two different places. Instead of duplicating it once more  add a small helper
function for checking whether a register range is voltaile.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
(cherry picked from commit 82cd9965c37be7e2cbcb79ad991a6b9860f855d8)

Change-Id: I95de94b0883cd01b5290181a227f733b914e702e
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/87551

drivers/base/regmap/regmap.c

index e527b0c..4afab61 100644 (file)
@@ -64,6 +64,18 @@ bool regmap_precious(struct regmap *map, unsigned int reg)
        return false;
 }
 
+static bool regmap_volatile_range(struct regmap *map, unsigned int reg,
+       unsigned int num)
+{
+       unsigned int i;
+
+       for (i = 0; i < num; i++)
+               if (!regmap_volatile(map, reg + i))
+                       return false;
+
+       return true;
+}
+
 static void regmap_format_4_12_write(struct regmap *map,
                                     unsigned int reg, unsigned int val)
 {
@@ -483,15 +495,11 @@ EXPORT_SYMBOL_GPL(regmap_read);
 int regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
                    size_t val_len)
 {
+       size_t val_count = val_len / map->format.val_bytes;
        int ret;
-       int i;
-       bool vol = true;
-
-       for (i = 0; i < val_len / map->format.val_bytes; i++)
-               if (!regmap_volatile(map, reg + i))
-                       vol = false;
 
-       WARN_ON(!vol && map->cache_type != REGCACHE_NONE);
+       WARN_ON(!regmap_volatile_range(map, reg, val_count) &&
+               map->cache_type != REGCACHE_NONE);
 
        mutex_lock(&map->lock);
 
@@ -519,16 +527,11 @@ int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
 {
        int ret, i;
        size_t val_bytes = map->format.val_bytes;
-       bool vol = true;
+       bool vol = regmap_volatile_range(map, reg, val_count);
 
        if (!map->format.parse_val)
                return -EINVAL;
 
-       /* Is this a block of volatile registers? */
-       for (i = 0; i < val_count; i++)
-               if (!regmap_volatile(map, reg + i))
-                       vol = false;
-
        if (vol || map->cache_type == REGCACHE_NONE) {
                ret = regmap_raw_read(map, reg, val, val_bytes * val_count);
                if (ret != 0)