ASoC: rt286: Fix sync function
authorBard Liao <bardliao@realtek.com>
Fri, 26 Sep 2014 03:06:40 +0000 (11:06 +0800)
committerMark Brown <broonie@kernel.org>
Fri, 26 Sep 2014 08:14:27 +0000 (09:14 +0100)
We try to write index registers into cache when we write an index
register, but we change the reg value before updating the cache.
As a result, the cache is never be updated. This patch will fix
this issue.

Signed-off-by: Bard Liao <bardliao@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
sound/soc/codecs/rt286.c

index 7a6608404d04db7a2c66136530525b89b8a2fa80..b86b426f159d136c07cbc4491c8241db0c5a2001 100644 (file)
@@ -191,7 +191,6 @@ static int rt286_hw_write(void *context, unsigned int reg, unsigned int value)
        /*handle index registers*/
        if (reg <= 0xff) {
                rt286_hw_write(client, RT286_COEF_INDEX, reg);
-               reg = RT286_PROC_COEF;
                for (i = 0; i < INDEX_CACHE_SIZE; i++) {
                        if (reg == rt286->index_cache[i].reg) {
                                rt286->index_cache[i].def = value;
@@ -199,6 +198,7 @@ static int rt286_hw_write(void *context, unsigned int reg, unsigned int value)
                        }
 
                }
+               reg = RT286_PROC_COEF;
        }
 
        data[0] = (reg >> 24) & 0xff;