summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2014-08-26 12:12:17 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-10-05 14:54:11 -0700
commit070fdd7aac3d8cf53f130f3fc6d02e2cc00549b0 (patch)
treeaed721813833303f0a9912f7744340331dd94b73
parenta8c91d3c611d3ae5d3b8fbc585c4ed293d0e5519 (diff)
downloadlinux-3.10-070fdd7aac3d8cf53f130f3fc6d02e2cc00549b0.tar.gz
linux-3.10-070fdd7aac3d8cf53f130f3fc6d02e2cc00549b0.tar.bz2
linux-3.10-070fdd7aac3d8cf53f130f3fc6d02e2cc00549b0.zip
regmap: Fix handling of volatile registers for format_write() chips
commit 5844a8b9d98ec11ce1d77610daacf3f0a0e14715 upstream. A previous over-zealous factorisation of code means that we only treat registers as volatile if they are readable. For most devices this is fine since normally most registers can be read and volatility implies readability but for format_write() devices where there is no readback from the hardware and we use volatility to mean simply uncacheability this means that we end up treating all registers as cacheble. A bigger refactoring of the code to clarify this is in order but as a fix make a minimal change and only check readability when checking volatility if there is no format_write() operation defined for the device. Signed-off-by: Mark Brown <broonie@linaro.org> Tested-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/base/regmap/regmap.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index d0c81d1f409..4b5cf2e34e9 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -114,7 +114,7 @@ bool regmap_readable(struct regmap *map, unsigned int reg)
bool regmap_volatile(struct regmap *map, unsigned int reg)
{
- if (!regmap_readable(map, reg))
+ if (!map->format.format_write && !regmap_readable(map, reg))
return false;
if (map->volatile_reg)