Lines Matching full:dai
43 avs_dai_find_path_template(struct snd_soc_dai *dai, bool is_fe, int direction) in avs_dai_find_path_template() argument
45 struct snd_soc_dapm_widget *dw = snd_soc_dai_get_widget(dai, direction); in avs_dai_find_path_template()
75 struct snd_soc_dai *dai = snd_soc_rtd_to_cpu(rtd, 0); in avs_period_elapsed() local
76 struct avs_dma_data *data = snd_soc_dai_get_dma_data(dai, substream); in avs_period_elapsed()
82 static int avs_hw_constraints_init(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_hw_constraints_init() argument
95 data = snd_soc_dai_get_dma_data(dai, substream); in avs_hw_constraints_init()
100 template = avs_dai_find_path_template(dai, !rtd->dai_link->no_pcm, substream->stream); in avs_hw_constraints_init()
120 static int avs_dai_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_startup() argument
123 struct avs_dev *adev = to_avs_dev(dai->component->dev); in avs_dai_startup()
127 template = avs_dai_find_path_template(dai, !rtd->dai_link->no_pcm, substream->stream); in avs_dai_startup()
129 dev_err(dai->dev, "no %s path for dai %s, invalid tplg?\n", in avs_dai_startup()
130 snd_pcm_stream_str(substream), dai->name); in avs_dai_startup()
142 snd_soc_dai_set_dma_data(dai, substream, data); in avs_dai_startup()
147 return avs_hw_constraints_init(substream, dai); in avs_dai_startup()
150 static void avs_dai_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_shutdown() argument
155 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_shutdown()
164 snd_soc_dai_set_dma_data(dai, substream, NULL); in avs_dai_shutdown()
170 struct snd_pcm_hw_params *be_hw_params, struct snd_soc_dai *dai, in avs_dai_hw_params() argument
177 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_hw_params()
179 dev_dbg(dai->dev, "%s FE hw_params str %p rtd %p", in avs_dai_hw_params()
181 dev_dbg(dai->dev, "rate %d chn %d vbd %d bd %d\n", in avs_dai_hw_params()
185 dev_dbg(dai->dev, "%s BE hw_params str %p rtd %p", in avs_dai_hw_params()
187 dev_dbg(dai->dev, "rate %d chn %d vbd %d bd %d\n", in avs_dai_hw_params()
194 dev_err(dai->dev, "create path failed: %d\n", ret); in avs_dai_hw_params()
203 struct snd_pcm_hw_params *be_hw_params, struct snd_soc_dai *dai, in avs_dai_be_hw_params() argument
217 return avs_dai_hw_params(substream, fe_hw_params, be_hw_params, dai, dma_id); in avs_dai_be_hw_params()
220 static int avs_dai_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_prepare() argument
225 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_prepare()
231 dev_err(dai->dev, "reset path failed: %d\n", ret); in avs_dai_prepare()
237 dev_err(dai->dev, "pause path failed: %d\n", ret); in avs_dai_prepare()
242 struct snd_pcm_hw_params *hw_params, struct snd_soc_dai *dai) in avs_dai_nonhda_be_hw_params() argument
246 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_nonhda_be_hw_params()
251 return avs_dai_be_hw_params(substream, hw_params, dai, 0); in avs_dai_nonhda_be_hw_params()
254 static int avs_dai_nonhda_be_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_nonhda_be_hw_free() argument
258 dev_dbg(dai->dev, "%s: %s\n", __func__, dai->name); in avs_dai_nonhda_be_hw_free()
260 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_nonhda_be_hw_free()
270 struct snd_soc_dai *dai) in avs_dai_nonhda_be_trigger() argument
276 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_nonhda_be_trigger()
287 dev_err(dai->dev, "pause BE path failed: %d\n", ret); in avs_dai_nonhda_be_trigger()
293 dev_err(dai->dev, "run BE path failed: %d\n", ret); in avs_dai_nonhda_be_trigger()
304 dev_err(dai->dev, "pause BE path failed: %d\n", ret); in avs_dai_nonhda_be_trigger()
308 dev_err(dai->dev, "reset BE path failed: %d\n", ret); in avs_dai_nonhda_be_trigger()
328 static int avs_dai_hda_be_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_hda_be_startup() argument
336 ret = avs_dai_startup(substream, dai); in avs_dai_hda_be_startup()
344 avs_dai_shutdown(substream, dai); in avs_dai_hda_be_startup()
348 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_hda_be_startup()
354 static void avs_dai_hda_be_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_hda_be_shutdown() argument
356 struct avs_dma_data *data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_hda_be_shutdown()
360 avs_dai_shutdown(substream, dai); in avs_dai_hda_be_shutdown()
364 struct snd_pcm_hw_params *hw_params, struct snd_soc_dai *dai) in avs_dai_hda_be_hw_params() argument
368 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_hda_be_hw_params()
372 return avs_dai_be_hw_params(substream, hw_params, dai, in avs_dai_hda_be_hw_params()
376 static int avs_dai_hda_be_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_hda_be_hw_free() argument
384 dev_dbg(dai->dev, "%s: %s\n", __func__, dai->name); in avs_dai_hda_be_hw_free()
386 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_hda_be_hw_free()
407 static int avs_dai_hda_be_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_hda_be_prepare() argument
421 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_hda_be_prepare()
429 stream_info = snd_soc_dai_get_pcm_stream(dai, substream->stream); in avs_dai_hda_be_prepare()
445 ret = avs_dai_prepare(substream, dai); in avs_dai_hda_be_prepare()
454 struct snd_soc_dai *dai) in avs_dai_hda_be_trigger() argument
460 dev_dbg(dai->dev, "entry %s cmd=%d\n", __func__, cmd); in avs_dai_hda_be_trigger()
462 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_hda_be_trigger()
475 dev_err(dai->dev, "pause BE path failed: %d\n", ret); in avs_dai_hda_be_trigger()
481 dev_err(dai->dev, "run BE path failed: %d\n", ret); in avs_dai_hda_be_trigger()
492 dev_err(dai->dev, "pause BE path failed: %d\n", ret); in avs_dai_hda_be_trigger()
498 dev_err(dai->dev, "reset BE path failed: %d\n", ret); in avs_dai_hda_be_trigger()
563 static int avs_dai_fe_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_fe_startup() argument
574 ret = avs_dai_startup(substream, dai); in avs_dai_fe_startup()
578 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_fe_startup()
583 avs_dai_shutdown(substream, dai); in avs_dai_fe_startup()
590 dev_dbg(dai->dev, "%s fe STARTUP tag %d str %p", in avs_dai_fe_startup()
596 static void avs_dai_fe_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_fe_shutdown() argument
600 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_fe_shutdown()
603 avs_dai_shutdown(substream, dai); in avs_dai_fe_shutdown()
607 struct snd_pcm_hw_params *hw_params, struct snd_soc_dai *dai) in avs_dai_fe_hw_params() argument
616 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_fe_hw_params()
633 ret = avs_dai_hw_params(substream, hw_params, be_hw_params, dai, in avs_dai_fe_hw_params()
640 dev_err(dai->dev, "bind FE <-> BE failed: %d\n", ret); in avs_dai_fe_hw_params()
654 static int __avs_dai_fe_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in __avs_dai_fe_hw_free() argument
660 dev_dbg(dai->dev, "%s fe HW_FREE str %p rtd %p", in __avs_dai_fe_hw_free()
663 data = snd_soc_dai_get_dma_data(dai, substream); in __avs_dai_fe_hw_free()
671 dev_err(dai->dev, "unbind FE <-> BE failed: %d\n", ret); in __avs_dai_fe_hw_free()
681 static int avs_dai_fe_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_fe_hw_free() argument
685 ret = __avs_dai_fe_hw_free(substream, dai); in avs_dai_fe_hw_free()
691 static int avs_dai_fe_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in avs_dai_fe_prepare() argument
702 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_fe_prepare()
712 stream_info = snd_soc_dai_get_pcm_stream(dai, substream->stream); in avs_dai_fe_prepare()
725 ret = avs_dai_prepare(substream, dai); in avs_dai_fe_prepare()
806 static int avs_dai_fe_trigger(struct snd_pcm_substream *substream, int cmd, struct snd_soc_dai *dai) in avs_dai_fe_trigger() argument
815 data = snd_soc_dai_get_dma_data(dai, substream); in avs_dai_fe_trigger()
836 dev_err(dai->dev, "pause FE path failed: %d\n", ret); in avs_dai_fe_trigger()
842 dev_err(dai->dev, "run FE path failed: %d\n", ret); in avs_dai_fe_trigger()
854 dev_err(dai->dev, "pause FE path failed: %d\n", ret); in avs_dai_fe_trigger()
862 dev_err(dai->dev, "reset FE path failed: %d\n", ret); in avs_dai_fe_trigger()
1032 static int avs_dai_resume_hw_params(struct snd_soc_dai *dai, struct avs_dma_data *data) in avs_dai_resume_hw_params() argument
1041 ret = dai->driver->ops->hw_params(substream, &rtd->dpcm[substream->stream].hw_params, dai); in avs_dai_resume_hw_params()
1043 dev_err(dai->dev, "hw_params on resume failed: %d\n", ret); in avs_dai_resume_hw_params()
1048 static int avs_dai_resume_fe_prepare(struct snd_soc_dai *dai, struct avs_dma_data *data) in avs_dai_resume_fe_prepare() argument
1062 ret = dai->driver->ops->prepare(data->substream, dai); in avs_dai_resume_fe_prepare()
1064 dev_err(dai->dev, "prepare FE on resume failed: %d\n", ret); in avs_dai_resume_fe_prepare()
1080 static int avs_dai_resume_be_prepare(struct snd_soc_dai *dai, struct avs_dma_data *data) in avs_dai_resume_be_prepare() argument
1084 ret = dai->driver->ops->prepare(data->substream, dai); in avs_dai_resume_be_prepare()
1086 dev_err(dai->dev, "prepare BE on resume failed: %d\n", ret); in avs_dai_resume_be_prepare()
1091 static int avs_dai_suspend_fe_hw_free(struct snd_soc_dai *dai, struct avs_dma_data *data) in avs_dai_suspend_fe_hw_free() argument
1105 ret = __avs_dai_fe_hw_free(data->substream, dai); in avs_dai_suspend_fe_hw_free()
1107 dev_err(dai->dev, "hw_free FE on suspend failed: %d\n", ret); in avs_dai_suspend_fe_hw_free()
1112 static int avs_dai_suspend_be_hw_free(struct snd_soc_dai *dai, struct avs_dma_data *data) in avs_dai_suspend_be_hw_free() argument
1116 ret = dai->driver->ops->hw_free(data->substream, dai); in avs_dai_suspend_be_hw_free()
1118 dev_err(dai->dev, "hw_free BE on suspend failed: %d\n", ret); in avs_dai_suspend_be_hw_free()
1128 struct snd_soc_dai *dai; in avs_component_pm_op() local
1131 for_each_component_dais(component, dai) { in avs_component_pm_op()
1132 data = snd_soc_dai_dma_data_get_playback(dai); in avs_component_pm_op()
1136 ret = op(dai, data); in avs_component_pm_op()
1145 data = snd_soc_dai_dma_data_get_capture(dai); in avs_component_pm_op()
1149 ret = op(dai, data); in avs_component_pm_op()
1169 int (*prepare_cb)(struct snd_soc_dai *dai, struct avs_dma_data *data); in avs_component_resume_prepare()
1181 int (*hw_free_cb)(struct snd_soc_dai *dai, struct avs_dma_data *data); in avs_component_suspend_hw_free()
1255 /* only FE DAI links are handled here */ in avs_component_open()
1301 struct snd_soc_dai *dai = snd_soc_rtd_to_cpu(rtd, 0); in avs_component_construct() local
1304 if (dai->driver->playback.channels_min) in avs_component_construct()
1309 if (dai->driver->capture.channels_min) in avs_component_construct()
1417 struct snd_soc_dai_driver *cpus, *dai; in avs_i2s_platform_register() local
1435 dai = cpus; in avs_i2s_platform_register()
1438 memcpy(dai, &i2s_dai_template, sizeof(*dai)); in avs_i2s_platform_register()
1440 dai->name = in avs_i2s_platform_register()
1442 dai->playback.stream_name = in avs_i2s_platform_register()
1444 dai->capture.stream_name = in avs_i2s_platform_register()
1447 if (!dai->name || !dai->playback.stream_name || !dai->capture.stream_name) in avs_i2s_platform_register()
1449 dai++; in avs_i2s_platform_register()
1458 memcpy(dai, &i2s_dai_template, sizeof(*dai)); in avs_i2s_platform_register()
1460 dai->name = in avs_i2s_platform_register()
1462 dai->playback.stream_name = in avs_i2s_platform_register()
1464 dai->capture.stream_name = in avs_i2s_platform_register()
1467 if (!dai->name || !dai->playback.stream_name || !dai->capture.stream_name) in avs_i2s_platform_register()
1469 dai++; in avs_i2s_platform_register()
1477 /* HD-Audio CPU DAI template */
1505 struct snd_soc_dai *dai, *save; in avs_component_hda_unregister_dais() local
1513 for_each_component_dais_safe(component, dai, save) { in avs_component_hda_unregister_dais()
1516 if (!strstr(dai->driver->name, name)) in avs_component_hda_unregister_dais()
1520 snd_soc_dapm_free_widget(snd_soc_dai_get_widget(dai, stream)); in avs_component_hda_unregister_dais()
1522 snd_soc_unregister_dai(dai); in avs_component_hda_unregister_dais()
1556 struct snd_soc_dai *dai; in avs_component_hda_probe() local
1605 dai = snd_soc_register_dai(component, &dais[i], false); in avs_component_hda_probe()
1606 if (!dai) { in avs_component_hda_probe()
1607 dev_err(component->dev, "register dai for %s failed\n", in avs_component_hda_probe()
1613 ret = snd_soc_dapm_new_dai_widgets(dapm, dai); in avs_component_hda_probe()
1617 snd_soc_unregister_dai(dai); in avs_component_hda_probe()