diff mbox series

[2/2] ASoC: SOF: don't unprepare widget used other pipelines

Message ID 20220920150107.2090695-3-pierre-louis.bossart@linux.intel.com
State New
Headers show
Series ASoC: SOF: sof-audio: fix prepare/unprepare | expand

Commit Message

Pierre-Louis Bossart Sept. 20, 2022, 3:01 p.m. UTC
From: Rander Wang <rander.wang@intel.com>

If multiple pipeline are mixed into one, we can't unprepare
the widget used by other pipelines. This patch checks use_count
to address this case.

Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Rander Wang <rander.wang@intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 sound/soc/sof/sof-audio.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/sound/soc/sof/sof-audio.c b/sound/soc/sof/sof-audio.c
index 71cea83889fb0..62092e2d609c7 100644
--- a/sound/soc/sof/sof-audio.c
+++ b/sound/soc/sof/sof-audio.c
@@ -271,8 +271,8 @@  sof_unprepare_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widg
 	struct snd_sof_widget *swidget = widget->dobj.private;
 	struct snd_soc_dapm_path *p;
 
-	/* it is already unprepared */
-	if (!swidget->prepared)
+	/* return if the widget is in use or if it is already unprepared */
+	if (!swidget->prepared || swidget->use_count > 1)
 		return;
 
 	if (widget_ops[widget->id].ipc_unprepare)