ASoC: Add a cache_sync bit to the CODEC structure
Add a bit to the CODEC structure indicating if a cache sync is required.
By default this will be set if a cache only write is done to a soc-cache
register cache. This allows us to avoid syncing the cache back after
using cache only writes if there were no changes.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
diff --git a/sound/soc/soc-cache.c b/sound/soc/soc-cache.c
index 84b6916..5869dc3 100644
--- a/sound/soc/soc-cache.c
+++ b/sound/soc/soc-cache.c
@@ -39,8 +39,10 @@
if (reg < codec->reg_cache_size)
cache[reg] = value;
- if (codec->cache_only)
+ if (codec->cache_only) {
+ codec->cache_sync = 1;
return 0;
+ }
ret = codec->hw_write(codec->control_data, data, 2);
if (ret == 2)
@@ -105,8 +107,10 @@
if (reg < codec->reg_cache_size)
cache[reg] = value;
- if (codec->cache_only)
+ if (codec->cache_only) {
+ codec->cache_sync = 1;
return 0;
+ }
ret = codec->hw_write(codec->control_data, data, 2);
if (ret == 2)
@@ -161,8 +165,10 @@
if (reg < codec->reg_cache_size)
cache[reg] = value;
- if (codec->cache_only)
+ if (codec->cache_only) {
+ codec->cache_sync = 1;
return 0;
+ }
if (codec->hw_write(codec->control_data, data, 2) == 2)
return 0;
@@ -192,8 +198,10 @@
if (!snd_soc_codec_volatile_register(codec, reg))
reg_cache[reg] = value;
- if (codec->cache_only)
+ if (codec->cache_only) {
+ codec->cache_sync = 1;
return 0;
+ }
if (codec->hw_write(codec->control_data, data, 3) == 3)
return 0;
@@ -313,8 +321,10 @@
if (reg < codec->reg_cache_size)
cache[reg] = value;
- if (codec->cache_only)
+ if (codec->cache_only) {
+ codec->cache_sync = 1;
return 0;
+ }
ret = codec->hw_write(codec->control_data, data, 3);
if (ret == 3)