Lines Matching refs:dai

36 avs_dai_find_path_template(struct snd_soc_dai *dai, bool is_fe, int direction)
38 struct snd_soc_dapm_widget *dw = snd_soc_dai_get_widget(dai, direction);
58 static int avs_dai_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai, bool is_fe,
62 struct avs_dev *adev = to_avs_dev(dai->dev);
66 template = avs_dai_find_path_template(dai, is_fe, substream->stream);
68 dev_err(dai->dev, "no %s path for dai %s, invalid tplg?\n",
69 snd_pcm_stream_str(substream), dai->name);
79 snd_soc_dai_set_dma_data(dai, substream, data);
89 struct snd_pcm_hw_params *be_hw_params, struct snd_soc_dai *dai,
94 struct avs_dev *adev = to_avs_dev(dai->dev);
97 data = snd_soc_dai_get_dma_data(dai, substream);
99 dev_dbg(dai->dev, "%s FE hw_params str %p rtd %p",
101 dev_dbg(dai->dev, "rate %d chn %d vbd %d bd %d\n",
105 dev_dbg(dai->dev, "%s BE hw_params str %p rtd %p",
107 dev_dbg(dai->dev, "rate %d chn %d vbd %d bd %d\n",
114 dev_err(dai->dev, "create path failed: %d\n", ret);
123 struct snd_pcm_hw_params *be_hw_params, struct snd_soc_dai *dai,
136 return avs_dai_hw_params(substream, fe_hw_params, be_hw_params, dai, dma_id);
140 struct snd_soc_dai *dai)
145 data = snd_soc_dai_get_dma_data(dai, substream);
151 dev_err(dai->dev, "reset path failed: %d\n", ret);
157 dev_err(dai->dev, "pause path failed: %d\n", ret);
163 static int avs_dai_nonhda_be_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
165 return avs_dai_startup(substream, dai, false, &avs_dai_nonhda_be_ops);
168 static void avs_dai_nonhda_be_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
171 struct avs_dev *adev = to_avs_dev(dai->dev);
177 data = snd_soc_dai_get_dma_data(dai, substream);
179 snd_soc_dai_set_dma_data(dai, substream, NULL);
184 struct snd_pcm_hw_params *hw_params, struct snd_soc_dai *dai)
188 data = snd_soc_dai_get_dma_data(dai, substream);
193 return avs_dai_be_hw_params(substream, hw_params, dai, 0);
196 static int avs_dai_nonhda_be_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
200 dev_dbg(dai->dev, "%s: %s\n", __func__, dai->name);
202 data = snd_soc_dai_get_dma_data(dai, substream);
211 static int avs_dai_nonhda_be_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
213 return avs_dai_prepare(to_avs_dev(dai->dev), substream, dai);
217 struct snd_soc_dai *dai)
223 data = snd_soc_dai_get_dma_data(dai, substream);
234 dev_err(dai->dev, "pause BE path failed: %d\n", ret);
240 dev_err(dai->dev, "run BE path failed: %d\n", ret);
251 dev_err(dai->dev, "pause BE path failed: %d\n", ret);
255 dev_err(dai->dev, "reset BE path failed: %d\n", ret);
277 static int avs_dai_hda_be_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
279 return avs_dai_startup(substream, dai, false, &avs_dai_hda_be_ops);
282 static void avs_dai_hda_be_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
284 return avs_dai_nonhda_be_shutdown(substream, dai);
288 struct snd_pcm_hw_params *hw_params, struct snd_soc_dai *dai)
293 data = snd_soc_dai_get_dma_data(dai, substream);
299 return avs_dai_be_hw_params(substream, hw_params, dai,
303 static int avs_dai_hda_be_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
311 dev_dbg(dai->dev, "%s: %s\n", __func__, dai->name);
313 data = snd_soc_dai_get_dma_data(dai, substream);
334 static int avs_dai_hda_be_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
364 ret = avs_dai_prepare(to_avs_dev(dai->dev), substream, dai);
373 struct snd_soc_dai *dai)
380 dev_dbg(dai->dev, "entry %s cmd=%d\n", __func__, cmd);
382 data = snd_soc_dai_get_dma_data(dai, substream);
396 dev_err(dai->dev, "pause BE path failed: %d\n", ret);
402 dev_err(dai->dev, "run BE path failed: %d\n", ret);
413 dev_err(dai->dev, "pause BE path failed: %d\n", ret);
419 dev_err(dai->dev, "reset BE path failed: %d\n", ret);
454 static int avs_dai_fe_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
458 struct avs_dev *adev = to_avs_dev(dai->dev);
463 ret = avs_dai_startup(substream, dai, true, &avs_dai_fe_ops);
467 data = snd_soc_dai_get_dma_data(dai, substream);
491 dev_dbg(dai->dev, "%s fe STARTUP tag %d str %p",
501 static void avs_dai_fe_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
504 struct avs_dev *adev = to_avs_dev(dai->dev);
510 data = snd_soc_dai_get_dma_data(dai, substream);
512 snd_soc_dai_set_dma_data(dai, substream, NULL);
518 struct snd_pcm_hw_params *hw_params, struct snd_soc_dai *dai)
527 data = snd_soc_dai_get_dma_data(dai, substream);
543 ret = avs_dai_hw_params(substream, hw_params, be_hw_params, dai,
550 dev_err(dai->dev, "bind FE <-> BE failed: %d\n", ret);
564 static int __avs_dai_fe_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
570 dev_dbg(dai->dev, "%s fe HW_FREE str %p rtd %p",
573 data = snd_soc_dai_get_dma_data(dai, substream);
581 dev_err(dai->dev, "unbind FE <-> BE failed: %d\n", ret);
591 static int avs_dai_fe_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
595 ret = __avs_dai_fe_hw_free(substream, dai);
601 static int avs_dai_fe_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
605 struct avs_dev *adev = to_avs_dev(dai->dev);
611 data = snd_soc_dai_get_dma_data(dai, substream);
632 ret = avs_dai_prepare(adev, substream, dai);
640 static int avs_dai_fe_trigger(struct snd_pcm_substream *substream, int cmd, struct snd_soc_dai *dai)
649 data = snd_soc_dai_get_dma_data(dai, substream);
670 dev_err(dai->dev, "pause FE path failed: %d\n", ret);
676 dev_err(dai->dev, "run FE path failed: %d\n", ret);
688 dev_err(dai->dev, "pause FE path failed: %d\n", ret);
696 dev_err(dai->dev, "reset FE path failed: %d\n", ret);
865 static int avs_dai_resume_hw_params(struct snd_soc_dai *dai, struct avs_dma_data *data)
874 ret = dai->driver->ops->hw_params(substream, &rtd->dpcm[substream->stream].hw_params, dai);
876 dev_err(dai->dev, "hw_params on resume failed: %d\n", ret);
881 static int avs_dai_resume_fe_prepare(struct snd_soc_dai *dai, struct avs_dma_data *data)
895 ret = dai->driver->ops->prepare(data->substream, dai);
897 dev_err(dai->dev, "prepare FE on resume failed: %d\n", ret);
913 static int avs_dai_resume_be_prepare(struct snd_soc_dai *dai, struct avs_dma_data *data)
917 ret = dai->driver->ops->prepare(data->substream, dai);
919 dev_err(dai->dev, "prepare BE on resume failed: %d\n", ret);
924 static int avs_dai_suspend_fe_hw_free(struct snd_soc_dai *dai, struct avs_dma_data *data)
938 ret = __avs_dai_fe_hw_free(data->substream, dai);
940 dev_err(dai->dev, "hw_free FE on suspend failed: %d\n", ret);
945 static int avs_dai_suspend_be_hw_free(struct snd_soc_dai *dai, struct avs_dma_data *data)
949 ret = dai->driver->ops->hw_free(data->substream, dai);
951 dev_err(dai->dev, "hw_free BE on suspend failed: %d\n", ret);
961 struct snd_soc_dai *dai;
964 for_each_component_dais(component, dai) {
965 data = snd_soc_dai_dma_data_get_playback(dai);
969 ret = op(dai, data);
978 data = snd_soc_dai_dma_data_get_capture(dai);
982 ret = op(dai, data);
1002 int (*prepare_cb)(struct snd_soc_dai *dai, struct avs_dma_data *data);
1014 int (*hw_free_cb)(struct snd_soc_dai *dai, struct avs_dma_data *data);
1132 struct snd_soc_dai *dai = asoc_rtd_to_cpu(rtd, 0);
1135 if (dai->driver->playback.channels_min)
1140 if (dai->driver->capture.channels_min)
1240 struct snd_soc_dai_driver *cpus, *dai;
1254 dai = cpus;
1256 memcpy(dai, &i2s_dai_template, sizeof(*dai));
1258 dai->name =
1260 dai->playback.stream_name =
1262 dai->capture.stream_name =
1265 if (!dai->name || !dai->playback.stream_name || !dai->capture.stream_name)
1267 dai++;
1275 memcpy(dai, &i2s_dai_template, sizeof(*dai));
1277 dai->name =
1279 dai->playback.stream_name =
1281 dai->capture.stream_name =
1284 if (!dai->name || !dai->playback.stream_name || !dai->capture.stream_name)
1286 dai++;
1318 struct snd_soc_dai *dai, *save;
1326 for_each_component_dais_safe(component, dai, save) {
1329 if (!strstr(dai->driver->name, name))
1333 snd_soc_dapm_free_widget(snd_soc_dai_get_widget(dai, stream));
1335 snd_soc_unregister_dai(dai);
1369 struct snd_soc_dai *dai;
1400 dai = snd_soc_register_dai(component, &dais[i], false);
1401 if (!dai) {
1402 dev_err(component->dev, "register dai for %s failed\n",
1408 ret = snd_soc_dapm_new_dai_widgets(dapm, dai);