Lines Matching refs:swidget
174 struct snd_sof_widget *swidget, in sof_ipc4_get_audio_fmt() argument
184 SOF_AUDIO_FMT_NUM_TOKENS, swidget->tuples, in sof_ipc4_get_audio_fmt()
185 swidget->num_tuples, sizeof(audio_fmt_num), 1); in sof_ipc4_get_audio_fmt()
201 SOF_COMP_TOKENS, swidget->tuples, in sof_ipc4_get_audio_fmt()
202 swidget->num_tuples, sizeof(*base_config), 1); in sof_ipc4_get_audio_fmt()
211 SOF_AUDIO_FORMAT_BUFFER_SIZE_TOKENS, swidget->tuples, in sof_ipc4_get_audio_fmt()
212 swidget->num_tuples, sizeof(*base_config), in sof_ipc4_get_audio_fmt()
225 SOF_IN_AUDIO_FORMAT_TOKENS, swidget->tuples, in sof_ipc4_get_audio_fmt()
226 swidget->num_tuples, sizeof(*base_config), in sof_ipc4_get_audio_fmt()
233 dev_dbg(scomp->dev, "Get input audio formats for %s\n", swidget->widget->name); in sof_ipc4_get_audio_fmt()
250 SOF_OUT_AUDIO_FORMAT_TOKENS, swidget->tuples, in sof_ipc4_get_audio_fmt()
251 swidget->num_tuples, sizeof(*out_format), in sof_ipc4_get_audio_fmt()
260 dev_dbg(scomp->dev, "Get output audio formats for %s\n", swidget->widget->name); in sof_ipc4_get_audio_fmt()
284 static void sof_ipc4_widget_free_comp_pipeline(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp_pipeline() argument
286 kfree(swidget->private); in sof_ipc4_widget_free_comp_pipeline()
289 static int sof_ipc4_widget_set_module_info(struct snd_sof_widget *swidget) in sof_ipc4_widget_set_module_info() argument
291 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_set_module_info()
294 swidget->module_info = sof_ipc4_find_module_by_uuid(sdev, &swidget->uuid); in sof_ipc4_widget_set_module_info()
296 if (swidget->module_info) in sof_ipc4_widget_set_module_info()
300 swidget->widget->name, &swidget->uuid); in sof_ipc4_widget_set_module_info()
304 static int sof_ipc4_widget_setup_msg(struct snd_sof_widget *swidget, struct sof_ipc4_msg *msg) in sof_ipc4_widget_setup_msg() argument
310 ret = sof_ipc4_widget_set_module_info(swidget); in sof_ipc4_widget_setup_msg()
314 fw_module = swidget->module_info; in sof_ipc4_widget_setup_msg()
321 msg->extension = SOF_IPC4_MOD_EXT_CORE_ID(swidget->core); in sof_ipc4_widget_setup_msg()
329 static int sof_ipc4_widget_setup_pcm(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_pcm() argument
332 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_pcm()
341 swidget->private = ipc4_copier; in sof_ipc4_widget_setup_pcm()
344 dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name); in sof_ipc4_widget_setup_pcm()
346 ret = sof_ipc4_get_audio_fmt(scomp, swidget, available_fmt, true); in sof_ipc4_widget_setup_pcm()
361 if (!WIDGET_IS_AIF(swidget->id)) in sof_ipc4_widget_setup_pcm()
365 SOF_COPIER_GATEWAY_CFG_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_pcm()
366 swidget->num_tuples, sizeof(u32), in sof_ipc4_widget_setup_pcm()
370 swidget->widget->name); in sof_ipc4_widget_setup_pcm()
380 SOF_COPIER_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_pcm()
381 swidget->num_tuples, sizeof(node_type), 1); in sof_ipc4_widget_setup_pcm()
388 dev_dbg(scomp->dev, "host copier '%s' node_type %u\n", swidget->widget->name, node_type); in sof_ipc4_widget_setup_pcm()
401 switch (swidget->id) { in sof_ipc4_widget_setup_pcm()
411 dev_err(scomp->dev, "invalid widget type %d\n", swidget->id); in sof_ipc4_widget_setup_pcm()
417 ret = sof_ipc4_widget_setup_msg(swidget, &ipc4_copier->msg); in sof_ipc4_widget_setup_pcm()
431 swidget->private = NULL; in sof_ipc4_widget_setup_pcm()
435 static void sof_ipc4_widget_free_comp_pcm(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp_pcm() argument
437 struct sof_ipc4_copier *ipc4_copier = swidget->private; in sof_ipc4_widget_free_comp_pcm()
449 swidget->private = NULL; in sof_ipc4_widget_free_comp_pcm()
452 static int sof_ipc4_widget_setup_comp_dai(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_comp_dai() argument
455 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_comp_dai()
456 struct snd_sof_dai *dai = swidget->private; in sof_ipc4_widget_setup_comp_dai()
467 dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name); in sof_ipc4_widget_setup_comp_dai()
469 ret = sof_ipc4_get_audio_fmt(scomp, swidget, available_fmt, true); in sof_ipc4_widget_setup_comp_dai()
481 SOF_COPIER_GATEWAY_CFG_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_dai()
482 swidget->num_tuples, sizeof(u32), in sof_ipc4_widget_setup_comp_dai()
486 swidget->widget->name); in sof_ipc4_widget_setup_comp_dai()
495 SOF_COPIER_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_dai()
496 swidget->num_tuples, sizeof(node_type), 1); in sof_ipc4_widget_setup_comp_dai()
503 SOF_DAI_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_dai()
504 swidget->num_tuples, sizeof(u32), 1); in sof_ipc4_widget_setup_comp_dai()
510 dev_dbg(scomp->dev, "dai %s node_type %u dai_type %u dai_index %d\n", swidget->widget->name, in sof_ipc4_widget_setup_comp_dai()
530 strcmp(w->widget->sname, swidget->widget->sname)) in sof_ipc4_widget_setup_comp_dai()
567 ret = sof_ipc4_widget_setup_msg(swidget, &ipc4_copier->msg); in sof_ipc4_widget_setup_comp_dai()
586 static void sof_ipc4_widget_free_comp_dai(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp_dai() argument
589 struct snd_sof_dai *dai = swidget->private; in sof_ipc4_widget_free_comp_dai()
597 swidget->private = NULL; in sof_ipc4_widget_free_comp_dai()
612 swidget->private = NULL; in sof_ipc4_widget_free_comp_dai()
615 static int sof_ipc4_widget_setup_comp_pipeline(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_comp_pipeline() argument
617 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_comp_pipeline()
625 ret = sof_update_ipc_object(scomp, pipeline, SOF_SCHED_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_pipeline()
626 swidget->num_tuples, sizeof(*pipeline), 1); in sof_ipc4_widget_setup_comp_pipeline()
633 ret = sof_update_ipc_object(scomp, swidget, SOF_PIPELINE_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_pipeline()
634 swidget->num_tuples, sizeof(*swidget), 1); in sof_ipc4_widget_setup_comp_pipeline()
644 swidget->widget->name, swidget->pipeline_id, in sof_ipc4_widget_setup_comp_pipeline()
647 swidget->private = pipeline; in sof_ipc4_widget_setup_comp_pipeline()
663 static int sof_ipc4_widget_setup_comp_pga(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_comp_pga() argument
665 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_comp_pga()
676 swidget->private = gain; in sof_ipc4_widget_setup_comp_pga()
682 ret = sof_ipc4_get_audio_fmt(scomp, swidget, &gain->available_fmt, false); in sof_ipc4_widget_setup_comp_pga()
686 ret = sof_update_ipc_object(scomp, &gain->data, SOF_GAIN_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_pga()
687 swidget->num_tuples, sizeof(gain->data), 1); in sof_ipc4_widget_setup_comp_pga()
695 swidget->widget->name, gain->data.curve_type, gain->data.curve_duration, in sof_ipc4_widget_setup_comp_pga()
698 ret = sof_ipc4_widget_setup_msg(swidget, &gain->msg); in sof_ipc4_widget_setup_comp_pga()
702 fw_module = swidget->module_info; in sof_ipc4_widget_setup_comp_pga()
706 if (scontrol->comp_id == swidget->comp_id) { in sof_ipc4_widget_setup_comp_pga()
717 swidget->private = NULL; in sof_ipc4_widget_setup_comp_pga()
721 static void sof_ipc4_widget_free_comp_pga(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp_pga() argument
723 struct sof_ipc4_gain *gain = swidget->private; in sof_ipc4_widget_free_comp_pga()
729 kfree(swidget->private); in sof_ipc4_widget_free_comp_pga()
730 swidget->private = NULL; in sof_ipc4_widget_free_comp_pga()
733 static int sof_ipc4_widget_setup_comp_mixer(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_comp_mixer() argument
735 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_comp_mixer()
739 dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name); in sof_ipc4_widget_setup_comp_mixer()
745 swidget->private = mixer; in sof_ipc4_widget_setup_comp_mixer()
748 ret = sof_ipc4_get_audio_fmt(scomp, swidget, &mixer->available_fmt, false); in sof_ipc4_widget_setup_comp_mixer()
752 ret = sof_ipc4_widget_setup_msg(swidget, &mixer->msg); in sof_ipc4_widget_setup_comp_mixer()
760 swidget->private = NULL; in sof_ipc4_widget_setup_comp_mixer()
764 static int sof_ipc4_widget_setup_comp_src(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_comp_src() argument
766 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_comp_src()
770 dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name); in sof_ipc4_widget_setup_comp_src()
776 swidget->private = src; in sof_ipc4_widget_setup_comp_src()
779 ret = sof_ipc4_get_audio_fmt(scomp, swidget, &src->available_fmt, false); in sof_ipc4_widget_setup_comp_src()
783 ret = sof_update_ipc_object(scomp, src, SOF_SRC_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_src()
784 swidget->num_tuples, sizeof(*src), 1); in sof_ipc4_widget_setup_comp_src()
792 ret = sof_ipc4_widget_setup_msg(swidget, &src->msg); in sof_ipc4_widget_setup_comp_src()
800 swidget->private = NULL; in sof_ipc4_widget_setup_comp_src()
804 static void sof_ipc4_widget_free_comp_src(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp_src() argument
806 struct sof_ipc4_src *src = swidget->private; in sof_ipc4_widget_free_comp_src()
812 kfree(swidget->private); in sof_ipc4_widget_free_comp_src()
813 swidget->private = NULL; in sof_ipc4_widget_free_comp_src()
816 static void sof_ipc4_widget_free_comp_mixer(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp_mixer() argument
818 struct sof_ipc4_mixer *mixer = swidget->private; in sof_ipc4_widget_free_comp_mixer()
824 kfree(swidget->private); in sof_ipc4_widget_free_comp_mixer()
825 swidget->private = NULL; in sof_ipc4_widget_free_comp_mixer()
829 sof_ipc4_update_pipeline_mem_usage(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget, in sof_ipc4_update_pipeline_mem_usage() argument
832 struct sof_ipc4_fw_module *fw_module = swidget->module_info; in sof_ipc4_update_pipeline_mem_usage()
858 pipe_widget = swidget->spipe->pipe_widget; in sof_ipc4_update_pipeline_mem_usage()
864 struct snd_sof_widget *swidget) in sof_ipc4_widget_assign_instance_id() argument
866 struct sof_ipc4_fw_module *fw_module = swidget->module_info; in sof_ipc4_widget_assign_instance_id()
869 swidget->instance_id = ida_alloc_max(&fw_module->m_ida, max_instances, GFP_KERNEL); in sof_ipc4_widget_assign_instance_id()
870 if (swidget->instance_id < 0) { in sof_ipc4_widget_assign_instance_id()
872 swidget->widget->name); in sof_ipc4_widget_assign_instance_id()
873 return swidget->instance_id; in sof_ipc4_widget_assign_instance_id()
880 struct snd_sof_widget *swidget, in sof_ipc4_init_audio_fmt() argument
895 dev_err(sdev->dev, "no reference formats for %s\n", swidget->widget->name); in sof_ipc4_init_audio_fmt()
915 dev_err(sdev->dev, "no formats available for %s\n", swidget->widget->name); in sof_ipc4_init_audio_fmt()
952 dev_dbg(sdev->dev, "Init input audio formats for %s\n", swidget->widget->name); in sof_ipc4_init_audio_fmt()
956 dev_dbg(sdev->dev, "Init output audio formats for %s\n", swidget->widget->name); in sof_ipc4_init_audio_fmt()
965 static void sof_ipc4_unprepare_copier_module(struct snd_sof_widget *swidget) in sof_ipc4_unprepare_copier_module() argument
972 pipe_widget = swidget->spipe->pipe_widget; in sof_ipc4_unprepare_copier_module()
976 if (WIDGET_IS_AIF(swidget->id) || swidget->id == snd_soc_dapm_buffer) { in sof_ipc4_unprepare_copier_module()
977 ipc4_copier = swidget->private; in sof_ipc4_unprepare_copier_module()
978 } else if (WIDGET_IS_DAI(swidget->id)) { in sof_ipc4_unprepare_copier_module()
979 struct snd_sof_dai *dai = swidget->private; in sof_ipc4_unprepare_copier_module()
1109 sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget, in sof_ipc4_prepare_copier_module() argument
1115 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_prepare_copier_module()
1129 dev_dbg(sdev->dev, "copier %s, type %d", swidget->widget->name, swidget->id); in sof_ipc4_prepare_copier_module()
1131 switch (swidget->id) { in sof_ipc4_prepare_copier_module()
1139 pipe_widget = swidget->spipe->pipe_widget; in sof_ipc4_prepare_copier_module()
1141 ipc4_copier = (struct sof_ipc4_copier *)swidget->private; in sof_ipc4_prepare_copier_module()
1170 dai = swidget->private; in sof_ipc4_prepare_copier_module()
1204 ipc4_copier = (struct sof_ipc4_copier *)swidget->private; in sof_ipc4_prepare_copier_module()
1220 swidget->id, swidget->widget->name); in sof_ipc4_prepare_copier_module()
1225 ret = sof_ipc4_init_audio_fmt(sdev, swidget, &copier_data->base_config, in sof_ipc4_prepare_copier_module()
1231 switch (swidget->id) { in sof_ipc4_prepare_copier_module()
1274 strcmp(w->widget->sname, swidget->widget->sname)) in sof_ipc4_prepare_copier_module()
1348 dev_dbg(sdev->dev, "copier %s, IPC size is %d", swidget->widget->name, ipc_size); in sof_ipc4_prepare_copier_module()
1363 sof_ipc4_update_pipeline_mem_usage(sdev, swidget, &copier_data->base_config); in sof_ipc4_prepare_copier_module()
1368 static int sof_ipc4_prepare_gain_module(struct snd_sof_widget *swidget, in sof_ipc4_prepare_gain_module() argument
1373 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_prepare_gain_module()
1375 struct sof_ipc4_gain *gain = swidget->private; in sof_ipc4_prepare_gain_module()
1381 ret = sof_ipc4_init_audio_fmt(sdev, swidget, &gain->base_config, in sof_ipc4_prepare_gain_module()
1388 sof_ipc4_update_pipeline_mem_usage(sdev, swidget, &gain->base_config); in sof_ipc4_prepare_gain_module()
1393 static int sof_ipc4_prepare_mixer_module(struct snd_sof_widget *swidget, in sof_ipc4_prepare_mixer_module() argument
1398 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_prepare_mixer_module()
1400 struct sof_ipc4_mixer *mixer = swidget->private; in sof_ipc4_prepare_mixer_module()
1407 ret = sof_ipc4_init_audio_fmt(sdev, swidget, &mixer->base_config, in sof_ipc4_prepare_mixer_module()
1414 sof_ipc4_update_pipeline_mem_usage(sdev, swidget, &mixer->base_config); in sof_ipc4_prepare_mixer_module()
1419 static int sof_ipc4_prepare_src_module(struct snd_sof_widget *swidget, in sof_ipc4_prepare_src_module() argument
1424 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_prepare_src_module()
1426 struct sof_ipc4_src *src = swidget->private; in sof_ipc4_prepare_src_module()
1433 ret = sof_ipc4_init_audio_fmt(sdev, swidget, &src->base_config, in sof_ipc4_prepare_src_module()
1440 sof_ipc4_update_pipeline_mem_usage(sdev, swidget, &src->base_config); in sof_ipc4_prepare_src_module()
1496 static int sof_ipc4_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) in sof_ipc4_widget_setup() argument
1498 struct snd_sof_widget *pipe_widget = swidget->spipe->pipe_widget; in sof_ipc4_widget_setup()
1506 switch (swidget->id) { in sof_ipc4_widget_setup()
1508 pipeline = swidget->private; in sof_ipc4_widget_setup()
1510 dev_dbg(sdev->dev, "pipeline: %d memory pages: %d\n", swidget->pipeline_id, in sof_ipc4_widget_setup()
1516 swidget->instance_id = ida_alloc_max(&pipeline_ida, ipc4_data->max_num_pipelines, in sof_ipc4_widget_setup()
1518 if (swidget->instance_id < 0) { in sof_ipc4_widget_setup()
1520 swidget->widget->name, swidget->instance_id); in sof_ipc4_widget_setup()
1521 return swidget->instance_id; in sof_ipc4_widget_setup()
1524 msg->primary |= SOF_IPC4_GLB_PIPE_INSTANCE_ID(swidget->instance_id); in sof_ipc4_widget_setup()
1530 struct sof_ipc4_copier *ipc4_copier = swidget->private; in sof_ipc4_widget_setup()
1541 struct snd_sof_dai *dai = swidget->private; in sof_ipc4_widget_setup()
1552 struct sof_ipc4_gain *gain = swidget->private; in sof_ipc4_widget_setup()
1563 struct sof_ipc4_mixer *mixer = swidget->private; in sof_ipc4_widget_setup()
1573 struct sof_ipc4_src *src = swidget->private; in sof_ipc4_widget_setup()
1582 dev_err(sdev->dev, "widget type %d not supported", swidget->id); in sof_ipc4_widget_setup()
1586 if (swidget->id != snd_soc_dapm_scheduler) { in sof_ipc4_widget_setup()
1587 ret = sof_ipc4_widget_assign_instance_id(sdev, swidget); in sof_ipc4_widget_setup()
1590 swidget->widget->name); in sof_ipc4_widget_setup()
1595 msg->primary |= SOF_IPC4_MOD_INSTANCE(swidget->instance_id); in sof_ipc4_widget_setup()
1604 swidget->widget->name, swidget->instance_id, swidget->pipeline_id, swidget->core); in sof_ipc4_widget_setup()
1611 dev_err(sdev->dev, "failed to create module %s\n", swidget->widget->name); in sof_ipc4_widget_setup()
1613 if (swidget->id != snd_soc_dapm_scheduler) { in sof_ipc4_widget_setup()
1614 struct sof_ipc4_fw_module *fw_module = swidget->module_info; in sof_ipc4_widget_setup()
1616 ida_free(&fw_module->m_ida, swidget->instance_id); in sof_ipc4_widget_setup()
1618 ida_free(&pipeline_ida, swidget->instance_id); in sof_ipc4_widget_setup()
1625 static int sof_ipc4_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) in sof_ipc4_widget_free() argument
1627 struct sof_ipc4_fw_module *fw_module = swidget->module_info; in sof_ipc4_widget_free()
1634 if (swidget->id == snd_soc_dapm_scheduler) { in sof_ipc4_widget_free()
1635 struct sof_ipc4_pipeline *pipeline = swidget->private; in sof_ipc4_widget_free()
1639 header = SOF_IPC4_GLB_PIPE_INSTANCE_ID(swidget->instance_id); in sof_ipc4_widget_free()
1649 swidget->widget->name); in sof_ipc4_widget_free()
1653 ida_free(&pipeline_ida, swidget->instance_id); in sof_ipc4_widget_free()
1655 ida_free(&fw_module->m_ida, swidget->instance_id); in sof_ipc4_widget_free()
1721 static void sof_ipc4_put_queue_id(struct snd_sof_widget *swidget, int queue_id, in sof_ipc4_put_queue_id() argument
1729 pin_binding = swidget->src_pin_binding; in sof_ipc4_put_queue_id()
1730 queue_ida = &swidget->src_queue_ida; in sof_ipc4_put_queue_id()
1731 num_pins = swidget->num_source_pins; in sof_ipc4_put_queue_id()
1733 pin_binding = swidget->sink_pin_binding; in sof_ipc4_put_queue_id()
1734 queue_ida = &swidget->sink_queue_ida; in sof_ipc4_put_queue_id()
1735 num_pins = swidget->num_sink_pins; in sof_ipc4_put_queue_id()
1914 static int sof_ipc4_dai_config(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget, in sof_ipc4_dai_config() argument
1917 struct snd_sof_widget *pipe_widget = swidget->spipe->pipe_widget; in sof_ipc4_dai_config()
1919 struct snd_sof_dai *dai = swidget->private; in sof_ipc4_dai_config()
1926 swidget->widget->name); in sof_ipc4_dai_config()