[alsa-devel] IEC61937 passthrough with BYT/CHT HdmiLpeAudio

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Wed Aug 16 17:15:09 CEST 2017


Hi Takashi,

While I was looking at IEC61937, I ran a quick test on my BYT and CHT 
boxes, and as I suspected IEC61937 works fine since your modifications 
to add s16_le support. I can get AC3 to my HDMI receiver without 
problems just by using the hw:0,<1,2,3> device, depending on which port 
is used.

e.g. aplay  -Dhw:0,2 -c2 -r48000 -fs16le ac3_surround_test.spdif

To make things more usable for applications, and maybe support receivers 
who actually care about the AES0 non-audio bit or reduce the initial 
lock time, it'd be nice to support the traditional command line, e.g.

aplay -D'hdmi:CARD=0,DEV=<0,1,2>,AES0=0x6' -c2 -r48000 -fs16_le 
ac3_surround_test.spdif

However we seem to have a mix of alsa-lib configuration issues and maybe 
a miss at the driver level

I added the missing devices in HdmiLpeAudio.conf with the patch below, 
which helps select the right output, but somehow the AES0 non-audio bit 
doesn't seem to be set.

[plb at ZOTAC PASSTHROUGH]$ amixer -Dhw:0 cget numid=12
numid=12,iface=PCM,name='IEC958 Playback Default',device=2
   ; type=IEC958,access=rw------,values=1
   : values=[AES0=0x00 AES1=0x00 AES2=0x00 AES3=0x00]
[plb at ZOTAC PASSTHROUGH]$ aplay -D'hdmi:CARD=0,DEV=2,AES0=0x6' -c2 
-r48000 -fs16_le ac3_surround_test.spdif
Playing raw data 'ac3_surround_test.spdif' : Signed 16 bit Little 
Endian, Rate 48000 Hz, Stereo
^CAborted by signal Interrupt...
[plb at ZOTAC PASSTHROUGH]$ amixer -Dhw:0 cget 
numid=12numid=12,iface=PCM,name='IEC958 Playback Default',device=2
   ; type=IEC958,access=rw------,values=1
   : values=[AES0=0x00 AES1=0x00 AES2=0x00 AES3=0x00]

Could it be that we are missing the 'index' which is used in the HDaudio 
case to access the 'IEC958 Playback Default' controls?

Thanks

-Pierre

diff HdmiLpeAudio.conf /usr/share/alsa/cards/HdmiLpeAudio.conf
59,135d58
<                 device 0
<                 lock true
<                 preserve true
<                 value [ $AES0 $AES1 $AES2 $AES3 ]
<             }
<         ]
<     }
< }
<
< HdmiLpeAudio.pcm.hdmi.1 {
<     @args [ CARD AES0 AES1 AES2 AES3 ]
<     @args.CARD {
<         type string
<     }
<     @args.AES0 {
<         type integer
<     }
<     @args.AES1 {
<         type integer
<     }
<     @args.AES2 {
<         type integer
<     }
<     @args.AES3 {
<         type integer
<     }
<     type hooks
<     slave.pcm {
<         type hw
<         card $CARD
<         device 1
<     }
<     hooks.0 {
<         type ctl_elems
<         hook_args [
<             {
<                 interface PCM
<                 name "IEC958 Playback Default"
<                 device 1
<                 lock true
<                 preserve true
<                 value [ $AES0 $AES1 $AES2 $AES3 ]
<             }
<         ]
<     }
< }
<
< HdmiLpeAudio.pcm.hdmi.2 {
<     @args [ CARD AES0 AES1 AES2 AES3 ]
<     @args.CARD {
<         type string
<     }
<     @args.AES0 {
<         type integer
<     }
<     @args.AES1 {
<         type integer
<     }
<     @args.AES2 {
<         type integer
<     }
<     @args.AES3 {
<         type integer
<     }
<     type hooks
<     slave.pcm {
<         type hw
<         card $CARD
<         device 2
<     }
<     hooks.0 {
<         type ctl_elems
<         hook_args [
<             {
<                 interface PCM
<                 name "IEC958 Playback Default"
<                 device 2



More information about the Alsa-devel mailing list