summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Reichl <hias@horus.com>2022-04-30 16:28:45 +0200
committerJaroslav Kysela <perex@perex.cz>2022-05-19 17:13:59 +0200
commitdf621629d8fc1445cc7aeca15cd25e8ff6ff073f (patch)
tree13ff934d91460403ac2287bd0206767fd3b6f6ae
parent17ba71244747ba9854bb29da6d68b49dfe054320 (diff)
downloadalsa-lib-df621629d8fc1445cc7aeca15cd25e8ff6ff073f.tar.gz
conf: vc4-hdmi: use a proper hdmi pcm, fix broken default pcm
Userspace expects to see a HDMI pcm, so remove the somewhat broken front and iec958 pcms and add a proper hdmi pcm instead. The hdmi pcm supports HD/HBR audio passthrough and relays the IEC958 status bits on to the kernel driver so it can switch to HBR audio packets if needed. The control hook is marked optional because kernels before 5.14 didn't expose the IEC958 controls. The default pcm never worked as dmix doesn't support the iec958 format. So drop dmix, only use plug and softvol, and use the hdmi pcm for iec958 formatting. Fixes: https://github.com/alsa-project/alsa-lib/issues/229 Link: https://lore.kernel.org/alsa-devel/20220430142845.229409-1-hias@horus.com/ Signed-off-by: Matthias Reichl <hias@horus.com> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r--src/conf/cards/vc4-hdmi.conf78
1 files changed, 48 insertions, 30 deletions
diff --git a/src/conf/cards/vc4-hdmi.conf b/src/conf/cards/vc4-hdmi.conf
index 027804a1..af87b3a8 100644
--- a/src/conf/cards/vc4-hdmi.conf
+++ b/src/conf/cards/vc4-hdmi.conf
@@ -3,36 +3,9 @@
# subframe conversion
#
-<confdir:pcm/front.conf>
+<confdir:pcm/hdmi.conf>
-vc4-hdmi.pcm.front.0 {
- @args [ CARD ]
- @args.CARD {
- type string
- }
- type hw
- card $CARD
-}
-
-# default with dmix
-vc4-hdmi.pcm.default {
- @args [ CARD ]
- @args.CARD {
- type string
- }
- type asym
- playback.pcm {
- type plug
- slave.pcm {
- @func concat
- strings [ "dmix:" $CARD ]
- }
- }
-}
-
-<confdir:pcm/iec958.conf>
-
-vc4-hdmi.pcm.iec958.0 {
+vc4-hdmi.pcm.hdmi.0 {
@args [ CARD AES0 AES1 AES2 AES3 ]
@args.CARD {
type string
@@ -53,12 +26,57 @@ vc4-hdmi.pcm.iec958.0 {
slave {
format IEC958_SUBFRAME_LE
pcm {
- type plug
+ type hooks
slave.pcm {
type hw
card $CARD
+ device 0
+ }
+ hooks.0 {
+ type ctl_elems
+ hook_args [
+ {
+ name "IEC958 Playback Default"
+ interface PCM
+ optional true
+ lock true
+ preserve true
+ value [ $AES0 $AES1 $AES2 $AES3 ]
+ }
+ ]
}
}
}
status [ $AES0 $AES1 $AES2 $AES3 ]
+ hdmi_mode true
+}
+
+# default with plug and softvol
+vc4-hdmi.pcm.default {
+ @args [ CARD ]
+ @args.CARD {
+ type string
+ }
+ type asym
+ playback.pcm {
+ type plug
+ slave.pcm {
+ type softvol
+ slave.pcm {
+ @func concat
+ strings [
+ "cards.vc4-hdmi.pcm.hdmi.0:"
+ "CARD=" $CARD ","
+ "AES0=0x04," # IEC958_AES0_CON_NOT_COPYRIGHT | IEC958_AES0_CON_EMPHASIS_NONE
+ "AES1=0x82," # IEC958_AES1_CON_ORIGINAL | IEC958_AES1_CON_PCM_CODER
+ "AES2=0x00," # IEC958_AES2_CON_SOURCE_UNSPEC | IEC958_AES2_CON_CHANNEL_UNSPEC
+ "AES3=0x01" # IEC958_AES3_CON_FS_NOTID (iec958 plugin will fill in actual rate)
+ ]
+ }
+ control {
+ name "PCM Playback Volume"
+ card $CARD
+ }
+ }
+ }
}