Commit 0b4df931 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Avoid auto-mute or auto-mic of retasked jacks

When a jack is retasked as a different direction (e.g. a mic jack is
used as a CLFE output), such a jack shouldn't be counted as the target
for the automatic jack switching.  Skip the automute or the autoswitch
when the current pinctl direction is different from what we suppose.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 2c12c30d
...@@ -2773,6 +2773,9 @@ static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins) ...@@ -2773,6 +2773,9 @@ static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
hda_nid_t nid = pins[i]; hda_nid_t nid = pins[i];
if (!nid) if (!nid)
break; break;
/* don't detect pins retasked as inputs */
if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN)
continue;
present |= snd_hda_jack_detect(codec, nid); present |= snd_hda_jack_detect(codec, nid);
} }
return present; return present;
...@@ -2899,7 +2902,11 @@ void snd_hda_gen_mic_autoswitch(struct hda_codec *codec, struct hda_jack_tbl *ja ...@@ -2899,7 +2902,11 @@ void snd_hda_gen_mic_autoswitch(struct hda_codec *codec, struct hda_jack_tbl *ja
return; return;
for (i = spec->am_num_entries - 1; i > 0; i--) { for (i = spec->am_num_entries - 1; i > 0; i--) {
if (snd_hda_jack_detect(codec, spec->am_entry[i].pin)) { hda_nid_t pin = spec->am_entry[i].pin;
/* don't detect pins retasked as outputs */
if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
continue;
if (snd_hda_jack_detect(codec, pin)) {
mux_select(codec, 0, spec->am_entry[i].idx); mux_select(codec, 0, spec->am_entry[i].idx);
return; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment