Lines Matching refs:substream
67 struct snd_pcm_substream *substream) in hda_link_stream_assign() argument
69 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_link_stream_assign()
76 int stream_dir = substream->stream; in hda_link_stream_assign()
87 if (hstream->direction != substream->stream) in hda_link_stream_assign()
133 res->link_substream = substream; in hda_link_stream_assign()
140 static int hda_link_dma_cleanup(struct snd_pcm_substream *substream, in hda_link_dma_cleanup() argument
146 struct hdac_ext_stream *hext_stream = snd_soc_dai_get_dma_data(cpu_dai, substream); in hda_link_dma_cleanup()
159 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in hda_link_dma_cleanup()
163 snd_soc_dai_set_dma_data(cpu_dai, substream, NULL); in hda_link_dma_cleanup()
207 static int hda_link_dma_hw_params(struct snd_pcm_substream *substream, in hda_link_dma_hw_params() argument
210 struct hdac_stream *hstream = substream->runtime->private_data; in hda_link_dma_hw_params()
212 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_link_dma_hw_params()
219 hext_stream = snd_soc_dai_get_dma_data(cpu_dai, substream); in hda_link_dma_hw_params()
221 hext_stream = hda_link_stream_assign(bus, substream); in hda_link_dma_hw_params()
225 snd_soc_dai_set_dma_data(cpu_dai, substream, (void *)hext_stream); in hda_link_dma_hw_params()
233 snd_soc_dai_set_stream(codec_dai, hdac_stream(hext_stream), substream->stream); in hda_link_dma_hw_params()
238 p_params.stream = substream->stream; in hda_link_dma_hw_params()
242 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) in hda_link_dma_hw_params()
250 static int hda_link_dma_prepare(struct snd_pcm_substream *substream) in hda_link_dma_prepare() argument
252 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_link_dma_prepare()
253 int stream = substream->stream; in hda_link_dma_prepare()
255 return hda_link_dma_hw_params(substream, &rtd->dpcm[stream].hw_params); in hda_link_dma_prepare()
258 static int hda_link_dma_trigger(struct snd_pcm_substream *substream, int cmd) in hda_link_dma_trigger() argument
260 struct hdac_stream *hstream = substream->runtime->private_data; in hda_link_dma_trigger()
261 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_link_dma_trigger()
264 struct hdac_ext_stream *hext_stream = snd_soc_dai_get_dma_data(cpu_dai, substream); in hda_link_dma_trigger()
277 ret = hda_link_dma_cleanup(substream, hstream, cpu_dai, codec_dai, true); in hda_link_dma_trigger()
292 static int hda_link_dma_hw_free(struct snd_pcm_substream *substream) in hda_link_dma_hw_free() argument
294 struct hdac_stream *hstream = substream->runtime->private_data; in hda_link_dma_hw_free()
295 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_link_dma_hw_free()
300 hext_stream = snd_soc_dai_get_dma_data(cpu_dai, substream); in hda_link_dma_hw_free()
304 return hda_link_dma_cleanup(substream, hstream, cpu_dai, codec_dai, false); in hda_link_dma_hw_free()
321 static int hda_dai_hw_params_update(struct snd_pcm_substream *substream, in hda_dai_hw_params_update() argument
329 hext_stream = snd_soc_dai_get_dma_data(dai, substream); in hda_dai_hw_params_update()
335 w = snd_soc_dai_get_widget(dai, substream->stream); in hda_dai_hw_params_update()
341 static int hda_dai_hw_params(struct snd_pcm_substream *substream, in hda_dai_hw_params() argument
346 snd_soc_dai_get_dma_data(dai, substream); in hda_dai_hw_params()
352 ret = hda_link_dma_hw_params(substream, params); in hda_dai_hw_params()
356 return hda_dai_hw_params_update(substream, params, dai); in hda_dai_hw_params()
378 static int hda_dai_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in hda_dai_prepare() argument
381 snd_soc_dai_get_dma_data(dai, substream); in hda_dai_prepare()
383 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_dai_prepare()
384 int stream = substream->stream; in hda_dai_prepare()
390 dev_dbg(sdev->dev, "prepare stream dir %d\n", substream->stream); in hda_dai_prepare()
392 ret = hda_link_dma_prepare(substream); in hda_dai_prepare()
396 return hda_dai_hw_params_update(substream, &rtd->dpcm[stream].hw_params, dai); in hda_dai_prepare()
410 static int ipc3_hda_dai_trigger(struct snd_pcm_substream *substream, in ipc3_hda_dai_trigger() argument
417 dai->name, substream->stream); in ipc3_hda_dai_trigger()
419 ret = hda_link_dma_trigger(substream, cmd); in ipc3_hda_dai_trigger()
423 w = snd_soc_dai_get_widget(dai, substream->stream); in ipc3_hda_dai_trigger()
431 ret = hda_dai_hw_free_ipc(substream->stream, dai); in ipc3_hda_dai_trigger()
452 static int ipc4_hda_dai_trigger(struct snd_pcm_substream *substream, in ipc4_hda_dai_trigger() argument
455 struct hdac_ext_stream *hext_stream = snd_soc_dai_get_dma_data(dai, substream); in ipc4_hda_dai_trigger()
466 dai->name, substream->stream); in ipc4_hda_dai_trigger()
468 hstream = substream->runtime->private_data; in ipc4_hda_dai_trigger()
469 rtd = asoc_substream_to_rtd(substream); in ipc4_hda_dai_trigger()
473 w = snd_soc_dai_get_widget(dai, substream->stream); in ipc4_hda_dai_trigger()
503 ret = hda_link_dma_cleanup(substream, hstream, cpu_dai, codec_dai, false); in ipc4_hda_dai_trigger()
533 static int hda_dai_hw_free(struct snd_pcm_substream *substream, in hda_dai_hw_free() argument
538 ret = hda_link_dma_hw_free(substream); in hda_dai_hw_free()
542 return hda_dai_hw_free_ipc(substream->stream, dai); in hda_dai_hw_free()
607 static int ssp_dai_setup_or_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai, in ssp_dai_setup_or_free() argument
612 w = snd_soc_dai_get_widget(dai, substream->stream); in ssp_dai_setup_or_free()
620 static int ssp_dai_startup(struct snd_pcm_substream *substream, in ssp_dai_startup() argument
629 snd_soc_dai_set_dma_data(dai, substream, dma_data); in ssp_dai_startup()
634 static int ssp_dai_setup(struct snd_pcm_substream *substream, in ssp_dai_setup() argument
641 dma_data = snd_soc_dai_get_dma_data(dai, substream); in ssp_dai_setup()
648 ret = ssp_dai_setup_or_free(substream, dai, setup); in ssp_dai_setup()
655 static int ssp_dai_hw_params(struct snd_pcm_substream *substream, in ssp_dai_hw_params() argument
660 return ssp_dai_setup(substream, dai, true); in ssp_dai_hw_params()
663 static int ssp_dai_prepare(struct snd_pcm_substream *substream, in ssp_dai_prepare() argument
670 return ssp_dai_setup(substream, dai, true); in ssp_dai_prepare()
673 static int ipc3_ssp_dai_trigger(struct snd_pcm_substream *substream, in ipc3_ssp_dai_trigger() argument
679 return ssp_dai_setup(substream, dai, false); in ipc3_ssp_dai_trigger()
682 static int ssp_dai_hw_free(struct snd_pcm_substream *substream, in ssp_dai_hw_free() argument
685 return ssp_dai_setup(substream, dai, false); in ssp_dai_hw_free()
688 static void ssp_dai_shutdown(struct snd_pcm_substream *substream, in ssp_dai_shutdown() argument
693 dma_data = snd_soc_dai_get_dma_data(dai, substream); in ssp_dai_shutdown()
698 snd_soc_dai_set_dma_data(dai, substream, NULL); in ssp_dai_shutdown()
755 static int ipc4_be_dai_trigger(struct snd_pcm_substream *substream, in ipc4_be_dai_trigger() argument
758 return ipc4_be_dai_common_trigger(dai, cmd, substream->stream); in ipc4_be_dai_trigger()