I have a question about configuring a physical loopback on a custom
board for the Intel Skylake platform driver. I have also asked on
freenode/#alsa-dev but they directed me here.
We have the following physical SSP layout:
A2B axillary audio
+ SSP0 Tx (connected to SSP5 Rx, for debug)
+ SSP0 Rx
Main speaker output + loopback from A2B
+ SSP5 Tx
+ SSP5 Rx (connected to SSP0 Tx)
We have a board-level hardware loopback where the output signals and
clock (slave) on SSP0 are connected to the input signals and clock
(master) on SSP5.
I'm trying to configure the DAI links in the machine driver so that they
link against SSP0 Pin CPU DAI correctly but I have three problematic
1. Separate BE DAI links for SSP5 playback and capture, linking against
the same Skylake CPU DAI "SSP5 Tx". This crashes the kernel with a NULL
pointer dereference (I'm looking into this). Presumably this is an
invalid configuration because I have multiple DAI links linking against
one CPU DAI. See machine1.c
2. One BE DAI link for SSP5 playback + capture, linking against the same
Skylake CPU DAI. This silences my SSP5 Tx main audio output (which
appears to be muted) when I try to arecord on the SSP5 Rx A2B debug
loopback. The recording is a perfect copy of SSP0 Tx so the loopback
part works. I can recover by restarting my whole audio stack. See
3. Separate BE DAI links for SSP playback and loopback, linking against
a separated SSP5 Skylake CPU DAI (SSP5 Pin with ssp5 Tx, SSP5 Pin
Loopback with ssp5 Rx). This configuration works but requires a
modification to the Skylake platform driver - which I'd rather avoid.
See machine3.c, skylake.diff
Configuration 2 is closest to what I want, and configuration 3 is my
work-around for now.
What is the correct way to link CPU DAIs for this kind of loopback? I
have attached example code.