ASoC: SOF: keep prepare/unprepare widgets in sink path
The existing code return when a widget doesn't need to prepare/unprepare. This will prevent widgets in the sink path from being prepared/unprepared. Cc: <stable@vger.kernel.org> # 6.1 Link: https://github.com/thesofproject/linux/issues/4021 Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Link: https://lore.kernel.org/r/20230118101255.29139-4-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
0ad84b11f2
commit
cc755b4377
@ -271,9 +271,9 @@ 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;
|
||||
|
||||
/* return if the widget is in use or if it is already unprepared */
|
||||
/* skip if the widget is in use or if it is already unprepared */
|
||||
if (!swidget || !swidget->prepared || swidget->use_count > 0)
|
||||
return;
|
||||
goto sink_unprepare;
|
||||
|
||||
if (widget_ops[widget->id].ipc_unprepare)
|
||||
/* unprepare the source widget */
|
||||
@ -281,6 +281,7 @@ sof_unprepare_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widg
|
||||
|
||||
swidget->prepared = false;
|
||||
|
||||
sink_unprepare:
|
||||
/* unprepare all widgets in the sink paths */
|
||||
snd_soc_dapm_widget_for_each_sink_path(widget, p) {
|
||||
if (!p->walking && p->sink->dobj.private) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user