]> git.karo-electronics.de Git - linux-beck.git/commitdiff
regmap: Properly round cache_word_size
authorLars-Peter Clausen <lars@metafoo.de>
Wed, 16 Nov 2011 19:34:03 +0000 (20:34 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 17 Nov 2011 16:51:23 +0000 (16:51 +0000)
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>
drivers/base/regmap/regcache.c

index d687df6ebdb00a8b9694a15a7f2b9255abf24ccd..6d93e49c462f18dcf595c3a2bbc445b0fe45f167 100644 (file)
@@ -111,8 +111,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];