Lines Matching refs:prtd
124 struct q6apm_dai_rtd *prtd = priv; in event_handler() local
125 struct snd_pcm_substream *substream = prtd->substream; in event_handler()
129 prtd->state = Q6APM_STREAM_STOPPED; in event_handler()
137 if (prtd->state == Q6APM_STREAM_RUNNING) in event_handler()
138 q6apm_read(prtd->graph); in event_handler()
149 struct q6apm_dai_rtd *prtd = priv; in event_handler_compr() local
150 struct snd_compr_stream *substream = prtd->cstream; in event_handler_compr()
159 spin_lock_irqsave(&prtd->lock, flags); in event_handler_compr()
160 if (prtd->notify_on_drain) { in event_handler_compr()
161 snd_compr_drain_notify(prtd->cstream); in event_handler_compr()
162 prtd->notify_on_drain = false; in event_handler_compr()
164 prtd->state = Q6APM_STREAM_STOPPED; in event_handler_compr()
166 spin_unlock_irqrestore(&prtd->lock, flags); in event_handler_compr()
169 spin_lock_irqsave(&prtd->lock, flags); in event_handler_compr()
171 prtd->copied_total += bytes_written; in event_handler_compr()
174 if (prtd->state != Q6APM_STREAM_RUNNING) { in event_handler_compr()
175 spin_unlock_irqrestore(&prtd->lock, flags); in event_handler_compr()
179 avail = prtd->bytes_received - prtd->bytes_sent; in event_handler_compr()
181 if (avail > prtd->pcm_count) { in event_handler_compr()
182 bytes_to_write = prtd->pcm_count; in event_handler_compr()
184 if (substream->partial_drain || prtd->notify_on_drain) in event_handler_compr()
193 q6apm_write_async(prtd->graph, in event_handler_compr()
196 prtd->bytes_sent += bytes_to_write; in event_handler_compr()
198 if (prtd->notify_on_drain && is_last_buffer) in event_handler_compr()
199 audioreach_shared_memory_send_eos(prtd->graph); in event_handler_compr()
202 spin_unlock_irqrestore(&prtd->lock, flags); in event_handler_compr()
213 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_prepare() local
223 if (!prtd || !prtd->graph) { in q6apm_dai_prepare()
231 cfg.bit_width = prtd->bits_per_sample; in q6apm_dai_prepare()
235 if (prtd->state) { in q6apm_dai_prepare()
237 q6apm_graph_stop(prtd->graph); in q6apm_dai_prepare()
238 q6apm_unmap_memory_regions(prtd->graph, substream->stream); in q6apm_dai_prepare()
241 prtd->pcm_count = snd_pcm_lib_period_bytes(substream); in q6apm_dai_prepare()
243 ret = q6apm_graph_media_format_shmem(prtd->graph, &cfg); in q6apm_dai_prepare()
249 ret = q6apm_graph_media_format_pcm(prtd->graph, &cfg); in q6apm_dai_prepare()
253 ret = q6apm_map_memory_regions(prtd->graph, substream->stream, prtd->phys, in q6apm_dai_prepare()
254 (prtd->pcm_size / prtd->periods), prtd->periods); in q6apm_dai_prepare()
261 ret = q6apm_graph_prepare(prtd->graph); in q6apm_dai_prepare()
267 ret = q6apm_graph_start(prtd->graph); in q6apm_dai_prepare()
277 q6apm_read(prtd->graph); in q6apm_dai_prepare()
282 prtd->state = Q6APM_STREAM_RUNNING; in q6apm_dai_prepare()
290 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_ack() local
294 avail_periods = (runtime->control->appl_ptr - prtd->queue_ptr)/runtime->period_size; in q6apm_dai_ack()
296 ret = q6apm_write_async(prtd->graph, prtd->pcm_count, 0, 0, NO_TIMESTAMP); in q6apm_dai_ack()
301 prtd->queue_ptr += runtime->period_size; in q6apm_dai_ack()
312 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_trigger() local
322 prtd->state = Q6APM_STREAM_STOPPED; in q6apm_dai_trigger()
343 struct q6apm_dai_rtd *prtd; in q6apm_dai_open() local
354 prtd = kzalloc(sizeof(*prtd), GFP_KERNEL); in q6apm_dai_open()
355 if (prtd == NULL) in q6apm_dai_open()
358 spin_lock_init(&prtd->lock); in q6apm_dai_open()
359 prtd->substream = substream; in q6apm_dai_open()
360 prtd->graph = q6apm_graph_open(dev, event_handler, prtd, graph_id); in q6apm_dai_open()
361 if (IS_ERR(prtd->graph)) { in q6apm_dai_open()
363 ret = PTR_ERR(prtd->graph); in q6apm_dai_open()
401 runtime->private_data = prtd; in q6apm_dai_open()
404 prtd->phys = substream->dma_buffer.addr; in q6apm_dai_open()
406 prtd->phys = substream->dma_buffer.addr | (pdata->sid << 32); in q6apm_dai_open()
410 kfree(prtd); in q6apm_dai_open()
419 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_close() local
421 if (prtd->state) { /* only stop graph that is started */ in q6apm_dai_close()
422 q6apm_graph_stop(prtd->graph); in q6apm_dai_close()
423 q6apm_unmap_memory_regions(prtd->graph, substream->stream); in q6apm_dai_close()
426 q6apm_graph_close(prtd->graph); in q6apm_dai_close()
427 prtd->graph = NULL; in q6apm_dai_close()
428 kfree(prtd); in q6apm_dai_close()
438 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_pointer() local
441 ptr = q6apm_get_hw_pointer(prtd->graph, substream->stream) * runtime->period_size; in q6apm_dai_pointer()
453 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_hw_params() local
455 prtd->pcm_size = params_buffer_bytes(params); in q6apm_dai_hw_params()
456 prtd->periods = params_periods(params); in q6apm_dai_hw_params()
460 prtd->bits_per_sample = 16; in q6apm_dai_hw_params()
463 prtd->bits_per_sample = 24; in q6apm_dai_hw_params()
485 struct q6apm_dai_rtd *prtd; in q6apm_dai_compr_open() local
496 prtd = kzalloc(sizeof(*prtd), GFP_KERNEL); in q6apm_dai_compr_open()
497 if (prtd == NULL) in q6apm_dai_compr_open()
500 prtd->cstream = stream; in q6apm_dai_compr_open()
501 prtd->graph = q6apm_graph_open(dev, event_handler_compr, prtd, graph_id); in q6apm_dai_compr_open()
502 if (IS_ERR(prtd->graph)) { in q6apm_dai_compr_open()
503 ret = PTR_ERR(prtd->graph); in q6apm_dai_compr_open()
504 kfree(prtd); in q6apm_dai_compr_open()
508 runtime->private_data = prtd; in q6apm_dai_compr_open()
511 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, dev, size, &prtd->dma_buffer); in q6apm_dai_compr_open()
516 prtd->phys = prtd->dma_buffer.addr; in q6apm_dai_compr_open()
518 prtd->phys = prtd->dma_buffer.addr | (pdata->sid << 32); in q6apm_dai_compr_open()
520 snd_compr_set_runtime_buffer(stream, &prtd->dma_buffer); in q6apm_dai_compr_open()
521 spin_lock_init(&prtd->lock); in q6apm_dai_compr_open()
523 q6apm_enable_compress_module(dev, prtd->graph, true); in q6apm_dai_compr_open()
531 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_compr_free() local
533 q6apm_graph_stop(prtd->graph); in q6apm_dai_compr_free()
534 q6apm_unmap_memory_regions(prtd->graph, SNDRV_PCM_STREAM_PLAYBACK); in q6apm_dai_compr_free()
535 q6apm_graph_close(prtd->graph); in q6apm_dai_compr_free()
536 snd_dma_free_pages(&prtd->dma_buffer); in q6apm_dai_compr_free()
537 prtd->graph = NULL; in q6apm_dai_compr_free()
538 kfree(prtd); in q6apm_dai_compr_free()
581 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_compr_pointer() local
584 spin_lock_irqsave(&prtd->lock, flags); in q6apm_dai_compr_pointer()
585 tstamp->copied_total = prtd->copied_total; in q6apm_dai_compr_pointer()
586 tstamp->byte_offset = prtd->copied_total % prtd->pcm_size; in q6apm_dai_compr_pointer()
587 spin_unlock_irqrestore(&prtd->lock, flags); in q6apm_dai_compr_pointer()
596 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_compr_trigger() local
603 ret = q6apm_write_async(prtd->graph, prtd->pcm_count, 0, 0, NO_TIMESTAMP); in q6apm_dai_compr_trigger()
611 prtd->next_track = true; in q6apm_dai_compr_trigger()
615 prtd->notify_on_drain = true; in q6apm_dai_compr_trigger()
629 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_compr_ack() local
632 spin_lock_irqsave(&prtd->lock, flags); in q6apm_dai_compr_ack()
633 prtd->bytes_received += count; in q6apm_dai_compr_ack()
634 spin_unlock_irqrestore(&prtd->lock, flags); in q6apm_dai_compr_ack()
644 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_compr_set_params() local
655 prtd->periods = runtime->fragments; in q6apm_dai_compr_set_params()
656 prtd->pcm_count = runtime->fragment_size; in q6apm_dai_compr_set_params()
657 prtd->pcm_size = runtime->fragments * runtime->fragment_size; in q6apm_dai_compr_set_params()
658 prtd->bits_per_sample = 16; in q6apm_dai_compr_set_params()
660 if (prtd->next_track != true) { in q6apm_dai_compr_set_params()
661 memcpy(&prtd->codec, codec, sizeof(*codec)); in q6apm_dai_compr_set_params()
663 ret = q6apm_set_real_module_id(component->dev, prtd->graph, codec->id); in q6apm_dai_compr_set_params()
670 cfg.bit_width = prtd->bits_per_sample; in q6apm_dai_compr_set_params()
676 ret = q6apm_graph_media_format_shmem(prtd->graph, &cfg); in q6apm_dai_compr_set_params()
680 ret = q6apm_graph_media_format_pcm(prtd->graph, &cfg); in q6apm_dai_compr_set_params()
684 ret = q6apm_map_memory_regions(prtd->graph, SNDRV_PCM_STREAM_PLAYBACK, in q6apm_dai_compr_set_params()
685 prtd->phys, (prtd->pcm_size / prtd->periods), in q6apm_dai_compr_set_params()
686 prtd->periods); in q6apm_dai_compr_set_params()
690 ret = q6apm_graph_prepare(prtd->graph); in q6apm_dai_compr_set_params()
694 ret = q6apm_graph_start(prtd->graph); in q6apm_dai_compr_set_params()
702 cfg.bit_width = prtd->bits_per_sample; in q6apm_dai_compr_set_params()
706 ret = audioreach_compr_set_param(prtd->graph, &cfg); in q6apm_dai_compr_set_params()
710 prtd->state = Q6APM_STREAM_RUNNING; in q6apm_dai_compr_set_params()
720 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_compr_set_metadata() local
725 q6apm_remove_trailing_silence(component->dev, prtd->graph, in q6apm_dai_compr_set_metadata()
729 q6apm_remove_initial_silence(component->dev, prtd->graph, in q6apm_dai_compr_set_metadata()
745 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_dai_compr_mmap() local
748 return dma_mmap_coherent(dev, vma, prtd->dma_buffer.area, prtd->dma_buffer.addr, in q6apm_dai_compr_mmap()
749 prtd->dma_buffer.bytes); in q6apm_dai_compr_mmap()
757 struct q6apm_dai_rtd *prtd = runtime->private_data; in q6apm_compr_copy() local
767 bytes_received = prtd->bytes_received; in q6apm_compr_copy()
773 if (prtd->next_track) in q6apm_compr_copy()
774 bytes_received = ALIGN(prtd->bytes_received, prtd->pcm_count); in q6apm_compr_copy()
776 app_pointer = bytes_received/prtd->pcm_size; in q6apm_compr_copy()
777 app_pointer = bytes_received - (app_pointer * prtd->pcm_size); in q6apm_compr_copy()
778 dstn = prtd->dma_buffer.area + app_pointer; in q6apm_compr_copy()
780 if (count < prtd->pcm_size - app_pointer) { in q6apm_compr_copy()
784 copy = prtd->pcm_size - app_pointer; in q6apm_compr_copy()
787 if (copy_from_user(prtd->dma_buffer.area, buf + copy, count - copy)) in q6apm_compr_copy()
791 spin_lock_irqsave(&prtd->lock, flags); in q6apm_compr_copy()
792 bytes_in_flight = prtd->bytes_received - prtd->copied_total; in q6apm_compr_copy()
794 if (prtd->next_track) { in q6apm_compr_copy()
795 prtd->next_track = false; in q6apm_compr_copy()
796 prtd->copied_total = ALIGN(prtd->copied_total, prtd->pcm_count); in q6apm_compr_copy()
797 prtd->bytes_sent = ALIGN(prtd->bytes_sent, prtd->pcm_count); in q6apm_compr_copy()
800 prtd->bytes_received = bytes_received + count; in q6apm_compr_copy()
803 if (prtd->state == Q6APM_STREAM_RUNNING && (bytes_in_flight == 0)) { in q6apm_compr_copy()
804 bytes_to_write = prtd->pcm_count; in q6apm_compr_copy()
805 avail = prtd->bytes_received - prtd->bytes_sent; in q6apm_compr_copy()
807 if (avail < prtd->pcm_count) in q6apm_compr_copy()
810 q6apm_write_async(prtd->graph, bytes_to_write, 0, 0, wflags); in q6apm_compr_copy()
811 prtd->bytes_sent += bytes_to_write; in q6apm_compr_copy()
814 spin_unlock_irqrestore(&prtd->lock, flags); in q6apm_compr_copy()