Lines Matching full:io
127 struct dma_chan *rsnd_mod_dma_req(struct rsnd_dai_stream *io, in rsnd_mod_dma_req() argument
133 return mod->ops->dma_req(io, mod); in rsnd_mod_dma_req()
168 struct rsnd_dai_stream *io, in rsnd_mod_get_status() argument
224 struct rsnd_dai_stream *io)) in rsnd_mod_interrupt() argument
231 struct rsnd_dai_stream *io = &rdai->playback; in rsnd_mod_interrupt() local
233 if (mod == io->mod[mod->type]) in rsnd_mod_interrupt()
234 callback(mod, io); in rsnd_mod_interrupt()
236 io = &rdai->capture; in rsnd_mod_interrupt()
237 if (mod == io->mod[mod->type]) in rsnd_mod_interrupt()
238 callback(mod, io); in rsnd_mod_interrupt()
242 int rsnd_io_is_working(struct rsnd_dai_stream *io) in rsnd_io_is_working() argument
245 if (io->substream) in rsnd_io_is_working()
246 return snd_pcm_running(io->substream); in rsnd_io_is_working()
251 int rsnd_runtime_channel_original_with_params(struct rsnd_dai_stream *io, in rsnd_runtime_channel_original_with_params() argument
254 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_runtime_channel_original_with_params()
269 int rsnd_runtime_channel_after_ctu_with_params(struct rsnd_dai_stream *io, in rsnd_runtime_channel_after_ctu_with_params() argument
272 int chan = rsnd_runtime_channel_original_with_params(io, params); in rsnd_runtime_channel_after_ctu_with_params()
273 struct rsnd_mod *ctu_mod = rsnd_io_to_mod_ctu(io); in rsnd_runtime_channel_after_ctu_with_params()
276 u32 converted_chan = rsnd_io_converted_chan(io); in rsnd_runtime_channel_after_ctu_with_params()
285 if (rsnd_runtime_is_tdm_split(io)) { in rsnd_runtime_channel_after_ctu_with_params()
286 struct device *dev = rsnd_priv_to_dev(rsnd_io_to_priv(io)); in rsnd_runtime_channel_after_ctu_with_params()
310 int rsnd_runtime_channel_for_ssi_with_params(struct rsnd_dai_stream *io, in rsnd_runtime_channel_for_ssi_with_params() argument
313 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_runtime_channel_for_ssi_with_params()
314 int chan = rsnd_io_is_play(io) ? in rsnd_runtime_channel_for_ssi_with_params()
315 rsnd_runtime_channel_after_ctu_with_params(io, params) : in rsnd_runtime_channel_for_ssi_with_params()
316 rsnd_runtime_channel_original_with_params(io, params); in rsnd_runtime_channel_for_ssi_with_params()
319 if (rsnd_runtime_is_multi_ssi(io)) in rsnd_runtime_channel_for_ssi_with_params()
325 int rsnd_runtime_is_multi_ssi(struct rsnd_dai_stream *io) in rsnd_runtime_is_multi_ssi() argument
327 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_runtime_is_multi_ssi()
329 int chan = rsnd_io_is_play(io) ? in rsnd_runtime_is_multi_ssi()
330 rsnd_runtime_channel_after_ctu(io) : in rsnd_runtime_is_multi_ssi()
331 rsnd_runtime_channel_original(io); in rsnd_runtime_is_multi_ssi()
336 int rsnd_runtime_is_tdm(struct rsnd_dai_stream *io) in rsnd_runtime_is_tdm() argument
338 return rsnd_runtime_channel_for_ssi(io) >= 6; in rsnd_runtime_is_tdm()
341 int rsnd_runtime_is_tdm_split(struct rsnd_dai_stream *io) in rsnd_runtime_is_tdm_split() argument
343 return !!rsnd_flags_has(io, RSND_STREAM_TDM_SPLIT); in rsnd_runtime_is_tdm_split()
349 u32 rsnd_get_adinr_bit(struct rsnd_mod *mod, struct rsnd_dai_stream *io) in rsnd_get_adinr_bit() argument
352 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_get_adinr_bit()
372 u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io) in rsnd_get_dalign() argument
379 struct rsnd_mod *ssiu = rsnd_io_to_mod_ssiu(io); in rsnd_get_dalign()
381 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_get_dalign()
405 if (rsnd_io_is_play(io)) { in rsnd_get_dalign()
406 struct rsnd_mod *src = rsnd_io_to_mod_src(io); in rsnd_get_dalign()
410 struct rsnd_mod *cmd = rsnd_io_to_mod_cmd(io); in rsnd_get_dalign()
429 u32 rsnd_get_busif_shift(struct rsnd_dai_stream *io, struct rsnd_mod *mod) in rsnd_get_busif_shift() argument
441 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_get_busif_shift()
444 rsnd_io_is_play(io) ? in rsnd_get_busif_shift()
460 tmod = rsnd_io_to_mod(io, mods[i]); in rsnd_get_busif_shift()
468 if (rsnd_io_is_play(io)) in rsnd_get_busif_shift()
480 struct rsnd_dai_stream *io, in rsnd_mod_next() argument
488 struct rsnd_mod *mod = rsnd_io_to_mod(io, type); in rsnd_mod_next()
531 static int rsnd_status_update(struct rsnd_dai_stream *io, in rsnd_status_update() argument
535 u32 *status = mod->ops->get_status(mod, io, type); in rsnd_status_update()
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 int func_call = rsnd_status_update(io, mod, types[i], \
567 tmp = (mod)->ops->fn(mod, io, param); \
578 struct rsnd_dai_stream *io, in rsnd_dai_connect() argument
587 if (io->mod[type] == mod) in rsnd_dai_connect()
590 if (io->mod[type]) in rsnd_dai_connect()
596 io->mod[type] = mod; in rsnd_dai_connect()
598 dev_dbg(dev, "%s is connected to io (%s)\n", in rsnd_dai_connect()
600 snd_pcm_direction_name(io->substream->stream)); in rsnd_dai_connect()
606 struct rsnd_dai_stream *io, in rsnd_dai_disconnect() argument
609 io->mod[type] = NULL; in rsnd_dai_disconnect()
663 static void rsnd_dai_stream_init(struct rsnd_dai_stream *io, in rsnd_dai_stream_init() argument
666 io->substream = substream; in rsnd_dai_stream_init()
669 static void rsnd_dai_stream_quit(struct rsnd_dai_stream *io) in rsnd_dai_stream_quit() argument
671 io->substream = NULL; in rsnd_dai_stream_quit()
697 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_soc_dai_trigger() local
706 ret = rsnd_dai_call(init, io, priv); in rsnd_soc_dai_trigger()
710 ret = rsnd_dai_call(start, io, priv); in rsnd_soc_dai_trigger()
714 ret = rsnd_dai_call(irq, io, priv, 1); in rsnd_soc_dai_trigger()
721 ret = rsnd_dai_call(irq, io, priv, 0); in rsnd_soc_dai_trigger()
723 ret |= rsnd_dai_call(stop, io, priv); in rsnd_soc_dai_trigger()
725 ret |= rsnd_dai_call(quit, io, priv); in rsnd_soc_dai_trigger()
865 struct rsnd_dai_stream *io, char *unit) in rsnd_soc_hw_rule() argument
896 if (!rsnd_flags_has(io, RSND_HW_RULE_ERR) && (p.min > p.max)) { in rsnd_soc_hw_rule()
902 rsnd_flags_set(io, RSND_HW_RULE_ERR); in rsnd_soc_hw_rule()
914 struct rsnd_dai_stream *io = rule->private; in rsnd_soc_hw_rule_rate() local
915 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_soc_hw_rule_rate()
924 ic.max = rsnd_runtime_channel_for_ssi_with_params(io, params); in rsnd_soc_hw_rule_rate()
928 &ic, ir, io, "ch"); in rsnd_soc_hw_rule_rate()
937 struct rsnd_dai_stream *io = rule->private; in rsnd_soc_hw_rule_channels() local
938 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_soc_hw_rule_channels()
947 ic.max = rsnd_runtime_channel_for_ssi_with_params(io, params); in rsnd_soc_hw_rule_channels()
951 ir, &ic, io, "Hz"); in rsnd_soc_hw_rule_channels()
970 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_soc_dai_startup() local
976 rsnd_flags_del(io, RSND_HW_RULE_ERR); in rsnd_soc_dai_startup()
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()
1073 struct rsnd_dai_stream *io, in rsnd_parse_tdm_split_mode() argument
1079 int is_play = rsnd_io_is_play(io); in rsnd_parse_tdm_split_mode()
1099 rsnd_flags_set(io, RSND_STREAM_TDM_SPLIT); in rsnd_parse_tdm_split_mode()
1100 dev_dbg(dev, "%s is part of TDM Split\n", io->name); in rsnd_parse_tdm_split_mode()
1111 struct rsnd_dai_stream *io, in rsnd_parse_connect_simple() argument
1114 if (!rsnd_io_to_mod_ssi(io)) in rsnd_parse_connect_simple()
1117 rsnd_parse_tdm_split_mode(priv, io, dai_np); in rsnd_parse_connect_simple()
1121 struct rsnd_dai_stream *io, in rsnd_parse_connect_graph() argument
1127 if (!rsnd_io_to_mod_ssi(io)) in rsnd_parse_connect_graph()
1134 rsnd_flags_set(io, RSND_STREAM_HDMI0); in rsnd_parse_connect_graph()
1135 dev_dbg(dev, "%s connected to HDMI0\n", io->name); in rsnd_parse_connect_graph()
1140 rsnd_flags_set(io, RSND_STREAM_HDMI1); in rsnd_parse_connect_graph()
1141 dev_dbg(dev, "%s connected to HDMI1\n", io->name); in rsnd_parse_connect_graph()
1144 rsnd_parse_tdm_split_mode(priv, io, endpoint); in rsnd_parse_connect_graph()
1317 struct rsnd_dai_stream *io, in rsnd_preallocate_pages() argument
1320 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_preallocate_pages()
1329 if (io->dmac_dev) in rsnd_preallocate_pages()
1330 dev = io->dmac_dev; in rsnd_preallocate_pages()
1559 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_hw_update() local
1560 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_hw_update()
1566 ret = rsnd_dai_call(hw_params, io, substream, hw_params); in rsnd_hw_update()
1568 ret = rsnd_dai_call(hw_free, io, substream); in rsnd_hw_update()
1580 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_hw_params() local
1592 io->converted_rate = 0; in rsnd_hw_params()
1593 io->converted_chan = 0; in rsnd_hw_params()
1595 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_hw_params()
1605 io->converted_chan = params_channels(be_params); in rsnd_hw_params()
1607 io->converted_rate = params_rate(be_params); in rsnd_hw_params()
1609 if (io->converted_chan) in rsnd_hw_params()
1610 dev_dbg(dev, "convert channels = %d\n", io->converted_chan); in rsnd_hw_params()
1611 if (io->converted_rate) { in rsnd_hw_params()
1623 struct rsnd_mod *src_mod = rsnd_io_to_mod_src(io); in rsnd_hw_params()
1625 dev_dbg(dev, "convert rate = %d\n", io->converted_rate); in rsnd_hw_params()
1627 channel = io->converted_chan ? io->converted_chan : in rsnd_hw_params()
1657 if (params_rate(hw_params) > io->converted_rate * k_down) { in rsnd_hw_params()
1659 io->converted_rate * k_down; in rsnd_hw_params()
1661 io->converted_rate * k_down; in rsnd_hw_params()
1663 } else if (params_rate(hw_params) * k_up < io->converted_rate) { in rsnd_hw_params()
1665 DIV_ROUND_UP(io->converted_rate, k_up); in rsnd_hw_params()
1667 DIV_ROUND_UP(io->converted_rate, k_up); in rsnd_hw_params()
1696 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_pointer() local
1699 rsnd_dai_call(pointer, io, &pointer); in rsnd_pointer()
1754 if (!cfg->accept(cfg->io)) in rsnd_kctrl_put()
1768 cfg->update(cfg->io, cfg->mod); in rsnd_kctrl_put()
1773 int rsnd_kctrl_accept_anytime(struct rsnd_dai_stream *io) in rsnd_kctrl_accept_anytime() argument
1820 struct rsnd_dai_stream *io, in rsnd_kctrl_new() argument
1823 int (*accept)(struct rsnd_dai_stream *io), in rsnd_kctrl_new() argument
1824 void (*update)(struct rsnd_dai_stream *io, in rsnd_kctrl_new() argument
1873 cfg->io = io; in rsnd_kctrl_new()
1892 struct rsnd_dai_stream *io) in rsnd_rdai_continuance_probe() argument
1896 ret = rsnd_dai_call(probe, io, priv); in rsnd_rdai_continuance_probe()
1898 struct rsnd_mod *ssi_mod = rsnd_io_to_mod_ssi(io); in rsnd_rdai_continuance_probe()
1913 rsnd_dai_call(remove, io, priv); in rsnd_rdai_continuance_probe()
1916 * remove all mod from io in rsnd_rdai_continuance_probe()
1919 for_each_rsnd_mod(i, mod, io) in rsnd_rdai_continuance_probe()
1920 rsnd_dai_disconnect(mod, io, i); in rsnd_rdai_continuance_probe()
1921 rsnd_dai_connect(ssi_mod, io, RSND_MOD_SSI); in rsnd_rdai_continuance_probe()
1926 rsnd_dai_call(fallback, io, priv); in rsnd_rdai_continuance_probe()
1932 ret = rsnd_dai_call(probe, io, priv); in rsnd_rdai_continuance_probe()