Lines Matching refs:swidget

325 static void *sof_comp_alloc(struct snd_sof_widget *swidget, size_t *ipc_size,  in sof_comp_alloc()  argument
330 size_t ext_size = sizeof(swidget->uuid); in sof_comp_alloc()
333 if (!guid_is_null(&swidget->uuid)) in sof_comp_alloc()
343 comp->id = swidget->comp_id; in sof_comp_alloc()
345 comp->core = swidget->core; in sof_comp_alloc()
350 memcpy((u8 *)comp + *ipc_size, &swidget->uuid, ext_size); in sof_comp_alloc()
366 static int sof_ipc3_widget_setup_comp_host(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_host() argument
368 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_host()
373 host = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_host()
376 swidget->private = host; in sof_ipc3_widget_setup_comp_host()
382 if (swidget->id == snd_soc_dapm_aif_out) in sof_ipc3_widget_setup_comp_host()
388 ret = sof_update_ipc_object(scomp, host, SOF_PCM_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_host()
389 swidget->num_tuples, sizeof(*host), 1); in sof_ipc3_widget_setup_comp_host()
394 ret = sof_update_ipc_object(scomp, &host->config, SOF_COMP_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_host()
395 swidget->num_tuples, sizeof(host->config), 1); in sof_ipc3_widget_setup_comp_host()
399 dev_dbg(scomp->dev, "loaded host %s\n", swidget->widget->name); in sof_ipc3_widget_setup_comp_host()
404 kfree(swidget->private); in sof_ipc3_widget_setup_comp_host()
405 swidget->private = NULL; in sof_ipc3_widget_setup_comp_host()
410 static void sof_ipc3_widget_free_comp(struct snd_sof_widget *swidget) in sof_ipc3_widget_free_comp() argument
412 kfree(swidget->private); in sof_ipc3_widget_free_comp()
415 static int sof_ipc3_widget_setup_comp_tone(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_tone() argument
417 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_tone()
422 tone = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_tone()
426 swidget->private = tone; in sof_ipc3_widget_setup_comp_tone()
433 ret = sof_update_ipc_object(scomp, &tone->config, SOF_COMP_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_tone()
434 swidget->num_tuples, sizeof(tone->config), 1); in sof_ipc3_widget_setup_comp_tone()
436 kfree(swidget->private); in sof_ipc3_widget_setup_comp_tone()
437 swidget->private = NULL; in sof_ipc3_widget_setup_comp_tone()
442 swidget->widget->name, tone->frequency, tone->amplitude); in sof_ipc3_widget_setup_comp_tone()
448 static int sof_ipc3_widget_setup_comp_mixer(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_mixer() argument
450 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_mixer()
455 mixer = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_mixer()
459 swidget->private = mixer; in sof_ipc3_widget_setup_comp_mixer()
467 swidget->tuples, swidget->num_tuples, in sof_ipc3_widget_setup_comp_mixer()
470 kfree(swidget->private); in sof_ipc3_widget_setup_comp_mixer()
471 swidget->private = NULL; in sof_ipc3_widget_setup_comp_mixer()
476 dev_dbg(scomp->dev, "loaded mixer %s\n", swidget->widget->name); in sof_ipc3_widget_setup_comp_mixer()
482 static int sof_ipc3_widget_setup_comp_pipeline(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_pipeline() argument
484 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_pipeline()
496 pipeline->pipeline_id = swidget->pipeline_id; in sof_ipc3_widget_setup_comp_pipeline()
497 pipeline->comp_id = swidget->comp_id; in sof_ipc3_widget_setup_comp_pipeline()
499 swidget->private = pipeline; in sof_ipc3_widget_setup_comp_pipeline()
502 comp_swidget = snd_sof_find_swidget(scomp, swidget->widget->sname); in sof_ipc3_widget_setup_comp_pipeline()
505 swidget->widget->name, swidget->widget->sname); in sof_ipc3_widget_setup_comp_pipeline()
513 ret = sof_update_ipc_object(scomp, pipeline, SOF_SCHED_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_pipeline()
514 swidget->num_tuples, sizeof(*pipeline), 1); in sof_ipc3_widget_setup_comp_pipeline()
519 ret = sof_update_ipc_object(scomp, swidget, SOF_PIPELINE_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_pipeline()
520 swidget->num_tuples, sizeof(*swidget), 1); in sof_ipc3_widget_setup_comp_pipeline()
528 swidget->dynamic_pipeline_widget = in sof_ipc3_widget_setup_comp_pipeline()
532 swidget->widget->name, pipeline->period, pipeline->priority, in sof_ipc3_widget_setup_comp_pipeline()
534 swidget->dynamic_pipeline_widget); in sof_ipc3_widget_setup_comp_pipeline()
536 swidget->core = pipeline->core; in sof_ipc3_widget_setup_comp_pipeline()
541 kfree(swidget->private); in sof_ipc3_widget_setup_comp_pipeline()
542 swidget->private = NULL; in sof_ipc3_widget_setup_comp_pipeline()
547 static int sof_ipc3_widget_setup_comp_buffer(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_buffer() argument
549 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_buffer()
557 swidget->private = buffer; in sof_ipc3_widget_setup_comp_buffer()
562 buffer->comp.id = swidget->comp_id; in sof_ipc3_widget_setup_comp_buffer()
564 buffer->comp.pipeline_id = swidget->pipeline_id; in sof_ipc3_widget_setup_comp_buffer()
565 buffer->comp.core = swidget->core; in sof_ipc3_widget_setup_comp_buffer()
568 ret = sof_update_ipc_object(scomp, buffer, SOF_BUFFER_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_buffer()
569 swidget->num_tuples, sizeof(*buffer), 1); in sof_ipc3_widget_setup_comp_buffer()
571 kfree(swidget->private); in sof_ipc3_widget_setup_comp_buffer()
572 swidget->private = NULL; in sof_ipc3_widget_setup_comp_buffer()
577 swidget->widget->name, buffer->size, buffer->caps); in sof_ipc3_widget_setup_comp_buffer()
582 static int sof_ipc3_widget_setup_comp_src(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_src() argument
584 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_src()
589 src = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_src()
593 swidget->private = src; in sof_ipc3_widget_setup_comp_src()
600 ret = sof_update_ipc_object(scomp, src, SOF_SRC_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_src()
601 swidget->num_tuples, sizeof(*src), 1); in sof_ipc3_widget_setup_comp_src()
607 swidget->tuples, swidget->num_tuples, sizeof(src->config), 1); in sof_ipc3_widget_setup_comp_src()
612 swidget->widget->name, src->source_rate, src->sink_rate); in sof_ipc3_widget_setup_comp_src()
617 kfree(swidget->private); in sof_ipc3_widget_setup_comp_src()
618 swidget->private = NULL; in sof_ipc3_widget_setup_comp_src()
623 static int sof_ipc3_widget_setup_comp_asrc(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_asrc() argument
625 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_asrc()
630 asrc = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_asrc()
634 swidget->private = asrc; in sof_ipc3_widget_setup_comp_asrc()
641 ret = sof_update_ipc_object(scomp, asrc, SOF_ASRC_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_asrc()
642 swidget->num_tuples, sizeof(*asrc), 1); in sof_ipc3_widget_setup_comp_asrc()
648 swidget->tuples, swidget->num_tuples, sizeof(asrc->config), 1); in sof_ipc3_widget_setup_comp_asrc()
653 swidget->widget->name, asrc->source_rate, asrc->sink_rate, in sof_ipc3_widget_setup_comp_asrc()
660 kfree(swidget->private); in sof_ipc3_widget_setup_comp_asrc()
661 swidget->private = NULL; in sof_ipc3_widget_setup_comp_asrc()
669 static int sof_ipc3_widget_setup_comp_mux(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_mux() argument
671 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_mux()
676 mux = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_mux()
680 swidget->private = mux; in sof_ipc3_widget_setup_comp_mux()
688 swidget->tuples, swidget->num_tuples, sizeof(mux->config), 1); in sof_ipc3_widget_setup_comp_mux()
690 kfree(swidget->private); in sof_ipc3_widget_setup_comp_mux()
691 swidget->private = NULL; in sof_ipc3_widget_setup_comp_mux()
695 dev_dbg(scomp->dev, "loaded mux %s\n", swidget->widget->name); in sof_ipc3_widget_setup_comp_mux()
705 static int sof_ipc3_widget_setup_comp_pga(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_pga() argument
707 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_pga()
715 volume = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_pga()
719 swidget->private = volume; in sof_ipc3_widget_setup_comp_pga()
726 ret = sof_update_ipc_object(scomp, volume, SOF_VOLUME_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_pga()
727 swidget->num_tuples, sizeof(*volume), 1); in sof_ipc3_widget_setup_comp_pga()
733 swidget->tuples, swidget->num_tuples, in sof_ipc3_widget_setup_comp_pga()
738 dev_dbg(scomp->dev, "loaded PGA %s\n", swidget->widget->name); in sof_ipc3_widget_setup_comp_pga()
742 if (scontrol->comp_id == swidget->comp_id && in sof_ipc3_widget_setup_comp_pga()
755 kfree(swidget->private); in sof_ipc3_widget_setup_comp_pga()
756 swidget->private = NULL; in sof_ipc3_widget_setup_comp_pga()
844 struct snd_sof_widget *swidget, int type) in sof_process_load() argument
846 struct snd_soc_dapm_widget *widget = swidget->widget; in sof_process_load()
875 process = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_process_load()
881 swidget->private = process; in sof_process_load()
889 swidget->tuples, swidget->num_tuples, in sof_process_load()
894 dev_dbg(scomp->dev, "loaded process %s\n", swidget->widget->name); in sof_process_load()
919 kfree(swidget->private); in sof_process_load()
920 swidget->private = NULL; in sof_process_load()
943 static int sof_widget_update_ipc_comp_process(struct snd_sof_widget *swidget) in sof_widget_update_ipc_comp_process() argument
945 struct snd_soc_component *scomp = swidget->scomp; in sof_widget_update_ipc_comp_process()
950 config.comp.core = swidget->core; in sof_widget_update_ipc_comp_process()
953 ret = sof_update_ipc_object(scomp, &config, SOF_PROCESS_TOKENS, swidget->tuples, in sof_widget_update_ipc_comp_process()
954 swidget->num_tuples, sizeof(config), 1); in sof_widget_update_ipc_comp_process()
959 return sof_process_load(scomp, swidget, find_process_comp_type(config.type)); in sof_widget_update_ipc_comp_process()
1450 static int sof_ipc3_widget_setup_comp_dai(struct snd_sof_widget *swidget) in sof_ipc3_widget_setup_comp_dai() argument
1452 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_widget_setup_comp_dai()
1454 struct snd_sof_dai *dai = swidget->private; in sof_ipc3_widget_setup_comp_dai()
1468 private->comp_dai = sof_comp_alloc(swidget, &ipc_size, swidget->pipeline_id); in sof_ipc3_widget_setup_comp_dai()
1480 ret = sof_update_ipc_object(scomp, comp_dai, SOF_DAI_TOKENS, swidget->tuples, in sof_ipc3_widget_setup_comp_dai()
1481 swidget->num_tuples, sizeof(*comp_dai), 1); in sof_ipc3_widget_setup_comp_dai()
1487 swidget->tuples, swidget->num_tuples, in sof_ipc3_widget_setup_comp_dai()
1493 swidget->widget->name, comp_dai->type, comp_dai->dai_index); in sof_ipc3_widget_setup_comp_dai()
1581 static void sof_ipc3_widget_free_comp_dai(struct snd_sof_widget *swidget) in sof_ipc3_widget_free_comp_dai() argument
1583 switch (swidget->id) { in sof_ipc3_widget_free_comp_dai()
1587 struct snd_sof_dai *dai = swidget->private; in sof_ipc3_widget_free_comp_dai()
1773 static int sof_ipc3_keyword_detect_pcm_params(struct snd_sof_widget *swidget, int dir) in sof_ipc3_keyword_detect_pcm_params() argument
1775 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_keyword_detect_pcm_params()
1784 spcm = snd_sof_find_spcm_name(scomp, swidget->widget->sname); in sof_ipc3_keyword_detect_pcm_params()
1786 dev_err(scomp->dev, "Cannot find PCM for %s\n", swidget->widget->name); in sof_ipc3_keyword_detect_pcm_params()
1796 pcm.comp_id = swidget->comp_id; in sof_ipc3_keyword_detect_pcm_params()
1825 swidget->widget->name); in sof_ipc3_keyword_detect_pcm_params()
1831 static int sof_ipc3_keyword_detect_trigger(struct snd_sof_widget *swidget, int cmd) in sof_ipc3_keyword_detect_trigger() argument
1833 struct snd_soc_component *scomp = swidget->scomp; in sof_ipc3_keyword_detect_trigger()
1842 stream.comp_id = swidget->comp_id; in sof_ipc3_keyword_detect_trigger()
1847 dev_err(scomp->dev, "%s: Failed to trigger %s\n", __func__, swidget->widget->name); in sof_ipc3_keyword_detect_trigger()
1855 struct snd_sof_widget *swidget = w->dobj.private; in sof_ipc3_keyword_dapm_event() local
1861 if (!swidget) in sof_ipc3_keyword_dapm_event()
1864 scomp = swidget->scomp; in sof_ipc3_keyword_dapm_event()
1870 spcm = snd_sof_find_spcm_name(scomp, swidget->widget->sname); in sof_ipc3_keyword_dapm_event()
1873 swidget->widget->name); in sof_ipc3_keyword_dapm_event()
1886 ret = sof_ipc3_keyword_detect_pcm_params(swidget, stream); in sof_ipc3_keyword_dapm_event()
1889 __func__, swidget->widget->name); in sof_ipc3_keyword_dapm_event()
1894 ret = sof_ipc3_keyword_detect_trigger(swidget, SOF_IPC_STREAM_TRIG_START); in sof_ipc3_keyword_dapm_event()
1897 swidget->widget->name); in sof_ipc3_keyword_dapm_event()
1907 ret = sof_ipc3_keyword_detect_trigger(swidget, SOF_IPC_STREAM_TRIG_STOP); in sof_ipc3_keyword_dapm_event()
1910 swidget->widget->name); in sof_ipc3_keyword_dapm_event()
1913 ret = sof_ipc3_keyword_detect_trigger(swidget, SOF_IPC_STREAM_PCM_FREE); in sof_ipc3_keyword_dapm_event()
1916 swidget->widget->name); in sof_ipc3_keyword_dapm_event()
1931 struct snd_sof_widget *swidget, u16 event_type) in sof_ipc3_widget_bind_event() argument
1939 if (swidget->id != snd_soc_dapm_effect) in sof_ipc3_widget_bind_event()
1942 ipc_comp = swidget->private; in sof_ipc3_widget_bind_event()
1947 return snd_soc_tplg_widget_bind_event(swidget->widget, sof_kwd_events, in sof_ipc3_widget_bind_event()
1954 swidget->widget->name); in sof_ipc3_widget_bind_event()
1959 static int sof_ipc3_complete_pipeline(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) in sof_ipc3_complete_pipeline() argument
1966 swidget->widget->name, swidget->comp_id); in sof_ipc3_complete_pipeline()
1971 ready.comp_id = swidget->comp_id; in sof_ipc3_complete_pipeline()
1980 static int sof_ipc3_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) in sof_ipc3_widget_free() argument
1987 .id = swidget->comp_id, in sof_ipc3_widget_free()
1992 if (!swidget->private) in sof_ipc3_widget_free()
1995 switch (swidget->id) { in sof_ipc3_widget_free()
2012 dev_err(sdev->dev, "failed to free widget %s\n", swidget->widget->name); in sof_ipc3_widget_free()
2017 static int sof_ipc3_dai_config(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget, in sof_ipc3_dai_config() argument
2021 struct snd_sof_dai *dai = swidget->private; in sof_ipc3_dai_config()
2028 dev_err(sdev->dev, "No private data for DAI %s\n", swidget->widget->name); in sof_ipc3_dai_config()
2072 if (swidget->use_count > 0) { in sof_ipc3_dai_config()
2082 static int sof_ipc3_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) in sof_ipc3_widget_setup() argument
2087 if (!swidget->private) in sof_ipc3_widget_setup()
2090 switch (swidget->id) { in sof_ipc3_widget_setup()
2094 struct snd_sof_dai *dai = swidget->private; in sof_ipc3_widget_setup()
2106 pipeline = swidget->private; in sof_ipc3_widget_setup()
2115 hdr = swidget->private; in sof_ipc3_widget_setup()
2116 ret = sof_ipc_tx_message(sdev->ipc, swidget->private, hdr->size, in sof_ipc3_widget_setup()
2122 dev_err(sdev->dev, "Failed to setup widget %s\n", swidget->widget->name); in sof_ipc3_widget_setup()
2130 struct snd_sof_widget *swidget; in sof_ipc3_set_up_all_pipelines() local
2135 list_for_each_entry(swidget, &sdev->widget_list, list) { in sof_ipc3_set_up_all_pipelines()
2137 if (!verify && swidget->dynamic_pipeline_widget) in sof_ipc3_set_up_all_pipelines()
2145 swidget->id == snd_soc_dapm_scheduler) in sof_ipc3_set_up_all_pipelines()
2149 if (WIDGET_IS_DAI(swidget->id)) { in sof_ipc3_set_up_all_pipelines()
2150 struct snd_sof_dai *dai = swidget->private; in sof_ipc3_set_up_all_pipelines()
2171 ret = sof_widget_setup(sdev, swidget); in sof_ipc3_set_up_all_pipelines()
2200 list_for_each_entry(swidget, &sdev->widget_list, list) { in sof_ipc3_set_up_all_pipelines()
2201 switch (swidget->id) { in sof_ipc3_set_up_all_pipelines()
2204 if (!verify && swidget->dynamic_pipeline_widget) in sof_ipc3_set_up_all_pipelines()
2208 ret = sof_widget_setup(sdev, swidget); in sof_ipc3_set_up_all_pipelines()
2213 swidget->complete = sof_ipc3_complete_pipeline(sdev, swidget); in sof_ipc3_set_up_all_pipelines()
2214 if (swidget->complete < 0) in sof_ipc3_set_up_all_pipelines()
2215 return swidget->complete; in sof_ipc3_set_up_all_pipelines()
2231 struct snd_sof_widget *swidget; in sof_tear_down_left_over_pipelines() local
2259 list_for_each_entry(swidget, &sdev->widget_list, list) in sof_tear_down_left_over_pipelines()
2260 if (WIDGET_IS_DAI(swidget->id) && swidget->use_count == 1) { in sof_tear_down_left_over_pipelines()
2261 ret = sof_widget_free(sdev, swidget); in sof_tear_down_left_over_pipelines()
2276 struct snd_sof_widget *swidget; in sof_ipc3_tear_down_all_pipelines() local
2287 list_for_each_entry(swidget, &sdev->widget_list, list) { in sof_ipc3_tear_down_all_pipelines()
2288 if (swidget->dynamic_pipeline_widget) { in sof_ipc3_tear_down_all_pipelines()
2294 if (!verify && !swidget->dynamic_pipeline_widget && in sof_ipc3_tear_down_all_pipelines()
2296 swidget->use_count = 0; in sof_ipc3_tear_down_all_pipelines()
2297 swidget->complete = 0; in sof_ipc3_tear_down_all_pipelines()
2301 ret = sof_widget_free(sdev, swidget); in sof_ipc3_tear_down_all_pipelines()
2329 list_for_each_entry(swidget, &sdev->widget_list, list) { in sof_ipc3_tear_down_all_pipelines()
2330 if (swidget->use_count != 0) { in sof_ipc3_tear_down_all_pipelines()
2332 __func__, swidget->widget->name, swidget->use_count); in sof_ipc3_tear_down_all_pipelines()