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 <[email protected]>
> Signed-off-by: Anssi Hannula <[email protected]>
> Cc: [email protected]

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
> 
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to