diff options
author | Takashi Iwai <tiwai@suse.de> | 2008-01-28 06:30:17 -0500 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2008-01-31 11:30:19 -0500 |
commit | 8c0d9649babcf7379dc94cb148bbd2a6d8792984 (patch) | |
tree | 5d1531198cddc9245ca1c39917c60dc05a9f23a6 /sound/pci | |
parent | 4444704cdcd44bb3534ead01d3318f0db858cb9f (diff) |
[ALSA] hda-codec - Add SPDIF output support to AD1986a laptop-eapd model
The SPDIF output on AD1986A laptop-eapd model is disabled although
some Samsung laptops have SPDIF output. Enable it after checking the
pin default config.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/hda/patch_analog.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index 49140322e769..845e949a7f63 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
@@ -925,6 +925,13 @@ static struct hda_amp_list ad1986a_loopbacks[] = { | |||
925 | }; | 925 | }; |
926 | #endif | 926 | #endif |
927 | 927 | ||
928 | static int is_jack_available(struct hda_codec *codec, hda_nid_t nid) | ||
929 | { | ||
930 | unsigned int conf = snd_hda_codec_read(codec, nid, 0, | ||
931 | AC_VERB_GET_CONFIG_DEFAULT, 0); | ||
932 | return get_defcfg_connect(conf) != AC_JACK_PORT_NONE; | ||
933 | } | ||
934 | |||
928 | static int patch_ad1986a(struct hda_codec *codec) | 935 | static int patch_ad1986a(struct hda_codec *codec) |
929 | { | 936 | { |
930 | struct ad198x_spec *spec; | 937 | struct ad198x_spec *spec; |
@@ -984,7 +991,8 @@ static int patch_ad1986a(struct hda_codec *codec) | |||
984 | spec->multiout.max_channels = 2; | 991 | spec->multiout.max_channels = 2; |
985 | spec->multiout.num_dacs = 1; | 992 | spec->multiout.num_dacs = 1; |
986 | spec->multiout.dac_nids = ad1986a_laptop_dac_nids; | 993 | spec->multiout.dac_nids = ad1986a_laptop_dac_nids; |
987 | spec->multiout.dig_out_nid = 0; | 994 | if (!is_jack_available(codec, 0x25)) |
995 | spec->multiout.dig_out_nid = 0; | ||
988 | spec->input_mux = &ad1986a_laptop_eapd_capture_source; | 996 | spec->input_mux = &ad1986a_laptop_eapd_capture_source; |
989 | break; | 997 | break; |
990 | case AD1986A_LAPTOP_AUTOMUTE: | 998 | case AD1986A_LAPTOP_AUTOMUTE: |
@@ -995,7 +1003,8 @@ static int patch_ad1986a(struct hda_codec *codec) | |||
995 | spec->multiout.max_channels = 2; | 1003 | spec->multiout.max_channels = 2; |
996 | spec->multiout.num_dacs = 1; | 1004 | spec->multiout.num_dacs = 1; |
997 | spec->multiout.dac_nids = ad1986a_laptop_dac_nids; | 1005 | spec->multiout.dac_nids = ad1986a_laptop_dac_nids; |
998 | spec->multiout.dig_out_nid = 0; | 1006 | if (!is_jack_available(codec, 0x25)) |
1007 | spec->multiout.dig_out_nid = 0; | ||
999 | spec->input_mux = &ad1986a_laptop_eapd_capture_source; | 1008 | spec->input_mux = &ad1986a_laptop_eapd_capture_source; |
1000 | codec->patch_ops.unsol_event = ad1986a_hp_unsol_event; | 1009 | codec->patch_ops.unsol_event = ad1986a_hp_unsol_event; |
1001 | codec->patch_ops.init = ad1986a_hp_init; | 1010 | codec->patch_ops.init = ad1986a_hp_init; |