ALSA: hda - Don't trigger pin-sense for STAC/IDT codecs
authorTakashi Iwai <tiwai@suse.de>
Fri, 27 Nov 2009 11:22:44 +0000 (12:22 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 27 Nov 2009 11:22:44 +0000 (12:22 +0100)
STAC/IDT codecs seem to behave weird when SET_PIN_SENSE verb is issued
before reading the jack-detection although the TRIG_REQ pin capability
is given by the hardware.

Since snd_hda_jack_detect() issues the SET_PIN_SENSE verb simply judging
from the pincap, we have to revert the change in the commit
  d56757abc11a21996d9839c0d4e3b2c3666cd318
    ALSA: hda - Replace the rest of jack-detections with snd_hda_jack_detect()
to plain GET_PIN_SENSE verb without triggering.

Reported-by: Jiri Slaby <jirislaby@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_sigmatel.c

index 2a45375..6b0bc04 100644 (file)
@@ -4440,7 +4440,14 @@ static inline int get_pin_presence(struct hda_codec *codec, hda_nid_t nid)
 {
        if (!nid)
                return 0;
-       return snd_hda_jack_detect(codec, nid);
+       /* NOTE: we can't use snd_hda_jack_detect() here because STAC/IDT
+        * codecs behave wrongly when SET_PIN_SENSE is triggered, although
+        * the pincap gives TRIG_REQ bit.
+        */
+       if (snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_PIN_SENSE, 0) &
+           AC_PINSENSE_PRESENCE)
+               return 1;
+       return 0;
 }
 
 static void stac92xx_line_out_detect(struct hda_codec *codec,