Lines Matching refs:prtd
184 struct q6asm_dai_rtd *prtd = priv; in event_handler() local
185 struct snd_pcm_substream *substream = prtd->substream; in event_handler()
190 q6asm_write_async(prtd->audio_client, prtd->stream_id, in event_handler()
191 prtd->pcm_count, 0, 0, 0); in event_handler()
194 prtd->state = Q6ASM_STREAM_STOPPED; in event_handler()
197 prtd->pcm_irq_pos += prtd->pcm_count; in event_handler()
199 if (prtd->state == Q6ASM_STREAM_RUNNING) in event_handler()
200 q6asm_write_async(prtd->audio_client, prtd->stream_id, in event_handler()
201 prtd->pcm_count, 0, 0, 0); in event_handler()
206 prtd->pcm_irq_pos += prtd->pcm_count; in event_handler()
208 if (prtd->state == Q6ASM_STREAM_RUNNING) in event_handler()
209 q6asm_read(prtd->audio_client, prtd->stream_id); in event_handler()
222 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_dai_prepare() local
231 if (!prtd || !prtd->audio_client) { in q6asm_dai_prepare()
237 prtd->pcm_count = snd_pcm_lib_period_bytes(substream); in q6asm_dai_prepare()
238 prtd->pcm_irq_pos = 0; in q6asm_dai_prepare()
240 if (prtd->state) { in q6asm_dai_prepare()
242 q6asm_cmd(prtd->audio_client, prtd->stream_id, CMD_CLOSE); in q6asm_dai_prepare()
244 prtd->audio_client); in q6asm_dai_prepare()
249 ret = q6asm_map_memory_regions(substream->stream, prtd->audio_client, in q6asm_dai_prepare()
250 prtd->phys, in q6asm_dai_prepare()
251 (prtd->pcm_size / prtd->periods), in q6asm_dai_prepare()
252 prtd->periods); in q6asm_dai_prepare()
261 ret = q6asm_open_write(prtd->audio_client, prtd->stream_id, in q6asm_dai_prepare()
263 0, prtd->bits_per_sample, false); in q6asm_dai_prepare()
265 ret = q6asm_open_read(prtd->audio_client, prtd->stream_id, in q6asm_dai_prepare()
267 prtd->bits_per_sample); in q6asm_dai_prepare()
275 prtd->session_id = q6asm_get_session_id(prtd->audio_client); in q6asm_dai_prepare()
277 prtd->session_id, substream->stream); in q6asm_dai_prepare()
285 prtd->audio_client, prtd->stream_id, in q6asm_dai_prepare()
287 prtd->bits_per_sample); in q6asm_dai_prepare()
289 ret = q6asm_enc_cfg_blk_pcm_format_support(prtd->audio_client, in q6asm_dai_prepare()
290 prtd->stream_id, in q6asm_dai_prepare()
293 prtd->bits_per_sample); in q6asm_dai_prepare()
297 q6asm_read(prtd->audio_client, prtd->stream_id); in q6asm_dai_prepare()
303 prtd->state = Q6ASM_STREAM_RUNNING; in q6asm_dai_prepare()
308 q6asm_cmd(prtd->audio_client, prtd->stream_id, CMD_CLOSE); in q6asm_dai_prepare()
310 q6asm_unmap_memory_regions(substream->stream, prtd->audio_client); in q6asm_dai_prepare()
311 q6asm_audio_client_free(prtd->audio_client); in q6asm_dai_prepare()
312 prtd->audio_client = NULL; in q6asm_dai_prepare()
322 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_dai_trigger() local
328 ret = q6asm_run_nowait(prtd->audio_client, prtd->stream_id, in q6asm_dai_trigger()
332 prtd->state = Q6ASM_STREAM_STOPPED; in q6asm_dai_trigger()
333 ret = q6asm_cmd_nowait(prtd->audio_client, prtd->stream_id, in q6asm_dai_trigger()
338 ret = q6asm_cmd_nowait(prtd->audio_client, prtd->stream_id, in q6asm_dai_trigger()
355 struct q6asm_dai_rtd *prtd; in q6asm_dai_open() local
369 prtd = kzalloc(sizeof(struct q6asm_dai_rtd), GFP_KERNEL); in q6asm_dai_open()
370 if (prtd == NULL) in q6asm_dai_open()
373 prtd->substream = substream; in q6asm_dai_open()
374 prtd->audio_client = q6asm_audio_client_alloc(dev, in q6asm_dai_open()
375 (q6asm_cb)event_handler, prtd, stream_id, in q6asm_dai_open()
377 if (IS_ERR(prtd->audio_client)) { in q6asm_dai_open()
379 ret = PTR_ERR(prtd->audio_client); in q6asm_dai_open()
380 kfree(prtd); in q6asm_dai_open()
385 prtd->stream_id = 1; in q6asm_dai_open()
427 runtime->private_data = prtd; in q6asm_dai_open()
435 prtd->phys = substream->dma_buffer.addr; in q6asm_dai_open()
437 prtd->phys = substream->dma_buffer.addr | (pdata->sid << 32); in q6asm_dai_open()
449 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_dai_close() local
451 if (prtd->audio_client) { in q6asm_dai_close()
452 if (prtd->state) in q6asm_dai_close()
453 q6asm_cmd(prtd->audio_client, prtd->stream_id, in q6asm_dai_close()
457 prtd->audio_client); in q6asm_dai_close()
458 q6asm_audio_client_free(prtd->audio_client); in q6asm_dai_close()
459 prtd->audio_client = NULL; in q6asm_dai_close()
463 kfree(prtd); in q6asm_dai_close()
472 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_dai_pointer() local
474 if (prtd->pcm_irq_pos >= prtd->pcm_size) in q6asm_dai_pointer()
475 prtd->pcm_irq_pos = 0; in q6asm_dai_pointer()
477 return bytes_to_frames(runtime, (prtd->pcm_irq_pos)); in q6asm_dai_pointer()
497 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_dai_hw_params() local
499 prtd->pcm_size = params_buffer_bytes(params); in q6asm_dai_hw_params()
500 prtd->periods = params_periods(params); in q6asm_dai_hw_params()
504 prtd->bits_per_sample = 16; in q6asm_dai_hw_params()
507 prtd->bits_per_sample = 24; in q6asm_dai_hw_params()
517 struct q6asm_dai_rtd *prtd = priv; in compress_event_handler() local
518 struct snd_compr_stream *substream = prtd->cstream; in compress_event_handler()
527 spin_lock_irqsave(&prtd->lock, flags); in compress_event_handler()
528 if (!prtd->bytes_sent) { in compress_event_handler()
529 q6asm_stream_remove_initial_silence(prtd->audio_client, in compress_event_handler()
530 prtd->stream_id, in compress_event_handler()
531 prtd->initial_samples_drop); in compress_event_handler()
533 q6asm_write_async(prtd->audio_client, prtd->stream_id, in compress_event_handler()
534 prtd->pcm_count, 0, 0, 0); in compress_event_handler()
535 prtd->bytes_sent += prtd->pcm_count; in compress_event_handler()
538 spin_unlock_irqrestore(&prtd->lock, flags); in compress_event_handler()
542 spin_lock_irqsave(&prtd->lock, flags); in compress_event_handler()
543 if (prtd->notify_on_drain) { in compress_event_handler()
549 q6asm_cmd_nowait(prtd->audio_client, in compress_event_handler()
550 prtd->stream_id, in compress_event_handler()
556 prtd->stream_id = (prtd->stream_id == 1 ? 2 : 1); in compress_event_handler()
559 snd_compr_drain_notify(prtd->cstream); in compress_event_handler()
560 prtd->notify_on_drain = false; in compress_event_handler()
563 prtd->state = Q6ASM_STREAM_STOPPED; in compress_event_handler()
565 spin_unlock_irqrestore(&prtd->lock, flags); in compress_event_handler()
569 spin_lock_irqsave(&prtd->lock, flags); in compress_event_handler()
572 prtd->copied_total += bytes_written; in compress_event_handler()
575 if (prtd->state != Q6ASM_STREAM_RUNNING) { in compress_event_handler()
576 spin_unlock_irqrestore(&prtd->lock, flags); in compress_event_handler()
580 avail = prtd->bytes_received - prtd->bytes_sent; in compress_event_handler()
581 if (avail > prtd->pcm_count) { in compress_event_handler()
582 bytes_to_write = prtd->pcm_count; in compress_event_handler()
584 if (substream->partial_drain || prtd->notify_on_drain) in compress_event_handler()
592 q6asm_stream_remove_trailing_silence(prtd->audio_client, in compress_event_handler()
593 prtd->stream_id, in compress_event_handler()
594 prtd->trailing_samples_drop); in compress_event_handler()
597 q6asm_write_async(prtd->audio_client, prtd->stream_id, in compress_event_handler()
600 prtd->bytes_sent += bytes_to_write; in compress_event_handler()
603 if (prtd->notify_on_drain && is_last_buffer) in compress_event_handler()
604 q6asm_cmd_nowait(prtd->audio_client, in compress_event_handler()
605 prtd->stream_id, CMD_EOS); in compress_event_handler()
607 spin_unlock_irqrestore(&prtd->lock, flags); in compress_event_handler()
623 struct q6asm_dai_rtd *prtd; in q6asm_dai_compr_open() local
633 prtd = kzalloc(sizeof(*prtd), GFP_KERNEL); in q6asm_dai_compr_open()
634 if (!prtd) in q6asm_dai_compr_open()
638 prtd->stream_id = 1; in q6asm_dai_compr_open()
640 prtd->cstream = stream; in q6asm_dai_compr_open()
641 prtd->audio_client = q6asm_audio_client_alloc(dev, in q6asm_dai_compr_open()
643 prtd, stream_id, LEGACY_PCM_MODE); in q6asm_dai_compr_open()
644 if (IS_ERR(prtd->audio_client)) { in q6asm_dai_compr_open()
646 ret = PTR_ERR(prtd->audio_client); in q6asm_dai_compr_open()
653 &prtd->dma_buffer); in q6asm_dai_compr_open()
660 prtd->phys = prtd->dma_buffer.addr; in q6asm_dai_compr_open()
662 prtd->phys = prtd->dma_buffer.addr | (pdata->sid << 32); in q6asm_dai_compr_open()
664 snd_compr_set_runtime_buffer(stream, &prtd->dma_buffer); in q6asm_dai_compr_open()
665 spin_lock_init(&prtd->lock); in q6asm_dai_compr_open()
666 runtime->private_data = prtd; in q6asm_dai_compr_open()
671 q6asm_audio_client_free(prtd->audio_client); in q6asm_dai_compr_open()
673 kfree(prtd); in q6asm_dai_compr_open()
682 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_dai_compr_free() local
685 if (prtd->audio_client) { in q6asm_dai_compr_free()
686 if (prtd->state) { in q6asm_dai_compr_free()
687 q6asm_cmd(prtd->audio_client, prtd->stream_id, in q6asm_dai_compr_free()
689 if (prtd->next_track_stream_id) { in q6asm_dai_compr_free()
690 q6asm_cmd(prtd->audio_client, in q6asm_dai_compr_free()
691 prtd->next_track_stream_id, in q6asm_dai_compr_free()
696 snd_dma_free_pages(&prtd->dma_buffer); in q6asm_dai_compr_free()
698 prtd->audio_client); in q6asm_dai_compr_free()
699 q6asm_audio_client_free(prtd->audio_client); in q6asm_dai_compr_free()
700 prtd->audio_client = NULL; in q6asm_dai_compr_free()
703 kfree(prtd); in q6asm_dai_compr_free()
714 struct q6asm_dai_rtd *prtd = runtime->private_data; in __q6asm_dai_compr_set_codec_params() local
728 codec_options = &(prtd->codec.options); in __q6asm_dai_compr_set_codec_params()
730 memcpy(&prtd->codec, codec, sizeof(*codec)); in __q6asm_dai_compr_set_codec_params()
747 ret = q6asm_stream_media_format_block_flac(prtd->audio_client, in __q6asm_dai_compr_set_codec_params()
765 wma_cfg.bits_per_sample = prtd->bits_per_sample; in __q6asm_dai_compr_set_codec_params()
808 prtd->audio_client, stream_id, in __q6asm_dai_compr_set_codec_params()
812 prtd->audio_client, stream_id, in __q6asm_dai_compr_set_codec_params()
826 alac_cfg.bit_depth = prtd->bits_per_sample; in __q6asm_dai_compr_set_codec_params()
845 ret = q6asm_stream_media_format_block_alac(prtd->audio_client, in __q6asm_dai_compr_set_codec_params()
860 ape_cfg.bits_per_sample = prtd->bits_per_sample; in __q6asm_dai_compr_set_codec_params()
870 ret = q6asm_stream_media_format_block_ape(prtd->audio_client, in __q6asm_dai_compr_set_codec_params()
891 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_dai_compr_set_params() local
902 if (!prtd || !prtd->audio_client) { in q6asm_dai_compr_set_params()
907 prtd->periods = runtime->fragments; in q6asm_dai_compr_set_params()
908 prtd->pcm_count = runtime->fragment_size; in q6asm_dai_compr_set_params()
909 prtd->pcm_size = runtime->fragments * runtime->fragment_size; in q6asm_dai_compr_set_params()
910 prtd->bits_per_sample = 16; in q6asm_dai_compr_set_params()
913 ret = q6asm_open_write(prtd->audio_client, prtd->stream_id, params->codec.id, in q6asm_dai_compr_set_params()
914 params->codec.profile, prtd->bits_per_sample, in q6asm_dai_compr_set_params()
919 q6asm_audio_client_free(prtd->audio_client); in q6asm_dai_compr_set_params()
920 prtd->audio_client = NULL; in q6asm_dai_compr_set_params()
925 prtd->session_id = q6asm_get_session_id(prtd->audio_client); in q6asm_dai_compr_set_params()
927 prtd->session_id, dir); in q6asm_dai_compr_set_params()
935 prtd->stream_id); in q6asm_dai_compr_set_params()
941 ret = q6asm_map_memory_regions(dir, prtd->audio_client, prtd->phys, in q6asm_dai_compr_set_params()
942 (prtd->pcm_size / prtd->periods), in q6asm_dai_compr_set_params()
943 prtd->periods); in q6asm_dai_compr_set_params()
950 prtd->state = Q6ASM_STREAM_RUNNING; in q6asm_dai_compr_set_params()
960 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_dai_compr_set_metadata() local
965 prtd->trailing_samples_drop = metadata->value[0]; in q6asm_dai_compr_set_metadata()
968 prtd->initial_samples_drop = metadata->value[0]; in q6asm_dai_compr_set_metadata()
969 if (prtd->next_track_stream_id) { in q6asm_dai_compr_set_metadata()
970 ret = q6asm_open_write(prtd->audio_client, in q6asm_dai_compr_set_metadata()
971 prtd->next_track_stream_id, in q6asm_dai_compr_set_metadata()
972 prtd->codec.id, in q6asm_dai_compr_set_metadata()
973 prtd->codec.profile, in q6asm_dai_compr_set_metadata()
974 prtd->bits_per_sample, in q6asm_dai_compr_set_metadata()
981 &prtd->codec, in q6asm_dai_compr_set_metadata()
982 prtd->next_track_stream_id); in q6asm_dai_compr_set_metadata()
988 ret = q6asm_stream_remove_initial_silence(prtd->audio_client, in q6asm_dai_compr_set_metadata()
989 prtd->next_track_stream_id, in q6asm_dai_compr_set_metadata()
990 prtd->initial_samples_drop); in q6asm_dai_compr_set_metadata()
991 prtd->next_track_stream_id = 0; in q6asm_dai_compr_set_metadata()
1008 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_dai_compr_trigger() local
1015 ret = q6asm_run_nowait(prtd->audio_client, prtd->stream_id, in q6asm_dai_compr_trigger()
1019 prtd->state = Q6ASM_STREAM_STOPPED; in q6asm_dai_compr_trigger()
1020 ret = q6asm_cmd_nowait(prtd->audio_client, prtd->stream_id, in q6asm_dai_compr_trigger()
1025 ret = q6asm_cmd_nowait(prtd->audio_client, prtd->stream_id, in q6asm_dai_compr_trigger()
1029 prtd->next_track = true; in q6asm_dai_compr_trigger()
1030 prtd->next_track_stream_id = (prtd->stream_id == 1 ? 2 : 1); in q6asm_dai_compr_trigger()
1034 prtd->notify_on_drain = true; in q6asm_dai_compr_trigger()
1049 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_dai_compr_pointer() local
1052 spin_lock_irqsave(&prtd->lock, flags); in q6asm_dai_compr_pointer()
1054 tstamp->copied_total = prtd->copied_total; in q6asm_dai_compr_pointer()
1055 tstamp->byte_offset = prtd->copied_total % prtd->pcm_size; in q6asm_dai_compr_pointer()
1057 spin_unlock_irqrestore(&prtd->lock, flags); in q6asm_dai_compr_pointer()
1067 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_compr_copy() local
1076 bytes_received = prtd->bytes_received; in q6asm_compr_copy()
1082 if (prtd->next_track) in q6asm_compr_copy()
1083 bytes_received = ALIGN(prtd->bytes_received, prtd->pcm_count); in q6asm_compr_copy()
1085 app_pointer = bytes_received/prtd->pcm_size; in q6asm_compr_copy()
1086 app_pointer = bytes_received - (app_pointer * prtd->pcm_size); in q6asm_compr_copy()
1087 dstn = prtd->dma_buffer.area + app_pointer; in q6asm_compr_copy()
1089 if (count < prtd->pcm_size - app_pointer) { in q6asm_compr_copy()
1093 copy = prtd->pcm_size - app_pointer; in q6asm_compr_copy()
1096 if (copy_from_user(prtd->dma_buffer.area, buf + copy, in q6asm_compr_copy()
1101 spin_lock_irqsave(&prtd->lock, flags); in q6asm_compr_copy()
1103 bytes_in_flight = prtd->bytes_received - prtd->copied_total; in q6asm_compr_copy()
1105 if (prtd->next_track) { in q6asm_compr_copy()
1106 prtd->next_track = false; in q6asm_compr_copy()
1107 prtd->copied_total = ALIGN(prtd->copied_total, prtd->pcm_count); in q6asm_compr_copy()
1108 prtd->bytes_sent = ALIGN(prtd->bytes_sent, prtd->pcm_count); in q6asm_compr_copy()
1111 prtd->bytes_received = bytes_received + count; in q6asm_compr_copy()
1114 if (prtd->state == Q6ASM_STREAM_RUNNING && (bytes_in_flight == 0)) { in q6asm_compr_copy()
1115 uint32_t bytes_to_write = prtd->pcm_count; in q6asm_compr_copy()
1117 avail = prtd->bytes_received - prtd->bytes_sent; in q6asm_compr_copy()
1119 if (avail < prtd->pcm_count) in q6asm_compr_copy()
1122 q6asm_write_async(prtd->audio_client, prtd->stream_id, in q6asm_compr_copy()
1124 prtd->bytes_sent += bytes_to_write; in q6asm_compr_copy()
1127 spin_unlock_irqrestore(&prtd->lock, flags); in q6asm_compr_copy()
1137 struct q6asm_dai_rtd *prtd = runtime->private_data; in q6asm_dai_compr_mmap() local
1141 prtd->dma_buffer.area, prtd->dma_buffer.addr, in q6asm_dai_compr_mmap()
1142 prtd->dma_buffer.bytes); in q6asm_dai_compr_mmap()