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 rsnd_io_is_play(io) ? "Playback" : "Capture"); in rsnd_dai_connect()
606 struct rsnd_dai_stream *io, in rsnd_dai_disconnect() argument
609 io->mod[type] = NULL; in rsnd_dai_disconnect()
666 void rsnd_dai_period_elapsed(struct rsnd_dai_stream *io) in rsnd_dai_period_elapsed() argument
668 struct snd_pcm_substream *substream = io->substream; in rsnd_dai_period_elapsed()
680 static void rsnd_dai_stream_init(struct rsnd_dai_stream *io, in rsnd_dai_stream_init() argument
683 io->substream = substream; in rsnd_dai_stream_init()
686 static void rsnd_dai_stream_quit(struct rsnd_dai_stream *io) in rsnd_dai_stream_quit() argument
688 io->substream = NULL; in rsnd_dai_stream_quit()
714 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_soc_dai_trigger() local
723 ret = rsnd_dai_call(init, io, priv); in rsnd_soc_dai_trigger()
727 ret = rsnd_dai_call(start, io, priv); in rsnd_soc_dai_trigger()
731 ret = rsnd_dai_call(irq, io, priv, 1); in rsnd_soc_dai_trigger()
738 ret = rsnd_dai_call(irq, io, priv, 0); in rsnd_soc_dai_trigger()
740 ret |= rsnd_dai_call(stop, io, priv); in rsnd_soc_dai_trigger()
742 ret |= rsnd_dai_call(quit, io, priv); in rsnd_soc_dai_trigger()
882 struct rsnd_dai_stream *io, char *unit) in rsnd_soc_hw_rule() argument
913 if (!rsnd_flags_has(io, RSND_HW_RULE_ERR) && (p.min > p.max)) { in rsnd_soc_hw_rule()
919 rsnd_flags_set(io, RSND_HW_RULE_ERR); in rsnd_soc_hw_rule()
931 struct rsnd_dai_stream *io = rule->private; in rsnd_soc_hw_rule_rate() local
932 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_soc_hw_rule_rate()
941 ic.max = rsnd_runtime_channel_for_ssi_with_params(io, params); in rsnd_soc_hw_rule_rate()
945 &ic, ir, io, "ch"); in rsnd_soc_hw_rule_rate()
954 struct rsnd_dai_stream *io = rule->private; in rsnd_soc_hw_rule_channels() local
955 struct rsnd_dai *rdai = rsnd_io_to_rdai(io); in rsnd_soc_hw_rule_channels()
964 ic.max = rsnd_runtime_channel_for_ssi_with_params(io, params); in rsnd_soc_hw_rule_channels()
968 ir, &ic, io, "Hz"); in rsnd_soc_hw_rule_channels()
987 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_soc_dai_startup() local
993 rsnd_flags_del(io, RSND_HW_RULE_ERR); in rsnd_soc_dai_startup()
995 rsnd_dai_stream_init(io, substream); in rsnd_soc_dai_startup()
1044 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_soc_dai_shutdown() local
1049 rsnd_dai_call(cleanup, io, priv); in rsnd_soc_dai_shutdown()
1051 rsnd_dai_stream_quit(io); in rsnd_soc_dai_shutdown()
1059 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_soc_dai_prepare() local
1061 return rsnd_dai_call(prepare, io, priv); in rsnd_soc_dai_prepare()
1090 struct rsnd_dai_stream *io, in rsnd_parse_tdm_split_mode() argument
1096 int is_play = rsnd_io_is_play(io); in rsnd_parse_tdm_split_mode()
1116 rsnd_flags_set(io, RSND_STREAM_TDM_SPLIT); in rsnd_parse_tdm_split_mode()
1117 dev_dbg(dev, "%s is part of TDM Split\n", io->name); in rsnd_parse_tdm_split_mode()
1128 struct rsnd_dai_stream *io, in rsnd_parse_connect_simple() argument
1131 if (!rsnd_io_to_mod_ssi(io)) in rsnd_parse_connect_simple()
1134 rsnd_parse_tdm_split_mode(priv, io, dai_np); in rsnd_parse_connect_simple()
1138 struct rsnd_dai_stream *io, in rsnd_parse_connect_graph() argument
1144 if (!rsnd_io_to_mod_ssi(io)) in rsnd_parse_connect_graph()
1151 rsnd_flags_set(io, RSND_STREAM_HDMI0); in rsnd_parse_connect_graph()
1152 dev_dbg(dev, "%s connected to HDMI0\n", io->name); in rsnd_parse_connect_graph()
1157 rsnd_flags_set(io, RSND_STREAM_HDMI1); in rsnd_parse_connect_graph()
1158 dev_dbg(dev, "%s connected to HDMI1\n", io->name); in rsnd_parse_connect_graph()
1161 rsnd_parse_tdm_split_mode(priv, io, endpoint); in rsnd_parse_connect_graph()
1321 struct rsnd_dai_stream *io, in rsnd_preallocate_pages() argument
1324 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_preallocate_pages()
1333 if (io->dmac_dev) in rsnd_preallocate_pages()
1334 dev = io->dmac_dev; in rsnd_preallocate_pages()
1556 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_hw_update() local
1557 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_hw_update()
1563 ret = rsnd_dai_call(hw_params, io, substream, hw_params); in rsnd_hw_update()
1565 ret = rsnd_dai_call(hw_free, io, substream); in rsnd_hw_update()
1577 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_hw_params() local
1589 io->converted_rate = 0; in rsnd_hw_params()
1590 io->converted_chan = 0; in rsnd_hw_params()
1592 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_hw_params()
1602 io->converted_chan = params_channels(be_params); in rsnd_hw_params()
1604 io->converted_rate = params_rate(be_params); in rsnd_hw_params()
1606 if (io->converted_chan) in rsnd_hw_params()
1607 dev_dbg(dev, "convert channels = %d\n", io->converted_chan); in rsnd_hw_params()
1608 if (io->converted_rate) { in rsnd_hw_params()
1620 struct rsnd_mod *src_mod = rsnd_io_to_mod_src(io); in rsnd_hw_params()
1622 dev_dbg(dev, "convert rate = %d\n", io->converted_rate); in rsnd_hw_params()
1624 channel = io->converted_chan ? io->converted_chan : in rsnd_hw_params()
1654 if (params_rate(hw_params) > io->converted_rate * k_down) { in rsnd_hw_params()
1656 io->converted_rate * k_down; in rsnd_hw_params()
1658 io->converted_rate * k_down; in rsnd_hw_params()
1660 } else if (params_rate(hw_params) * k_up < io->converted_rate) { in rsnd_hw_params()
1662 DIV_ROUND_UP(io->converted_rate, k_up); in rsnd_hw_params()
1664 DIV_ROUND_UP(io->converted_rate, k_up); in rsnd_hw_params()
1693 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_pointer() local
1696 rsnd_dai_call(pointer, io, &pointer); in rsnd_pointer()
1751 if (!cfg->accept(cfg->io)) in rsnd_kctrl_put()
1765 cfg->update(cfg->io, cfg->mod); in rsnd_kctrl_put()
1770 int rsnd_kctrl_accept_anytime(struct rsnd_dai_stream *io) in rsnd_kctrl_accept_anytime() argument
1775 int rsnd_kctrl_accept_runtime(struct rsnd_dai_stream *io) in rsnd_kctrl_accept_runtime() argument
1777 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_kctrl_accept_runtime()
1778 struct rsnd_priv *priv = rsnd_io_to_priv(io); in rsnd_kctrl_accept_runtime()
1831 struct rsnd_dai_stream *io, in rsnd_kctrl_new() argument
1834 int (*accept)(struct rsnd_dai_stream *io), in rsnd_kctrl_new() argument
1835 void (*update)(struct rsnd_dai_stream *io, in rsnd_kctrl_new() argument
1884 cfg->io = io; in rsnd_kctrl_new()
1903 struct rsnd_dai_stream *io) in rsnd_rdai_continuance_probe() argument
1907 ret = rsnd_dai_call(probe, io, priv); in rsnd_rdai_continuance_probe()
1909 struct rsnd_mod *ssi_mod = rsnd_io_to_mod_ssi(io); in rsnd_rdai_continuance_probe()
1924 rsnd_dai_call(remove, io, priv); in rsnd_rdai_continuance_probe()
1927 * remove all mod from io in rsnd_rdai_continuance_probe()
1930 for_each_rsnd_mod(i, mod, io) in rsnd_rdai_continuance_probe()
1931 rsnd_dai_disconnect(mod, io, i); in rsnd_rdai_continuance_probe()
1932 rsnd_dai_connect(ssi_mod, io, RSND_MOD_SSI); in rsnd_rdai_continuance_probe()
1937 rsnd_dai_call(fallback, io, priv); in rsnd_rdai_continuance_probe()
1943 ret = rsnd_dai_call(probe, io, priv); in rsnd_rdai_continuance_probe()