Commit 4f1e6bc3 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Fix input pin initialization for STAC/IDT codecs

The input pins are sometimes not initialized properly because
of the optimization check of the current pinctl code.

Force to initialize the mic input pins so that they can be set up
properly even if they were in a weird state.  But keep other input
pins if already set up as input, since this could be an extra mic
pin.

Reference: Novell bnc#443738
	https://bugzilla.novell.com/show_bug.cgi?id=443738Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 355a0ec4
...@@ -3653,14 +3653,18 @@ static int stac92xx_init(struct hda_codec *codec) ...@@ -3653,14 +3653,18 @@ static int stac92xx_init(struct hda_codec *codec)
for (i = 0; i < AUTO_PIN_LAST; i++) { for (i = 0; i < AUTO_PIN_LAST; i++) {
hda_nid_t nid = cfg->input_pins[i]; hda_nid_t nid = cfg->input_pins[i];
if (nid) { if (nid) {
unsigned int pinctl = snd_hda_codec_read(codec, nid, unsigned int pinctl;
0, AC_VERB_GET_PIN_WIDGET_CONTROL, 0); if (i == AUTO_PIN_MIC || i == AUTO_PIN_FRONT_MIC) {
/* if PINCTL already set then skip */ /* for mic pins, force to initialize */
if (pinctl & AC_PINCAP_IN) pinctl = stac92xx_get_vref(codec, nid);
continue; } else {
pinctl = AC_PINCTL_IN_EN; pinctl = snd_hda_codec_read(codec, nid, 0,
if (i == AUTO_PIN_MIC || i == AUTO_PIN_FRONT_MIC) AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
pinctl |= stac92xx_get_vref(codec, nid); /* if PINCTL already set then skip */
if (pinctl & AC_PINCTL_IN_EN)
continue;
}
pinctl |= AC_PINCTL_IN_EN;
stac92xx_auto_set_pinctl(codec, nid, pinctl); stac92xx_auto_set_pinctl(codec, nid, pinctl);
} }
} }
......
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