Lines Matching refs:swidget
336 static void *sof_comp_alloc(struct snd_sof_widget *swidget, size_t *ipc_size, in sof_comp_alloc() argument
341 size_t ext_size = sizeof(swidget->uuid); in sof_comp_alloc()
344 if (!guid_is_null(&swidget->uuid)) in sof_comp_alloc()
354 comp->id = swidget->comp_id; in sof_comp_alloc()
356 comp->core = swidget->core; in sof_comp_alloc()
361 memcpy((u8 *)comp + *ipc_size, &swidget->uuid, ext_size); in sof_comp_alloc()
377 static int sof_ipc3_widget_setup_comp_host(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_host() argument
379 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_host()
384 host = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_host()
387 swidget->private = host; in sof_ipc3_widget_setup_comp_host()
393 if (swidget->id == snd_soc_dapm_aif_out) in sof_ipc3_widget_setup_comp_host()
399 ret = sof_update_ipc_object(scomp, host, SOF_PCM_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_host()
400 swidget->num_tuples, sizeof(*host), 1); in sof_ipc3_widget_setup_comp_host()
405 ret = sof_update_ipc_object(scomp, &host->config, SOF_COMP_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_host()
406 swidget->num_tuples, sizeof(host->config), 1); in sof_ipc3_widget_setup_comp_host()
410 dev_dbg(scomp->dev, "loaded host %s\n", swidget->widget->name); in sof_ipc3_widget_setup_comp_host()
415 kfree(swidget->private); in sof_ipc3_widget_setup_comp_host()
416 swidget->private = NULL; in sof_ipc3_widget_setup_comp_host()
421 static void sof_ipc3_widget_free_comp(struct snd_sof_widget *swidget) in sof_ipc3_widget_free_comp() argument
423 kfree(swidget->private); in sof_ipc3_widget_free_comp()
426 static int sof_ipc3_widget_setup_comp_tone(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_tone() argument
428 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_tone()
433 tone = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_tone()
437 swidget->private = tone; in sof_ipc3_widget_setup_comp_tone()
444 ret = sof_update_ipc_object(scomp, &tone->config, SOF_COMP_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_tone()
445 swidget->num_tuples, sizeof(tone->config), 1); in sof_ipc3_widget_setup_comp_tone()
447 kfree(swidget->private); in sof_ipc3_widget_setup_comp_tone()
448 swidget->private = NULL; in sof_ipc3_widget_setup_comp_tone()
453 swidget->widget->name, tone->frequency, tone->amplitude); in sof_ipc3_widget_setup_comp_tone()
459 static int sof_ipc3_widget_setup_comp_mixer(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_mixer() argument
461 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_mixer()
466 mixer = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_mixer()
470 swidget->private = mixer; in sof_ipc3_widget_setup_comp_mixer()
478 swidget->tuples, swidget->num_tuples, in sof_ipc3_widget_setup_comp_mixer()
481 kfree(swidget->private); in sof_ipc3_widget_setup_comp_mixer()
482 swidget->private = NULL; in sof_ipc3_widget_setup_comp_mixer()
487 dev_dbg(scomp->dev, "loaded mixer %s\n", swidget->widget->name); in sof_ipc3_widget_setup_comp_mixer()
493 static int sof_ipc3_widget_setup_comp_pipeline(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_pipeline() argument
495 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_pipeline()
507 pipeline->pipeline_id = swidget->pipeline_id; in sof_ipc3_widget_setup_comp_pipeline()
508 pipeline->comp_id = swidget->comp_id; in sof_ipc3_widget_setup_comp_pipeline()
510 swidget->private = pipeline; in sof_ipc3_widget_setup_comp_pipeline()
513 comp_swidget = snd_sof_find_swidget(scomp, swidget->widget->sname); in sof_ipc3_widget_setup_comp_pipeline()
516 swidget->widget->name, swidget->widget->sname); in sof_ipc3_widget_setup_comp_pipeline()
524 ret = sof_update_ipc_object(scomp, pipeline, SOF_SCHED_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_pipeline()
525 swidget->num_tuples, sizeof(*pipeline), 1); in sof_ipc3_widget_setup_comp_pipeline()
530 ret = sof_update_ipc_object(scomp, swidget, SOF_PIPELINE_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_pipeline()
531 swidget->num_tuples, sizeof(*swidget), 1); in sof_ipc3_widget_setup_comp_pipeline()
539 swidget->dynamic_pipeline_widget = in sof_ipc3_widget_setup_comp_pipeline()
543 swidget->widget->name, pipeline->period, pipeline->priority, in sof_ipc3_widget_setup_comp_pipeline()
545 swidget->dynamic_pipeline_widget); in sof_ipc3_widget_setup_comp_pipeline()
547 swidget->core = pipeline->core; in sof_ipc3_widget_setup_comp_pipeline()
552 kfree(swidget->private); in sof_ipc3_widget_setup_comp_pipeline()
553 swidget->private = NULL; in sof_ipc3_widget_setup_comp_pipeline()
558 static int sof_ipc3_widget_setup_comp_buffer(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_buffer() argument
560 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_buffer()
568 swidget->private = buffer; in sof_ipc3_widget_setup_comp_buffer()
573 buffer->comp.id = swidget->comp_id; in sof_ipc3_widget_setup_comp_buffer()
575 buffer->comp.pipeline_id = swidget->pipeline_id; in sof_ipc3_widget_setup_comp_buffer()
576 buffer->comp.core = swidget->core; in sof_ipc3_widget_setup_comp_buffer()
579 ret = sof_update_ipc_object(scomp, buffer, SOF_BUFFER_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_buffer()
580 swidget->num_tuples, sizeof(*buffer), 1); in sof_ipc3_widget_setup_comp_buffer()
582 kfree(swidget->private); in sof_ipc3_widget_setup_comp_buffer()
583 swidget->private = NULL; in sof_ipc3_widget_setup_comp_buffer()
588 swidget->widget->name, buffer->size, buffer->caps); in sof_ipc3_widget_setup_comp_buffer()
593 static int sof_ipc3_widget_setup_comp_src(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_src() argument
595 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_src()
600 src = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_src()
604 swidget->private = src; in sof_ipc3_widget_setup_comp_src()
611 ret = sof_update_ipc_object(scomp, src, SOF_SRC_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_src()
612 swidget->num_tuples, sizeof(*src), 1); in sof_ipc3_widget_setup_comp_src()
618 swidget->tuples, swidget->num_tuples, sizeof(src->config), 1); in sof_ipc3_widget_setup_comp_src()
623 swidget->widget->name, src->source_rate, src->sink_rate); in sof_ipc3_widget_setup_comp_src()
628 kfree(swidget->private); in sof_ipc3_widget_setup_comp_src()
629 swidget->private = NULL; in sof_ipc3_widget_setup_comp_src()
634 static int sof_ipc3_widget_setup_comp_asrc(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_asrc() argument
636 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_asrc()
641 asrc = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_asrc()
645 swidget->private = asrc; in sof_ipc3_widget_setup_comp_asrc()
652 ret = sof_update_ipc_object(scomp, asrc, SOF_ASRC_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_asrc()
653 swidget->num_tuples, sizeof(*asrc), 1); in sof_ipc3_widget_setup_comp_asrc()
659 swidget->tuples, swidget->num_tuples, sizeof(asrc->config), 1); in sof_ipc3_widget_setup_comp_asrc()
664 swidget->widget->name, asrc->source_rate, asrc->sink_rate, in sof_ipc3_widget_setup_comp_asrc()
671 kfree(swidget->private); in sof_ipc3_widget_setup_comp_asrc()
672 swidget->private = NULL; in sof_ipc3_widget_setup_comp_asrc()
680 static int sof_ipc3_widget_setup_comp_mux(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_mux() argument
682 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_mux()
687 mux = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_mux()
691 swidget->private = mux; in sof_ipc3_widget_setup_comp_mux()
699 swidget->tuples, swidget->num_tuples, sizeof(mux->config), 1); in sof_ipc3_widget_setup_comp_mux()
701 kfree(swidget->private); in sof_ipc3_widget_setup_comp_mux()
702 swidget->private = NULL; in sof_ipc3_widget_setup_comp_mux()
706 dev_dbg(scomp->dev, "loaded mux %s\n", swidget->widget->name); in sof_ipc3_widget_setup_comp_mux()
716 static int sof_ipc3_widget_setup_comp_pga(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_pga() argument
718 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_pga()
726 volume = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_pga()
730 swidget->private = volume; in sof_ipc3_widget_setup_comp_pga()
737 ret = sof_update_ipc_object(scomp, volume, SOF_VOLUME_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_pga()
738 swidget->num_tuples, sizeof(*volume), 1); in sof_ipc3_widget_setup_comp_pga()
744 swidget->tuples, swidget->num_tuples, in sof_ipc3_widget_setup_comp_pga()
749 dev_dbg(scomp->dev, "loaded PGA %s\n", swidget->widget->name); in sof_ipc3_widget_setup_comp_pga()
753 if (scontrol->comp_id == swidget->comp_id && in sof_ipc3_widget_setup_comp_pga()
766 kfree(swidget->private); in sof_ipc3_widget_setup_comp_pga()
767 swidget->private = NULL; in sof_ipc3_widget_setup_comp_pga()
855 struct snd_sof_widget *swidget, int type) in sof_process_load() argument
857 struct snd_soc_dapm_widget *widget = swidget->widget; in sof_process_load()
886 process = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_process_load()
892 swidget->private = process; in sof_process_load()
900 swidget->tuples, swidget->num_tuples, in sof_process_load()
905 dev_dbg(scomp->dev, "loaded process %s\n", swidget->widget->name); in sof_process_load()
930 kfree(swidget->private); in sof_process_load()
931 swidget->private = NULL; in sof_process_load()
954 static int sof_widget_update_ipc_comp_process(struct snd_sof_widget *swidget) in sof_widget_update_ipc_comp_process() argument
956 struct snd_soc_component *scomp = swidget->scomp; in sof_widget_update_ipc_comp_process()
961 config.comp.core = swidget->core; in sof_widget_update_ipc_comp_process()
964 ret = sof_update_ipc_object(scomp, &config, SOF_PROCESS_TOKENS, swidget->tuples, in sof_widget_update_ipc_comp_process()
965 swidget->num_tuples, sizeof(config), 1); in sof_widget_update_ipc_comp_process()
970 return sof_process_load(scomp, swidget, find_process_comp_type(config.type)); in sof_widget_update_ipc_comp_process()
1468 static int sof_ipc3_widget_setup_comp_dai(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_dai() argument
1470 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_dai()
1472 struct snd_sof_dai *dai = swidget->private; in sof_ipc3_widget_setup_comp_dai()
1486 private->comp_dai = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_dai()
1498 ret = sof_update_ipc_object(scomp, comp_dai, SOF_DAI_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_dai()
1499 swidget->num_tuples, sizeof(*comp_dai), 1); in sof_ipc3_widget_setup_comp_dai()
1505 swidget->tuples, swidget->num_tuples, in sof_ipc3_widget_setup_comp_dai()
1511 swidget->widget->name, comp_dai->type, comp_dai->dai_index); in sof_ipc3_widget_setup_comp_dai()
1601 static void sof_ipc3_widget_free_comp_dai(struct snd_sof_widget *swidget) in sof_ipc3_widget_free_comp_dai() argument
1603 switch (swidget->id) { in sof_ipc3_widget_free_comp_dai()
1607 struct snd_sof_dai *dai = swidget->private; in sof_ipc3_widget_free_comp_dai()
1796 static int sof_ipc3_keyword_detect_pcm_params(struct snd_sof_widget *swidget, int dir) in sof_ipc3_keyword_detect_pcm_params() argument
1798 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_keyword_detect_pcm_params()
1807 spcm = snd_sof_find_spcm_name(scomp, swidget->widget->sname); in sof_ipc3_keyword_detect_pcm_params()
1809 dev_err(scomp->dev, "Cannot find PCM for %s\n", swidget->widget->name); in sof_ipc3_keyword_detect_pcm_params()
1819 pcm.comp_id = swidget->comp_id; in sof_ipc3_keyword_detect_pcm_params()
1848 swidget->widget->name); in sof_ipc3_keyword_detect_pcm_params()
1854 static int sof_ipc3_keyword_detect_trigger(struct snd_sof_widget *swidget, int cmd) in sof_ipc3_keyword_detect_trigger() argument
1856 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_keyword_detect_trigger()
1865 stream.comp_id = swidget->comp_id; in sof_ipc3_keyword_detect_trigger()
1870 dev_err(scomp->dev, "%s: Failed to trigger %s\n", __func__, swidget->widget->name); in sof_ipc3_keyword_detect_trigger()
1878 struct snd_sof_widget *swidget = w->dobj.private; in sof_ipc3_keyword_dapm_event() local
1884 if (!swidget) in sof_ipc3_keyword_dapm_event()
1887 scomp = swidget->scomp; in sof_ipc3_keyword_dapm_event()
1893 spcm = snd_sof_find_spcm_name(scomp, swidget->widget->sname); in sof_ipc3_keyword_dapm_event()
1896 swidget->widget->name); in sof_ipc3_keyword_dapm_event()
1909 ret = sof_ipc3_keyword_detect_pcm_params(swidget, stream); in sof_ipc3_keyword_dapm_event()
1912 __func__, swidget->widget->name); in sof_ipc3_keyword_dapm_event()
1917 ret = sof_ipc3_keyword_detect_trigger(swidget, SOF_IPC_STREAM_TRIG_START); in sof_ipc3_keyword_dapm_event()
1920 swidget->widget->name); in sof_ipc3_keyword_dapm_event()
1930 ret = sof_ipc3_keyword_detect_trigger(swidget, SOF_IPC_STREAM_TRIG_STOP); in sof_ipc3_keyword_dapm_event()
1933 swidget->widget->name); in sof_ipc3_keyword_dapm_event()
1936 ret = sof_ipc3_keyword_detect_trigger(swidget, SOF_IPC_STREAM_PCM_FREE); in sof_ipc3_keyword_dapm_event()
1939 swidget->widget->name); in sof_ipc3_keyword_dapm_event()
1954 struct snd_sof_widget *swidget, u16 event_type) in sof_ipc3_widget_bind_event() argument
1962 if (swidget->id != snd_soc_dapm_effect) in sof_ipc3_widget_bind_event()
1965 ipc_comp = swidget->private; in sof_ipc3_widget_bind_event()
1970 return snd_soc_tplg_widget_bind_event(swidget->widget, sof_kwd_events, in sof_ipc3_widget_bind_event()
1977 swidget->widget->name); in sof_ipc3_widget_bind_event()
1982 static int sof_ipc3_complete_pipeline(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) in sof_ipc3_complete_pipeline() argument
1989 swidget->widget->name, swidget->comp_id); in sof_ipc3_complete_pipeline()
1994 ready.comp_id = swidget->comp_id; in sof_ipc3_complete_pipeline()
2003 static int sof_ipc3_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) in sof_ipc3_widget_free() argument
2010 .id = swidget->comp_id, in sof_ipc3_widget_free()
2015 if (!swidget->private) in sof_ipc3_widget_free()
2018 switch (swidget->id) { in sof_ipc3_widget_free()
2035 dev_err(sdev->dev, "failed to free widget %s\n", swidget->widget->name); in sof_ipc3_widget_free()
2040 static int sof_ipc3_dai_config(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget, in sof_ipc3_dai_config() argument
2044 struct snd_sof_dai *dai = swidget->private; in sof_ipc3_dai_config()
2051 dev_err(sdev->dev, "No private data for DAI %s\n", swidget->widget->name); in sof_ipc3_dai_config()
2095 if (swidget->use_count > 0) { in sof_ipc3_dai_config()
2105 static int sof_ipc3_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) in sof_ipc3_widget_setup() argument
2110 if (!swidget->private) in sof_ipc3_widget_setup()
2113 switch (swidget->id) { in sof_ipc3_widget_setup()
2117 struct snd_sof_dai *dai = swidget->private; in sof_ipc3_widget_setup()
2129 pipeline = swidget->private; in sof_ipc3_widget_setup()
2138 hdr = swidget->private; in sof_ipc3_widget_setup()
2139 ret = sof_ipc_tx_message(sdev->ipc, swidget->private, hdr->size, in sof_ipc3_widget_setup()
2145 dev_err(sdev->dev, "Failed to setup widget %s\n", swidget->widget->name); in sof_ipc3_widget_setup()
2153 struct snd_sof_widget *swidget; in sof_ipc3_set_up_all_pipelines() local
2158 list_for_each_entry(swidget, &sdev->widget_list, list) { in sof_ipc3_set_up_all_pipelines()
2160 if (!verify && swidget->dynamic_pipeline_widget) in sof_ipc3_set_up_all_pipelines()
2168 swidget->id == snd_soc_dapm_scheduler) in sof_ipc3_set_up_all_pipelines()
2172 if (WIDGET_IS_DAI(swidget->id)) { in sof_ipc3_set_up_all_pipelines()
2173 struct snd_sof_dai *dai = swidget->private; in sof_ipc3_set_up_all_pipelines()
2194 ret = sof_widget_setup(sdev, swidget); in sof_ipc3_set_up_all_pipelines()
2223 list_for_each_entry(swidget, &sdev->widget_list, list) { in sof_ipc3_set_up_all_pipelines()
2224 switch (swidget->id) { in sof_ipc3_set_up_all_pipelines()
2227 if (!verify && swidget->dynamic_pipeline_widget) in sof_ipc3_set_up_all_pipelines()
2231 ret = sof_widget_setup(sdev, swidget); in sof_ipc3_set_up_all_pipelines()
2236 swidget->spipe->complete = sof_ipc3_complete_pipeline(sdev, swidget); in sof_ipc3_set_up_all_pipelines()
2237 if (swidget->spipe->complete < 0) in sof_ipc3_set_up_all_pipelines()
2238 return swidget->spipe->complete; in sof_ipc3_set_up_all_pipelines()
2254 struct snd_sof_widget *swidget; in sof_tear_down_left_over_pipelines() local
2282 list_for_each_entry(swidget, &sdev->widget_list, list) in sof_tear_down_left_over_pipelines()
2283 if (WIDGET_IS_DAI(swidget->id) && swidget->use_count == 1) { in sof_tear_down_left_over_pipelines()
2284 ret = sof_widget_free(sdev, swidget); in sof_tear_down_left_over_pipelines()
2299 struct snd_sof_widget *swidget; in sof_ipc3_tear_down_all_pipelines() local
2310 list_for_each_entry(swidget, &sdev->widget_list, list) { in sof_ipc3_tear_down_all_pipelines()
2311 if (swidget->dynamic_pipeline_widget) { in sof_ipc3_tear_down_all_pipelines()
2317 if (!verify && !swidget->dynamic_pipeline_widget && in sof_ipc3_tear_down_all_pipelines()
2319 mutex_lock(&swidget->setup_mutex); in sof_ipc3_tear_down_all_pipelines()
2320 swidget->use_count = 0; in sof_ipc3_tear_down_all_pipelines()
2321 mutex_unlock(&swidget->setup_mutex); in sof_ipc3_tear_down_all_pipelines()
2322 if (swidget->spipe) in sof_ipc3_tear_down_all_pipelines()
2323 swidget->spipe->complete = 0; in sof_ipc3_tear_down_all_pipelines()
2327 ret = sof_widget_free(sdev, swidget); in sof_ipc3_tear_down_all_pipelines()
2355 list_for_each_entry(swidget, &sdev->widget_list, list) { in sof_ipc3_tear_down_all_pipelines()
2356 if (swidget->use_count != 0) { in sof_ipc3_tear_down_all_pipelines()
2358 __func__, swidget->widget->name, swidget->use_count); in sof_ipc3_tear_down_all_pipelines()