At Tue, 18 Dec 2007 08:28:06 -0800, John Stile wrote:
On Tue, 2007-12-18 at 14:04 +0100, Takashi Iwai wrote:
At Mon, 17 Dec 2007 10:27:27 -0800, John Stile wrote:
I am trying to use a Via VT1708 audio card ( uses the snd-hda-intel.ko driver) to record from SPDIF-in.
An off-list reply to my posting to alsa-users list suggested that snd-hda-intel.ko might not support SPDIF-in with the VT1708 card, which brought me here.
Can someone who works on the Intel HDA driver tell me if it supports SPDIF-in on the VT1708 audio card?
It should be, but not tested well, I guess.
The driver enables the SPDIF-in capability when BIOS sets the pin information properly. Check /proc/asound/card0/codec#* file whether you have any (activated) input pin node that supports SPDIF-in.
Takashi
Thank you for your reply! The output of your command is below. spdif-out=Node 0x25 spdif-in=Node 0x26 Neither labeled inactive, but spdif-in doesn't list a "Connection" line.
Just because it's only for input (thus it has no "source").
I have the latest bios: 1.03 (2007/08/23) (a beta bios is available). Do I try the beta bios?
I don't think so. Likely a driver bug. How about the patch below (against the latest HG version)?
Takashi
diff -r 2d3893cf030c pci/hda/patch_via.c --- a/pci/hda/patch_via.c Tue Dec 18 15:42:53 2007 +0100 +++ b/pci/hda/patch_via.c Tue Dec 18 17:48:00 2007 +0100 @@ -568,25 +568,27 @@ static int via_init(struct hda_codec *co if (IS_VT1708_VENDORID(codec->vendor_id)) { snd_hda_codec_write(codec, VT1708_DIGIN_PIN, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, - 0x40); + PIN_OUT); snd_hda_codec_write(codec, VT1708_DIGIN_PIN, 0, AC_VERB_SET_EAPD_BTLENABLE, 0x02); } else if (IS_VT1709_10CH_VENDORID(codec->vendor_id) || IS_VT1709_6CH_VENDORID(codec->vendor_id)) { snd_hda_codec_write(codec, VT1709_DIGIN_PIN, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, - 0x40); + PIN_OUT); snd_hda_codec_write(codec, VT1709_DIGIN_PIN, 0, AC_VERB_SET_EAPD_BTLENABLE, 0x02); } else if (IS_VT1708B_8CH_VENDORID(codec->vendor_id) || IS_VT1708B_4CH_VENDORID(codec->vendor_id)) { snd_hda_codec_write(codec, VT1708B_DIGIN_PIN, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, - 0x40); + PIN_OUT); snd_hda_codec_write(codec, VT1708B_DIGIN_PIN, 0, AC_VERB_SET_EAPD_BTLENABLE, 0x02); } - } + } else /* enable SPDIF-input pin */ + snd_hda_codec_write(codec, spec->autocfg.dig_in_pin, 0, + AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN);
return 0; }