At Tue, 29 May 2007 17:06:05 +0200, I wrote: > > At Sun, 27 May 2007 23:33:27 +0100, > Ivan N. Zlatev wrote: > > > > Hello, > > > > I am on an iMac ("*imac-20" model/pinconfig) with a Intel HD card with > > the SigmaTel STAC9221 codec. I have attached the inital codec info > > after modprobe. When I plug in and then unplug my speakers the > > microphone stops working. Reproduction steps with codec dump diffs as > > follows > > I guess you can restore the status via toggling "Line In as Output > Switch" and "Mic as Output Switch" mixer elements. The problem looks > like the unsolicited event handling. It doesn't cope with the shared > input jacks well. In case my guess is correct, the patch below should fix the problem. Give it a try. Takashi diff -r ff3ed7049f84 pci/hda/patch_sigmatel.c --- a/pci/hda/patch_sigmatel.c Tue May 29 16:03:00 2007 +0200 +++ b/pci/hda/patch_sigmatel.c Tue May 29 17:25:52 2007 +0200 @@ -1797,6 +1797,21 @@ static void stac92xx_set_pinctl(struct h unsigned int pin_ctl = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_PIN_WIDGET_CONTROL, 0x00); + if (pin_ctl & AC_PINCTL_IN_EN) { + /* + * we need to check the current set-up direction of + * shared input pins since they can be switched via + * "xxx as Output" mixer switch + */ + struct sigmatel_spec *spec = codec->spec; + struct auto_pin_cfg *cfg = &spec->autocfg; + if ((nid == cfg->input_pins[AUTO_PIN_LINE] && + spec->line_switch) || + (nid == cfg->input_pins[AUTO_PIN_MIC] && + spec->mic_switch)) + return; + } + /* if setting pin direction bits, clear the current direction bits first */ if (flag & (AC_PINCTL_IN_EN | AC_PINCTL_OUT_EN)) _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel