diff --git a/sound/soc/sof/sof-audio.c b/sound/soc/sof/sof-audio.c index 4f12e137ff6302..afe4c221fb5e35 100644 --- a/sound/soc/sof/sof-audio.c +++ b/sound/soc/sof/sof-audio.c @@ -611,8 +611,16 @@ sof_walk_widgets_in_order(struct snd_sof_dev *sdev, struct snd_sof_pcm *spcm, break; case SOF_WIDGET_PREPARE: { + struct snd_sof_widget *swidget = widget->dobj.private; struct snd_pcm_hw_params pipeline_params; + /* In case that feedback buffer is shared between two stream, a prepared + * widget in another stream for producing feedback buffer should be skipped + * since pipeline_params is built based on the current stream, not feedback stream. + */ + if (swidget->prepared) + continue; + str = "prepare"; /* * When walking the list of connected widgets, the pipeline_params for each