Lines Matching refs:prtd

128 	struct q6apm_dai_rtd *prtd = priv;
129 struct snd_pcm_substream *substream = prtd->substream;
134 prtd->state = Q6APM_STREAM_STOPPED;
137 spin_lock_irqsave(&prtd->lock, flags);
138 prtd->pos += prtd->pcm_count;
139 spin_unlock_irqrestore(&prtd->lock, flags);
141 if (prtd->state == Q6APM_STREAM_RUNNING)
142 q6apm_write_async(prtd->graph, prtd->pcm_count, 0, 0, 0);
146 spin_lock_irqsave(&prtd->lock, flags);
147 prtd->pos += prtd->pcm_count;
148 spin_unlock_irqrestore(&prtd->lock, flags);
150 if (prtd->state == Q6APM_STREAM_RUNNING)
151 q6apm_read(prtd->graph);
162 struct q6apm_dai_rtd *prtd = priv;
163 struct snd_compr_stream *substream = prtd->cstream;
172 spin_lock_irqsave(&prtd->lock, flags);
173 if (prtd->notify_on_drain) {
174 snd_compr_drain_notify(prtd->cstream);
175 prtd->notify_on_drain = false;
177 prtd->state = Q6APM_STREAM_STOPPED;
179 spin_unlock_irqrestore(&prtd->lock, flags);
182 spin_lock_irqsave(&prtd->lock, flags);
184 prtd->copied_total += bytes_written;
187 if (prtd->state != Q6APM_STREAM_RUNNING) {
188 spin_unlock_irqrestore(&prtd->lock, flags);
192 avail = prtd->bytes_received - prtd->bytes_sent;
194 if (avail > prtd->pcm_count) {
195 bytes_to_write = prtd->pcm_count;
197 if (substream->partial_drain || prtd->notify_on_drain)
206 q6apm_write_async(prtd->graph,
209 prtd->bytes_sent += bytes_to_write;
211 if (prtd->notify_on_drain && is_last_buffer)
212 audioreach_shared_memory_send_eos(prtd->graph);
215 spin_unlock_irqrestore(&prtd->lock, flags);
226 struct q6apm_dai_rtd *prtd = runtime->private_data;
236 if (!prtd || !prtd->graph) {
244 cfg.bit_width = prtd->bits_per_sample;
247 if (prtd->state) {
249 q6apm_graph_stop(prtd->graph);
250 q6apm_unmap_memory_regions(prtd->graph, substream->stream);
253 prtd->pcm_count = snd_pcm_lib_period_bytes(substream);
254 prtd->pos = 0;
256 ret = q6apm_graph_media_format_shmem(prtd->graph, &cfg);
262 ret = q6apm_graph_media_format_pcm(prtd->graph, &cfg);
266 ret = q6apm_map_memory_regions(prtd->graph, substream->stream, prtd->phys,
267 (prtd->pcm_size / prtd->periods), prtd->periods);
274 ret = q6apm_graph_prepare(prtd->graph);
280 ret = q6apm_graph_start(prtd->graph);
290 q6apm_read(prtd->graph);
295 prtd->state = Q6APM_STREAM_RUNNING;
304 struct q6apm_dai_rtd *prtd = runtime->private_data;
313 ret = q6apm_write_async(prtd->graph, prtd->pcm_count, 0, 0, 0);
317 prtd->state = Q6APM_STREAM_STOPPED;
338 struct q6apm_dai_rtd *prtd;
349 prtd = kzalloc(sizeof(*prtd), GFP_KERNEL);
350 if (prtd == NULL)
353 spin_lock_init(&prtd->lock);
354 prtd->substream = substream;
355 prtd->graph = q6apm_graph_open(dev, (q6apm_cb)event_handler, prtd, graph_id);
356 if (IS_ERR(prtd->graph)) {
358 ret = PTR_ERR(prtd->graph);
395 runtime->private_data = prtd;
398 prtd->phys = substream->dma_buffer.addr;
400 prtd->phys = substream->dma_buffer.addr | (pdata->sid << 32);
404 kfree(prtd);
413 struct q6apm_dai_rtd *prtd = runtime->private_data;
415 if (prtd->state) { /* only stop graph that is started */
416 q6apm_graph_stop(prtd->graph);
417 q6apm_unmap_memory_regions(prtd->graph, substream->stream);
420 q6apm_graph_close(prtd->graph);
421 prtd->graph = NULL;
422 kfree(prtd);
432 struct q6apm_dai_rtd *prtd = runtime->private_data;
436 spin_lock_irqsave(&prtd->lock, flags);
437 if (prtd->pos == prtd->pcm_size)
438 prtd->pos = 0;
440 ptr = bytes_to_frames(runtime, prtd->pos);
441 spin_unlock_irqrestore(&prtd->lock, flags);
451 struct q6apm_dai_rtd *prtd = runtime->private_data;
453 prtd->pcm_size = params_buffer_bytes(params);
454 prtd->periods = params_periods(params);
458 prtd->bits_per_sample = 16;
461 prtd->bits_per_sample = 24;
483 struct q6apm_dai_rtd *prtd;
494 prtd = kzalloc(sizeof(*prtd), GFP_KERNEL);
495 if (prtd == NULL)
498 prtd->cstream = stream;
499 prtd->graph = q6apm_graph_open(dev, (q6apm_cb)event_handler_compr, prtd, graph_id);
500 if (IS_ERR(prtd->graph)) {
501 ret = PTR_ERR(prtd->graph);
502 kfree(prtd);
506 runtime->private_data = prtd;
509 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, dev, size, &prtd->dma_buffer);
514 prtd->phys = prtd->dma_buffer.addr;
516 prtd->phys = prtd->dma_buffer.addr | (pdata->sid << 32);
518 snd_compr_set_runtime_buffer(stream, &prtd->dma_buffer);
519 spin_lock_init(&prtd->lock);
521 q6apm_enable_compress_module(dev, prtd->graph, true);
529 struct q6apm_dai_rtd *prtd = runtime->private_data;
531 q6apm_graph_stop(prtd->graph);
532 q6apm_unmap_memory_regions(prtd->graph, SNDRV_PCM_STREAM_PLAYBACK);
533 q6apm_graph_close(prtd->graph);
534 snd_dma_free_pages(&prtd->dma_buffer);
535 prtd->graph = NULL;
536 kfree(prtd);
579 struct q6apm_dai_rtd *prtd = runtime->private_data;
582 spin_lock_irqsave(&prtd->lock, flags);
583 tstamp->copied_total = prtd->copied_total;
584 tstamp->byte_offset = prtd->copied_total % prtd->pcm_size;
585 spin_unlock_irqrestore(&prtd->lock, flags);
594 struct q6apm_dai_rtd *prtd = runtime->private_data;
601 ret = q6apm_write_async(prtd->graph, prtd->pcm_count, 0, 0, NO_TIMESTAMP);
609 prtd->next_track = true;
613 prtd->notify_on_drain = true;
627 struct q6apm_dai_rtd *prtd = runtime->private_data;
630 spin_lock_irqsave(&prtd->lock, flags);
631 prtd->bytes_received += count;
632 spin_unlock_irqrestore(&prtd->lock, flags);
642 struct q6apm_dai_rtd *prtd = runtime->private_data;
653 prtd->periods = runtime->fragments;
654 prtd->pcm_count = runtime->fragment_size;
655 prtd->pcm_size = runtime->fragments * runtime->fragment_size;
656 prtd->bits_per_sample = 16;
658 prtd->pos = 0;
660 if (prtd->next_track != true) {
661 memcpy(&prtd->codec, codec, sizeof(*codec));
663 ret = q6apm_set_real_module_id(component->dev, prtd->graph, codec->id);
670 cfg.bit_width = prtd->bits_per_sample;
674 ret = q6apm_graph_media_format_shmem(prtd->graph, &cfg);
678 ret = q6apm_graph_media_format_pcm(prtd->graph, &cfg);
682 ret = q6apm_map_memory_regions(prtd->graph, SNDRV_PCM_STREAM_PLAYBACK,
683 prtd->phys, (prtd->pcm_size / prtd->periods),
684 prtd->periods);
688 ret = q6apm_graph_prepare(prtd->graph);
692 ret = q6apm_graph_start(prtd->graph);
700 cfg.bit_width = prtd->bits_per_sample;
704 ret = audioreach_compr_set_param(prtd->graph, &cfg);
708 prtd->state = Q6APM_STREAM_RUNNING;
718 struct q6apm_dai_rtd *prtd = runtime->private_data;
723 prtd->trailing_samples_drop = metadata->value[0];
724 q6apm_remove_trailing_silence(component->dev, prtd->graph,
725 prtd->trailing_samples_drop);
728 prtd->initial_samples_drop = metadata->value[0];
729 q6apm_remove_initial_silence(component->dev, prtd->graph,
730 prtd->initial_samples_drop);
745 struct q6apm_dai_rtd *prtd = runtime->private_data;
748 return dma_mmap_coherent(dev, vma, prtd->dma_buffer.area, prtd->dma_buffer.addr,
749 prtd->dma_buffer.bytes);
757 struct q6apm_dai_rtd *prtd = runtime->private_data;
767 bytes_received = prtd->bytes_received;
773 if (prtd->next_track)
774 bytes_received = ALIGN(prtd->bytes_received, prtd->pcm_count);
776 app_pointer = bytes_received/prtd->pcm_size;
777 app_pointer = bytes_received - (app_pointer * prtd->pcm_size);
778 dstn = prtd->dma_buffer.area + app_pointer;
780 if (count < prtd->pcm_size - app_pointer) {
784 copy = prtd->pcm_size - app_pointer;
787 if (copy_from_user(prtd->dma_buffer.area, buf + copy, count - copy))
791 spin_lock_irqsave(&prtd->lock, flags);
792 bytes_in_flight = prtd->bytes_received - prtd->copied_total;
794 if (prtd->next_track) {
795 prtd->next_track = false;
796 prtd->copied_total = ALIGN(prtd->copied_total, prtd->pcm_count);
797 prtd->bytes_sent = ALIGN(prtd->bytes_sent, prtd->pcm_count);
800 prtd->bytes_received = bytes_received + count;
803 if (prtd->state == Q6APM_STREAM_RUNNING && (bytes_in_flight == 0)) {
804 bytes_to_write = prtd->pcm_count;
805 avail = prtd->bytes_received - prtd->bytes_sent;
807 if (avail < prtd->pcm_count)
810 q6apm_write_async(prtd->graph, bytes_to_write, 0, 0, wflags);
811 prtd->bytes_sent += bytes_to_write;
814 spin_unlock_irqrestore(&prtd->lock, flags);