[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