Lines Matching refs:strm

97 	int (*transfer)(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm);
188 static void rz_ssi_set_substream(struct rz_ssi_stream *strm, in rz_ssi_set_substream() argument
191 struct rz_ssi_priv *ssi = strm->priv; in rz_ssi_set_substream()
195 strm->substream = substream; in rz_ssi_set_substream()
200 struct rz_ssi_stream *strm) in rz_ssi_stream_is_valid() argument
206 ret = strm->substream && strm->substream->runtime; in rz_ssi_stream_is_valid()
212 static void rz_ssi_stream_init(struct rz_ssi_stream *strm, in rz_ssi_stream_init() argument
217 rz_ssi_set_substream(strm, substream); in rz_ssi_stream_init()
218 strm->sample_width = samples_to_bytes(runtime, 1); in rz_ssi_stream_init()
219 strm->dma_buffer_pos = 0; in rz_ssi_stream_init()
220 strm->period_counter = 0; in rz_ssi_stream_init()
221 strm->buffer_pos = 0; in rz_ssi_stream_init()
223 strm->oerr_num = 0; in rz_ssi_stream_init()
224 strm->uerr_num = 0; in rz_ssi_stream_init()
225 strm->running = 0; in rz_ssi_stream_init()
228 strm->fifo_sample_size = SSI_FIFO_DEPTH; in rz_ssi_stream_init()
232 struct rz_ssi_stream *strm) in rz_ssi_stream_quit() argument
234 struct snd_soc_dai *dai = rz_ssi_get_dai(strm->substream); in rz_ssi_stream_quit()
236 rz_ssi_set_substream(strm, NULL); in rz_ssi_stream_quit()
238 if (strm->oerr_num > 0) in rz_ssi_stream_quit()
239 dev_info(dai->dev, "overrun = %d\n", strm->oerr_num); in rz_ssi_stream_quit()
241 if (strm->uerr_num > 0) in rz_ssi_stream_quit()
242 dev_info(dai->dev, "underrun = %d\n", strm->uerr_num); in rz_ssi_stream_quit()
307 static int rz_ssi_start(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm) in rz_ssi_start() argument
309 bool is_play = rz_ssi_stream_is_play(ssi, strm->substream); in rz_ssi_start()
320 SSISCR_TDES(strm->fifo_sample_size / 2 - 1) | in rz_ssi_start()
340 strm->running = 1; in rz_ssi_start()
347 static int rz_ssi_stop(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm) in rz_ssi_stop() argument
351 strm->running = 0; in rz_ssi_stop()
358 dmaengine_terminate_async(strm->dma_ch); in rz_ssi_stop()
388 static void rz_ssi_pointer_update(struct rz_ssi_stream *strm, int frames) in rz_ssi_pointer_update() argument
390 struct snd_pcm_substream *substream = strm->substream; in rz_ssi_pointer_update()
394 if (!strm->running || !substream || !substream->runtime) in rz_ssi_pointer_update()
398 strm->buffer_pos += frames; in rz_ssi_pointer_update()
399 WARN_ON(strm->buffer_pos > runtime->buffer_size); in rz_ssi_pointer_update()
402 if (strm->buffer_pos == runtime->buffer_size) in rz_ssi_pointer_update()
403 strm->buffer_pos = 0; in rz_ssi_pointer_update()
405 current_period = strm->buffer_pos / runtime->period_size; in rz_ssi_pointer_update()
406 if (strm->period_counter != current_period) { in rz_ssi_pointer_update()
407 snd_pcm_period_elapsed(strm->substream); in rz_ssi_pointer_update()
408 strm->period_counter = current_period; in rz_ssi_pointer_update()
412 static int rz_ssi_pio_recv(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm) in rz_ssi_pio_recv() argument
414 struct snd_pcm_substream *substream = strm->substream; in rz_ssi_pio_recv()
422 if (!rz_ssi_stream_is_valid(ssi, strm)) in rz_ssi_pio_recv()
430 (strm->buffer_pos % runtime->period_size); in rz_ssi_pio_recv()
452 buf += strm->buffer_pos * runtime->channels; in rz_ssi_pio_recv()
459 rz_ssi_pointer_update(strm, samples / runtime->channels); in rz_ssi_pio_recv()
465 static int rz_ssi_pio_send(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm) in rz_ssi_pio_send() argument
467 struct snd_pcm_substream *substream = strm->substream; in rz_ssi_pio_send()
476 if (!rz_ssi_stream_is_valid(ssi, strm)) in rz_ssi_pio_send()
480 frames_left = runtime->period_size - (strm->buffer_pos % in rz_ssi_pio_send()
485 sample_space = strm->fifo_sample_size; in rz_ssi_pio_send()
502 buf += strm->buffer_pos * runtime->channels; in rz_ssi_pio_send()
509 rz_ssi_pointer_update(strm, samples / runtime->channels); in rz_ssi_pio_send()
516 struct rz_ssi_stream *strm = NULL; in rz_ssi_interrupt() local
521 strm = &ssi->playback; in rz_ssi_interrupt()
523 strm = &ssi->capture; in rz_ssi_interrupt()
529 strm->uerr_num++; in rz_ssi_interrupt()
531 strm->oerr_num++; in rz_ssi_interrupt()
533 strm->uerr_num++; in rz_ssi_interrupt()
535 strm->oerr_num++; in rz_ssi_interrupt()
541 rz_ssi_stop(ssi, strm); in rz_ssi_interrupt()
549 strm->transfer(ssi, strm); in rz_ssi_interrupt()
552 rz_ssi_start(ssi, strm); in rz_ssi_interrupt()
556 if (!strm->running) in rz_ssi_interrupt()
561 strm->transfer(ssi, &ssi->playback); in rz_ssi_interrupt()
565 strm->transfer(ssi, &ssi->capture); in rz_ssi_interrupt()
570 struct snd_pcm_substream *substream = strm->substream; in rz_ssi_interrupt()
573 strm->transfer(ssi, &ssi->playback); in rz_ssi_interrupt()
575 strm->transfer(ssi, &ssi->capture); in rz_ssi_interrupt()
600 struct rz_ssi_stream *strm) in rz_ssi_dma_transfer() argument
602 struct snd_pcm_substream *substream = strm->substream; in rz_ssi_dma_transfer()
609 if (!rz_ssi_stream_is_valid(ssi, strm)) in rz_ssi_dma_transfer()
628 strm->dma_buffer_pos); in rz_ssi_dma_transfer()
630 desc = dmaengine_prep_slave_single(strm->dma_ch, dma_paddr, dma_size, in rz_ssi_dma_transfer()
639 desc->callback_param = strm; in rz_ssi_dma_transfer()
647 strm->dma_buffer_pos += amount; in rz_ssi_dma_transfer()
648 if (strm->dma_buffer_pos >= runtime->buffer_size) in rz_ssi_dma_transfer()
649 strm->dma_buffer_pos = 0; in rz_ssi_dma_transfer()
652 dma_async_issue_pending(strm->dma_ch); in rz_ssi_dma_transfer()
659 struct rz_ssi_stream *strm = (struct rz_ssi_stream *)data; in rz_ssi_dma_complete() local
661 if (!strm->running || !strm->substream || !strm->substream->runtime) in rz_ssi_dma_complete()
665 rz_ssi_pointer_update(strm, strm->substream->runtime->period_size); in rz_ssi_dma_complete()
668 rz_ssi_dma_transfer(strm->priv, strm); in rz_ssi_dma_complete()
729 struct rz_ssi_stream *strm = rz_ssi_stream_get(ssi, substream); in rz_ssi_dai_trigger() local
739 rz_ssi_stream_init(strm, substream); in rz_ssi_dai_trigger()
760 ret = strm->transfer(ssi, strm); in rz_ssi_dai_trigger()
765 ret = rz_ssi_start(ssi, strm); in rz_ssi_dai_trigger()
768 rz_ssi_stop(ssi, strm); in rz_ssi_dai_trigger()
769 rz_ssi_stream_quit(ssi, strm); in rz_ssi_dai_trigger()
887 struct rz_ssi_stream *strm = rz_ssi_stream_get(ssi, substream); in rz_ssi_pcm_pointer() local
889 return strm->buffer_pos; in rz_ssi_pcm_pointer()