summaryrefslogtreecommitdiff
path: root/sound/soc/sof/ipc4-pcm.c
diff options
context:
space:
mode:
authorRanjani Sridharan <ranjani.sridharan@linux.intel.com>2023-01-27 15:00:22 +0300
committerMark Brown <broonie@kernel.org>2023-01-27 15:14:05 +0300
commit37a26eec53b09b7054234b77200ce729601b0ccb (patch)
treef38811fd50a7dd9f5c8f378275ac151539223daf /sound/soc/sof/ipc4-pcm.c
parentba223b3ad0b9f1753f0822c5c441a925cc82b63a (diff)
downloadlinux-37a26eec53b09b7054234b77200ce729601b0ccb.tar.xz
ASoC: SOF: ipc4: Add flag to skip triggering pipelines during FE DAI trigger
Add a new flag, skip_during_fe_trigger, to struct sof_ipc4_pipeline to skip triggering pipelines in the FE DAI trigger. Set this flag for the HDA DAI BE pipelines so that their BE pipeline will not be triggered in the FE DAI trigger. Also, move the trigger handling for all commands include START/PAUSE_RELEASE for the HDA DAI's to the backend DAI trigger ops. For the SSP/DMIC/SDW cases, remove the BE DAI trigger as they involve no DMA operations and can be triggered in the FE DAI trigger. This is in preparation to perform batch triggering of all pipelines for the non-HDA case. Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Libin Yang <libin.yang@intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Link: https://lore.kernel.org/r/20230127120031.10709-10-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sof/ipc4-pcm.c')
-rw-r--r--sound/soc/sof/ipc4-pcm.c17
1 files changed, 1 insertions, 16 deletions
diff --git a/sound/soc/sof/ipc4-pcm.c b/sound/soc/sof/ipc4-pcm.c
index 05515e8e6f57..db9d0adb2717 100644
--- a/sound/soc/sof/ipc4-pcm.c
+++ b/sound/soc/sof/ipc4-pcm.c
@@ -58,25 +58,10 @@ static int sof_ipc4_trigger_pipelines(struct snd_soc_component *component,
if (!swidget)
continue;
- /*
- * set pipeline state for both FE and BE pipelines for RUNNING state.
- * For PAUSE/RESET, set the pipeline state only for the FE pipeline.
- */
- switch (state) {
- case SOF_IPC4_PIPE_PAUSED:
- case SOF_IPC4_PIPE_RESET:
- if (!WIDGET_IS_AIF(swidget->id))
- continue;
- break;
- default:
- break;
- }
-
- /* find pipeline widget for the pipeline that this widget belongs to */
pipeline_widget = swidget->pipe_widget;
pipeline = (struct sof_ipc4_pipeline *)pipeline_widget->private;
- if (pipeline->state == state)
+ if (pipeline->state == state || pipeline->skip_during_fe_trigger)
continue;
/* first set the pipeline to PAUSED state */