diff options
author | Takashi Iwai <tiwai@suse.de> | 2011-06-24 10:43:03 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2011-06-24 10:43:03 +0200 |
commit | 1af7c5f0d48dca385f29610cc62435afc13237cf (patch) | |
tree | 7f923de5bc6f1e0c099a75888a4719bc2baaa91f /sound/pci/hda/hda_codec.c | |
parent | f9a09e003f3d6d1450e758f6aeb4a1872d9570e9 (diff) | |
download | blackbird-op-linux-1af7c5f0d48dca385f29610cc62435afc13237cf.tar.gz blackbird-op-linux-1af7c5f0d48dca385f29610cc62435afc13237cf.zip |
ALSA: hda - Add a workaround for invalid line-out setups
Some BIOS set up the pin config wrongly as line-out although it's
supposed to be a speaker out. In most cases, though, we can judge
the validity by checking the connection type -- when it's FIXED,
mostly it's an invalid line-out but a speaker.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda/hda_codec.c')
-rw-r--r-- | sound/pci/hda/hda_codec.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index a2388fc23e39..654dc8935c91 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -4590,7 +4590,7 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec, unsigned int wid_caps = get_wcaps(codec, nid); unsigned int wid_type = get_wcaps_type(wid_caps); unsigned int def_conf; - short assoc, loc; + short assoc, loc, conn, dev; /* read all default configuration for pin complex */ if (wid_type != AC_WID_PIN) @@ -4600,10 +4600,19 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec, continue; def_conf = snd_hda_codec_get_pincfg(codec, nid); - if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE) + conn = get_defcfg_connect(def_conf); + if (conn == AC_JACK_PORT_NONE) continue; loc = get_defcfg_location(def_conf); - switch (get_defcfg_device(def_conf)) { + dev = get_defcfg_device(def_conf); + + /* workaround for buggy BIOS setups */ + if (dev == AC_JACK_LINE_OUT) { + if (conn == AC_JACK_PORT_FIXED) + dev = AC_JACK_SPEAKER; + } + + switch (dev) { case AC_JACK_LINE_OUT: seq = get_defcfg_sequence(def_conf); assoc = get_defcfg_association(def_conf); |