ALSA: hda - hdmi: Fix incorrect default channel mapping for unusual CAs
authorAnssi Hannula <anssi.hannula@iki.fi>
Fri, 4 Oct 2013 23:25:39 +0000 (02:25 +0300)
committerTakashi Iwai <tiwai@suse.de>
Mon, 7 Oct 2013 10:46:26 +0000 (12:46 +0200)
commit90f28002110d783f49639f0db2ccdc0b58302cbd
tree5436f9081bdeed0098f65b0454a9fe5ae62ea973
parent56cac413dd6d43af8355f5d1f90a199b540f73fc
ALSA: hda - hdmi: Fix incorrect default channel mapping for unusual CAs

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: Anssi Hannula <anssi.hannula@iki.fi>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_hdmi.c