aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/base/regmap/regcache.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
index 1ead66186b7c..4b903a8e92a2 100644
--- a/drivers/base/regmap/regcache.c
+++ b/drivers/base/regmap/regcache.c
@@ -35,12 +35,17 @@ static int regcache_hw_init(struct regmap *map)
35 return -EINVAL; 35 return -EINVAL;
36 36
37 if (!map->reg_defaults_raw) { 37 if (!map->reg_defaults_raw) {
38 u32 cache_bypass = map->cache_bypass;
38 dev_warn(map->dev, "No cache defaults, reading back from HW\n"); 39 dev_warn(map->dev, "No cache defaults, reading back from HW\n");
40
41 /* Bypass the cache access till data read from HW*/
42 map->cache_bypass = 1;
39 tmp_buf = kmalloc(map->cache_size_raw, GFP_KERNEL); 43 tmp_buf = kmalloc(map->cache_size_raw, GFP_KERNEL);
40 if (!tmp_buf) 44 if (!tmp_buf)
41 return -EINVAL; 45 return -EINVAL;
42 ret = regmap_bulk_read(map, 0, tmp_buf, 46 ret = regmap_bulk_read(map, 0, tmp_buf,
43 map->num_reg_defaults_raw); 47 map->num_reg_defaults_raw);
48 map->cache_bypass = cache_bypass;
44 if (ret < 0) { 49 if (ret < 0) {
45 kfree(tmp_buf); 50 kfree(tmp_buf);
46 return ret; 51 return ret;