Lines Matching full:io
133 struct dma_chan *rsnd_mod_dma_req(struct rsnd_dai_stream *io, in rsnd_mod_dma_req() argument
139 return mod->ops->dma_req(io, mod); in rsnd_mod_dma_req()
174 struct rsnd_dai_stream *io, in rsnd_mod_get_status() argument
230 struct rsnd_dai_stream *io)) in rsnd_mod_interrupt() argument
233 struct rsnd_dai_stream *io; in rsnd_mod_interrupt() local
238 io = &rdai->playback; in rsnd_mod_interrupt()
239 if (mod == io->mod[mod->type]) in rsnd_mod_interrupt()
240 callback(mod, io); in rsnd_mod_interrupt()
242 io = &rdai->capture; in rsnd_mod_interrupt()
243 if (mod == io->mod[mod->type]) in rsnd_mod_interrupt()
244 callback(mod, io); in rsnd_mod_interrupt()
248 int rsnd_io_is_working(struct rsnd_dai_stream *io) in rsnd_io_is_working() argument
251 if (io->substream) in rsnd_io_is_working()
252 return snd_pcm_running(io->substream); in rsnd_io_is_working()
257 int rsnd_runtime_channel_original_with_params(struct rsnd_dai_stream *io, in rsnd_runtime_channel_original_with_params() argument
260 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_runtime_channel_original_with_params()
274 int rsnd_runtime_channel_after_ctu_with_params(struct rsnd_dai_stream *io, in rsnd_runtime_channel_after_ctu_with_params() argument
277 int chan = rsnd_runtime_channel_original_with_params(io, params); in rsnd_runtime_channel_after_ctu_with_params()
278 struct rsnd_mod *ctu_mod = rsnd_io_to_mod_ctu(io); in rsnd_runtime_channel_after_ctu_with_params()
281 u32 converted_chan = rsnd_io_converted_chan(io); in rsnd_runtime_channel_after_ctu_with_params()
290 if (rsnd_runtime_is_tdm_split(io)) { in rsnd_runtime_channel_after_ctu_with_params()
291 struct device *dev = rsnd_priv_to_dev(rsnd_io_to_priv(io)); in rsnd_runtime_channel_after_ctu_with_params()
315 int rsnd_runtime_channel_for_ssi_with_params(struct rsnd_dai_stream *io, in rsnd_runtime_channel_for_ssi_with_params() argument
318 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_runtime_channel_for_ssi_with_params()
319 int chan = rsnd_io_is_play(io) ? in rsnd_runtime_channel_for_ssi_with_params()
320 rsnd_runtime_channel_after_ctu_with_params(io, params) : in rsnd_runtime_channel_for_ssi_with_params()
321 rsnd_runtime_channel_original_with_params(io, params); in rsnd_runtime_channel_for_ssi_with_params()
324 if (rsnd_runtime_is_multi_ssi(io)) in rsnd_runtime_channel_for_ssi_with_params()
330 int rsnd_runtime_is_multi_ssi(struct rsnd_dai_stream *io) in rsnd_runtime_is_multi_ssi() argument
332 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_runtime_is_multi_ssi()
334 int chan = rsnd_io_is_play(io) ? in rsnd_runtime_is_multi_ssi()
335 rsnd_runtime_channel_after_ctu(io) : in rsnd_runtime_is_multi_ssi()
336 rsnd_runtime_channel_original(io); in rsnd_runtime_is_multi_ssi()
341 int rsnd_runtime_is_tdm(struct rsnd_dai_stream *io) in rsnd_runtime_is_tdm() argument
343 return rsnd_runtime_channel_for_ssi(io) >= 6; in rsnd_runtime_is_tdm()
346 int rsnd_runtime_is_tdm_split(struct rsnd_dai_stream *io) in rsnd_runtime_is_tdm_split() argument
348 return !!rsnd_flags_has(io, RSND_STREAM_TDM_SPLIT); in rsnd_runtime_is_tdm_split()
354 u32 rsnd_get_adinr_bit(struct rsnd_mod *mod, struct rsnd_dai_stream *io) in rsnd_get_adinr_bit() argument
357 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_get_adinr_bit()
377 u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io) in rsnd_get_dalign() argument
384 struct rsnd_mod *ssiu = rsnd_io_to_mod_ssiu(io); in rsnd_get_dalign()
386 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_get_dalign()
410 if (rsnd_io_is_play(io)) { in rsnd_get_dalign()
411 struct rsnd_mod *src = rsnd_io_to_mod_src(io); in rsnd_get_dalign()
415 struct rsnd_mod *cmd = rsnd_io_to_mod_cmd(io); in rsnd_get_dalign()
434 u32 rsnd_get_busif_shift(struct rsnd_dai_stream *io, struct rsnd_mod *mod) in rsnd_get_busif_shift() argument
446 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_get_busif_shift()
449 rsnd_io_is_play(io) ? in rsnd_get_busif_shift()
465 tmod = rsnd_io_to_mod(io, mods[i]); in rsnd_get_busif_shift()
473 if (rsnd_io_is_play(io)) in rsnd_get_busif_shift()
485 struct rsnd_dai_stream *io, in rsnd_mod_next() argument
495 mod = rsnd_io_to_mod(io, type); in rsnd_mod_next()
553 #define rsnd_dai_call(fn, io, param...) \ argument
555 struct device *dev = rsnd_priv_to_dev(rsnd_io_to_priv(io)); \
557 int is_play = rsnd_io_is_play(io); \
560 for_each_rsnd_mod_arrays(i, mod, io, types, RSND_MOD_MAX) { \
562 u32 *status = mod->ops->get_status(mod, io, types[i]); \
571 tmp = (mod)->ops->fn(mod, io, param); \
581 struct rsnd_dai_stream *io, in rsnd_dai_connect() argument
590 if (io->mod[type] == mod) in rsnd_dai_connect()
593 if (io->mod[type]) in rsnd_dai_connect()
599 io->mod[type] = mod; in rsnd_dai_connect()
601 dev_dbg(dev, "%s is connected to io (%s)\n", in rsnd_dai_connect()
603 rsnd_io_is_play(io) ? "Playback" : "Capture"); in rsnd_dai_connect()
609 struct rsnd_dai_stream *io, in rsnd_dai_disconnect() argument
612 io->mod[type] = NULL; in rsnd_dai_disconnect()
669 void rsnd_dai_period_elapsed(struct rsnd_dai_stream *io) in rsnd_dai_period_elapsed() argument
671 struct snd_pcm_substream *substream = io->substream; in rsnd_dai_period_elapsed()
683 static void rsnd_dai_stream_init(struct rsnd_dai_stream *io, in rsnd_dai_stream_init() argument
686 io->substream = substream; in rsnd_dai_stream_init()
689 static void rsnd_dai_stream_quit(struct rsnd_dai_stream *io) in rsnd_dai_stream_quit() argument
691 io->substream = NULL; in rsnd_dai_stream_quit()
717 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_soc_dai_trigger() local
726 ret = rsnd_dai_call(init, io, priv); in rsnd_soc_dai_trigger()
730 ret = rsnd_dai_call(start, io, priv); in rsnd_soc_dai_trigger()
734 ret = rsnd_dai_call(irq, io, priv, 1); in rsnd_soc_dai_trigger()
741 ret = rsnd_dai_call(irq, io, priv, 0); in rsnd_soc_dai_trigger()
743 ret |= rsnd_dai_call(stop, io, priv); in rsnd_soc_dai_trigger()
745 ret |= rsnd_dai_call(quit, io, priv); in rsnd_soc_dai_trigger()
916 struct rsnd_dai_stream *io = rule->private; in rsnd_soc_hw_rule_rate() local
917 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_soc_hw_rule_rate()
926 ic.max = rsnd_runtime_channel_for_ssi_with_params(io, params); in rsnd_soc_hw_rule_rate()
939 struct rsnd_dai_stream *io = rule->private; in rsnd_soc_hw_rule_channels() local
940 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_soc_hw_rule_channels()
949 ic.max = rsnd_runtime_channel_for_ssi_with_params(io, params); in rsnd_soc_hw_rule_channels()
972 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_soc_dai_startup() local
978 rsnd_dai_stream_init(io, substream); in rsnd_soc_dai_startup()
1027 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_soc_dai_shutdown() local
1032 rsnd_dai_call(cleanup, io, priv); in rsnd_soc_dai_shutdown()
1034 rsnd_dai_stream_quit(io); in rsnd_soc_dai_shutdown()
1042 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_soc_dai_prepare() local
1044 return rsnd_dai_call(prepare, io, priv); in rsnd_soc_dai_prepare()
1057 struct rsnd_dai_stream *io, in rsnd_parse_tdm_split_mode() argument
1063 int is_play = rsnd_io_is_play(io); in rsnd_parse_tdm_split_mode()
1084 rsnd_flags_set(io, RSND_STREAM_TDM_SPLIT); in rsnd_parse_tdm_split_mode()
1085 dev_dbg(dev, "%s is part of TDM Split\n", io->name); in rsnd_parse_tdm_split_mode()
1097 struct rsnd_dai_stream *io, in rsnd_parse_connect_simple() argument
1100 if (!rsnd_io_to_mod_ssi(io)) in rsnd_parse_connect_simple()
1103 rsnd_parse_tdm_split_mode(priv, io, dai_np); in rsnd_parse_connect_simple()
1107 struct rsnd_dai_stream *io, in rsnd_parse_connect_graph() argument
1113 if (!rsnd_io_to_mod_ssi(io)) in rsnd_parse_connect_graph()
1120 rsnd_flags_set(io, RSND_STREAM_HDMI0); in rsnd_parse_connect_graph()
1121 dev_dbg(dev, "%s connected to HDMI0\n", io->name); in rsnd_parse_connect_graph()
1126 rsnd_flags_set(io, RSND_STREAM_HDMI1); in rsnd_parse_connect_graph()
1127 dev_dbg(dev, "%s connected to HDMI1\n", io->name); in rsnd_parse_connect_graph()
1130 rsnd_parse_tdm_split_mode(priv, io, endpoint); in rsnd_parse_connect_graph()
1203 struct rsnd_dai_stream *io, in rsnd_preallocate_pages() argument
1206 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_preallocate_pages()
1215 if (io->dmac_dev) in rsnd_preallocate_pages()
1216 dev = io->dmac_dev; in rsnd_preallocate_pages()
1401 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_hw_params() local
1413 io->converted_rate = 0; in rsnd_hw_params()
1414 io->converted_chan = 0; in rsnd_hw_params()
1416 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_hw_params()
1425 io->converted_chan = params_channels(be_params); in rsnd_hw_params()
1427 io->converted_rate = params_rate(be_params); in rsnd_hw_params()
1429 if (io->converted_chan) in rsnd_hw_params()
1430 dev_dbg(dev, "convert channels = %d\n", io->converted_chan); in rsnd_hw_params()
1431 if (io->converted_rate) in rsnd_hw_params()
1432 dev_dbg(dev, "convert rate = %d\n", io->converted_rate); in rsnd_hw_params()
1435 return rsnd_dai_call(hw_params, io, substream, hw_params); in rsnd_hw_params()
1443 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_hw_free() local
1445 return rsnd_dai_call(hw_free, io, substream); in rsnd_hw_free()
1453 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_pointer() local
1456 rsnd_dai_call(pointer, io, &pointer); in rsnd_pointer()
1511 if (!cfg->accept(cfg->io)) in rsnd_kctrl_put()
1525 cfg->update(cfg->io, cfg->mod); in rsnd_kctrl_put()
1530 int rsnd_kctrl_accept_anytime(struct rsnd_dai_stream *io) in rsnd_kctrl_accept_anytime() argument
1535 int rsnd_kctrl_accept_runtime(struct rsnd_dai_stream *io) in rsnd_kctrl_accept_runtime() argument
1537 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_kctrl_accept_runtime()
1538 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_kctrl_accept_runtime()
1591 struct rsnd_dai_stream *io, in rsnd_kctrl_new() argument
1594 int (*accept)(struct rsnd_dai_stream *io), in rsnd_kctrl_new() argument
1595 void (*update)(struct rsnd_dai_stream *io, in rsnd_kctrl_new() argument
1644 cfg->io = io; in rsnd_kctrl_new()
1661 struct rsnd_dai_stream *io) in rsnd_rdai_continuance_probe() argument
1665 ret = rsnd_dai_call(probe, io, priv); in rsnd_rdai_continuance_probe()
1667 struct rsnd_mod *ssi_mod = rsnd_io_to_mod_ssi(io); in rsnd_rdai_continuance_probe()
1682 rsnd_dai_call(remove, io, priv); in rsnd_rdai_continuance_probe()
1685 * remove all mod from io in rsnd_rdai_continuance_probe()
1688 for_each_rsnd_mod(i, mod, io) in rsnd_rdai_continuance_probe()
1689 rsnd_dai_disconnect(mod, io, i); in rsnd_rdai_continuance_probe()
1690 rsnd_dai_connect(ssi_mod, io, RSND_MOD_SSI); in rsnd_rdai_continuance_probe()
1695 rsnd_dai_call(fallback, io, priv); in rsnd_rdai_continuance_probe()
1701 ret = rsnd_dai_call(probe, io, priv); in rsnd_rdai_continuance_probe()