[3.13.y.z extended stable] Patch "regmap: Fix handling of volatile registers for format_write() chips" has been added to staging queue

Kamal Mostafa kamal at canonical.com
Tue Sep 30 21:29:43 UTC 2014

This is a note to let you know that I have just added a patch titled

    regmap: Fix handling of volatile registers for format_write() chips

to the linux-3.13.y-queue branch of the 3.13.y.z extended stable tree 
which can be found at:


This patch is scheduled to be released in version

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.13.y.z tree, see



>From 4eb98d07757c2dad3aa47878219fae109227f24b Mon Sep 17 00:00:00 2001
From: Mark Brown <broonie at linaro.org>
Date: Tue, 26 Aug 2014 12:12:17 +0100
Subject: 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 at linaro.org>
Tested-by: Lars-Peter Clausen <lars at metafoo.de>
Signed-off-by: Kamal Mostafa <kamal at canonical.com>
 drivers/base/regmap/regmap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index c2e0021..f8214ec 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -105,7 +105,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)

More information about the kernel-team mailing list