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

Commit 30808ca7 authored by Lopez Cruz, Misael's avatar Lopez Cruz, Misael Committed by Mark Brown
Browse files

ASoC: TWL4030: Correct bypass event for voice sidetone



Event for voice sidetone was being interpreted as an
analog HiFi bypass event because VSTPGA register offset
is less than ARXR2_APGA_CTL offset. Reordering the
register checks allows to handle voice digital bypass
event properly.

Signed-off-by: default avatarMisael Lopez Cruz <x0052729@ti.com>
Acked-by: default avatarPeter Ujfalusi <peter.ujfalusi@nokia.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 328d0a13
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -712,7 +712,19 @@ static int bypass_event(struct snd_soc_dapm_widget *w,

	reg = twl4030_read_reg_cache(w->codec, m->reg);

	if (m->reg <= TWL4030_REG_ARXR2_APGA_CTL) {
	/*
	 * bypass_state[0:3] - analog HiFi bypass
	 * bypass_state[4]   - analog voice bypass
	 * bypass_state[5]   - digital voice bypass
	 * bypass_state[6:7] - digital HiFi bypass
	 */
	if (m->reg == TWL4030_REG_VSTPGA) {
		/* Voice digital bypass */
		if (reg)
			twl4030->bypass_state |= (1 << 5);
		else
			twl4030->bypass_state &= ~(1 << 5);
	} else if (m->reg <= TWL4030_REG_ARXR2_APGA_CTL) {
		/* Analog bypass */
		if (reg & (1 << m->shift))
			twl4030->bypass_state |=
@@ -726,12 +738,6 @@ static int bypass_event(struct snd_soc_dapm_widget *w,
			twl4030->bypass_state |= (1 << 4);
		else
			twl4030->bypass_state &= ~(1 << 4);
	} else if (m->reg == TWL4030_REG_VSTPGA) {
		/* Voice digital bypass */
		if (reg)
			twl4030->bypass_state |= (1 << 5);
		else
			twl4030->bypass_state &= ~(1 << 5);
	} else {
		/* Digital bypass */
		if (reg & (0x7 << m->shift))