ALSA: hda - Add EAPD control to generic parser
authorTakashi Iwai <tiwai@suse.de>
Wed, 19 Dec 2012 12:01:54 +0000 (13:01 +0100)
committerTakashi Iwai <tiwai@suse.de>
Sat, 12 Jan 2013 07:30:55 +0000 (08:30 +0100)
Enable EAPD in output path initializations automatically unless the
new flag spec->own_eapd_ctl is set.

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

index 2d19b915dbf196d7ea8273c66eb8eeb1633d8690..31c5677e6210306bb82212dda1adb54b8168b8a1 100644 (file)
@@ -3333,6 +3333,7 @@ EXPORT_SYMBOL_HDA(snd_hda_gen_build_pcms);
 static void set_output_and_unmute(struct hda_codec *codec, hda_nid_t pin,
                                  int pin_type, hda_nid_t dac)
 {
+       struct hda_gen_spec *spec = codec->spec;
        struct nid_path *path;
 
        snd_hda_set_pin_ctl_cache(codec, pin, pin_type);
@@ -3342,6 +3343,11 @@ static void set_output_and_unmute(struct hda_codec *codec, hda_nid_t pin,
        if (path->active)
                return;
        snd_hda_activate_path(codec, path, true, true);
+
+       if (!spec->own_eapd_ctl &&
+           (snd_hda_query_pin_caps(codec, pin) & AC_PINCAP_EAPD))
+               snd_hda_codec_update_cache(codec, pin, 0,
+                                          AC_VERB_SET_EAPD_BTLENABLE, 0x02);
 }
 
 /* initialize primary output paths */
index a9f4f63b48943f6ce1553730a5ad4cf83b267b72..9c00bd5863e574d0fb035bab0733fda70168266e 100644 (file)
@@ -150,6 +150,7 @@ struct hda_gen_spec {
        unsigned int no_primary_hp:1; /* Don't prefer HP pins to speaker pins */
        unsigned int multi_cap_vol:1; /* allow multiple capture xxx volumes */
        unsigned int inv_dmic_split:1; /* inverted dmic w/a for conexant */
+       unsigned int own_eapd_ctl:1; /* set EAPD by own function */
 
        unsigned int parse_flags; /* passed to snd_hda_parse_pin_defcfg() */