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

Commit 92603c59 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: hda - Disable HP auto-mute during independent HP mode



Both the HP auto-mute and the independent HP mode conflict with each
other.  Make HP auto-mute disabled (only for the affected HP jack)
during the driver is in HP independent mode.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent a607148f
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -1889,6 +1889,13 @@ static int indep_hp_put(struct snd_kcontrol *kcontrol,
			*dacp = 0;
		else
			*dacp = spec->alt_dac_nid;

		/* update HP auto-mute state too */
		if (spec->hp_automute_hook)
			spec->hp_automute_hook(codec, NULL);
		else
			snd_hda_gen_hp_automute(codec, NULL);

		ret = 1;
	}
 unlock:
@@ -3467,10 +3474,16 @@ static void call_update_outputs(struct hda_codec *codec)
void snd_hda_gen_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
{
	struct hda_gen_spec *spec = codec->spec;
	hda_nid_t *pins = spec->autocfg.hp_pins;
	int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);

	/* No detection for the first HP jack during indep-HP mode */
	if (spec->indep_hp_enabled) {
		pins++;
		num_pins--;
	}

	spec->hp_jack_present =
		detect_jacks(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
			     spec->autocfg.hp_pins);
	spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
	if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
		return;
	call_update_outputs(codec);