From: Daniel Mack Date: Fri, 26 Feb 2010 06:36:54 +0000 (+0800) Subject: ASoC: fix ak4104 register array access X-Git-Tag: firefly_0821_release~9833^2~2567^2~5^2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e555317c083fda01f516d2153589e82514e20e70;hp=bb1c04784d39b95a4382bd283f3048c4eb859b58;p=firefly-linux-kernel-4.4.55.git ASoC: fix ak4104 register array access Don't touch the variable 'reg' to construct the value for the actual SPI transport. This variable is again used to access the driver's register cache, and so random memory is overwritten. Compute the value in-place instead. Signed-off-by: Daniel Mack Acked-by: Liam Girdwood Cc: stable@kernel.org Signed-off-by: Mark Brown --- diff --git a/sound/soc/codecs/ak4104.c b/sound/soc/codecs/ak4104.c index b9ef7e45891d..b68d99fb6af0 100644 --- a/sound/soc/codecs/ak4104.c +++ b/sound/soc/codecs/ak4104.c @@ -90,12 +90,10 @@ static int ak4104_spi_write(struct snd_soc_codec *codec, unsigned int reg, if (reg >= codec->reg_cache_size) return -EINVAL; - reg &= AK4104_REG_MASK; - reg |= AK4104_WRITE; - /* only write to the hardware if value has changed */ if (cache[reg] != value) { - u8 tmp[2] = { reg, value }; + u8 tmp[2] = { (reg & AK4104_REG_MASK) | AK4104_WRITE, value }; + if (spi_write(spi, tmp, sizeof(tmp))) { dev_err(&spi->dev, "SPI write failed\n"); return -EIO;