]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ALSA: hda/conexant - Don't set HP pin-control bit unconditionally
authorTakashi Iwai <tiwai@suse.de>
Thu, 19 Apr 2012 13:15:25 +0000 (15:15 +0200)
committerBen Hutchings <ben@decadent.org.uk>
Fri, 11 May 2012 12:13:49 +0000 (13:13 +0100)
commit ca3649de026ff95c6f2847e8d096cf2f411c02b3 upstream.

Some output pins on Conexant chips have no HP control bit, but the
auto-parser initializes these pins unconditionally with PIN_HP.

Check the pin-capability and avoid the HP bit if not supported.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
sound/pci/hda/patch_conexant.c

index ae949293ff05af60ee5ea8cc69422f85e91fcc52..99a3378e4f186d777a781ab7141feb5901a67917 100644 (file)
@@ -4003,9 +4003,14 @@ static void cx_auto_init_output(struct hda_codec *codec)
        int i;
 
        mute_outputs(codec, spec->multiout.num_dacs, spec->multiout.dac_nids);
-       for (i = 0; i < cfg->hp_outs; i++)
+       for (i = 0; i < cfg->hp_outs; i++) {
+               unsigned int val = PIN_OUT;
+               if (snd_hda_query_pin_caps(codec, cfg->hp_pins[i]) &
+                   AC_PINCAP_HP_DRV)
+                       val |= AC_PINCTL_HP_EN;
                snd_hda_codec_write(codec, cfg->hp_pins[i], 0,
-                                   AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP);
+                                   AC_VERB_SET_PIN_WIDGET_CONTROL, val);
+       }
        mute_outputs(codec, cfg->hp_outs, cfg->hp_pins);
        mute_outputs(codec, cfg->line_outs, cfg->line_out_pins);
        mute_outputs(codec, cfg->speaker_outs, cfg->speaker_pins);