@@ -31,6 +31,7 @@ static void sof_reset_route_setup_status(struct snd_sof_dev *sdev, struct snd_so
3131int sof_widget_free (struct snd_sof_dev * sdev , struct snd_sof_widget * swidget )
3232{
3333 const struct sof_ipc_tplg_ops * tplg_ops = sdev -> ipc -> ops -> tplg ;
34+ struct snd_sof_widget * pipe_widget ;
3435 int err = 0 ;
3536 int ret ;
3637
@@ -43,6 +44,8 @@ int sof_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
4344 if (-- swidget -> use_count )
4445 return 0 ;
4546
47+ pipe_widget = swidget -> spipe -> pipe_widget ;
48+
4649 /* reset route setup status for all routes that contain this widget */
4750 sof_reset_route_setup_status (sdev , swidget );
4851
@@ -67,10 +70,9 @@ int sof_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
6770 * skip for static pipelines
6871 */
6972 if (swidget -> dynamic_pipeline_widget && swidget -> id != snd_soc_dapm_scheduler ) {
70- ret = sof_widget_free (sdev , swidget -> pipe_widget );
73+ ret = sof_widget_free (sdev , pipe_widget );
7174 if (ret < 0 && !err )
7275 err = ret ;
73- swidget -> pipe_widget -> complete = 0 ;
7476 }
7577
7678 if (!err )
@@ -103,14 +105,13 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
103105 * widget in the pipeline is freed. Skip setting up scheduler widget for static pipelines.
104106 */
105107 if (swidget -> dynamic_pipeline_widget && swidget -> id != snd_soc_dapm_scheduler ) {
106- if (!swidget -> pipe_widget ) {
107- dev_err (sdev -> dev , "No scheduler widget set for %s\n" ,
108- swidget -> widget -> name );
108+ if (!swidget -> spipe || !swidget -> spipe -> pipe_widget ) {
109+ dev_err (sdev -> dev , "No pipeline set for %s\n" , swidget -> widget -> name );
109110 ret = - EINVAL ;
110111 goto use_count_dec ;
111112 }
112113
113- ret = sof_widget_setup (sdev , swidget -> pipe_widget );
114+ ret = sof_widget_setup (sdev , swidget -> spipe -> pipe_widget );
114115 if (ret < 0 )
115116 goto use_count_dec ;
116117 }
@@ -159,7 +160,7 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
159160 snd_sof_dsp_core_put (sdev , swidget -> core );
160161pipe_widget_free :
161162 if (swidget -> id != snd_soc_dapm_scheduler )
162- sof_widget_free (sdev , swidget -> pipe_widget );
163+ sof_widget_free (sdev , swidget -> spipe -> pipe_widget );
163164use_count_dec :
164165 swidget -> use_count -- ;
165166 return ret ;
@@ -400,7 +401,7 @@ static int sof_set_up_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_d
400401 struct snd_sof_pcm_stream_pipeline_list * pipeline_list = & spcm -> stream [dir ].pipeline_list ;
401402 struct snd_soc_dapm_widget_list * list = spcm -> stream [dir ].list ;
402403 struct snd_sof_widget * swidget = widget -> dobj .private ;
403- struct snd_sof_widget * pipe_widget ;
404+ struct snd_sof_pipeline * spipe ;
404405 struct snd_soc_dapm_path * p ;
405406 int ret ;
406407
@@ -412,7 +413,7 @@ static int sof_set_up_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_d
412413 return ret ;
413414
414415 /* skip populating the pipe_widgets array if it is NULL */
415- if (!pipeline_list -> pipe_widgets )
416+ if (!pipeline_list -> pipelines )
416417 goto sink_setup ;
417418
418419 /*
@@ -421,14 +422,14 @@ static int sof_set_up_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_d
421422 * order source to sink.
422423 */
423424 for (i = 0 ; i < pipeline_list -> count ; i ++ ) {
424- pipe_widget = pipeline_list -> pipe_widgets [i ];
425- if (pipe_widget == swidget -> pipe_widget )
425+ spipe = pipeline_list -> pipelines [i ];
426+ if (spipe == swidget -> spipe )
426427 break ;
427428 }
428429
429430 if (i == pipeline_list -> count ) {
430431 pipeline_list -> count ++ ;
431- pipeline_list -> pipe_widgets [i ] = swidget -> pipe_widget ;
432+ pipeline_list -> pipelines [i ] = swidget -> spipe ;
432433 }
433434 }
434435
@@ -563,25 +564,27 @@ int sof_widget_list_setup(struct snd_sof_dev *sdev, struct snd_sof_pcm *spcm,
563564 for_each_dapm_widgets (list , i , widget ) {
564565 struct snd_sof_widget * swidget = widget -> dobj .private ;
565566 struct snd_sof_widget * pipe_widget ;
567+ struct snd_sof_pipeline * spipe ;
566568
567569 if (!swidget )
568570 continue ;
569571
570- pipe_widget = swidget -> pipe_widget ;
572+ spipe = swidget -> spipe ;
573+ pipe_widget = spipe -> pipe_widget ;
571574 if (!pipe_widget ) {
572575 dev_err (sdev -> dev , "error: no pipeline widget found for %s\n" ,
573576 swidget -> widget -> name );
574577 ret = - EINVAL ;
575578 goto widget_free ;
576579 }
577580
578- if (pipe_widget -> complete )
581+ if (spipe -> complete )
579582 continue ;
580583
581584 if (ipc_tplg_ops -> pipeline_complete ) {
582- pipe_widget -> complete = ipc_tplg_ops -> pipeline_complete (sdev , pipe_widget );
583- if (pipe_widget -> complete < 0 ) {
584- ret = pipe_widget -> complete ;
585+ spipe -> complete = ipc_tplg_ops -> pipeline_complete (sdev , pipe_widget );
586+ if (spipe -> complete < 0 ) {
587+ ret = spipe -> complete ;
585588 goto widget_free ;
586589 }
587590 }
0 commit comments