mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
linux: add patch to fix channel mappings
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
3368ae19c0
commit
ab047bd85a
66
packages/linux/patches/3.7.5/linux-990.02-hda-Fix-default-multichannel-HDMI-mapping-regre.patch
vendored
Normal file
66
packages/linux/patches/3.7.5/linux-990.02-hda-Fix-default-multichannel-HDMI-mapping-regre.patch
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
From b3ed803a1f4012a5067087674b8b1efad22d2bb0 Mon Sep 17 00:00:00 2001
|
||||
From: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
Date: Sun, 3 Feb 2013 17:28:34 +0200
|
||||
Subject: [PATCH] ALSA: hda - Fix default multichannel HDMI mapping regression
|
||||
|
||||
Commit d45e6889ee69456a4d5b1bbb32252f460cd48fa9 ("ALSA: hda - Provide
|
||||
the proper channel mapping for generic HDMI driver") added support for
|
||||
custom channel maps in the HDA HDMI driver. Due to a mistake in an
|
||||
'if' condition the custom map is always used even when no such map has
|
||||
been set. This causes incorrect channel mapping for multichannel audio
|
||||
by default.
|
||||
|
||||
Pass per_pin->chmap_set to hdmi_setup_channel_mapping() as a parameter
|
||||
so that it can use it for detecting if a custom map has been set instead
|
||||
of checking if map is NULL (which is never the case).
|
||||
|
||||
Reported-by: Staffan Lindberg <pike@xbmc.org>
|
||||
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
|
||||
This also affects stable 3.7, but not earlier versions.
|
||||
|
||||
sound/pci/hda/patch_hdmi.c | 11 +++++++----
|
||||
1 file changed, 7 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
|
||||
index 807a2aa..e85959f 100644
|
||||
--- a/sound/pci/hda/patch_hdmi.c
|
||||
+++ b/sound/pci/hda/patch_hdmi.c
|
||||
@@ -714,9 +714,10 @@ static void hdmi_setup_fake_chmap(unsigned char *map, int ca)
|
||||
|
||||
static void hdmi_setup_channel_mapping(struct hda_codec *codec,
|
||||
hda_nid_t pin_nid, bool non_pcm, int ca,
|
||||
- int channels, unsigned char *map)
|
||||
+ int channels, unsigned char *map,
|
||||
+ bool chmap_set)
|
||||
{
|
||||
- if (!non_pcm && map) {
|
||||
+ if (!non_pcm && chmap_set) {
|
||||
hdmi_manual_setup_channel_mapping(codec, pin_nid,
|
||||
channels, map);
|
||||
} else {
|
||||
@@ -905,7 +906,8 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, int pin_idx,
|
||||
pin_nid,
|
||||
channels);
|
||||
hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca,
|
||||
- channels, per_pin->chmap);
|
||||
+ channels, per_pin->chmap,
|
||||
+ per_pin->chmap_set);
|
||||
hdmi_stop_infoframe_trans(codec, pin_nid);
|
||||
hdmi_fill_audio_infoframe(codec, pin_nid,
|
||||
ai.bytes, sizeof(ai));
|
||||
@@ -915,7 +917,8 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, int pin_idx,
|
||||
* accordingly */
|
||||
if (per_pin->non_pcm != non_pcm)
|
||||
hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca,
|
||||
- channels, per_pin->chmap);
|
||||
+ channels, per_pin->chmap,
|
||||
+ per_pin->chmap_set);
|
||||
}
|
||||
|
||||
per_pin->non_pcm = non_pcm;
|
||||
--
|
||||
1.7.10
|
||||
|
Loading…
x
Reference in New Issue
Block a user