Lines Matching refs:io
273 int (*init)(struct fsi_priv *fsi, struct fsi_stream *io);
274 int (*quit)(struct fsi_priv *fsi, struct fsi_stream *io);
275 int (*probe)(struct fsi_priv *fsi, struct fsi_stream *io, struct device *dev);
276 int (*transfer)(struct fsi_priv *fsi, struct fsi_stream *io);
277 int (*remove)(struct fsi_priv *fsi, struct fsi_stream *io);
278 int (*start_stop)(struct fsi_priv *fsi, struct fsi_stream *io,
281 #define fsi_stream_handler_call(io, func, args...) \ argument
282 (!(io) ? -ENODEV : \
283 !((io)->handler->func) ? 0 : \
284 (io)->handler->func(args))
304 static int fsi_stream_is_play(struct fsi_priv *fsi, struct fsi_stream *io);
428 static u32 fsi_get_port_shift(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_get_port_shift() argument
430 int is_play = fsi_stream_is_play(fsi, io); in fsi_get_port_shift()
453 struct fsi_stream *io) in fsi_get_current_fifo_samples() argument
455 int is_play = fsi_stream_is_play(fsi, io); in fsi_get_current_fifo_samples()
493 struct fsi_stream *io) in fsi_stream_is_play() argument
495 return &fsi->playback == io; in fsi_stream_is_play()
505 struct fsi_stream *io) in fsi_stream_is_working() argument
512 ret = !!(io->substream && io->substream->runtime); in fsi_stream_is_working()
518 static struct fsi_priv *fsi_stream_to_priv(struct fsi_stream *io) in fsi_stream_to_priv() argument
520 return io->priv; in fsi_stream_to_priv()
524 struct fsi_stream *io, in fsi_stream_init() argument
532 io->substream = substream; in fsi_stream_init()
533 io->buff_sample_capa = fsi_frame2sample(fsi, runtime->buffer_size); in fsi_stream_init()
534 io->buff_sample_pos = 0; in fsi_stream_init()
535 io->period_samples = fsi_frame2sample(fsi, runtime->period_size); in fsi_stream_init()
536 io->period_pos = 0; in fsi_stream_init()
537 io->sample_width = samples_to_bytes(runtime, 1); in fsi_stream_init()
538 io->bus_option = 0; in fsi_stream_init()
539 io->oerr_num = -1; /* ignore 1st err */ in fsi_stream_init()
540 io->uerr_num = -1; /* ignore 1st err */ in fsi_stream_init()
541 fsi_stream_handler_call(io, init, fsi, io); in fsi_stream_init()
545 static void fsi_stream_quit(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_stream_quit() argument
547 struct snd_soc_dai *dai = fsi_get_dai(io->substream); in fsi_stream_quit()
553 if (io->oerr_num > 0) in fsi_stream_quit()
554 dev_err(dai->dev, "over_run = %d\n", io->oerr_num); in fsi_stream_quit()
556 if (io->uerr_num > 0) in fsi_stream_quit()
557 dev_err(dai->dev, "under_run = %d\n", io->uerr_num); in fsi_stream_quit()
559 fsi_stream_handler_call(io, quit, fsi, io); in fsi_stream_quit()
560 io->substream = NULL; in fsi_stream_quit()
561 io->buff_sample_capa = 0; in fsi_stream_quit()
562 io->buff_sample_pos = 0; in fsi_stream_quit()
563 io->period_samples = 0; in fsi_stream_quit()
564 io->period_pos = 0; in fsi_stream_quit()
565 io->sample_width = 0; in fsi_stream_quit()
566 io->bus_option = 0; in fsi_stream_quit()
567 io->oerr_num = 0; in fsi_stream_quit()
568 io->uerr_num = 0; in fsi_stream_quit()
572 static int fsi_stream_transfer(struct fsi_stream *io) in fsi_stream_transfer() argument
574 struct fsi_priv *fsi = fsi_stream_to_priv(io); in fsi_stream_transfer()
578 return fsi_stream_handler_call(io, transfer, fsi, io); in fsi_stream_transfer()
581 #define fsi_stream_start(fsi, io)\ argument
582 fsi_stream_handler_call(io, start_stop, fsi, io, 1)
584 #define fsi_stream_stop(fsi, io)\ argument
585 fsi_stream_handler_call(io, start_stop, fsi, io, 0)
589 struct fsi_stream *io; in fsi_stream_probe() local
592 io = &fsi->playback; in fsi_stream_probe()
593 ret1 = fsi_stream_handler_call(io, probe, fsi, io, dev); in fsi_stream_probe()
595 io = &fsi->capture; in fsi_stream_probe()
596 ret2 = fsi_stream_handler_call(io, probe, fsi, io, dev); in fsi_stream_probe()
608 struct fsi_stream *io; in fsi_stream_remove() local
611 io = &fsi->playback; in fsi_stream_remove()
612 ret1 = fsi_stream_handler_call(io, remove, fsi, io); in fsi_stream_remove()
614 io = &fsi->capture; in fsi_stream_remove()
615 ret2 = fsi_stream_handler_call(io, remove, fsi, io); in fsi_stream_remove()
628 static void fsi_format_bus_setup(struct fsi_priv *fsi, struct fsi_stream *io, in fsi_format_bus_setup() argument
632 int is_play = fsi_stream_is_play(fsi, io); in fsi_format_bus_setup()
676 static void fsi_irq_enable(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_irq_enable() argument
678 u32 data = AB_IO(1, fsi_get_port_shift(fsi, io)); in fsi_irq_enable()
685 static void fsi_irq_disable(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_irq_disable() argument
687 u32 data = AB_IO(1, fsi_get_port_shift(fsi, io)); in fsi_irq_disable()
1036 static void fsi_pointer_update(struct fsi_stream *io, int size) in fsi_pointer_update() argument
1038 io->buff_sample_pos += size; in fsi_pointer_update()
1040 if (io->buff_sample_pos >= in fsi_pointer_update()
1041 io->period_samples * (io->period_pos + 1)) { in fsi_pointer_update()
1042 struct snd_pcm_substream *substream = io->substream; in fsi_pointer_update()
1045 io->period_pos++; in fsi_pointer_update()
1047 if (io->period_pos >= runtime->periods) { in fsi_pointer_update()
1048 io->buff_sample_pos = 0; in fsi_pointer_update()
1049 io->period_pos = 0; in fsi_pointer_update()
1109 static u8 *fsi_pio_get_area(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_pio_get_area() argument
1111 struct snd_pcm_runtime *runtime = io->substream->runtime; in fsi_pio_get_area()
1114 samples_to_bytes(runtime, io->buff_sample_pos); in fsi_pio_get_area()
1117 static int fsi_pio_transfer(struct fsi_priv *fsi, struct fsi_stream *io, in fsi_pio_transfer() argument
1124 if (!fsi_stream_is_working(fsi, io)) in fsi_pio_transfer()
1127 buf = fsi_pio_get_area(fsi, io); in fsi_pio_transfer()
1129 switch (io->sample_width) { in fsi_pio_transfer()
1140 fsi_pointer_update(io, samples); in fsi_pio_transfer()
1145 static int fsi_pio_pop(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_pio_pop() argument
1151 sample_residues = fsi_get_current_fifo_samples(fsi, io); in fsi_pio_pop()
1152 sample_space = io->buff_sample_capa - io->buff_sample_pos; in fsi_pio_pop()
1156 return fsi_pio_transfer(fsi, io, in fsi_pio_pop()
1162 static int fsi_pio_push(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_pio_push() argument
1168 sample_residues = io->buff_sample_capa - io->buff_sample_pos; in fsi_pio_push()
1169 sample_space = io->fifo_sample_capa - in fsi_pio_push()
1170 fsi_get_current_fifo_samples(fsi, io); in fsi_pio_push()
1174 return fsi_pio_transfer(fsi, io, in fsi_pio_push()
1180 static int fsi_pio_start_stop(struct fsi_priv *fsi, struct fsi_stream *io, in fsi_pio_start_stop() argument
1187 fsi_irq_enable(fsi, io); in fsi_pio_start_stop()
1189 fsi_irq_disable(fsi, io); in fsi_pio_start_stop()
1197 static int fsi_pio_push_init(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_pio_push_init() argument
1207 io->bus_option = BUSOP_SET(24, PACKAGE_24BITBUS_BACK) | in fsi_pio_push_init()
1210 io->bus_option = BUSOP_SET(24, PACKAGE_24BITBUS_BACK) | in fsi_pio_push_init()
1215 static int fsi_pio_pop_init(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_pio_pop_init() argument
1220 io->bus_option = BUSOP_SET(24, PACKAGE_24BITBUS_BACK) | in fsi_pio_pop_init()
1267 static int fsi_dma_init(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_dma_init() argument
1273 io->bus_option = BUSOP_SET(24, PACKAGE_24BITBUS_BACK) | in fsi_dma_init()
1281 struct fsi_stream *io = (struct fsi_stream *)data; in fsi_dma_complete() local
1282 struct fsi_priv *fsi = fsi_stream_to_priv(io); in fsi_dma_complete()
1284 fsi_pointer_update(io, io->period_samples); in fsi_dma_complete()
1289 static int fsi_dma_transfer(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_dma_transfer() argument
1291 struct snd_soc_dai *dai = fsi_get_dai(io->substream); in fsi_dma_transfer()
1292 struct snd_pcm_substream *substream = io->substream; in fsi_dma_transfer()
1294 int is_play = fsi_stream_is_play(fsi, io); in fsi_dma_transfer()
1303 desc = dmaengine_prep_dma_cyclic(io->chan, in fsi_dma_transfer()
1315 desc->callback_param = io; in fsi_dma_transfer()
1322 dma_async_issue_pending(io->chan); in fsi_dma_transfer()
1346 static int fsi_dma_push_start_stop(struct fsi_priv *fsi, struct fsi_stream *io, in fsi_dma_push_start_stop() argument
1355 dmaengine_terminate_all(io->chan); in fsi_dma_push_start_stop()
1363 static int fsi_dma_probe(struct fsi_priv *fsi, struct fsi_stream *io, struct device *dev) in fsi_dma_probe() argument
1366 int is_play = fsi_stream_is_play(fsi, io); in fsi_dma_probe()
1371 io->chan = dma_request_slave_channel_compat(mask, in fsi_dma_probe()
1372 shdma_chan_filter, (void *)io->dma_id, in fsi_dma_probe()
1374 if (io->chan) { in fsi_dma_probe()
1388 ret = dmaengine_slave_config(io->chan, &cfg); in fsi_dma_probe()
1390 dma_release_channel(io->chan); in fsi_dma_probe()
1391 io->chan = NULL; in fsi_dma_probe()
1395 if (!io->chan) { in fsi_dma_probe()
1412 static int fsi_dma_remove(struct fsi_priv *fsi, struct fsi_stream *io) in fsi_dma_remove() argument
1414 fsi_stream_stop(fsi, io); in fsi_dma_remove()
1416 if (io->chan) in fsi_dma_remove()
1417 dma_release_channel(io->chan); in fsi_dma_remove()
1419 io->chan = NULL; in fsi_dma_remove()
1435 struct fsi_stream *io, in fsi_fifo_init() argument
1439 int is_play = fsi_stream_is_play(fsi, io); in fsi_fifo_init()
1445 shift >>= fsi_get_port_shift(fsi, io); in fsi_fifo_init()
1474 io->fifo_sample_capa = fsi_frame2sample(fsi, frame_capa); in fsi_fifo_init()
1490 struct fsi_stream *io, in fsi_hw_startup() argument
1521 switch (io->sample_width) { in fsi_hw_startup()
1523 data = BUSOP_GET(16, io->bus_option); in fsi_hw_startup()
1526 data = BUSOP_GET(24, io->bus_option); in fsi_hw_startup()
1529 fsi_format_bus_setup(fsi, io, data, dev); in fsi_hw_startup()
1532 fsi_irq_disable(fsi, io); in fsi_hw_startup()
1536 fsi_fifo_init(fsi, io, dev); in fsi_hw_startup()
1577 struct fsi_stream *io = fsi_stream_get(fsi, substream); in fsi_dai_trigger() local
1582 fsi_stream_init(fsi, io, substream); in fsi_dai_trigger()
1584 ret = fsi_hw_startup(fsi, io, dai->dev); in fsi_dai_trigger()
1586 ret = fsi_stream_start(fsi, io); in fsi_dai_trigger()
1588 ret = fsi_stream_transfer(io); in fsi_dai_trigger()
1593 fsi_stream_stop(fsi, io); in fsi_dai_trigger()
1594 fsi_stream_quit(fsi, io); in fsi_dai_trigger()
1751 struct fsi_stream *io = fsi_stream_get(fsi, substream); in fsi_pointer() local
1753 return fsi_sample2frame(fsi, io->buff_sample_pos); in fsi_pointer()
2060 struct fsi_stream *io, in __fsi_suspend() argument
2063 if (!fsi_stream_is_working(fsi, io)) in __fsi_suspend()
2066 fsi_stream_stop(fsi, io); in __fsi_suspend()
2071 struct fsi_stream *io, in __fsi_resume() argument
2074 if (!fsi_stream_is_working(fsi, io)) in __fsi_resume()
2077 fsi_hw_startup(fsi, io, dev); in __fsi_resume()
2078 fsi_stream_start(fsi, io); in __fsi_resume()