[alsa-devel] Digital-Out (Toslink) on HDA-Intal (AD1986A)?

Takashi Iwai tiwai at suse.de
Wed Jan 23 12:05:09 CET 2008


At Tue, 22 Jan 2008 21:20:49 +0100,
Martin Egge wrote:
> 
> Hi,
> 
> is there any way to use the digital output via toslink on my Samsung P50 
> notebook?
> 
> It has an integrated Intel Corporation 82801G (ICH7 Family) High Definition 
> Audio Controller. The soundchip is supported via HDA-Intel and the codec is 
> Analog Devices AD1986A.
> 
> If the digital output is not supported at the moment, I'd like to help the 
> developers with information, testing an even coding.
> 
> You can find all alsa related information about my system at [1]

The SPDIF is disabled intentionally for your model because no one
could test it.  Does the patch below work?


Takashi

---

diff -r 8ba16b4a9e2d pci/hda/patch_analog.c
--- a/pci/hda/patch_analog.c	Wed Jan 23 11:52:38 2008 +0100
+++ b/pci/hda/patch_analog.c	Wed Jan 23 12:05:02 2008 +0100
@@ -921,6 +921,13 @@ static struct hda_amp_list ad1986a_loopb
 };
 #endif
 
+static int is_jack_available(struct hda_codec *codec, hda_nid_t nid)
+{
+	unsigned int conf = snd_hda_codec_read(codec, nid, 0,
+					       AC_VERB_GET_CONFIG_DEFAULT, 0);
+	return get_defcfg_connect(conf) != AC_JACK_PORT_NONE;
+}
+
 static int patch_ad1986a(struct hda_codec *codec)
 {
 	struct ad198x_spec *spec;
@@ -980,7 +987,8 @@ static int patch_ad1986a(struct hda_code
 		spec->multiout.max_channels = 2;
 		spec->multiout.num_dacs = 1;
 		spec->multiout.dac_nids = ad1986a_laptop_dac_nids;
-		spec->multiout.dig_out_nid = 0;
+		if (!is_jack_available(codec, 0x25))
+			spec->multiout.dig_out_nid = 0;
 		spec->input_mux = &ad1986a_laptop_eapd_capture_source;
 		break;
 	case AD1986A_LAPTOP_AUTOMUTE:
@@ -991,7 +999,8 @@ static int patch_ad1986a(struct hda_code
 		spec->multiout.max_channels = 2;
 		spec->multiout.num_dacs = 1;
 		spec->multiout.dac_nids = ad1986a_laptop_dac_nids;
-		spec->multiout.dig_out_nid = 0;
+		if (!is_jack_available(codec, 0x25))
+			spec->multiout.dig_out_nid = 0;
 		spec->input_mux = &ad1986a_laptop_eapd_capture_source;
 		codec->patch_ops.unsol_event = ad1986a_hp_unsol_event;
 		codec->patch_ops.init = ad1986a_hp_init;


More information about the Alsa-devel mailing list