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