summaryrefslogtreecommitdiff
path: root/drivers/base/regmap/regcache.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-03-17 10:41:26 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2015-03-17 10:41:26 -0700
commit529d2eb6795cf899c1c5fd419c3313a94ca5ba4d (patch)
tree70cc5df043765e25c55ba5429d5668fb8a190212 /drivers/base/regmap/regcache.c
parent4d272f90a780f6545e46ba715c8961afa23511f3 (diff)
parent7d720ee52598b49ad70a2572fa159467c5f45dc4 (diff)
downloadlinux-529d2eb6795cf899c1c5fd419c3313a94ca5ba4d.tar.gz
linux-529d2eb6795cf899c1c5fd419c3313a94ca5ba4d.tar.bz2
linux-529d2eb6795cf899c1c5fd419c3313a94ca5ba4d.zip
Merge tag 'regmap-v4.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap
Pull regmap fixes from Mark Brown: "A few things here: - a change from Lars to fix insertion of cache values at the start of rather than end of a rbtree block. This hadn't been noticed before since almost everything lists registers in ascending order. - a fix from Takashi for spurious warnings during cache sync with read once registers, a problem which can be very noticeable on devices that it affects. - a fix from Valentin for a tighening of the oneshot IRQ request interface which would have broken affected devices" * tag 'regmap-v4.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap: regmap: regcache-rbtree: Fix present bitmap resize regmap: Skip read-only registers in regcache_sync() regmap-irq: set IRQF_ONESHOT flag to ensure IRQ request
Diffstat (limited to 'drivers/base/regmap/regcache.c')
-rw-r--r--drivers/base/regmap/regcache.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
index f373c35f9e1d..da84f544c544 100644
--- a/drivers/base/regmap/regcache.c
+++ b/drivers/base/regmap/regcache.c
@@ -608,7 +608,8 @@ static int regcache_sync_block_single(struct regmap *map, void *block,
for (i = start; i < end; i++) {
regtmp = block_base + (i * map->reg_stride);
- if (!regcache_reg_present(cache_present, i))
+ if (!regcache_reg_present(cache_present, i) ||
+ !regmap_writeable(map, regtmp))
continue;
val = regcache_get_val(map, block, i);
@@ -677,7 +678,8 @@ static int regcache_sync_block_raw(struct regmap *map, void *block,
for (i = start; i < end; i++) {
regtmp = block_base + (i * map->reg_stride);
- if (!regcache_reg_present(cache_present, i)) {
+ if (!regcache_reg_present(cache_present, i) ||
+ !regmap_writeable(map, regtmp)) {
ret = regcache_sync_block_raw_flush(map, &data,
base, regtmp);
if (ret != 0)