On 10/4/19 8:41 AM, Ranjani Sridharan wrote:
Currently, the trigger orders SND_SOC_DPCM_TRIGGER_PRE/POST
determine the order in which FE DAI and BE DAI are triggered.
In the case of SND_SOC_DPCM_TRIGGER_PRE, the FE DAI is
triggered before the BE DAI and in the case of
SND_SOC_DPCM_TRIGGER_POST, the BE DAI is triggered before
the FE DAI. And this order remains the same irrespective of the
trigger command.
In the case of the SOF driver, during playback, the FW
expects the BE DAI to be triggered before the FE DAI during
the START trigger. The BE DAI trigger handles the starting of
Link DMA and so it must be started before the FE DAI is started
to prevent xruns during pause/release. This can be addressed
by setting the trigger order for the FE dai link to
SND_SOC_DPCM_TRIGGER_POST. But during the STOP trigger,
the FW expects the FE DAI to be triggered before the BE DAI.
Retaining the same order during the START and STOP commands,
results in FW error as the DAI component in the FW is still
active.
The issue can be fixed by mirroring the trigger order of
FE and BE DAI's during the START and STOP trigger. So, with the
trigger order set to SND_SOC_DPCM_TRIGGER_PRE, the FE DAI will be
trigger first during SNDRV_PCM_TRIGGER_START/STOP/RESUME
and the BE DAI will be triggered first during the
STOP/SUSPEND/PAUSE commands. Conversely, with the trigger order
set to SND_SOC_DPCM_TRIGGER_POST, the BE DAI will be triggered
first during the SNDRV_PCM_TRIGGER_START/STOP/RESUME commands
and the FE DAI will be triggered first during the
SNDRV_PCM_TRIGGER_STOP/SUSPEND/PAUSE commands.
My first thought was to use a BESPOKE trigger for the SOF driver
but looking more into the implementation of the bespoke trigger
in soc_pcm_bespoke_trigger() didnt indicate it had much to do
with the ordering of the FE/BE DAI's but rather just use the
bespoke trigger callbacks in the DAI driver.
More details on the SOF issue can be found in:
Github Issue: https://github.com/thesofproject/linux/issues/1160
I am a bit confused because that GitHub link does not provide any test
results, and the PR1277 CI results show only half of the platforms
tested. not sure why. I also don't get if this is an issue specific to
the HDaudio Link DMA or if this is a across-the-board issue.
The other comment is that I see quite a few legacy Intel machine drivers
with the POST trigger hard-coded for front-ends, and we'd need to retest
some of these platforms to see if this change broke them.
Ranjani Sridharan (2):
ASoC: pcm: update FE/BE trigger order based on the command
ASoC: SOF: topology: set trigger order for FE DAI link
sound/soc/soc-pcm.c | 99 +++++++++++++++++++++++++++++-----------
sound/soc/sof/topology.c | 4 ++
2 files changed, 76 insertions(+), 27 deletions(-)
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel