Lines Matching refs:prtd
166 static inline ssize_t dlp_channels_to_bytes(struct dmaengine_dlp_runtime_data *prtd, in dlp_channels_to_bytes() argument
169 return (prtd->frame_bytes / prtd->channels) * channels; in dlp_channels_to_bytes()
172 static inline ssize_t dlp_frames_to_bytes(struct dmaengine_dlp_runtime_data *prtd, in dlp_frames_to_bytes() argument
175 return size * prtd->frame_bytes; in dlp_frames_to_bytes()
178 static inline snd_pcm_sframes_t dlp_bytes_to_frames(struct dmaengine_dlp_runtime_data *prtd, in dlp_bytes_to_frames() argument
181 return size / prtd->frame_bytes; in dlp_bytes_to_frames()
200 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in snd_dmaengine_dlp_get_chan() local
202 return prtd->dma_chan; in snd_dmaengine_dlp_get_chan()
214 static int dlp_get_offset_size(struct dmaengine_dlp_runtime_data *prtd, in dlp_get_offset_size() argument
217 bool is_playback = prtd->stream == SNDRV_PCM_STREAM_PLAYBACK; in dlp_get_offset_size()
223 *size = dlp_channels_to_bytes(prtd, 1); in dlp_get_offset_size()
226 *ofs = dlp_channels_to_bytes(prtd, 1); in dlp_get_offset_size()
227 *size = dlp_channels_to_bytes(prtd, 1); in dlp_get_offset_size()
232 *size = dlp_frames_to_bytes(prtd, 1); in dlp_get_offset_size()
236 *ofs = dlp_channels_to_bytes(prtd, 1); in dlp_get_offset_size()
237 *size = dlp_channels_to_bytes(prtd, 1); in dlp_get_offset_size()
242 *size = dlp_channels_to_bytes(prtd, 2); in dlp_get_offset_size()
247 *size = dlp_channels_to_bytes(prtd, 2); in dlp_get_offset_size()
249 *ofs = dlp_channels_to_bytes(prtd, 2); in dlp_get_offset_size()
250 *size = dlp_channels_to_bytes(prtd, 2); in dlp_get_offset_size()
256 *size = dlp_frames_to_bytes(prtd, 1); in dlp_get_offset_size()
260 *ofs = dlp_channels_to_bytes(prtd, 2); in dlp_get_offset_size()
261 *size = dlp_channels_to_bytes(prtd, 1); in dlp_get_offset_size()
266 *size = dlp_channels_to_bytes(prtd, 4); in dlp_get_offset_size()
271 *size = dlp_channels_to_bytes(prtd, 2); in dlp_get_offset_size()
273 *ofs = dlp_channels_to_bytes(prtd, 4); in dlp_get_offset_size()
274 *size = dlp_channels_to_bytes(prtd, 2); in dlp_get_offset_size()
280 *size = dlp_frames_to_bytes(prtd, 1); in dlp_get_offset_size()
284 *ofs = dlp_channels_to_bytes(prtd, 4); in dlp_get_offset_size()
285 *size = dlp_channels_to_bytes(prtd, 1); in dlp_get_offset_size()
290 *size = dlp_channels_to_bytes(prtd, 6); in dlp_get_offset_size()
295 *size = dlp_channels_to_bytes(prtd, 2); in dlp_get_offset_size()
297 *ofs = dlp_channels_to_bytes(prtd, 6); in dlp_get_offset_size()
298 *size = dlp_channels_to_bytes(prtd, 2); in dlp_get_offset_size()
304 *size = dlp_frames_to_bytes(prtd, 1); in dlp_get_offset_size()
308 *ofs = dlp_channels_to_bytes(prtd, 6); in dlp_get_offset_size()
309 *size = dlp_channels_to_bytes(prtd, 1); in dlp_get_offset_size()
314 *size = dlp_channels_to_bytes(prtd, 8); in dlp_get_offset_size()
319 *size = dlp_channels_to_bytes(prtd, 2); in dlp_get_offset_size()
321 *ofs = dlp_channels_to_bytes(prtd, 8); in dlp_get_offset_size()
322 *size = dlp_channels_to_bytes(prtd, 2); in dlp_get_offset_size()
328 *size = dlp_frames_to_bytes(prtd, 1); in dlp_get_offset_size()
332 *ofs = dlp_channels_to_bytes(prtd, 8); in dlp_get_offset_size()
333 *size = dlp_channels_to_bytes(prtd, 1); in dlp_get_offset_size()
339 *size = dlp_channels_to_bytes(prtd, 8); in dlp_get_offset_size()
341 *ofs = dlp_channels_to_bytes(prtd, 8); in dlp_get_offset_size()
342 *size = dlp_channels_to_bytes(prtd, 8); in dlp_get_offset_size()
356 static int dlp_mix_frame_buffer(struct dmaengine_dlp_runtime_data *prtd, void *buf) in dlp_mix_frame_buffer() argument
358 int sample_bytes = dlp_channels_to_bytes(prtd, 1); in dlp_mix_frame_buffer()
365 for (i = 0; i < prtd->channels; i++) in dlp_mix_frame_buffer()
366 v16 += (p16[i] / prtd->channels); in dlp_mix_frame_buffer()
370 for (i = 0; i < prtd->channels; i++) in dlp_mix_frame_buffer()
371 v32 += (p32[i] / prtd->channels); in dlp_mix_frame_buffer()
386 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in dmaengine_dlp_hw_params() local
411 prtd->frame_bytes = snd_pcm_format_size(params_format(params), in dmaengine_dlp_hw_params()
413 prtd->period_sz = params_period_size(params); in dmaengine_dlp_hw_params()
414 prtd->buf_sz = params_buffer_size(params); in dmaengine_dlp_hw_params()
415 prtd->channels = params_channels(params); in dmaengine_dlp_hw_params()
418 prtd->buf_sz *= PBUF_CNT; in dmaengine_dlp_hw_params()
470 struct dmaengine_dlp_runtime_data *prtd; in dmaengine_dlp_open() local
485 prtd = kzalloc(sizeof(*prtd), GFP_KERNEL); in dmaengine_dlp_open()
486 if (!prtd) in dmaengine_dlp_open()
490 prtd, substream->stream ? "C" : "P"); in dmaengine_dlp_open()
492 kref_init(&prtd->refcount); in dmaengine_dlp_open()
493 prtd->parent = dlp; in dmaengine_dlp_open()
494 prtd->stream = substream->stream; in dmaengine_dlp_open()
495 prtd->dma_chan = chan; in dmaengine_dlp_open()
497 substream->runtime->private_data = prtd; in dmaengine_dlp_open()
506 struct dmaengine_dlp_runtime_data *prtd = in dmaengine_free_prtd() local
509 dlp_info("PRTD-FREE: 0x%px\n", prtd); in dmaengine_free_prtd()
511 kfree(prtd->buf); in dmaengine_free_prtd()
512 kfree(prtd); in dmaengine_free_prtd()
518 struct dmaengine_dlp_runtime_data *prtd, *_pt; in free_ref_list() local
521 list_for_each_entry_safe(prtd, _pt, &dlp->ref_list, node) { in free_ref_list()
522 list_del(&prtd->node); in free_ref_list()
523 kref_put(&prtd->refcount, dmaengine_free_prtd); in free_ref_list()
532 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in dmaengine_dlp_close() local
534 dmaengine_synchronize(prtd->dma_chan); in dmaengine_dlp_close()
541 kref_put(&prtd->refcount, dmaengine_free_prtd); in dmaengine_dlp_close()
552 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in dmaengine_dlp_pointer() local
557 dmaengine_tx_status(prtd->dma_chan, prtd->cookie, &state); in dmaengine_dlp_pointer()
562 return dlp_bytes_to_frames(prtd, pos); in dmaengine_dlp_pointer()
568 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in dmaengine_dlp_dma_complete() local
569 struct dmaengine_dlp *dlp = prtd->parent; in dmaengine_dlp_dma_complete()
575 prtd->period_elapsed++; in dmaengine_dlp_dma_complete()
576 prtd->hw_ptr = prtd->period_elapsed * prtd->period_sz; in dmaengine_dlp_dma_complete()
583 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in dmaengine_dlp_prepare_and_submit() local
584 struct dma_chan *chan = prtd->dma_chan; in dmaengine_dlp_prepare_and_submit()
604 prtd->cookie = dmaengine_submit(desc); in dmaengine_dlp_prepare_and_submit()
616 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in dmaengine_dlp_setup() local
639 a = (prtd->period_elapsed * prtd->period_sz) + (a % prtd->period_sz); in dmaengine_dlp_setup()
642 fifo_a = dlp_bytes_to_frames(prtd, fifo_a * 4); in dmaengine_dlp_setup()
669 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in dmaengine_dlp_release() local
681 hw_ptr = (prtd->period_elapsed * prtd->period_sz) + (hw_ptr % prtd->period_sz); in dmaengine_dlp_release()
684 prtd->period_elapsed = 0; in dmaengine_dlp_release()
685 prtd->hw_ptr = 0; in dmaengine_dlp_release()
712 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in dmaengine_dlp_trigger() local
721 dma_async_issue_pending(prtd->dma_chan); in dmaengine_dlp_trigger()
726 dmaengine_resume(prtd->dma_chan); in dmaengine_dlp_trigger()
730 dmaengine_pause(prtd->dma_chan); in dmaengine_dlp_trigger()
733 dmaengine_terminate_async(prtd->dma_chan); in dmaengine_dlp_trigger()
737 dmaengine_pause(prtd->dma_chan); in dmaengine_dlp_trigger()
741 dmaengine_terminate_async(prtd->dma_chan); in dmaengine_dlp_trigger()
811 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in process_capture() local
814 snd_pcm_sframes_t frames = dlp_bytes_to_frames(prtd, bytes); in process_capture()
818 char *cbuf = prtd->buf, *pbuf = NULL; in process_capture()
828 memset(cbuf, 0x22, dlp_channels_to_bytes(prtd, 1)); in process_capture()
830 ret = dlp_get_offset_size(prtd, dlp->mode, &ofs_cap, &size_cap, NULL); in process_capture()
838 cbuf = prtd->buf + dlp_frames_to_bytes(prtd, i) + ofs_cap; in process_capture()
843 if (!prtd->ref) in process_capture()
844 prtd->ref = get_ref(component); in process_capture()
845 pref = prtd->ref; in process_capture()
867 prtd->ref = NULL; in process_capture()
911 cbuf = prtd->buf + dlp_frames_to_bytes(prtd, j + frames_consumed) + ofs_cap; in process_capture()
923 prtd->ref = NULL; in process_capture()
992 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in dmaengine_dlp_copy_user() local
1005 dma_ptr = prtd->buf; in dmaengine_dlp_copy_user()
1056 struct dmaengine_dlp_runtime_data *prtd = substream_to_prtd(substream); in dmaengine_dlp_prepare() local
1058 int buf_bytes = dlp_frames_to_bytes(prtd, prtd->buf_sz); in dmaengine_dlp_prepare()
1061 pref = kmemdup(prtd, sizeof(*prtd), GFP_KERNEL); in dmaengine_dlp_prepare()
1078 prtd->buf = kzalloc(buf_bytes, GFP_KERNEL); in dmaengine_dlp_prepare()
1079 if (!prtd->buf) in dmaengine_dlp_prepare()