diff options
Diffstat (limited to 'drivers/base/regmap')
-rw-r--r-- | drivers/base/regmap/internal.h | 3 | ||||
-rw-r--r-- | drivers/base/regmap/regcache-rbtree.c | 9 | ||||
-rw-r--r-- | drivers/base/regmap/regcache.c | 2 | ||||
-rw-r--r-- | drivers/base/regmap/regmap-debugfs.c | 12 | ||||
-rw-r--r-- | drivers/base/regmap/regmap.c | 2 |
5 files changed, 19 insertions, 9 deletions
diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h index 7d1326985bee..bfc90b8547f2 100644 --- a/drivers/base/regmap/internal.h +++ b/drivers/base/regmap/internal.h | |||
@@ -146,6 +146,9 @@ struct regcache_ops { | |||
146 | enum regcache_type type; | 146 | enum regcache_type type; |
147 | int (*init)(struct regmap *map); | 147 | int (*init)(struct regmap *map); |
148 | int (*exit)(struct regmap *map); | 148 | int (*exit)(struct regmap *map); |
149 | #ifdef CONFIG_DEBUG_FS | ||
150 | void (*debugfs_init)(struct regmap *map); | ||
151 | #endif | ||
149 | int (*read)(struct regmap *map, unsigned int reg, unsigned int *value); | 152 | int (*read)(struct regmap *map, unsigned int reg, unsigned int *value); |
150 | int (*write)(struct regmap *map, unsigned int reg, unsigned int value); | 153 | int (*write)(struct regmap *map, unsigned int reg, unsigned int value); |
151 | int (*sync)(struct regmap *map, unsigned int min, unsigned int max); | 154 | int (*sync)(struct regmap *map, unsigned int min, unsigned int max); |
diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c index 6a7e4fa12854..f3e8fe0cc650 100644 --- a/drivers/base/regmap/regcache-rbtree.c +++ b/drivers/base/regmap/regcache-rbtree.c | |||
@@ -194,10 +194,6 @@ static void rbtree_debugfs_init(struct regmap *map) | |||
194 | { | 194 | { |
195 | debugfs_create_file("rbtree", 0400, map->debugfs, map, &rbtree_fops); | 195 | debugfs_create_file("rbtree", 0400, map->debugfs, map, &rbtree_fops); |
196 | } | 196 | } |
197 | #else | ||
198 | static void rbtree_debugfs_init(struct regmap *map) | ||
199 | { | ||
200 | } | ||
201 | #endif | 197 | #endif |
202 | 198 | ||
203 | static int regcache_rbtree_init(struct regmap *map) | 199 | static int regcache_rbtree_init(struct regmap *map) |
@@ -222,8 +218,6 @@ static int regcache_rbtree_init(struct regmap *map) | |||
222 | goto err; | 218 | goto err; |
223 | } | 219 | } |
224 | 220 | ||
225 | rbtree_debugfs_init(map); | ||
226 | |||
227 | return 0; | 221 | return 0; |
228 | 222 | ||
229 | err: | 223 | err: |
@@ -532,6 +526,9 @@ struct regcache_ops regcache_rbtree_ops = { | |||
532 | .name = "rbtree", | 526 | .name = "rbtree", |
533 | .init = regcache_rbtree_init, | 527 | .init = regcache_rbtree_init, |
534 | .exit = regcache_rbtree_exit, | 528 | .exit = regcache_rbtree_exit, |
529 | #ifdef CONFIG_DEBUG_FS | ||
530 | .debugfs_init = rbtree_debugfs_init, | ||
531 | #endif | ||
535 | .read = regcache_rbtree_read, | 532 | .read = regcache_rbtree_read, |
536 | .write = regcache_rbtree_write, | 533 | .write = regcache_rbtree_write, |
537 | .sync = regcache_rbtree_sync, | 534 | .sync = regcache_rbtree_sync, |
diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c index 29b4128da0b0..5617da6dc898 100644 --- a/drivers/base/regmap/regcache.c +++ b/drivers/base/regmap/regcache.c | |||
@@ -698,7 +698,7 @@ int regcache_sync_block(struct regmap *map, void *block, | |||
698 | unsigned int block_base, unsigned int start, | 698 | unsigned int block_base, unsigned int start, |
699 | unsigned int end) | 699 | unsigned int end) |
700 | { | 700 | { |
701 | if (regmap_can_raw_write(map)) | 701 | if (regmap_can_raw_write(map) && !map->use_single_rw) |
702 | return regcache_sync_block_raw(map, block, cache_present, | 702 | return regcache_sync_block_raw(map, block, cache_present, |
703 | block_base, start, end); | 703 | block_base, start, end); |
704 | else | 704 | else |
diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c index 45d812c0ea77..0c94b661c16f 100644 --- a/drivers/base/regmap/regmap-debugfs.c +++ b/drivers/base/regmap/regmap-debugfs.c | |||
@@ -512,7 +512,14 @@ void regmap_debugfs_init(struct regmap *map, const char *name) | |||
512 | map, ®map_reg_ranges_fops); | 512 | map, ®map_reg_ranges_fops); |
513 | 513 | ||
514 | if (map->max_register || regmap_readable(map, 0)) { | 514 | if (map->max_register || regmap_readable(map, 0)) { |
515 | debugfs_create_file("registers", 0400, map->debugfs, | 515 | umode_t registers_mode; |
516 | |||
517 | if (IS_ENABLED(REGMAP_ALLOW_WRITE_DEBUGFS)) | ||
518 | registers_mode = 0600; | ||
519 | else | ||
520 | registers_mode = 0400; | ||
521 | |||
522 | debugfs_create_file("registers", registers_mode, map->debugfs, | ||
516 | map, ®map_map_fops); | 523 | map, ®map_map_fops); |
517 | debugfs_create_file("access", 0400, map->debugfs, | 524 | debugfs_create_file("access", 0400, map->debugfs, |
518 | map, ®map_access_fops); | 525 | map, ®map_access_fops); |
@@ -538,6 +545,9 @@ void regmap_debugfs_init(struct regmap *map, const char *name) | |||
538 | 545 | ||
539 | next = rb_next(&range_node->node); | 546 | next = rb_next(&range_node->node); |
540 | } | 547 | } |
548 | |||
549 | if (map->cache_ops && map->cache_ops->debugfs_init) | ||
550 | map->cache_ops->debugfs_init(map); | ||
541 | } | 551 | } |
542 | 552 | ||
543 | void regmap_debugfs_exit(struct regmap *map) | 553 | void regmap_debugfs_exit(struct regmap *map) |
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 78f43fb2fe84..1cf427bc0d4a 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c | |||
@@ -109,7 +109,7 @@ bool regmap_readable(struct regmap *map, unsigned int reg) | |||
109 | 109 | ||
110 | bool regmap_volatile(struct regmap *map, unsigned int reg) | 110 | bool regmap_volatile(struct regmap *map, unsigned int reg) |
111 | { | 111 | { |
112 | if (!regmap_readable(map, reg)) | 112 | if (!map->format.format_write && !regmap_readable(map, reg)) |
113 | return false; | 113 | return false; |
114 | 114 | ||
115 | if (map->volatile_reg) | 115 | if (map->volatile_reg) |