mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 21:07:02 +09:00
ASoC: fix ak4104 register array access
commit e555317c08 upstream.
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>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
be0be57d67
commit
682b7d6cf5
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user