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

Commit 53e8c323 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: hda - Fix conflict of Mic Boot controls

Due to the recent change for multiple mics assignment, we need to handle
the index of each Mic Boost control respectively.  Otherwise the driver
gets the control element conflicts, and gives the unsable state.

Reference: kernel bug 25002
	https://bugzilla.kernel.org/show_bug.cgi?id=25002



Reported-and-tested-by: default avatarAdam Williamson <awilliam@redhat.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent ac612407
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -10830,7 +10830,8 @@ static int alc_auto_add_mic_boost(struct hda_codec *codec)
{
	struct alc_spec *spec = codec->spec;
	struct auto_pin_cfg *cfg = &spec->autocfg;
	int i, err;
	int i, err, type;
	int type_idx = 0;
	hda_nid_t nid;
	for (i = 0; i < cfg->num_inputs; i++) {
@@ -10839,9 +10840,15 @@ static int alc_auto_add_mic_boost(struct hda_codec *codec)
		nid = cfg->inputs[i].pin;
		if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP) {
			char label[32];
			type = cfg->inputs[i].type;
			if (i > 0 && type == cfg->inputs[i - 1].type)
				type_idx++;
			else
				type_idx = 0;
			snprintf(label, sizeof(label), "%s Boost",
				 hda_get_autocfg_input_label(codec, cfg, i));
			err = add_control(spec, ALC_CTL_WIDGET_VOL, label, 0,
			err = add_control(spec, ALC_CTL_WIDGET_VOL, label,
					  type_idx,
				  HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT));
			if (err < 0)
				return err;