mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 05:06:43 +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