
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@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@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@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