diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-09-25 17:57:53 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-09-25 17:57:53 +0200 |
commit | 3b23cd28751c70a3d9d4f5c9e1d2f6dbbe04f4e8 (patch) | |
tree | 082c40f8157305147ac57b895246bf2e5e9b554c /sound | |
parent | b614e38e78ec1aacf80fd6124cfcc6e45925647c (diff) | |
parent | 01fdf1801e349302fce5d9865470a7100a2d9b74 (diff) | |
download | lwn-3b23cd28751c70a3d9d4f5c9e1d2f6dbbe04f4e8.tar.gz lwn-3b23cd28751c70a3d9d4f5c9e1d2f6dbbe04f4e8.zip |
Merge branch 'fix/hda' into for-linus
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/patch_analog.c | 1 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 22 |
2 files changed, 17 insertions, 6 deletions
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index b697fd2a6f8b..10bbbaf6ebc3 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c @@ -3641,6 +3641,7 @@ static struct snd_pci_quirk ad1984_cfg_tbl[] = { /* Lenovo Thinkpad T61/X61 */ SND_PCI_QUIRK_VENDOR(0x17aa, "Lenovo Thinkpad", AD1984_THINKPAD), SND_PCI_QUIRK(0x1028, 0x0214, "Dell T3400", AD1984_DELL_DESKTOP), + SND_PCI_QUIRK(0x1028, 0x0233, "Dell Latitude E6400", AD1984_DELL_DESKTOP), {} }; diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index a1312a6c8af2..a432e6efd19b 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -1594,12 +1594,22 @@ static void alc_auto_parse_digital(struct hda_codec *codec) } if (spec->autocfg.dig_in_pin) { - hda_nid_t dig_nid; - err = snd_hda_get_connections(codec, - spec->autocfg.dig_in_pin, - &dig_nid, 1); - if (err > 0) - spec->dig_in_nid = dig_nid; + dig_nid = codec->start_nid; + for (i = 0; i < codec->num_nodes; i++, dig_nid++) { + unsigned int wcaps = get_wcaps(codec, dig_nid); + if (get_wcaps_type(wcaps) != AC_WID_AUD_IN) + continue; + if (!(wcaps & AC_WCAP_DIGITAL)) + continue; + if (!(wcaps & AC_WCAP_CONN_LIST)) + continue; + err = get_connection_index(codec, dig_nid, + spec->autocfg.dig_in_pin); + if (err >= 0) { + spec->dig_in_nid = dig_nid; + break; + } + } } } |