From 7b52b1af0e5b0be845646658fe9bbdc5aeedbdfc Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Tue, 10 Dec 2013 22:53:49 +0200 Subject: [PATCH] linux: ALSA: hda - hdmi: Fix IEC958 ctl indexes for some simple HDMI devices thanks to Anssi for the patch and to MysterX for testing it --- ...x-IEC958-ctl-indexes-for-some-simple.patch | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 packages/linux/patches/3.12.4/linux-992.06-ALSA-hda-hdmi-Fix-IEC958-ctl-indexes-for-some-simple.patch diff --git a/packages/linux/patches/3.12.4/linux-992.06-ALSA-hda-hdmi-Fix-IEC958-ctl-indexes-for-some-simple.patch b/packages/linux/patches/3.12.4/linux-992.06-ALSA-hda-hdmi-Fix-IEC958-ctl-indexes-for-some-simple.patch new file mode 100644 index 0000000000..46b798709e --- /dev/null +++ b/packages/linux/patches/3.12.4/linux-992.06-ALSA-hda-hdmi-Fix-IEC958-ctl-indexes-for-some-simple.patch @@ -0,0 +1,53 @@ +From aebc8b604fc0c806fe66598e71318b2e9098cf0d Mon Sep 17 00:00:00 2001 +From: Anssi Hannula +Date: Tue, 10 Dec 2013 21:56:07 +0200 +Subject: [PATCH] ALSA: hda - hdmi: Fix IEC958 ctl indexes for some simple HDMI + devices + +In case a single HDA card has both HDMI and S/PDIF outputs, the S/PDIF +outputs will have their IEC958 controls created starting from index 16 +and the HDMI controls will be created starting from index 0. + +However, HDMI simple_playback_build_controls() as used by old VIA and +NVIDIA codecs incorrectly requests the IEC958 controls to be created +with an S/PDIF type instead of HDMI. +In case the card has other codecs that have HDMI outputs, the controls +will be created with wrong index=16, causing them to e.g. be unreachable +by the ALSA "hdmi" alias. + +Fix that by making simple_playback_build_controls() request controls +with HDMI indexes. + +Not many cards have an affected configuration, but e.g. ASUS M3N78-VM +contains an integrated NVIDIA HDA "card" with: +- a VIA codec that has, among others, an S/PDIF pin incorrectly + labelled as an HDMI pin, and +- an NVIDIA MCP7x HDMI codec. + +Reported-by: MysterX on #openelec +Tested-by: MysterX on #openelec +Signed-off-by: Anssi Hannula +Cc: # 3.8+ +--- + sound/pci/hda/patch_hdmi.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c +index 556d47231f11..f5060fc7c303 100644 +--- a/sound/pci/hda/patch_hdmi.c ++++ b/sound/pci/hda/patch_hdmi.c +@@ -2326,8 +2326,9 @@ static int simple_playback_build_controls(struct hda_codec *codec) + int err; + + per_cvt = get_cvt(spec, 0); +- err = snd_hda_create_spdif_out_ctls(codec, per_cvt->cvt_nid, +- per_cvt->cvt_nid); ++ err = snd_hda_create_dig_out_ctls(codec, per_cvt->cvt_nid, ++ per_cvt->cvt_nid, ++ HDA_PCM_TYPE_HDMI); + if (err < 0) + return err; + return simple_hdmi_build_jack(codec, 0); +-- +1.8.1.5 +