Lines Matching refs:swidget
24 static bool is_aggregated_dai(struct snd_sof_widget *swidget)
26 return (WIDGET_IS_DAI(swidget->id) &&
27 isdigit(swidget->widget->name[strlen(swidget->widget->name) - 1]) &&
28 swidget->widget->name[strlen(swidget->widget->name) - 1] != '0');
60 struct snd_sof_widget *swidget)
63 struct snd_sof_pipeline *spipe = swidget->spipe;
67 if (!swidget->private)
70 trace_sof_widget_free(swidget);
73 if (--swidget->use_count)
77 sof_reset_route_setup_status(sdev, swidget);
80 if (WIDGET_IS_DAI(swidget->id)) {
87 err = tplg_ops->dai_config(sdev, swidget, flags, &data);
90 swidget->widget->name);
96 ret = tplg_ops->widget_free(sdev, swidget);
105 if (swidget->id == snd_soc_dapm_scheduler) {
112 i, swidget->widget->name);
117 swidget->spipe->complete = 0;
121 * free the scheduler widget (same as pipe_widget) associated with the current swidget.
124 if (swidget->spipe && swidget->dynamic_pipeline_widget &&
125 swidget->id != snd_soc_dapm_scheduler) {
126 ret = sof_widget_free_unlocked(sdev, swidget->spipe->pipe_widget);
132 dev_dbg(sdev->dev, "widget %s freed\n", swidget->widget->name);
137 int sof_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
139 guard(mutex)(&swidget->setup_mutex);
140 return sof_widget_free_unlocked(sdev, swidget);
145 struct snd_sof_widget *swidget)
148 struct snd_sof_pipeline *spipe = swidget->spipe;
154 if (!swidget->private)
157 trace_sof_widget_setup(swidget);
160 if (++swidget->use_count > 1)
170 if (swidget->dynamic_pipeline_widget && swidget->id != snd_soc_dapm_scheduler) {
171 if (!swidget->spipe || !swidget->spipe->pipe_widget) {
172 dev_err(sdev->dev, "No pipeline set for %s\n", swidget->widget->name);
177 ret = sof_widget_setup_unlocked(sdev, swidget->spipe->pipe_widget);
183 if (swidget->id == snd_soc_dapm_scheduler) {
188 i, swidget->widget->name);
196 ret = tplg_ops->widget_setup(sdev, swidget);
202 if (WIDGET_IS_DAI(swidget->id)) {
210 ret = tplg_ops->dai_config(sdev, swidget, flags, NULL);
218 ret = tplg_ops->control->widget_kcontrol_setup(sdev, swidget);
223 dev_dbg(sdev->dev, "widget %s setup complete\n", swidget->widget->name);
229 sof_widget_free_unlocked(sdev, swidget);
232 if (swidget->id != snd_soc_dapm_scheduler) {
233 sof_widget_free_unlocked(sdev, swidget->spipe->pipe_widget);
246 swidget->use_count--;
251 int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
253 guard(mutex)(&swidget->setup_mutex);
254 return sof_widget_setup_unlocked(sdev, swidget);
304 static bool sof_widget_in_same_direction(struct snd_sof_widget *swidget, int dir)
306 return swidget->spipe->direction == dir;
439 struct snd_sof_widget *swidget = widget->dobj.private;
446 if (!swidget)
449 if (swidget->spipe && swidget->spipe->direction_valid &&
450 !sof_widget_in_same_direction(swidget, dir))
454 if (!swidget->prepared || swidget->use_count > 0 || is_aggregated_dai(swidget))
460 widget_ops[widget->id].ipc_unprepare(swidget);
462 swidget->prepared = false;
486 struct snd_sof_widget *swidget = widget->dobj.private;
494 if (!swidget)
501 if (swidget->spipe && swidget->spipe->direction_valid &&
502 !sof_widget_in_same_direction(swidget, dir))
506 if (!widget_ops[widget->id].ipc_prepare || swidget->prepared ||
507 is_aggregated_dai(swidget))
511 ret = widget_ops[widget->id].ipc_prepare(swidget, fe_params, platform_params,
518 swidget->prepared = true;
535 swidget && swidget->prepared && swidget->use_count == 0) {
536 widget_ops[widget->id].ipc_unprepare(swidget);
537 swidget->prepared = false;
555 struct snd_sof_widget *swidget = widget->dobj.private;
563 if (!swidget)
566 if (swidget->spipe && swidget->spipe->direction_valid &&
567 !sof_widget_in_same_direction(swidget, dir))
571 if (is_aggregated_dai(swidget))
606 struct snd_sof_widget *swidget = widget->dobj.private;
614 if (swidget) {
617 if (swidget->spipe && swidget->spipe->direction_valid &&
618 !sof_widget_in_same_direction(swidget, dir))
622 if (is_aggregated_dai(swidget))
625 ret = sof_widget_setup(sdev, swidget);
640 if (spipe == swidget->spipe)
646 pipeline_list->pipelines[i] = swidget->spipe;
661 if (swidget)
662 sof_widget_free(sdev, swidget);
795 struct snd_sof_widget *swidget = widget->dobj.private;
799 if (!swidget || sdev->dspless_mode_selected)
802 spipe = swidget->spipe;
805 swidget->widget->name);
813 swidget->widget->name);
960 struct snd_sof_widget *swidget;
962 list_for_each_entry(swidget, &sdev->widget_list, list) {
963 if (strcmp(name, swidget->widget->name) == 0)
964 return swidget;
976 struct snd_sof_widget *swidget;
984 list_for_each_entry(swidget, &sdev->widget_list, list) {
985 if (!strcmp(pcm_name, swidget->widget->sname) &&
986 swidget->id == type)
987 return swidget;