aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc
diff options
context:
space:
mode:
authorDaniel Mack <daniel@caiaq.de>2010-02-26 14:36:54 +0800
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-03-03 19:19:36 +0000
commite555317c083fda01f516d2153589e82514e20e70 (patch)
tree1f1ce47dbf97b22b41560295da81d263c052132c /sound/soc
parentbb1c04784d39b95a4382bd283f3048c4eb859b58 (diff)
downloadkernel_samsung_smdk4412-e555317c083fda01f516d2153589e82514e20e70.zip
kernel_samsung_smdk4412-e555317c083fda01f516d2153589e82514e20e70.tar.gz
kernel_samsung_smdk4412-e555317c083fda01f516d2153589e82514e20e70.tar.bz2
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 <daniel@caiaq.de> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk> Cc: stable@kernel.org Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc')
-rw-r--r--sound/soc/codecs/ak4104.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/sound/soc/codecs/ak4104.c b/sound/soc/codecs/ak4104.c
index b9ef7e4..b68d99f 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;