linux/sound/pci
Anssi Hannula 18e391862c ALSA: hda - hdmi: Fallback to ALSA allocation when selecting CA
hdmi_channel_allocation() tries to find a HDMI channel allocation that
matches the number channels in the playback stream and contains only
speakers that the HDMI sink has reported as available via EDID. If no
such allocation is found, 0 (stereo audio) is used.

Using CA 0 causes the audio causes the sink to discard everything except
the first two channels (front left and front right).

However, the sink may be capable of receiving more channels than it has
speakers (and then perform downmix or discard the extra channels), in
which case it is preferable to use a CA that contains extra channels
than to use CA 0 which discards all the non-stereo channels.

Additionally, it seems that HBR (HD) passthrough output does not work on
Intel HDMI codecs when CA is set to 0 (possibly the codec zeroes
channels not present in CA). This happens with all receivers that report
a 5.1 speaker mask since a HBR stream is carried on 8 channels to the
codec.

Add a fallback in the CA selection so that the CA channel count at least
matches the stream channel count, even if the stream contains channels
not present in the sink speaker descriptor.

Thanks to GrimGriefer at OpenELEC forums for discovering that changing
the sink speaker mask allowed HBR output.

Reported-by: GrimGriefer
Reported-by: Ashecrow
Reported-by: Frank Zafka <kafkaesque1978@gmail.com>
Reported-by: Peter Frühberger <fritsch@xbmc.org>
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-09-02 15:04:48 +02:00
..
ac97 ALSA: Replace the magic number 44 with const 2013-06-28 12:14:44 +02:00
ali5451 ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
asihpi ALSA: asihpi: Fix unlocked snd_pcm_stop() call 2013-07-15 18:12:49 +02:00
au88x0 ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
aw2 ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
ca0106 ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
cs46xx ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
cs5535audio ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
ctxfi ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
echoaudio ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
emu10k1 ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
hda ALSA: hda - hdmi: Fallback to ALSA allocation when selecting CA 2013-09-02 15:04:48 +02:00
ice1712 ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
korg1212 ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
lola ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
lx6464es ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
mixart ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
nm256 ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
oxygen ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
pcxhr ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
riptide ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
rme9652 ALSA: hdspm - Use enums in hdspm_tco_ltc_frames() 2013-08-19 20:09:03 +02:00
trident ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
vx222 ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
ymfpci ALSA: pci: trivial: replace numeric with standard PM state macros 2013-06-27 15:04:32 +02:00
ad1889.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
ad1889.h
ak4531_codec.c ALSA: pci: remove __dev* attributes 2012-12-07 07:20:55 +01:00
als300.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
als4000.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
atiixp_modem.c ALSA: atiixp: Fix unlocked snd_pcm_stop() call 2013-07-15 18:12:49 +02:00
atiixp.c ALSA: atiixp: Fix unlocked snd_pcm_stop() call 2013-07-15 18:12:49 +02:00
azt3328.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
azt3328.h ALSA: azt3328: fix previous breakage, improve suspend, cleanups 2009-07-15 12:03:26 +02:00
bt87x.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
cmipci.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
cs4281.c ALSA: pci: trivial: replace numeric with standard PM state macros 2013-06-27 15:04:32 +02:00
cs5530.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
ens1370.c ALSA: pci: trivial: replace numeric with standard PM state macros 2013-06-27 15:04:32 +02:00
ens1371.c
es1938.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
es1968.c ALSA: es1968: Add radio support for MediaForte M56VAP 2013-05-31 08:39:48 +02:00
fm801.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
intel8x0.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
intel8x0m.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
Kconfig ALSA: add missing HAS_IOPORT and GENERIC_HARDIRQS dependencies 2013-02-07 14:46:13 +01:00
maestro3.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
Makefile ALSA: Add the driver for Digigram Lola PCI-e boards 2011-05-03 16:31:05 +02:00
rme32.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
rme96.c alsa/rme96: Add missing inclusion of linux/vmalloc.h 2013-08-22 23:24:00 +02:00
sis7019.c Merge branch 'for-linus' into for-next 2013-06-05 15:21:29 +02:00
sis7019.h trivial: fix typos s/paramter/parameter/ and s/excute/execute/ in documentation and source comments. 2009-06-12 18:01:46 +02:00
sonicvibes.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
via82xx_modem.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00
via82xx.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00