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

Commit da0dab5e authored by Clemens Ladisch's avatar Clemens Ladisch Committed by Takashi Iwai
Browse files

ALSA: virtuoso: fix WM8766 register writes with MSB



The check for the volume update latch bit was accidentally in the wrong
function, where it would prevent the MSB from being written, instead of
correctly ignoring it for cached values.

Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent c8bdfacb
Loading
Loading
Loading
Loading
+6 −6
Original line number Original line Diff line number Diff line
@@ -97,9 +97,13 @@ static void wm8766_write(struct oxygen *chip,
			 (0 << OXYGEN_SPI_CODEC_SHIFT) |
			 (0 << OXYGEN_SPI_CODEC_SHIFT) |
			 OXYGEN_SPI_CEN_LATCH_CLOCK_LO,
			 OXYGEN_SPI_CEN_LATCH_CLOCK_LO,
			 (reg << 9) | value);
			 (reg << 9) | value);
	if (reg < ARRAY_SIZE(data->wm8766_regs))
	if (reg < ARRAY_SIZE(data->wm8766_regs)) {
		if ((reg >= WM8766_LDA1 && reg <= WM8766_RDA1) ||
		    (reg >= WM8766_LDA2 && reg <= WM8766_MASTDA))
			value &= ~WM8766_UPDATE;
		data->wm8766_regs[reg] = value;
		data->wm8766_regs[reg] = value;
	}
	}
}


static void wm8766_write_cached(struct oxygen *chip,
static void wm8766_write_cached(struct oxygen *chip,
				unsigned int reg, unsigned int value)
				unsigned int reg, unsigned int value)
@@ -107,13 +111,9 @@ static void wm8766_write_cached(struct oxygen *chip,
	struct xonar_wm87x6 *data = chip->model_data;
	struct xonar_wm87x6 *data = chip->model_data;


	if (reg >= ARRAY_SIZE(data->wm8766_regs) ||
	if (reg >= ARRAY_SIZE(data->wm8766_regs) ||
	    value != data->wm8766_regs[reg]) {
	    value != data->wm8766_regs[reg])
		if ((reg >= WM8766_LDA1 && reg <= WM8766_RDA1) ||
		    (reg >= WM8766_LDA2 && reg <= WM8766_MASTDA))
			value &= ~WM8766_UPDATE;
		wm8766_write(chip, reg, value);
		wm8766_write(chip, reg, value);
}
}
}


static void wm8776_registers_init(struct oxygen *chip)
static void wm8776_registers_init(struct oxygen *chip)
{
{