]> git.baikalelectronics.ru Git - kernel.git/commitdiff
ASoC: SOF: sof-audio: skip prepare/unprepare if swidget is NULL
authorRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Wed, 18 Jan 2023 10:12:54 +0000 (12:12 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Feb 2023 10:28:16 +0000 (11:28 +0100)
commit 0ad84b11f2f8dd19d62d0b2ffd95ece897e6c3dc upstream.

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.

Fixes: 6b2f77ee7c24 ("ASoC: SOF: don't unprepare widget used other pipelines")
Cc: <stable@vger.kernel.org> # 6.1
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Rander Wang <rander.wang@intel.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20230118101255.29139-3-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
sound/soc/sof/sof-audio.c

index 2b93d46942929fde2afde5f155d9e7174a6492f0..62225888b08738290d11c74d0b10133704a7be51 100644 (file)
@@ -272,7 +272,7 @@ sof_unprepare_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widg
        struct snd_soc_dapm_path *p;
 
        /* return 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)
                return;
 
        if (widget_ops[widget->id].ipc_unprepare)
@@ -303,7 +303,7 @@ sof_prepare_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widget
        struct snd_soc_dapm_path *p;
        int ret;
 
-       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 */