ALSA: hda - Add inv_eapd flag to struct hda_codec
authorTakashi Iwai <tiwai@suse.de>
Fri, 21 Dec 2012 14:23:01 +0000 (15:23 +0100)
committerTakashi Iwai <tiwai@suse.de>
Sat, 12 Jan 2013 07:43:19 +0000 (08:43 +0100)
Add the new flag, codec->inv_eapd, indicating that the EAPD
implementation is inverted.

There are always broken hardware in the world.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_codec.h
sound/pci/hda/hda_generic.c

index 2d9a51cb4a8e86b45c574cf5780c5fb46018b5bd..369ffafae8a9e111823fefd7f26e61fcd4a5baca 100644 (file)
@@ -866,6 +866,7 @@ struct hda_codec {
        unsigned int pins_shutup:1;     /* pins are shut up */
        unsigned int no_trigger_sense:1; /* don't trigger at pin-sensing */
        unsigned int no_jack_detect:1;  /* Machine has no jack-detection */
+       unsigned int inv_eapd:1; /* broken h/w: inverted EAPD control */
        unsigned int pcm_format_first:1; /* PCM format must be set first */
        unsigned int epss:1;            /* supporting EPSS? */
        unsigned int cached_write:1;    /* write only to caches */
index ff15aea836daeceb6c966587b4eb9769d96f0c59..f5bc1853ddd8eb142aeac2a269007371c745a08f 100644 (file)
@@ -545,6 +545,8 @@ static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable)
        if (spec->own_eapd_ctl ||
            !(snd_hda_query_pin_caps(codec, pin) & AC_PINCAP_EAPD))
                return;
+       if (codec->inv_eapd)
+               enable = !enable;
        snd_hda_codec_update_cache(codec, pin, 0,
                                   AC_VERB_SET_EAPD_BTLENABLE,
                                   enable ? 0x02 : 0x00);