ASoC: soc-cache: Allow codec->cache_bypass to be used with snd_soc_hw_bulk_write_raw()
authorDimitris Papastamos <dp@opensource.wolfsonmicro.com>
Thu, 5 May 2011 13:18:11 +0000 (14:18 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 8 May 2011 13:38:31 +0000 (14:38 +0100)
If we specifically want to write a block of data to the hw bypassing the
cache, then allow this to happen inside snd_soc_hw_bulk_write_raw().

Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/soc-cache.c

index a217db256700ed9998b6812849dd8d8634710538..687beec564767e39bc92343c7a87a2abf771a83b 100644 (file)
@@ -404,12 +404,13 @@ static int snd_soc_hw_bulk_write_raw(struct snd_soc_codec *codec, unsigned int r
 {
        int ret;
 
-       /* Ensure that the base register is volatile.  Subsequently
-        * any other register that is touched by this routine should be
-        * volatile as well to ensure that we don't get out of sync with
-        * the cache.
+       /* To ensure that we don't get out of sync with the cache, check
+        * whether the base register is volatile or if we've directly asked
+        * to bypass the cache.  Out of bounds registers are considered
+        * volatile.
         */
-       if (!snd_soc_codec_volatile_register(codec, reg)
+       if (!codec->cache_bypass
+           && !snd_soc_codec_volatile_register(codec, reg)
            && reg < codec->driver->reg_cache_size)
                return -EINVAL;