Lines Matching full:io

113 #define rsnd_ssi_is_parent(ssi, io) ((ssi) == rsnd_io_to_mod_ssip(io))  argument
114 #define rsnd_ssi_is_multi_secondary(mod, io) \ argument
115 (rsnd_ssi_multi_secondaries(io) & (1 << rsnd_mod_id(mod)))
116 #define rsnd_ssi_is_run_mods(mod, io) \ argument
117 (rsnd_ssi_run_mods(io) & (1 << rsnd_mod_id(mod)))
122 int rsnd_ssi_use_busif(struct rsnd_dai_stream *io) in rsnd_ssi_use_busif() argument
124 struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io); in rsnd_ssi_use_busif()
133 if (rsnd_io_to_mod_src(io)) in rsnd_ssi_use_busif()
168 static u32 rsnd_ssi_multi_secondaries(struct rsnd_dai_stream *io) in rsnd_ssi_multi_secondaries() argument
180 mod = rsnd_io_to_mod(io, types[i]); in rsnd_ssi_multi_secondaries()
190 static u32 rsnd_ssi_run_mods(struct rsnd_dai_stream *io) in rsnd_ssi_run_mods() argument
192 struct rsnd_mod *ssi_mod = rsnd_io_to_mod_ssi(io); in rsnd_ssi_run_mods()
193 struct rsnd_mod *ssi_parent_mod = rsnd_io_to_mod_ssip(io); in rsnd_ssi_run_mods()
196 mods = rsnd_ssi_multi_secondaries_runtime(io) | in rsnd_ssi_run_mods()
205 u32 rsnd_ssi_multi_secondaries_runtime(struct rsnd_dai_stream *io) in rsnd_ssi_multi_secondaries_runtime() argument
207 if (rsnd_runtime_is_multi_ssi(io)) in rsnd_ssi_multi_secondaries_runtime()
208 return rsnd_ssi_multi_secondaries(io); in rsnd_ssi_multi_secondaries_runtime()
267 struct rsnd_dai_stream *io) in rsnd_ssi_master_clk_start() argument
269 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_ssi_master_clk_start()
271 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_ssi_master_clk_start()
273 int chan = rsnd_runtime_channel_for_ssi(io); in rsnd_ssi_master_clk_start()
276 unsigned int rate = rsnd_io_is_play(io) ? in rsnd_ssi_master_clk_start()
277 rsnd_src_get_out_rate(priv, io) : in rsnd_ssi_master_clk_start()
278 rsnd_src_get_in_rate(priv, io); in rsnd_ssi_master_clk_start()
286 if (rsnd_ssi_is_multi_secondary(mod, io)) in rsnd_ssi_master_clk_start()
289 if (rsnd_runtime_is_tdm_split(io)) in rsnd_ssi_master_clk_start()
290 chan = rsnd_io_converted_chan(io); in rsnd_ssi_master_clk_start()
341 struct rsnd_dai_stream *io) in rsnd_ssi_master_clk_stop() argument
343 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_ssi_master_clk_stop()
363 struct rsnd_dai_stream *io) in rsnd_ssi_config_init() argument
365 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_ssi_config_init()
368 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_ssi_config_init()
379 is_tdm = rsnd_runtime_is_tdm(io); in rsnd_ssi_config_init()
380 is_tdm_split = rsnd_runtime_is_tdm_split(io); in rsnd_ssi_config_init()
413 if (rsnd_ssi_is_parent(mod, io)) in rsnd_ssi_config_init()
416 if (rsnd_io_is_play(io)) in rsnd_ssi_config_init()
506 struct rsnd_dai_stream *io, in rsnd_ssi_init() argument
511 if (!rsnd_ssi_is_run_mods(mod, io)) in rsnd_ssi_init()
518 rsnd_ssi_config_init(mod, io); in rsnd_ssi_init()
529 struct rsnd_dai_stream *io, in rsnd_ssi_quit() argument
539 is_tdm = rsnd_runtime_is_tdm(io); in rsnd_ssi_quit()
540 is_tdm_split = rsnd_runtime_is_tdm_split(io); in rsnd_ssi_quit()
542 if (!rsnd_ssi_is_run_mods(mod, io)) in rsnd_ssi_quit()
550 rsnd_ssi_master_clk_stop(mod, io); in rsnd_ssi_quit()
598 struct rsnd_dai_stream *io, in rsnd_ssi_hw_params() argument
602 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_ssi_hw_params()
606 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_ssi_hw_params()
617 struct rsnd_dai_stream *io, in rsnd_ssi_start() argument
622 if (!rsnd_ssi_is_run_mods(mod, io)) in rsnd_ssi_start()
629 if (rsnd_ssi_multi_secondaries_runtime(io)) in rsnd_ssi_start()
636 if (rsnd_ssi_is_parent(mod, io)) in rsnd_ssi_start()
650 struct rsnd_dai_stream *io, in rsnd_ssi_stop() argument
656 if (!rsnd_ssi_is_run_mods(mod, io)) in rsnd_ssi_stop()
659 if (rsnd_ssi_is_parent(mod, io)) in rsnd_ssi_stop()
670 if (rsnd_io_is_play(io)) { in rsnd_ssi_stop()
678 if (rsnd_ssi_multi_secondaries_runtime(io)) in rsnd_ssi_stop()
694 struct rsnd_dai_stream *io, in rsnd_ssi_irq() argument
702 is_tdm = rsnd_runtime_is_tdm(io); in rsnd_ssi_irq()
703 is_tdm_split = rsnd_runtime_is_tdm_split(io); in rsnd_ssi_irq()
708 if (rsnd_ssi_is_parent(mod, io)) in rsnd_ssi_irq()
711 if (!rsnd_ssi_is_run_mods(mod, io)) in rsnd_ssi_irq()
736 struct rsnd_dai_stream *io);
738 struct rsnd_dai_stream *io) in __rsnd_ssi_interrupt() argument
750 is_tdm = rsnd_runtime_is_tdm(io); in __rsnd_ssi_interrupt()
751 is_tdm_split = rsnd_runtime_is_tdm_split(io); in __rsnd_ssi_interrupt()
756 if (!rsnd_io_is_working(io)) in __rsnd_ssi_interrupt()
763 elapsed = rsnd_ssi_pio_interrupt(mod, io); in __rsnd_ssi_interrupt()
825 rsnd_dai_period_elapsed(io); in __rsnd_ssi_interrupt()
828 snd_pcm_stop_xrun(io->substream); in __rsnd_ssi_interrupt()
842 struct rsnd_dai_stream *io, in rsnd_ssi_get_status() argument
850 * how many SSI requests parent SSI. Thus, it is localed on "io" now. in rsnd_ssi_get_status()
862 * IO-0: SRC0 -> CTU1 -+-> MUX -> DVC -> SSIU -> SSI0 in rsnd_ssi_get_status()
864 * IO-1: SRC1 -> CTU2 -+ in rsnd_ssi_get_status()
866 * 1) start IO-0 -> start SSI0 in rsnd_ssi_get_status()
867 * 2) start IO-1 -> SSI0 doesn't need to start, because it is in rsnd_ssi_get_status()
871 return &io->parent_ssi_status; in rsnd_ssi_get_status()
873 return rsnd_mod_get_status(mod, io, type); in rsnd_ssi_get_status()
880 struct rsnd_dai_stream *io) in rsnd_ssi_parent_attach() argument
882 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_ssi_parent_attach()
891 if (rsnd_ssi_is_multi_secondary(mod, io)) in rsnd_ssi_parent_attach()
898 rsnd_dai_connect(rsnd_ssi_mod_get(priv, 0), io, RSND_MOD_SSIP); in rsnd_ssi_parent_attach()
901 rsnd_dai_connect(rsnd_ssi_mod_get(priv, 3), io, RSND_MOD_SSIP); in rsnd_ssi_parent_attach()
904 rsnd_dai_connect(rsnd_ssi_mod_get(priv, 7), io, RSND_MOD_SSIP); in rsnd_ssi_parent_attach()
910 struct rsnd_dai_stream *io, in rsnd_ssi_pcm_new() argument
918 rsnd_ssi_parent_attach(mod, io); in rsnd_ssi_pcm_new()
924 struct rsnd_dai_stream *io, in rsnd_ssi_common_probe() argument
935 if (rsnd_ssi_is_multi_secondary(mod, io)) in rsnd_ssi_common_probe()
967 struct rsnd_dai_stream *io, in rsnd_ssi_common_remove() argument
971 struct rsnd_mod *pure_ssi_mod = rsnd_io_to_mod_ssi(io); in rsnd_ssi_common_remove()
991 struct rsnd_dai_stream *io) in rsnd_ssi_pio_interrupt() argument
993 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_ssi_pio_interrupt()
1008 if (rsnd_io_is_play(io)) in rsnd_ssi_pio_interrupt()
1034 struct rsnd_dai_stream *io, in rsnd_ssi_pio_init() argument
1037 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_ssi_pio_init()
1040 if (!rsnd_ssi_is_parent(mod, io)) { in rsnd_ssi_pio_init()
1048 return rsnd_ssi_init(mod, io, priv); in rsnd_ssi_pio_init()
1052 struct rsnd_dai_stream *io, in rsnd_ssi_pio_pointer() argument
1056 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_ssi_pio_pointer()
1064 struct rsnd_dai_stream *io, in rsnd_ssi_prepare() argument
1067 return rsnd_ssi_master_clk_start(mod, io); in rsnd_ssi_prepare()
1087 struct rsnd_dai_stream *io, in rsnd_ssi_dma_probe() argument
1096 if (rsnd_ssi_is_multi_secondary(mod, io)) in rsnd_ssi_dma_probe()
1099 ret = rsnd_ssi_common_probe(mod, io, priv); in rsnd_ssi_dma_probe()
1104 ret = rsnd_dma_attach(io, mod, &io->dma); in rsnd_ssi_dma_probe()
1110 struct rsnd_dai_stream *io, in rsnd_ssi_fallback() argument
1129 static struct dma_chan *rsnd_ssi_dma_req(struct rsnd_dai_stream *io, in rsnd_ssi_dma_req() argument
1133 int is_play = rsnd_io_is_play(io); in rsnd_ssi_dma_req()
1147 if (rsnd_ssi_use_busif(io)) in rsnd_ssi_dma_req()
1182 struct rsnd_dai_stream *io) in rsnd_ssi_connect() argument
1184 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_ssi_connect()
1197 if (!rsnd_io_to_mod(io, type)) { in rsnd_ssi_connect()
1198 rsnd_dai_connect(mod, io, type); in rsnd_ssi_connect()