Lines Matching defs:strm

96 	int (*transfer)(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm);
187 static void rz_ssi_set_substream(struct rz_ssi_stream *strm,
190 struct rz_ssi_priv *ssi = strm->priv;
194 strm->substream = substream;
199 struct rz_ssi_stream *strm)
205 ret = strm->substream && strm->substream->runtime;
211 static void rz_ssi_stream_init(struct rz_ssi_stream *strm,
216 rz_ssi_set_substream(strm, substream);
217 strm->sample_width = samples_to_bytes(runtime, 1);
218 strm->dma_buffer_pos = 0;
219 strm->period_counter = 0;
220 strm->buffer_pos = 0;
222 strm->oerr_num = 0;
223 strm->uerr_num = 0;
224 strm->running = 0;
227 strm->fifo_sample_size = SSI_FIFO_DEPTH;
231 struct rz_ssi_stream *strm)
233 struct snd_soc_dai *dai = rz_ssi_get_dai(strm->substream);
235 rz_ssi_set_substream(strm, NULL);
237 if (strm->oerr_num > 0)
238 dev_info(dai->dev, "overrun = %d\n", strm->oerr_num);
240 if (strm->uerr_num > 0)
241 dev_info(dai->dev, "underrun = %d\n", strm->uerr_num);
306 static int rz_ssi_start(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm)
308 bool is_play = rz_ssi_stream_is_play(ssi, strm->substream);
319 SSISCR_TDES(strm->fifo_sample_size / 2 - 1) |
339 strm->running = 1;
346 static int rz_ssi_stop(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm)
350 strm->running = 0;
357 dmaengine_terminate_async(strm->dma_ch);
387 static void rz_ssi_pointer_update(struct rz_ssi_stream *strm, int frames)
389 struct snd_pcm_substream *substream = strm->substream;
393 if (!strm->running || !substream || !substream->runtime)
397 strm->buffer_pos += frames;
398 WARN_ON(strm->buffer_pos > runtime->buffer_size);
401 if (strm->buffer_pos == runtime->buffer_size)
402 strm->buffer_pos = 0;
404 current_period = strm->buffer_pos / runtime->period_size;
405 if (strm->period_counter != current_period) {
406 snd_pcm_period_elapsed(strm->substream);
407 strm->period_counter = current_period;
411 static int rz_ssi_pio_recv(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm)
413 struct snd_pcm_substream *substream = strm->substream;
421 if (!rz_ssi_stream_is_valid(ssi, strm))
429 (strm->buffer_pos % runtime->period_size);
451 buf += strm->buffer_pos * runtime->channels;
458 rz_ssi_pointer_update(strm, samples / runtime->channels);
464 static int rz_ssi_pio_send(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm)
466 struct snd_pcm_substream *substream = strm->substream;
475 if (!rz_ssi_stream_is_valid(ssi, strm))
479 frames_left = runtime->period_size - (strm->buffer_pos %
484 sample_space = strm->fifo_sample_size;
501 buf += strm->buffer_pos * runtime->channels;
508 rz_ssi_pointer_update(strm, samples / runtime->channels);
515 struct rz_ssi_stream *strm = NULL;
520 strm = &ssi->playback;
522 strm = &ssi->capture;
528 strm->uerr_num++;
530 strm->oerr_num++;
532 strm->uerr_num++;
534 strm->oerr_num++;
540 rz_ssi_stop(ssi, strm);
548 strm->transfer(ssi, strm);
551 rz_ssi_start(ssi, strm);
555 if (!strm->running)
560 strm->transfer(ssi, &ssi->playback);
564 strm->transfer(ssi, &ssi->capture);
569 struct snd_pcm_substream *substream = strm->substream;
572 strm->transfer(ssi, &ssi->playback);
574 strm->transfer(ssi, &ssi->capture);
599 struct rz_ssi_stream *strm)
601 struct snd_pcm_substream *substream = strm->substream;
608 if (!rz_ssi_stream_is_valid(ssi, strm))
627 strm->dma_buffer_pos);
629 desc = dmaengine_prep_slave_single(strm->dma_ch, dma_paddr, dma_size,
638 desc->callback_param = strm;
646 strm->dma_buffer_pos += amount;
647 if (strm->dma_buffer_pos >= runtime->buffer_size)
648 strm->dma_buffer_pos = 0;
651 dma_async_issue_pending(strm->dma_ch);
658 struct rz_ssi_stream *strm = (struct rz_ssi_stream *)data;
660 if (!strm->running || !strm->substream || !strm->substream->runtime)
664 rz_ssi_pointer_update(strm, strm->substream->runtime->period_size);
667 rz_ssi_dma_transfer(strm->priv, strm);
728 struct rz_ssi_stream *strm = rz_ssi_stream_get(ssi, substream);
738 rz_ssi_stream_init(strm, substream);
759 ret = strm->transfer(ssi, strm);
764 ret = rz_ssi_start(ssi, strm);
767 rz_ssi_stop(ssi, strm);
768 rz_ssi_stream_quit(ssi, strm);
886 struct rz_ssi_stream *strm = rz_ssi_stream_get(ssi, substream);
888 return strm->buffer_pos;