Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e555317c authored by Daniel Mack's avatar Daniel Mack Committed by Mark Brown
Browse files

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: default avatarDaniel Mack <daniel@caiaq.de>
Acked-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
Cc: stable@kernel.org
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent bb1c0478
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -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;