ASoC: SOF: sof-audio: Fixes for widget prepare and unprepare
Subsystems (3)
Peter Ujfalusi
maintainercover ASoC: SOF: sof-audio: Fixes for widget prepare and unprepare
Hi,
This series contains one fix (first patch) followed by a nice to have safety belts in case we get a widget from topology which is not handled by SOF and will not have corresponding swidget associated with.
I think these can be sent selectively to stable kernels with appropriate adjustments to apply.
I was not comfortable to add Fixes or Complements tags since the last patch for sure going to conflict in some stable variants.
Regards,
Peter
---
Bard Liao (2):
ASoC: SOF: sof-audio: Unprepare when swidget->use_count > 0
ASoC: SOF: sof-audio: keep prepare/unprepare widgets in sink path
Ranjani Sridharan (1):
ASoC: SOF: sof-audio: skip prepare/unprepare if swidget is NULL
sound/soc/sof/sof-audio.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
Signature · 1 line
2.39.0
Peter Ujfalusi
maintainerPATCH 1/3 ASoC: SOF: sof-audio: Unprepare when swidget->use_count > 0
From: Bard Liao <[email protected]>
We should unprepare the widget if its use_count = 1.
--- sound/soc/sof/sof-audio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/sof/sof-audio.c +1 -1
@@ -274,7 +274,7 @@ sof_unprepare_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widgstruct snd_soc_dapm_path *p;/* return if the widget is in use or if it is already unprepared */ -if (!swidget->prepared || swidget->use_count >1 ) +if (!swidget->prepared || swidget->use_count >0 )return ; widget_ops = tplg_ops ? tplg_ops->widget :NULL ;
Signature · 1 line
2.39.0
Peter Ujfalusi
maintainerPATCH 2/3 ASoC: SOF: sof-audio: keep prepare/unprepare widgets in sink path
In reply to Peter UjfalusiFrom: Bard Liao <[email protected]>
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.
--- sound/soc/sof/sof-audio.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
sound/soc/sof/sof-audio.c +3 -2
@@ -273,9 +273,9 @@ sof_unprepare_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widgconst struct sof_ipc_tplg_widget_ops *widget_ops;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->prepared || swidget->use_count >0 ) -return ; + goto sink_unprepare; widget_ops = tplg_ops ? tplg_ops->widget :NULL ;if (widget_ops && widget_ops[widget->id].ipc_unprepare)
@@ -284,6 +284,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) {
Signature · 1 line
2.39.0
Peter Ujfalusi
maintainerPATCH 3/3 ASoC: SOF: sof-audio: skip prepare/unprepare if swidget is NULL
In reply to Peter UjfalusiFrom: Ranjani Sridharan <[email protected]>
Skip preparing/unpreparing widgets if the swidget pointer is NULL. This will be true in the case of virtual widgets in topology that were added for reusing the legacy HDA machine driver with SOF.
--- sound/soc/sof/sof-audio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
sound/soc/sof/sof-audio.c +2 -2
@@ -274,7 +274,7 @@ sof_unprepare_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widgstruct snd_soc_dapm_path *p;/* skip if the widget is in use or if it is already unprepared */ -if (!swidget->prepared || swidget->use_count >0 ) +if (!swidget || !swidget->prepared || swidget->use_count >0 ) goto sink_unprepare; widget_ops = tplg_ops ? tplg_ops->widget :NULL ;
@@ -311,7 +311,7 @@ sof_prepare_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widgetif (!widget_ops)return 0 ; -if (!widget_ops[widget->id].ipc_prepare || swidget->prepared) +if (!swidget || !widget_ops[widget->id].ipc_prepare || swidget->prepared) goto sink_prepare;/* prepare the source widget */
Signature · 1 line
2.39.0
Re: [PATCH 3/3] ASoC: SOF: sof-audio: skip prepare/unprepare if swidget is NULL
Il 13/01/23 17:18, Peter Ujfalusi ha scritto:
Quoted 9 lines
From: Ranjani Sridharan <[email protected]>
Skip preparing/unpreparing widgets if the swidget pointer is NULL. This will be true in the case of virtual widgets in topology that were added for reusing the legacy HDA machine driver with SOF.
Signed-off-by Ranjani Sridharan <[email protected]>Reviewed-by Rander Wang <[email protected]>Signed-off-by Peter Ujfalusi <[email protected]>
I asked you to add a Fixes tag to this commit before you pushed it.
Please add a Fixes tag.
Regards,
Angelo