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

Commit e87885fe authored by Lydia Wang's avatar Lydia Wang Committed by Takashi Iwai
Browse files

ALSA: hda - VIA: Fix side channel mute invalid issue



Modify side_mute_channel() and update_side_mute_status() functions
to fix invalid side channel mute issue of VT2002P, VT1812 and VT1802
codecs.

Signed-off-by: default avatarLydia Wang <lydiawang@viatech.com.cn>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 11890956
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -708,6 +708,9 @@ static hda_nid_t side_mute_channel(struct via_spec *spec)
	case VT1709_10CH:	return 0x29;
	case VT1708B_8CH:	/* fall thru */
	case VT1708S:		return 0x27;
	case VT2002P:		return 0x19;
	case VT1802:		return 0x15;
	case VT1812:		return 0x15;
	default:		return 0;
	}
}
@@ -716,13 +719,22 @@ static int update_side_mute_status(struct hda_codec *codec)
{
	/* mute side channel */
	struct via_spec *spec = codec->spec;
	unsigned int parm = spec->hp_independent_mode
		? AMP_OUT_MUTE : AMP_OUT_UNMUTE;
	unsigned int parm;
	hda_nid_t sw3 = side_mute_channel(spec);

	if (sw3)
		snd_hda_codec_write(codec, sw3, 0, AC_VERB_SET_AMP_GAIN_MUTE,
				    parm);
	if (sw3) {
		if (VT2002P_COMPATIBLE(spec))
			parm = spec->hp_independent_mode ?
			       AMP_IN_MUTE(1) : AMP_IN_UNMUTE(1);
		else
			parm = spec->hp_independent_mode ?
			       AMP_OUT_MUTE : AMP_OUT_UNMUTE;
		snd_hda_codec_write(codec, sw3, 0,
				    AC_VERB_SET_AMP_GAIN_MUTE, parm);
		if (spec->codec_type == VT1812)
			snd_hda_codec_write(codec, 0x1d, 0,
					    AC_VERB_SET_AMP_GAIN_MUTE, parm);
	}
	return 0;
}