Lines Matching refs:rtd
157 void soc_dpcm_debugfs_add(struct snd_soc_pcm_runtime *rtd)
159 if (!rtd->dai_link)
162 if (!rtd->dai_link->dynamic)
165 if (!rtd->card->debugfs_card_root)
168 rtd->debugfs_dpcm_root = debugfs_create_dir(rtd->dai_link->name,
169 rtd->card->debugfs_card_root);
171 debugfs_create_file("state", 0444, rtd->debugfs_dpcm_root,
172 rtd, &dpcm_state_fops);
209 * @rtd: ASoC PCM runtime that is activated
217 * Must be called with the rtd->card->pcm_mutex being held
219 void snd_soc_runtime_action(struct snd_soc_pcm_runtime *rtd,
225 lockdep_assert_held(&rtd->card->pcm_mutex);
227 for_each_rtd_dais(rtd, i, dai)
234 * @rtd: The ASoC PCM runtime that should be checked.
241 bool snd_soc_runtime_ignore_pmdown_time(struct snd_soc_pcm_runtime *rtd)
247 if (!rtd->pmdown_time || rtd->dai_link->ignore_pmdown_time)
250 for_each_rtd_components(rtd, i, component)
307 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
311 rtd->dai_link->symmetric_rates)) {
327 rtd->dai_link->symmetric_channels)) {
343 rtd->dai_link->symmetric_samplebits)) {
364 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
374 symmetry = rtd->dai_link->symmetric_rates;
376 for_each_rtd_cpu_dais(rtd, i, dai)
380 for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
382 dev_err(rtd->dev, "ASoC: unmatched rate symmetry: %d - %d\n",
389 symmetry = rtd->dai_link->symmetric_channels;
391 for_each_rtd_dais(rtd, i, dai)
395 for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
398 dev_err(rtd->dev, "ASoC: unmatched channel symmetry: %d - %d\n",
405 symmetry = rtd->dai_link->symmetric_samplebits;
407 for_each_rtd_dais(rtd, i, dai)
411 for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
414 dev_err(rtd->dev, "ASoC: unmatched sample bits symmetry: %d - %d\n",
426 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
427 struct snd_soc_dai_link *link = rtd->dai_link;
435 for_each_rtd_dais(rtd, i, dai)
446 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
454 dev_warn(rtd->dev, "ASoC: Failed to set MSB %d: %d\n",
460 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
468 for_each_rtd_codec_dais(rtd, i, codec_dai) {
478 for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
494 * @rtd: ASoC PCM runtime
501 int snd_soc_runtime_calc_hw(struct snd_soc_pcm_runtime *rtd,
517 for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
540 for_each_rtd_codec_dais(rtd, i, codec_dai) {
570 if (rtd->num_codecs > 1) {
595 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
603 snd_soc_runtime_calc_hw(rtd, hw, substream->stream);
611 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
615 for_each_rtd_components(rtd, i, component) {
631 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
635 for_each_rtd_components(rtd, i, component) {
648 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
653 mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
656 snd_soc_runtime_deactivate(rtd, substream->stream);
658 for_each_rtd_dais(rtd, i, dai)
666 snd_soc_dapm_stream_stop(rtd, substream->stream);
668 mutex_unlock(&rtd->card->pcm_mutex);
670 snd_soc_pcm_component_pm_runtime_put(rtd, substream, rollback);
672 for_each_rtd_components(rtd, i, component)
696 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
704 for_each_rtd_components(rtd, i, component)
707 ret = snd_soc_pcm_component_pm_runtime_get(rtd, substream);
711 mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
722 for_each_rtd_dais(rtd, i, dai) {
729 if (rtd->dai_link->dynamic || rtd->dai_link->no_pcm)
735 if (rtd->num_codecs == 1)
736 codec_dai_name = asoc_rtd_to_codec(rtd, 0)->name;
738 if (rtd->num_cpus == 1)
739 cpu_dai_name = asoc_rtd_to_cpu(rtd, 0)->name;
765 for_each_rtd_dais(rtd, i, dai) {
781 snd_soc_runtime_activate(rtd, substream->stream);
784 mutex_unlock(&rtd->card->pcm_mutex);
792 static void codec2codec_close_delayed_work(struct snd_soc_pcm_runtime *rtd)
809 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
813 mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
825 dev_err(rtd->dev, "ASoC: DAI prepare error: %d\n", ret);
831 rtd->pop_wait) {
832 rtd->pop_wait = 0;
833 cancel_delayed_work(&rtd->delayed_work);
836 snd_soc_dapm_stream_event(rtd, substream->stream,
839 for_each_rtd_dais(rtd, i, dai)
843 mutex_unlock(&rtd->card->pcm_mutex);
866 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
872 mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
882 for_each_rtd_codec_dais(rtd, i, codec_dai) {
929 for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
955 mutex_unlock(&rtd->card->pcm_mutex);
961 i = rtd->num_cpus;
964 for_each_rtd_cpu_dais_rollback(rtd, i, cpu_dai) {
972 i = rtd->num_codecs;
975 for_each_rtd_codec_dais_rollback(rtd, i, codec_dai) {
985 mutex_unlock(&rtd->card->pcm_mutex);
994 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
998 mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
1001 for_each_rtd_dais(rtd, i, dai) {
1021 for_each_rtd_dais(rtd, i, dai) {
1028 mutex_unlock(&rtd->card->pcm_mutex);
1075 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
1093 for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
1099 for_each_rtd_codec_dais(rtd, i, codec_dai) {
1254 struct snd_soc_pcm_runtime *rtd;
1263 rtd = dpcm_get_be(card, widget, stream);
1264 if (rtd)
1367 /* is there a valid BE rtd for this widget */
1685 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
1689 for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
1759 struct snd_soc_pcm_runtime *rtd;
1767 rtd = asoc_substream_to_rtd(be_substream);
1768 if (rtd->dai_link->be_hw_params_fixup)
1775 for_each_rtd_dais(rtd, i, dai) {
2688 int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
2699 if (rtd->dai_link->dynamic && rtd->num_cpus > 1) {
2700 dev_err(rtd->dev,
2705 if (rtd->dai_link->dynamic || rtd->dai_link->no_pcm) {
2706 if (rtd->dai_link->dpcm_playback) {
2709 for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
2717 dev_err(rtd->card->dev,
2719 rtd->dai_link->stream_name);
2723 if (rtd->dai_link->dpcm_capture) {
2726 for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
2734 dev_err(rtd->card->dev,
2736 rtd->dai_link->stream_name);
2742 int cpu_capture = rtd->dai_link->params ?
2744 int cpu_playback = rtd->dai_link->params ?
2747 for_each_rtd_codec_dais(rtd, i, codec_dai) {
2748 if (rtd->num_cpus == 1) {
2749 cpu_dai = asoc_rtd_to_cpu(rtd, 0);
2750 } else if (rtd->num_cpus == rtd->num_codecs) {
2751 cpu_dai = asoc_rtd_to_cpu(rtd, i);
2753 dev_err(rtd->card->dev,
2767 if (rtd->dai_link->playback_only) {
2772 if (rtd->dai_link->capture_only) {
2778 if (rtd->dai_link->params) {
2780 rtd->dai_link->stream_name);
2782 ret = snd_pcm_new_internal(rtd->card->snd_card, new_name, num,
2784 } else if (rtd->dai_link->no_pcm) {
2786 rtd->dai_link->stream_name);
2788 ret = snd_pcm_new_internal(rtd->card->snd_card, new_name, num,
2791 if (rtd->dai_link->dynamic)
2793 rtd->dai_link->stream_name);
2796 rtd->dai_link->stream_name,
2797 (rtd->num_codecs > 1) ?
2798 "multicodec" : asoc_rtd_to_codec(rtd, 0)->name, num);
2800 ret = snd_pcm_new(rtd->card->snd_card, new_name, num, playback,
2804 dev_err(rtd->card->dev, "ASoC: can't create pcm %s for dailink %s: %d\n",
2805 new_name, rtd->dai_link->name, ret);
2808 dev_dbg(rtd->card->dev, "ASoC: registered pcm #%d %s\n",num, new_name);
2811 if (rtd->dai_link->params)
2812 rtd->close_delayed_work_func = codec2codec_close_delayed_work;
2814 rtd->close_delayed_work_func = snd_soc_close_delayed_work;
2816 pcm->nonatomic = rtd->dai_link->nonatomic;
2817 rtd->pcm = pcm;
2818 pcm->private_data = rtd;
2820 if (rtd->dai_link->no_pcm || rtd->dai_link->params) {
2822 pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream->private_data = rtd;
2824 pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream->private_data = rtd;
2829 if (rtd->dai_link->dynamic) {
2830 rtd->ops.open = dpcm_fe_dai_open;
2831 rtd->ops.hw_params = dpcm_fe_dai_hw_params;
2832 rtd->ops.prepare = dpcm_fe_dai_prepare;
2833 rtd->ops.trigger = dpcm_fe_dai_trigger;
2834 rtd->ops.hw_free = dpcm_fe_dai_hw_free;
2835 rtd->ops.close = dpcm_fe_dai_close;
2836 rtd->ops.pointer = soc_pcm_pointer;
2838 rtd->ops.open = soc_pcm_open;
2839 rtd->ops.hw_params = soc_pcm_hw_params;
2840 rtd->ops.prepare = soc_pcm_prepare;
2841 rtd->ops.trigger = soc_pcm_trigger;
2842 rtd->ops.hw_free = soc_pcm_hw_free;
2843 rtd->ops.close = soc_pcm_close;
2844 rtd->ops.pointer = soc_pcm_pointer;
2847 for_each_rtd_components(rtd, i, component) {
2851 rtd->ops.ioctl = snd_soc_pcm_component_ioctl;
2853 rtd->ops.sync_stop = snd_soc_pcm_component_sync_stop;
2855 rtd->ops.copy_user = snd_soc_pcm_component_copy_user;
2857 rtd->ops.page = snd_soc_pcm_component_page;
2859 rtd->ops.mmap = snd_soc_pcm_component_mmap;
2863 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &rtd->ops);
2866 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &rtd->ops);
2868 ret = snd_soc_pcm_component_new(rtd);
2870 dev_err(rtd->dev, "ASoC: pcm %s constructor failed for dailink %s: %d\n",
2871 new_name, rtd->dai_link->name, ret);
2877 dev_dbg(rtd->card->dev, "%s <-> %s mapping ok\n",
2878 (rtd->num_codecs > 1) ? "multicodec" : asoc_rtd_to_codec(rtd, 0)->name,
2879 (rtd->num_cpus > 1) ? "multicpu" : asoc_rtd_to_cpu(rtd, 0)->name);