|
@@ -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)
|