regmap: Properly round cache_word_size
Lars-Peter Clausen [Wed, 16 Nov 2011 19:34:03 +0000 (20:34 +0100)]
regcache currently only properly works with val bit sizes of 8 or 16, since
it will, when calculating the cache word size, round down. This causes the
cache storage to be too small to hold the full register value. Fix this by
rounding up instead.

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

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

drivers/base/regmap/regcache.c

index e6b7fdc..defa41d 100644 (file)
@@ -110,8 +110,8 @@ int regcache_init(struct regmap *map, const struct regmap_config *config)
        map->num_reg_defaults = config->num_reg_defaults;
        map->num_reg_defaults_raw = config->num_reg_defaults_raw;
        map->reg_defaults_raw = config->reg_defaults_raw;
-       map->cache_size_raw = (config->val_bits / 8) * config->num_reg_defaults_raw;
-       map->cache_word_size = config->val_bits / 8;
+       map->cache_word_size = DIV_ROUND_UP(config->val_bits, 8);
+       map->cache_size_raw = map->cache_word_size * config->num_reg_defaults_raw;
 
        map->cache = NULL;
        map->cache_ops = cache_types[i];