Lines Matching defs:sdev
17 static bool is_virtual_widget(struct snd_sof_dev *sdev, struct snd_soc_dapm_widget *widget,
24 dev_dbg(sdev->dev, "%s: %s is a virtual widget\n", func, widget->name);
31 static void sof_reset_route_setup_status(struct snd_sof_dev *sdev, struct snd_sof_widget *widget)
33 const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
36 list_for_each_entry(sroute, &sdev->route_list, list)
39 tplg_ops->route_free(sdev, sroute);
45 static int sof_widget_free_unlocked(struct snd_sof_dev *sdev,
48 const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
66 sof_reset_route_setup_status(sdev, swidget);
76 err = tplg_ops->dai_config(sdev, swidget, flags, &data);
78 dev_err(sdev->dev, "failed to free config for widget %s\n",
85 ret = tplg_ops->widget_free(sdev, swidget);
97 for_each_set_bit(i, &spipe->core_mask, sdev->num_cores) {
98 ret = snd_sof_dsp_core_put(sdev, i);
100 dev_err(sdev->dev, "failed to disable target core: %d for pipeline %s\n",
114 ret = sof_widget_free_unlocked(sdev, pipe_widget);
120 dev_dbg(sdev->dev, "widget %s freed\n", swidget->widget->name);
125 int sof_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
130 ret = sof_widget_free_unlocked(sdev, swidget);
137 static int sof_widget_setup_unlocked(struct snd_sof_dev *sdev,
140 const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
165 dev_err(sdev->dev, "No pipeline set for %s\n", swidget->widget->name);
170 ret = sof_widget_setup_unlocked(sdev, swidget->spipe->pipe_widget);
177 for_each_set_bit(i, &spipe->core_mask, sdev->num_cores) {
178 ret = snd_sof_dsp_core_get(sdev, i);
180 dev_err(sdev->dev, "failed to enable target core %d for pipeline %s\n",
189 ret = tplg_ops->widget_setup(sdev, swidget);
203 ret = tplg_ops->dai_config(sdev, swidget, flags, NULL);
211 ret = tplg_ops->control->widget_kcontrol_setup(sdev, swidget);
216 dev_dbg(sdev->dev, "widget %s setup complete\n", swidget->widget->name);
222 sof_widget_free_unlocked(sdev, swidget);
226 sof_widget_free_unlocked(sdev, swidget->spipe->pipe_widget);
231 for_each_set_bit(j, &spipe->core_mask, sdev->num_cores) {
234 snd_sof_dsp_core_put(sdev, j);
244 int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
249 ret = sof_widget_setup_unlocked(sdev, swidget);
256 int sof_route_setup(struct snd_sof_dev *sdev, struct snd_soc_dapm_widget *wsource,
259 const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
266 if (is_virtual_widget(sdev, src_widget->widget, __func__) ||
267 is_virtual_widget(sdev, sink_widget->widget, __func__))
271 list_for_each_entry(sroute, &sdev->route_list, list)
278 dev_err(sdev->dev, "error: cannot find SOF route for source %s -> %s sink\n",
288 int ret = tplg_ops->route_setup(sdev, sroute);
298 static int sof_setup_pipeline_connections(struct snd_sof_dev *sdev,
301 const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
324 ret = sof_route_setup(sdev, widget, p->sink);
340 ret = sof_route_setup(sdev, p->source, widget);
354 list_for_each_entry(sroute, &sdev->route_list, list) {
394 ret = tplg_ops->route_setup(sdev, sroute);
409 sof_unprepare_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widget *widget,
412 const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
417 if (is_virtual_widget(sdev, widget, __func__))
438 sof_unprepare_widgets_in_path(sdev, p->sink, list);
445 sof_prepare_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widget *widget,
451 const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
457 if (is_virtual_widget(sdev, widget, __func__))
471 dev_err(sdev->dev, "failed to prepare widget %s\n", widget->name);
484 ret = sof_prepare_widgets_in_path(sdev, p->sink, fe_params,
507 static int sof_free_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widget *widget,
515 if (is_virtual_widget(sdev, widget, __func__))
519 err = sof_widget_free(sdev, widget->dobj.private);
532 err = sof_free_widgets_in_path(sdev, p->sink, dir, spcm);
547 static int sof_set_up_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widget *widget,
557 if (is_virtual_widget(sdev, widget, __func__))
563 ret = sof_widget_setup(sdev, widget->dobj.private);
596 ret = sof_set_up_widgets_in_path(sdev, p->sink, dir, spcm);
600 sof_widget_free(sdev, swidget);
610 sof_walk_widgets_in_order(struct snd_sof_dev *sdev, struct snd_sof_pcm *spcm,
625 if (is_virtual_widget(sdev, widget, __func__))
638 ret = sof_set_up_widgets_in_path(sdev, widget, dir, spcm);
642 ret = sof_free_widgets_in_path(sdev, widget, dir, spcm);
658 ret = sof_prepare_widgets_in_path(sdev, widget, fe_params, platform_params,
663 sof_unprepare_widgets_in_path(sdev, widget, list);
666 dev_err(sdev->dev, "Invalid widget op %d\n", op);
670 dev_err(sdev->dev, "Failed to %s connected widgets\n", str);
678 int sof_widget_list_setup(struct snd_sof_dev *sdev, struct snd_sof_pcm *spcm,
683 const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
696 ret = sof_walk_widgets_in_order(sdev, spcm, fe_params, platform_params,
702 ret = sof_walk_widgets_in_order(sdev, spcm, fe_params, platform_params,
705 sof_walk_widgets_in_order(sdev, spcm, fe_params, platform_params,
714 ret = sof_setup_pipeline_connections(sdev, list, dir);
724 if (!swidget || sdev->dspless_mode_selected)
729 dev_err(sdev->dev, "no pipeline found for %s\n",
737 dev_err(sdev->dev, "error: no pipeline widget found for %s\n",
747 spipe->complete = tplg_ops->pipeline_complete(sdev, pipe_widget);
758 sof_walk_widgets_in_order(sdev, spcm, fe_params, platform_params, dir,
760 sof_walk_widgets_in_order(sdev, spcm, NULL, NULL, dir, SOF_WIDGET_UNPREPARE);
765 int sof_widget_list_free(struct snd_sof_dev *sdev, struct snd_sof_pcm *spcm, int dir)
776 ret = sof_walk_widgets_in_order(sdev, spcm, NULL, NULL, dir, SOF_WIDGET_FREE);
779 sof_walk_widgets_in_order(sdev, spcm, NULL, NULL, dir, SOF_WIDGET_UNPREPARE);
793 bool snd_sof_dsp_only_d0i3_compatible_stream_active(struct snd_sof_dev *sdev)
800 list_for_each_entry(spcm, &sdev->pcm_list, list) {
822 bool snd_sof_stream_suspend_ignored(struct snd_sof_dev *sdev)
826 list_for_each_entry(spcm, &sdev->pcm_list, list) {
835 int sof_pcm_stream_free(struct snd_sof_dev *sdev, struct snd_pcm_substream *substream,
838 const struct sof_ipc_pcm_ops *pcm_ops = sof_ipc_get_ops(sdev, pcm);
844 snd_sof_pcm_platform_trigger(sdev, substream, SNDRV_PCM_TRIGGER_STOP);
848 ret = pcm_ops->hw_free(sdev->component, substream);
857 ret = snd_sof_pcm_platform_hw_free(sdev, substream);
863 ret = sof_widget_list_free(sdev, spcm, dir);
865 dev_err(sdev->dev, "failed to free widgets during suspend\n");
878 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
881 list_for_each_entry(spcm, &sdev->pcm_list, list) {
904 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
908 list_for_each_entry(spcm, &sdev->pcm_list, list) {
923 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
926 list_for_each_entry(swidget, &sdev->widget_list, list) {
939 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
948 list_for_each_entry(swidget, &sdev->widget_list, list) {
960 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
963 list_for_each_entry(dai, &sdev->dai_list, list) {
977 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
978 const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
985 return tplg_ops->dai_get_clk(sdev, dai, clk_type);
1010 static struct snd_sof_of_mach *sof_of_machine_select(struct snd_sof_dev *sdev)
1012 struct snd_sof_pdata *sof_pdata = sdev->pdata;
1035 int sof_machine_check(struct snd_sof_dev *sdev)
1037 struct snd_sof_pdata *sof_pdata = sdev->pdata;
1049 mach = snd_sof_machine_select(sdev);
1059 snd_sof_set_mach_params(mach, sdev);
1063 of_mach = sof_of_machine_select(sdev);
1070 dev_err(sdev->dev, "error: no matching ASoC machine driver found - aborting probe\n");
1074 dev_warn(sdev->dev, "Force to use nocodec mode\n");
1079 dev_warn(sdev->dev, "Using nocodec machine driver\n");
1080 mach = devm_kzalloc(sdev->dev, sizeof(*mach), GFP_KERNEL);
1089 snd_sof_set_mach_params(mach, sdev);
1095 int sof_machine_register(struct snd_sof_dev *sdev, void *pdata)
1108 platform_device_register_data(sdev->dev, drv_name,
1113 dev_dbg(sdev->dev, "created machine %s\n",
1120 void sof_machine_unregister(struct snd_sof_dev *sdev, void *pdata)