mirror of
https://github.com/LibreELEC/LibreELEC.tv
synced 2025-09-24 19:46:01 +07:00
67 lines
2.4 KiB
Diff
67 lines
2.4 KiB
Diff
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
|
|
|