Lines Matching refs:swidget
173 struct snd_sof_widget *swidget, in sof_ipc4_get_audio_fmt() argument
183 SOF_AUDIO_FMT_NUM_TOKENS, swidget->tuples, in sof_ipc4_get_audio_fmt()
184 swidget->num_tuples, sizeof(audio_fmt_num), 1); in sof_ipc4_get_audio_fmt()
200 SOF_COMP_TOKENS, swidget->tuples, in sof_ipc4_get_audio_fmt()
201 swidget->num_tuples, sizeof(*base_config), 1); in sof_ipc4_get_audio_fmt()
210 SOF_AUDIO_FORMAT_BUFFER_SIZE_TOKENS, swidget->tuples, in sof_ipc4_get_audio_fmt()
211 swidget->num_tuples, sizeof(*base_config), in sof_ipc4_get_audio_fmt()
224 SOF_IN_AUDIO_FORMAT_TOKENS, swidget->tuples, in sof_ipc4_get_audio_fmt()
225 swidget->num_tuples, sizeof(*base_config), in sof_ipc4_get_audio_fmt()
232 dev_dbg(scomp->dev, "Get input audio formats for %s\n", swidget->widget->name); in sof_ipc4_get_audio_fmt()
249 SOF_OUT_AUDIO_FORMAT_TOKENS, swidget->tuples, in sof_ipc4_get_audio_fmt()
250 swidget->num_tuples, sizeof(*out_format), in sof_ipc4_get_audio_fmt()
259 dev_dbg(scomp->dev, "Get output audio formats for %s\n", swidget->widget->name); in sof_ipc4_get_audio_fmt()
283 static void sof_ipc4_widget_free_comp(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp() argument
285 kfree(swidget->private); in sof_ipc4_widget_free_comp()
288 static int sof_ipc4_widget_set_module_info(struct snd_sof_widget *swidget) in sof_ipc4_widget_set_module_info() argument
290 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_set_module_info()
303 if (guid_equal(&swidget->uuid, &fw_modules[i].man4_module_entry.uuid)) { in sof_ipc4_widget_set_module_info()
304 swidget->module_info = &fw_modules[i]; in sof_ipc4_widget_set_module_info()
310 swidget->widget->name, &swidget->uuid); in sof_ipc4_widget_set_module_info()
314 static int sof_ipc4_widget_setup_msg(struct snd_sof_widget *swidget, struct sof_ipc4_msg *msg) in sof_ipc4_widget_setup_msg() argument
320 ret = sof_ipc4_widget_set_module_info(swidget); in sof_ipc4_widget_setup_msg()
324 fw_module = swidget->module_info; in sof_ipc4_widget_setup_msg()
331 msg->extension = SOF_IPC4_MOD_EXT_PPL_ID(swidget->pipeline_id); in sof_ipc4_widget_setup_msg()
332 msg->extension |= SOF_IPC4_MOD_EXT_CORE_ID(swidget->core); in sof_ipc4_widget_setup_msg()
340 static int sof_ipc4_widget_setup_pcm(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_pcm() argument
343 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_pcm()
352 swidget->private = ipc4_copier; in sof_ipc4_widget_setup_pcm()
355 dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name); in sof_ipc4_widget_setup_pcm()
357 ret = sof_ipc4_get_audio_fmt(scomp, swidget, available_fmt, true); in sof_ipc4_widget_setup_pcm()
369 SOF_COPIER_GATEWAY_CFG_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_pcm()
370 swidget->num_tuples, sizeof(u32), in sof_ipc4_widget_setup_pcm()
374 swidget->widget->name); in sof_ipc4_widget_setup_pcm()
384 SOF_COPIER_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_pcm()
385 swidget->num_tuples, sizeof(node_type), 1); in sof_ipc4_widget_setup_pcm()
392 dev_dbg(scomp->dev, "host copier '%s' node_type %u\n", swidget->widget->name, node_type); in sof_ipc4_widget_setup_pcm()
406 ret = sof_ipc4_widget_setup_msg(swidget, &ipc4_copier->msg); in sof_ipc4_widget_setup_pcm()
420 swidget->private = NULL; in sof_ipc4_widget_setup_pcm()
424 static void sof_ipc4_widget_free_comp_pcm(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp_pcm() argument
426 struct sof_ipc4_copier *ipc4_copier = swidget->private; in sof_ipc4_widget_free_comp_pcm()
438 swidget->private = NULL; in sof_ipc4_widget_free_comp_pcm()
441 static int sof_ipc4_widget_setup_comp_dai(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_comp_dai() argument
444 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_comp_dai()
445 struct snd_sof_dai *dai = swidget->private; in sof_ipc4_widget_setup_comp_dai()
456 dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name); in sof_ipc4_widget_setup_comp_dai()
458 ret = sof_ipc4_get_audio_fmt(scomp, swidget, available_fmt, true); in sof_ipc4_widget_setup_comp_dai()
470 SOF_COPIER_GATEWAY_CFG_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_dai()
471 swidget->num_tuples, sizeof(u32), in sof_ipc4_widget_setup_comp_dai()
475 swidget->widget->name); in sof_ipc4_widget_setup_comp_dai()
484 SOF_COPIER_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_dai()
485 swidget->num_tuples, sizeof(node_type), 1); in sof_ipc4_widget_setup_comp_dai()
492 SOF_DAI_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_dai()
493 swidget->num_tuples, sizeof(u32), 1); in sof_ipc4_widget_setup_comp_dai()
499 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()
519 strcmp(w->widget->sname, swidget->widget->sname)) in sof_ipc4_widget_setup_comp_dai()
556 ret = sof_ipc4_widget_setup_msg(swidget, &ipc4_copier->msg); in sof_ipc4_widget_setup_comp_dai()
575 static void sof_ipc4_widget_free_comp_dai(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp_dai() argument
578 struct snd_sof_dai *dai = swidget->private; in sof_ipc4_widget_free_comp_dai()
586 swidget->private = NULL; in sof_ipc4_widget_free_comp_dai()
601 swidget->private = NULL; in sof_ipc4_widget_free_comp_dai()
604 static int sof_ipc4_widget_setup_comp_pipeline(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_comp_pipeline() argument
606 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_comp_pipeline()
614 ret = sof_update_ipc_object(scomp, pipeline, SOF_SCHED_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_pipeline()
615 swidget->num_tuples, sizeof(*pipeline), 1); in sof_ipc4_widget_setup_comp_pipeline()
622 ret = sof_update_ipc_object(scomp, swidget, SOF_PIPELINE_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_pipeline()
623 swidget->num_tuples, sizeof(*swidget), 1); in sof_ipc4_widget_setup_comp_pipeline()
633 swidget->widget->name, swidget->pipeline_id, in sof_ipc4_widget_setup_comp_pipeline()
636 swidget->private = pipeline; in sof_ipc4_widget_setup_comp_pipeline()
639 pipeline->msg.primary |= SOF_IPC4_GLB_PIPE_INSTANCE_ID(swidget->pipeline_id); in sof_ipc4_widget_setup_comp_pipeline()
653 static int sof_ipc4_widget_setup_comp_pga(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_comp_pga() argument
655 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_comp_pga()
666 swidget->private = gain; in sof_ipc4_widget_setup_comp_pga()
672 ret = sof_ipc4_get_audio_fmt(scomp, swidget, &gain->available_fmt, false); in sof_ipc4_widget_setup_comp_pga()
676 ret = sof_update_ipc_object(scomp, &gain->data, SOF_GAIN_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_pga()
677 swidget->num_tuples, sizeof(gain->data), 1); in sof_ipc4_widget_setup_comp_pga()
685 swidget->widget->name, gain->data.curve_type, gain->data.curve_duration_l, in sof_ipc4_widget_setup_comp_pga()
688 ret = sof_ipc4_widget_setup_msg(swidget, &gain->msg); in sof_ipc4_widget_setup_comp_pga()
692 fw_module = swidget->module_info; in sof_ipc4_widget_setup_comp_pga()
696 if (scontrol->comp_id == swidget->comp_id) { in sof_ipc4_widget_setup_comp_pga()
707 swidget->private = NULL; in sof_ipc4_widget_setup_comp_pga()
711 static void sof_ipc4_widget_free_comp_pga(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp_pga() argument
713 struct sof_ipc4_gain *gain = swidget->private; in sof_ipc4_widget_free_comp_pga()
719 kfree(swidget->private); in sof_ipc4_widget_free_comp_pga()
720 swidget->private = NULL; in sof_ipc4_widget_free_comp_pga()
723 static int sof_ipc4_widget_setup_comp_mixer(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_comp_mixer() argument
725 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_comp_mixer()
729 dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name); in sof_ipc4_widget_setup_comp_mixer()
735 swidget->private = mixer; in sof_ipc4_widget_setup_comp_mixer()
738 ret = sof_ipc4_get_audio_fmt(scomp, swidget, &mixer->available_fmt, false); in sof_ipc4_widget_setup_comp_mixer()
742 ret = sof_ipc4_widget_setup_msg(swidget, &mixer->msg); in sof_ipc4_widget_setup_comp_mixer()
750 swidget->private = NULL; in sof_ipc4_widget_setup_comp_mixer()
754 static int sof_ipc4_widget_setup_comp_src(struct snd_sof_widget *swidget) in sof_ipc4_widget_setup_comp_src() argument
756 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_widget_setup_comp_src()
760 dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name); in sof_ipc4_widget_setup_comp_src()
766 swidget->private = src; in sof_ipc4_widget_setup_comp_src()
769 ret = sof_ipc4_get_audio_fmt(scomp, swidget, &src->available_fmt, false); in sof_ipc4_widget_setup_comp_src()
773 ret = sof_update_ipc_object(scomp, src, SOF_SRC_TOKENS, swidget->tuples, in sof_ipc4_widget_setup_comp_src()
774 swidget->num_tuples, sizeof(*src), 1); in sof_ipc4_widget_setup_comp_src()
782 ret = sof_ipc4_widget_setup_msg(swidget, &src->msg); in sof_ipc4_widget_setup_comp_src()
790 swidget->private = NULL; in sof_ipc4_widget_setup_comp_src()
794 static void sof_ipc4_widget_free_comp_src(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp_src() argument
796 struct sof_ipc4_src *src = swidget->private; in sof_ipc4_widget_free_comp_src()
802 kfree(swidget->private); in sof_ipc4_widget_free_comp_src()
803 swidget->private = NULL; in sof_ipc4_widget_free_comp_src()
806 static void sof_ipc4_widget_free_comp_mixer(struct snd_sof_widget *swidget) in sof_ipc4_widget_free_comp_mixer() argument
808 struct sof_ipc4_mixer *mixer = swidget->private; in sof_ipc4_widget_free_comp_mixer()
814 kfree(swidget->private); in sof_ipc4_widget_free_comp_mixer()
815 swidget->private = NULL; in sof_ipc4_widget_free_comp_mixer()
819 sof_ipc4_update_pipeline_mem_usage(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget, in sof_ipc4_update_pipeline_mem_usage() argument
822 struct sof_ipc4_fw_module *fw_module = swidget->module_info; in sof_ipc4_update_pipeline_mem_usage()
848 pipe_widget = swidget->pipe_widget; in sof_ipc4_update_pipeline_mem_usage()
854 struct snd_sof_widget *swidget) in sof_ipc4_widget_assign_instance_id() argument
856 struct sof_ipc4_fw_module *fw_module = swidget->module_info; in sof_ipc4_widget_assign_instance_id()
859 swidget->instance_id = ida_alloc_max(&fw_module->m_ida, max_instances, GFP_KERNEL); in sof_ipc4_widget_assign_instance_id()
860 if (swidget->instance_id < 0) { in sof_ipc4_widget_assign_instance_id()
862 swidget->widget->name); in sof_ipc4_widget_assign_instance_id()
863 return swidget->instance_id; in sof_ipc4_widget_assign_instance_id()
870 struct snd_sof_widget *swidget, in sof_ipc4_init_audio_fmt() argument
885 dev_err(sdev->dev, "no reference formats for %s\n", swidget->widget->name); in sof_ipc4_init_audio_fmt()
905 dev_err(sdev->dev, "no formats available for %s\n", swidget->widget->name); in sof_ipc4_init_audio_fmt()
942 dev_dbg(sdev->dev, "Init input audio formats for %s\n", swidget->widget->name); in sof_ipc4_init_audio_fmt()
946 dev_dbg(sdev->dev, "Init output audio formats for %s\n", swidget->widget->name); in sof_ipc4_init_audio_fmt()
955 static void sof_ipc4_unprepare_copier_module(struct snd_sof_widget *swidget) in sof_ipc4_unprepare_copier_module() argument
962 pipe_widget = swidget->pipe_widget; in sof_ipc4_unprepare_copier_module()
966 if (WIDGET_IS_AIF(swidget->id)) { in sof_ipc4_unprepare_copier_module()
967 ipc4_copier = swidget->private; in sof_ipc4_unprepare_copier_module()
968 } else if (WIDGET_IS_DAI(swidget->id)) { in sof_ipc4_unprepare_copier_module()
969 struct snd_sof_dai *dai = swidget->private; in sof_ipc4_unprepare_copier_module()
1099 sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget, in sof_ipc4_prepare_copier_module() argument
1105 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_prepare_copier_module()
1119 dev_dbg(sdev->dev, "copier %s, type %d", swidget->widget->name, swidget->id); in sof_ipc4_prepare_copier_module()
1121 switch (swidget->id) { in sof_ipc4_prepare_copier_module()
1129 pipe_widget = swidget->pipe_widget; in sof_ipc4_prepare_copier_module()
1131 ipc4_copier = (struct sof_ipc4_copier *)swidget->private; in sof_ipc4_prepare_copier_module()
1160 dai = swidget->private; in sof_ipc4_prepare_copier_module()
1194 swidget->id, swidget->widget->name); in sof_ipc4_prepare_copier_module()
1199 ret = sof_ipc4_init_audio_fmt(sdev, swidget, &copier_data->base_config, in sof_ipc4_prepare_copier_module()
1205 switch (swidget->id) { in sof_ipc4_prepare_copier_module()
1241 strcmp(w->widget->sname, swidget->widget->sname)) in sof_ipc4_prepare_copier_module()
1300 dev_dbg(sdev->dev, "copier %s, IPC size is %d", swidget->widget->name, ipc_size); in sof_ipc4_prepare_copier_module()
1315 sof_ipc4_update_pipeline_mem_usage(sdev, swidget, &copier_data->base_config); in sof_ipc4_prepare_copier_module()
1320 static int sof_ipc4_prepare_gain_module(struct snd_sof_widget *swidget, in sof_ipc4_prepare_gain_module() argument
1325 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_prepare_gain_module()
1327 struct sof_ipc4_gain *gain = swidget->private; in sof_ipc4_prepare_gain_module()
1333 ret = sof_ipc4_init_audio_fmt(sdev, swidget, &gain->base_config, in sof_ipc4_prepare_gain_module()
1340 sof_ipc4_update_pipeline_mem_usage(sdev, swidget, &gain->base_config); in sof_ipc4_prepare_gain_module()
1345 static int sof_ipc4_prepare_mixer_module(struct snd_sof_widget *swidget, in sof_ipc4_prepare_mixer_module() argument
1350 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_prepare_mixer_module()
1352 struct sof_ipc4_mixer *mixer = swidget->private; in sof_ipc4_prepare_mixer_module()
1359 ret = sof_ipc4_init_audio_fmt(sdev, swidget, &mixer->base_config, in sof_ipc4_prepare_mixer_module()
1366 sof_ipc4_update_pipeline_mem_usage(sdev, swidget, &mixer->base_config); in sof_ipc4_prepare_mixer_module()
1371 static int sof_ipc4_prepare_src_module(struct snd_sof_widget *swidget, in sof_ipc4_prepare_src_module() argument
1376 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc4_prepare_src_module()
1378 struct sof_ipc4_src *src = swidget->private; in sof_ipc4_prepare_src_module()
1385 ret = sof_ipc4_init_audio_fmt(sdev, swidget, &src->base_config, in sof_ipc4_prepare_src_module()
1392 sof_ipc4_update_pipeline_mem_usage(sdev, swidget, &src->base_config); in sof_ipc4_prepare_src_module()
1448 static int sof_ipc4_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) in sof_ipc4_widget_setup() argument
1456 switch (swidget->id) { in sof_ipc4_widget_setup()
1458 pipeline = swidget->private; in sof_ipc4_widget_setup()
1460 dev_dbg(sdev->dev, "pipeline: %d memory pages: %d\n", swidget->pipeline_id, in sof_ipc4_widget_setup()
1469 struct sof_ipc4_copier *ipc4_copier = swidget->private; in sof_ipc4_widget_setup()
1480 struct snd_sof_dai *dai = swidget->private; in sof_ipc4_widget_setup()
1491 struct sof_ipc4_gain *gain = swidget->private; in sof_ipc4_widget_setup()
1502 struct sof_ipc4_mixer *mixer = swidget->private; in sof_ipc4_widget_setup()
1512 struct sof_ipc4_src *src = swidget->private; in sof_ipc4_widget_setup()
1521 dev_err(sdev->dev, "widget type %d not supported", swidget->id); in sof_ipc4_widget_setup()
1525 if (swidget->id != snd_soc_dapm_scheduler) { in sof_ipc4_widget_setup()
1526 ret = sof_ipc4_widget_assign_instance_id(sdev, swidget); in sof_ipc4_widget_setup()
1529 swidget->widget->name); in sof_ipc4_widget_setup()
1534 msg->primary |= SOF_IPC4_MOD_INSTANCE(swidget->instance_id); in sof_ipc4_widget_setup()
1540 swidget->widget->name, swidget->instance_id, swidget->pipeline_id, swidget->core); in sof_ipc4_widget_setup()
1547 dev_err(sdev->dev, "failed to create module %s\n", swidget->widget->name); in sof_ipc4_widget_setup()
1549 if (swidget->id != snd_soc_dapm_scheduler) { in sof_ipc4_widget_setup()
1550 struct sof_ipc4_fw_module *fw_module = swidget->module_info; in sof_ipc4_widget_setup()
1552 ida_free(&fw_module->m_ida, swidget->instance_id); in sof_ipc4_widget_setup()
1559 static int sof_ipc4_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) in sof_ipc4_widget_free() argument
1561 struct sof_ipc4_fw_module *fw_module = swidget->module_info; in sof_ipc4_widget_free()
1565 if (swidget->id == snd_soc_dapm_scheduler) { in sof_ipc4_widget_free()
1566 struct sof_ipc4_pipeline *pipeline = swidget->private; in sof_ipc4_widget_free()
1570 header = SOF_IPC4_GLB_PIPE_INSTANCE_ID(swidget->pipeline_id); in sof_ipc4_widget_free()
1580 swidget->widget->name); in sof_ipc4_widget_free()
1585 ida_free(&fw_module->m_ida, swidget->instance_id); in sof_ipc4_widget_free()
1665 static int sof_ipc4_dai_config(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget, in sof_ipc4_dai_config() argument
1668 struct snd_sof_widget *pipe_widget = swidget->pipe_widget; in sof_ipc4_dai_config()
1670 struct snd_sof_dai *dai = swidget->private; in sof_ipc4_dai_config()
1677 swidget->widget->name); in sof_ipc4_dai_config()