• Ranjani Sridharan's avatar
    ASoC: pcm: update FE/BE trigger order based on the command · acbf2774
    Ranjani Sridharan authored
    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.
    Signed-off-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
    Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Link: https://lore.kernel.org/r/20191104224812.3393-2-ranjani.sridharan@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    acbf2774
soc-pcm.c 88.5 KB