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: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
2c12c30d3f
commit
0b4df931ce
|
@ -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
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue