Lines Matching refs:io
125 #define rsnd_is_enable_path(io, name) \ argument
126 ((io)->info ? (io)->info->name : NULL)
127 #define rsnd_info_id(priv, io, name) \ argument
128 ((io)->info->name - priv->info->name##_info)
152 struct dma_chan *rsnd_mod_dma_req(struct rsnd_dai_stream *io, in rsnd_mod_dma_req() argument
158 return mod->ops->dma_req(io, mod); in rsnd_mod_dma_req()
190 struct rsnd_dai_stream *io)) in rsnd_mod_interrupt() argument
193 struct rsnd_dai_stream *io; in rsnd_mod_interrupt() local
200 io = &rdai->playback; in rsnd_mod_interrupt()
201 if (mod == io->mod[i]) in rsnd_mod_interrupt()
202 callback(mod, io); in rsnd_mod_interrupt()
204 io = &rdai->capture; in rsnd_mod_interrupt()
205 if (mod == io->mod[i]) in rsnd_mod_interrupt()
206 callback(mod, io); in rsnd_mod_interrupt()
211 int rsnd_io_is_working(struct rsnd_dai_stream *io) in rsnd_io_is_working() argument
214 return !!io->substream; in rsnd_io_is_working()
220 u32 rsnd_get_adinr_bit(struct rsnd_mod *mod, struct rsnd_dai_stream *io) in rsnd_get_adinr_bit() argument
223 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_get_adinr_bit()
242 u32 rsnd_get_adinr_chan(struct rsnd_mod *mod, struct rsnd_dai_stream *io) in rsnd_get_adinr_chan() argument
245 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_get_adinr_chan()
268 u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io) in rsnd_get_dalign() argument
270 struct rsnd_mod *src = rsnd_io_to_mod_src(io); in rsnd_get_dalign()
271 struct rsnd_mod *ssi = rsnd_io_to_mod_ssi(io); in rsnd_get_dalign()
273 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); in rsnd_get_dalign()
303 #define rsnd_mod_call(mod, io, func, param...) \ argument
318 ret = (mod)->ops->func(mod, io, param); \
322 #define rsnd_dai_call(fn, io, param...) \ argument
327 mod = (io)->mod[i]; \
330 ret |= rsnd_mod_call(mod, io, fn, param); \
336 struct rsnd_dai_stream *io) in rsnd_dai_connect() argument
347 io->mod[mod->type] = mod; in rsnd_dai_connect()
351 rsnd_io_is_play(io) ? "Playback" : "Capture"); in rsnd_dai_connect()
357 struct rsnd_dai_stream *io) in rsnd_dai_disconnect() argument
359 io->mod[mod->type] = NULL; in rsnd_dai_disconnect()
381 int rsnd_dai_pointer_offset(struct rsnd_dai_stream *io, int additional) in rsnd_dai_pointer_offset() argument
383 struct snd_pcm_substream *substream = io->substream; in rsnd_dai_pointer_offset()
385 int pos = io->byte_pos + additional; in rsnd_dai_pointer_offset()
387 pos %= (runtime->periods * io->byte_per_period); in rsnd_dai_pointer_offset()
392 bool rsnd_dai_pointer_update(struct rsnd_dai_stream *io, int byte) in rsnd_dai_pointer_update() argument
394 io->byte_pos += byte; in rsnd_dai_pointer_update()
396 if (io->byte_pos >= io->next_period_byte) { in rsnd_dai_pointer_update()
397 struct snd_pcm_substream *substream = io->substream; in rsnd_dai_pointer_update()
400 io->period_pos++; in rsnd_dai_pointer_update()
401 io->next_period_byte += io->byte_per_period; in rsnd_dai_pointer_update()
403 if (io->period_pos >= runtime->periods) { in rsnd_dai_pointer_update()
404 io->byte_pos = 0; in rsnd_dai_pointer_update()
405 io->period_pos = 0; in rsnd_dai_pointer_update()
406 io->next_period_byte = io->byte_per_period; in rsnd_dai_pointer_update()
415 void rsnd_dai_period_elapsed(struct rsnd_dai_stream *io) in rsnd_dai_period_elapsed() argument
417 struct snd_pcm_substream *substream = io->substream; in rsnd_dai_period_elapsed()
429 static void rsnd_dai_stream_init(struct rsnd_dai_stream *io, in rsnd_dai_stream_init() argument
434 io->substream = substream; in rsnd_dai_stream_init()
435 io->byte_pos = 0; in rsnd_dai_stream_init()
436 io->period_pos = 0; in rsnd_dai_stream_init()
437 io->byte_per_period = runtime->period_size * in rsnd_dai_stream_init()
440 io->next_period_byte = io->byte_per_period; in rsnd_dai_stream_init()
443 static void rsnd_dai_stream_quit(struct rsnd_dai_stream *io) in rsnd_dai_stream_quit() argument
445 io->substream = NULL; in rsnd_dai_stream_quit()
471 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_soc_dai_trigger() local
472 int ssi_id = rsnd_mod_id(rsnd_io_to_mod_ssi(io)); in rsnd_soc_dai_trigger()
480 rsnd_dai_stream_init(io, substream); in rsnd_soc_dai_trigger()
486 ret = rsnd_dai_call(init, io, priv); in rsnd_soc_dai_trigger()
490 ret = rsnd_dai_call(start, io, priv); in rsnd_soc_dai_trigger()
495 ret = rsnd_dai_call(stop, io, priv); in rsnd_soc_dai_trigger()
497 ret |= rsnd_dai_call(quit, io, priv); in rsnd_soc_dai_trigger()
501 rsnd_dai_stream_quit(io); in rsnd_soc_dai_trigger()
575 #define rsnd_path_add(priv, io, type) \ argument
581 if (rsnd_is_enable_path(io, type)) { \
582 id = rsnd_info_id(priv, io, type); \
585 ret = rsnd_dai_connect(mod, io); \
591 #define rsnd_path_remove(priv, io, type) \ argument
596 if (rsnd_is_enable_path(io, type)) { \
597 id = rsnd_info_id(priv, io, type); \
600 rsnd_dai_disconnect(mod, io); \
606 struct rsnd_dai_stream *io) in rsnd_path_parse() argument
608 struct rsnd_mod *dvc = rsnd_io_to_mod_dvc(io); in rsnd_path_parse()
609 struct rsnd_mod *mix = rsnd_io_to_mod_mix(io); in rsnd_path_parse()
610 struct rsnd_mod *src = rsnd_io_to_mod_src(io); in rsnd_path_parse()
641 io = &rdai->playback; in rsnd_path_parse()
642 if (mix == rsnd_io_to_mod_mix(io)) in rsnd_path_parse()
645 io = &rdai->capture; in rsnd_path_parse()
646 if (mix == rsnd_io_to_mod_mix(io)) in rsnd_path_parse()
680 struct rsnd_dai_stream *io) in rsnd_path_init() argument
696 ret = rsnd_path_add(priv, io, ssi); in rsnd_path_init()
701 ret = rsnd_path_add(priv, io, src); in rsnd_path_init()
706 ret = rsnd_path_add(priv, io, ctu); in rsnd_path_init()
711 ret = rsnd_path_add(priv, io, mix); in rsnd_path_init()
716 ret = rsnd_path_add(priv, io, dvc); in rsnd_path_init()
931 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_hw_params() local
934 ret = rsnd_dai_call(hw_params, io, substream, hw_params); in rsnd_hw_params()
947 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); in rsnd_pointer() local
949 return bytes_to_frames(runtime, io->byte_pos); in rsnd_pointer()
1023 cfg->update(cfg->io, mod); in rsnd_kctrl_put()
1029 struct rsnd_dai_stream *io, in __rsnd_kctrl_new() argument
1033 void (*update)(struct rsnd_dai_stream *io, in __rsnd_kctrl_new() argument
1063 cfg->io = io; in __rsnd_kctrl_new()
1074 struct rsnd_dai_stream *io, in rsnd_kctrl_new_m() argument
1077 void (*update)(struct rsnd_dai_stream *io, in rsnd_kctrl_new_m() argument
1085 return __rsnd_kctrl_new(mod, io, rtd, name, &_cfg->cfg, update); in rsnd_kctrl_new_m()
1089 struct rsnd_dai_stream *io, in rsnd_kctrl_new_s() argument
1092 void (*update)(struct rsnd_dai_stream *io, in rsnd_kctrl_new_s() argument
1100 return __rsnd_kctrl_new(mod, io, rtd, name, &_cfg->cfg, update); in rsnd_kctrl_new_s()
1104 struct rsnd_dai_stream *io, in rsnd_kctrl_new_e() argument
1108 void (*update)(struct rsnd_dai_stream *io, in rsnd_kctrl_new_e() argument
1117 return __rsnd_kctrl_new(mod, io, rtd, name, &_cfg->cfg, update); in rsnd_kctrl_new_e()
1158 struct rsnd_dai_stream *io) in rsnd_rdai_continuance_probe() argument
1162 ret = rsnd_dai_call(probe, io, priv); in rsnd_rdai_continuance_probe()
1175 rsnd_dai_call(remove, io, priv); in rsnd_rdai_continuance_probe()
1180 rsnd_path_remove(priv, io, src); in rsnd_rdai_continuance_probe()
1181 rsnd_path_remove(priv, io, dvc); in rsnd_rdai_continuance_probe()
1186 rsnd_dai_call(fallback, io, priv); in rsnd_rdai_continuance_probe()
1192 ret = rsnd_dai_call(probe, io, priv); in rsnd_rdai_continuance_probe()