Commit 515f2261 authored by Ionut Nicu's avatar Ionut Nicu Committed by Mark Brown

regmap: regcache: allow read-only regs to be cached

The regmap_writeable() check should not be done in
regcache_write() because this prevents read-only
registers to be cached. After a read on a read-only
register its value will not be stored in the cache
and the next time someone will try to read it the
value will be read from the bus instead of the
cache.

Instead the regmap_writeable() check should be done
in _regmap_write() to prevent callers from writing
to read-only registers.
Signed-off-by: default avatarIonut Nicu <ioan.nicu.ext@nsn.com>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 1767da9e
...@@ -241,9 +241,6 @@ int regcache_write(struct regmap *map, ...@@ -241,9 +241,6 @@ int regcache_write(struct regmap *map,
BUG_ON(!map->cache_ops); BUG_ON(!map->cache_ops);
if (!regmap_writeable(map, reg))
return -EIO;
if (!regmap_volatile(map, reg)) if (!regmap_volatile(map, reg))
return map->cache_ops->write(map, reg, value); return map->cache_ops->write(map, reg, value);
......
...@@ -1261,6 +1261,9 @@ int _regmap_write(struct regmap *map, unsigned int reg, ...@@ -1261,6 +1261,9 @@ int _regmap_write(struct regmap *map, unsigned int reg,
int ret; int ret;
void *context = _regmap_map_get_context(map); void *context = _regmap_map_get_context(map);
if (!regmap_writeable(map, reg))
return -EIO;
if (!map->cache_bypass && !map->defer_caching) { if (!map->cache_bypass && !map->defer_caching) {
ret = regcache_write(map, reg, val); ret = regcache_write(map, reg, val);
if (ret != 0) if (ret != 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment