• Anssi Hannula's avatar
    ALSA: hda - hdmi: Fix incorrect default channel mapping for unusual CAs · 90f28002
    Anssi Hannula authored
    hdmi_std_setup_channel_mapping() selects a Channel Allocation according
    to the sink reported speaker mask, preferring the ALSA standard layouts.
    
    If the channel allocation is not one of the ALSA standard layouts, the
    ALSA channels are mapped directly to HDMI channels in order. However,
    the function does not take into account that there a holes in the HDMI
    channel map.
    
    Additionally, the function tries to disable a slot by using
    AC_VERB_SET_CHAN_SLOT with parameter ((alsa_ch << 8) | 0xf), while the
    correct parameter is ((0xf << 8) | hdmi_slot), i.e. the slot should be
    unassigned, not the ALSA channel.
    
    Fix both of the issues for non-ALSA-default layouts.
    
    Tested on Intel HDMI with a speaker mask of FL | FR | FC | RC, which
    causes CA 0x06 to be selected for 4-channel audio, which causes
    incorrect output (sound destined to RC goes to FC and FC goes nowhere)
    without the patch.
    Signed-off-by: default avatarAnssi Hannula <anssi.hannula@iki.fi>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    90f28002
patch_hdmi.c 76.6 KB