Message ID | 20191004154127.28459-1-ranjani.sridharan@linux.intel.com (mailing list archive) |
---|---|
Headers | show |
Series | Alter the trigger order for FE/BE DAI's based on command | expand |
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(-) >