Lines Matching refs:substream
64 struct snd_pcm_substream *substream) in hda_link_stream_assign() argument
66 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_link_stream_assign()
73 int stream_dir = substream->stream; in hda_link_stream_assign()
84 if (hstream->direction != substream->stream) in hda_link_stream_assign()
130 res->link_substream = substream; in hda_link_stream_assign()
137 static int hda_link_dma_cleanup(struct snd_pcm_substream *substream, in hda_link_dma_cleanup() argument
156 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in hda_link_dma_cleanup()
160 snd_soc_dai_set_dma_data(cpu_dai, substream, NULL); in hda_link_dma_cleanup()
204 static int hda_link_dma_hw_params(struct snd_pcm_substream *substream, in hda_link_dma_hw_params() argument
207 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_link_dma_hw_params()
223 hext_stream = snd_soc_dai_get_dma_data(cpu_dai, substream); in hda_link_dma_hw_params()
225 hext_stream = hda_link_stream_assign(bus, substream); in hda_link_dma_hw_params()
229 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()
240 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) in hda_link_dma_hw_params()
248 static int hda_link_dma_prepare(struct snd_pcm_substream *substream) in hda_link_dma_prepare() argument
250 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_link_dma_prepare()
251 int stream = substream->stream; in hda_link_dma_prepare()
253 return hda_link_dma_hw_params(substream, &rtd->dpcm[stream].hw_params); in hda_link_dma_prepare()
256 static int hda_link_dma_trigger(struct snd_pcm_substream *substream, int cmd) in hda_link_dma_trigger() argument
258 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_link_dma_trigger()
261 struct hdac_ext_stream *hext_stream = snd_soc_dai_get_dma_data(cpu_dai, substream); in hda_link_dma_trigger()
274 ret = hda_link_dma_cleanup(substream, hext_stream, cpu_dai, codec_dai, true); in hda_link_dma_trigger()
289 static int hda_link_dma_hw_free(struct snd_pcm_substream *substream) in hda_link_dma_hw_free() argument
291 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_link_dma_hw_free()
296 hext_stream = snd_soc_dai_get_dma_data(cpu_dai, substream); in hda_link_dma_hw_free()
300 return hda_link_dma_cleanup(substream, hext_stream, cpu_dai, codec_dai, false); in hda_link_dma_hw_free()
317 static int hda_dai_hw_params_update(struct snd_pcm_substream *substream, in hda_dai_hw_params_update() argument
325 hext_stream = snd_soc_dai_get_dma_data(dai, substream); in hda_dai_hw_params_update()
331 w = snd_soc_dai_get_widget(dai, substream->stream); in hda_dai_hw_params_update()
337 static int hda_dai_hw_params(struct snd_pcm_substream *substream, in hda_dai_hw_params() argument
342 snd_soc_dai_get_dma_data(dai, substream); in hda_dai_hw_params()
348 ret = hda_link_dma_hw_params(substream, params); in hda_dai_hw_params()
352 return hda_dai_hw_params_update(substream, params, dai); in hda_dai_hw_params()
374 static int hda_dai_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) in hda_dai_prepare() argument
377 snd_soc_dai_get_dma_data(dai, substream); in hda_dai_prepare()
379 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); in hda_dai_prepare()
380 int stream = substream->stream; in hda_dai_prepare()
386 dev_dbg(sdev->dev, "prepare stream dir %d\n", substream->stream); in hda_dai_prepare()
388 ret = hda_link_dma_prepare(substream); in hda_dai_prepare()
392 return hda_dai_hw_params_update(substream, &rtd->dpcm[stream].hw_params, dai); in hda_dai_prepare()
406 static int ipc3_hda_dai_trigger(struct snd_pcm_substream *substream, in ipc3_hda_dai_trigger() argument
413 dai->name, substream->stream); in ipc3_hda_dai_trigger()
415 ret = hda_link_dma_trigger(substream, cmd); in ipc3_hda_dai_trigger()
419 w = snd_soc_dai_get_widget(dai, substream->stream); in ipc3_hda_dai_trigger()
427 ret = hda_dai_hw_free_ipc(substream->stream, dai); in ipc3_hda_dai_trigger()
448 static int ipc4_hda_dai_trigger(struct snd_pcm_substream *substream, in ipc4_hda_dai_trigger() argument
451 struct hdac_ext_stream *hext_stream = snd_soc_dai_get_dma_data(dai, substream); in ipc4_hda_dai_trigger()
463 dai->name, substream->stream); in ipc4_hda_dai_trigger()
465 rtd = asoc_substream_to_rtd(substream); in ipc4_hda_dai_trigger()
469 w = snd_soc_dai_get_widget(dai, substream->stream); in ipc4_hda_dai_trigger()
511 ret = hda_link_dma_cleanup(substream, hext_stream, cpu_dai, codec_dai, false); in ipc4_hda_dai_trigger()
538 static int hda_dai_hw_free(struct snd_pcm_substream *substream, in hda_dai_hw_free() argument
543 ret = hda_link_dma_hw_free(substream); in hda_dai_hw_free()
547 return hda_dai_hw_free_ipc(substream->stream, dai); in hda_dai_hw_free()
613 static int ssp_dai_setup_or_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai, in ssp_dai_setup_or_free() argument
618 w = snd_soc_dai_get_widget(dai, substream->stream); in ssp_dai_setup_or_free()
626 static int ssp_dai_startup(struct snd_pcm_substream *substream, in ssp_dai_startup() argument
635 snd_soc_dai_set_dma_data(dai, substream, dma_data); in ssp_dai_startup()
640 static int ssp_dai_setup(struct snd_pcm_substream *substream, in ssp_dai_setup() argument
647 dma_data = snd_soc_dai_get_dma_data(dai, substream); in ssp_dai_setup()
654 ret = ssp_dai_setup_or_free(substream, dai, setup); in ssp_dai_setup()
661 static int ssp_dai_hw_params(struct snd_pcm_substream *substream, in ssp_dai_hw_params() argument
666 return ssp_dai_setup(substream, dai, true); in ssp_dai_hw_params()
669 static int ssp_dai_prepare(struct snd_pcm_substream *substream, in ssp_dai_prepare() argument
676 return ssp_dai_setup(substream, dai, true); in ssp_dai_prepare()
679 static int ipc3_ssp_dai_trigger(struct snd_pcm_substream *substream, in ipc3_ssp_dai_trigger() argument
685 return ssp_dai_setup(substream, dai, false); in ipc3_ssp_dai_trigger()
688 static int ssp_dai_hw_free(struct snd_pcm_substream *substream, in ssp_dai_hw_free() argument
691 return ssp_dai_setup(substream, dai, false); in ssp_dai_hw_free()
694 static void ssp_dai_shutdown(struct snd_pcm_substream *substream, in ssp_dai_shutdown() argument
699 dma_data = snd_soc_dai_get_dma_data(dai, substream); in ssp_dai_shutdown()
704 snd_soc_dai_set_dma_data(dai, substream, NULL); in ssp_dai_shutdown()