Skip to content

Commit

Permalink
regmap: cache: Store caches in native register format where possible
Browse files Browse the repository at this point in the history
This allows the cached data to be sent directly to the device when
we sync it.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Mark Brown committed Mar 4, 2013
1 parent 8a819ff commit eb4cb76
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions drivers/base/regmap/regcache.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ static int regcache_hw_init(struct regmap *map)
tmp_buf = kmalloc(map->cache_size_raw, GFP_KERNEL);
if (!tmp_buf)
return -EINVAL;
ret = regmap_bulk_read(map, 0, tmp_buf,
map->num_reg_defaults_raw);
ret = regmap_raw_read(map, 0, tmp_buf,
map->num_reg_defaults_raw);
map->cache_bypass = cache_bypass;
if (ret < 0) {
kfree(tmp_buf);
Expand Down Expand Up @@ -421,6 +421,13 @@ bool regcache_set_val(struct regmap *map, void *base, unsigned int idx,
if (regcache_get_val(map, base, idx) == val)
return true;

/* Use device native format if possible */
if (map->format.format_val) {
map->format.format_val(base + (map->cache_word_size * idx),
val, 0);
return false;
}

switch (map->cache_word_size) {
case 1: {
u8 *cache = base;
Expand Down Expand Up @@ -449,6 +456,11 @@ unsigned int regcache_get_val(struct regmap *map, const void *base,
if (!base)
return -EINVAL;

/* Use device native format if possible */
if (map->format.parse_val)
return map->format.parse_val(base +
(map->cache_word_size * idx));

switch (map->cache_word_size) {
case 1: {
const u8 *cache = base;
Expand Down

0 comments on commit eb4cb76

Please sign in to comment.