[alsa-devel] [PATCH] ALSA: hda - Fix default multichannel HDMI mapping regression
Takashi Iwai
tiwai at suse.de
Mon Feb 4 10:31:29 CET 2013
At Sun, 3 Feb 2013 17:55:45 +0200,
Anssi Hannula wrote:
>
> 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 at xbmc.org>
> Signed-off-by: Anssi Hannula <anssi.hannula at iki.fi>
> Cc: stable at vger.kernel.org
Thanks, applied.
Takashi
> ---
>
> 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
>
More information about the Alsa-devel
mailing list