Lines Matching full:pair

33 	struct fsl_asrc_pair *pair = (struct fsl_asrc_pair *)data;  in asrc_input_dma_callback()  local
35 complete(&pair->complete[IN]); in asrc_input_dma_callback()
41 struct fsl_asrc_pair *pair = (struct fsl_asrc_pair *)data; in asrc_output_dma_callback() local
43 complete(&pair->complete[OUT]); in asrc_output_dma_callback()
48 *@pair: Structure pointer of fsl_asrc_pair
52 static void asrc_read_last_fifo(struct fsl_asrc_pair *pair, void *dma_vaddr, u32 *length) in asrc_read_last_fifo() argument
54 struct fsl_asrc *asrc = pair->asrc; in asrc_read_last_fifo()
55 enum asrc_pair_index index = pair->index; in asrc_read_last_fifo()
61 width = snd_pcm_format_physical_width(pair->sample_format[OUT]); in asrc_read_last_fifo()
69 size = asrc->get_output_fifo_size(pair); in asrc_read_last_fifo()
73 for (i = 0; i < size * pair->channels; i++) { in asrc_read_last_fifo()
93 *length += t_size * pair->channels * 4; in asrc_read_last_fifo()
95 *length += t_size * pair->channels * 2; in asrc_read_last_fifo()
97 *length += t_size * pair->channels * 3; in asrc_read_last_fifo()
101 static int asrc_dmaconfig(struct fsl_asrc_pair *pair, in asrc_dmaconfig() argument
106 struct fsl_asrc *asrc = pair->asrc; in asrc_dmaconfig()
137 slave_config.dst_maxburst = asrc->m2m_get_maxburst(IN, pair); in asrc_dmaconfig()
142 slave_config.src_maxburst = asrc->m2m_get_maxburst(OUT, pair); in asrc_dmaconfig()
152 max_period_size = rounddown(ASRC_M2M_PERIOD_SIZE, width * pair->channels / 8); in asrc_dmaconfig()
170 pair->desc[dir] = dmaengine_prep_slave_sg(chan, sg, sg_len, in asrc_dmaconfig()
174 if (!pair->desc[dir]) { in asrc_dmaconfig()
179 pair->desc[dir]->callback = ASRC_xPUT_DMA_CALLBACK(dir); in asrc_dmaconfig()
180 pair->desc[dir]->callback_param = pair; in asrc_dmaconfig()
186 static int asrc_m2m_device_run(struct fsl_asrc_pair *pair, struct snd_compr_task_runtime *task) in asrc_m2m_device_run() argument
188 struct fsl_asrc *asrc = pair->asrc; in asrc_m2m_device_run()
190 enum asrc_pair_index index = pair->index; in asrc_m2m_device_run()
200 if (pair->ratio_mod_flag) { in asrc_m2m_device_run()
201 asrc->m2m_set_ratio_mod(pair, pair->ratio_mod); in asrc_m2m_device_run()
202 pair->ratio_mod_flag = false; in asrc_m2m_device_run()
206 src_buf = &pair->dma_buffer[IN]; in asrc_m2m_device_run()
207 dst_buf = &pair->dma_buffer[OUT]; in asrc_m2m_device_run()
209 width = snd_pcm_format_physical_width(pair->sample_format[IN]); in asrc_m2m_device_run()
214 if (in_buf_len < width * pair->channels / 8 || in asrc_m2m_device_run()
216 in_buf_len % (width * pair->channels / 8)) { in asrc_m2m_device_run()
223 ret = asrc_dmaconfig(pair, in asrc_m2m_device_run()
224 pair->dma_chan[IN], in asrc_m2m_device_run()
233 width = snd_pcm_format_physical_width(pair->sample_format[OUT]); in asrc_m2m_device_run()
235 out_dma_len = asrc->m2m_calc_out_len(pair, in_buf_len); in asrc_m2m_device_run()
238 ret = asrc_dmaconfig(pair, in asrc_m2m_device_run()
239 pair->dma_chan[OUT], in asrc_m2m_device_run()
253 reinit_completion(&pair->complete[IN]); in asrc_m2m_device_run()
254 reinit_completion(&pair->complete[OUT]); in asrc_m2m_device_run()
257 dmaengine_submit(pair->desc[IN]); in asrc_m2m_device_run()
258 dma_async_issue_pending(pair->desc[IN]->chan); in asrc_m2m_device_run()
260 dmaengine_submit(pair->desc[OUT]); in asrc_m2m_device_run()
261 dma_async_issue_pending(pair->desc[OUT]->chan); in asrc_m2m_device_run()
264 asrc->m2m_start(pair); in asrc_m2m_device_run()
266 if (!wait_for_completion_interruptible_timeout(&pair->complete[IN], 10 * HZ)) { in asrc_m2m_device_run()
273 if (!wait_for_completion_interruptible_timeout(&pair->complete[OUT], 10 * HZ)) { in asrc_m2m_device_run()
281 asrc_read_last_fifo(pair, dst_buf->area, &out_dma_len); in asrc_m2m_device_run()
293 struct fsl_asrc_pair *pair; in fsl_asrc_m2m_comp_open() local
296 pair = kzalloc(sizeof(*pair) + asrc->pair_priv_size, GFP_KERNEL); in fsl_asrc_m2m_comp_open()
297 if (!pair) in fsl_asrc_m2m_comp_open()
300 pair->private = (void *)pair + sizeof(struct fsl_asrc_pair); in fsl_asrc_m2m_comp_open()
301 pair->asrc = asrc; in fsl_asrc_m2m_comp_open()
303 init_completion(&pair->complete[IN]); in fsl_asrc_m2m_comp_open()
304 init_completion(&pair->complete[OUT]); in fsl_asrc_m2m_comp_open()
306 runtime->private_data = pair; in fsl_asrc_m2m_comp_open()
309 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, dev, size, &pair->dma_buffer[IN]); in fsl_asrc_m2m_comp_open()
313 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, dev, size, &pair->dma_buffer[OUT]); in fsl_asrc_m2m_comp_open()
326 snd_dma_free_pages(&pair->dma_buffer[OUT]); in fsl_asrc_m2m_comp_open()
328 snd_dma_free_pages(&pair->dma_buffer[IN]); in fsl_asrc_m2m_comp_open()
330 kfree(pair); in fsl_asrc_m2m_comp_open()
338 struct fsl_asrc_pair *pair = runtime->private_data; in fsl_asrc_m2m_comp_release() local
343 snd_dma_free_pages(&pair->dma_buffer[IN]); in fsl_asrc_m2m_comp_release()
344 snd_dma_free_pages(&pair->dma_buffer[OUT]); in fsl_asrc_m2m_comp_release()
356 struct fsl_asrc_pair *pair = runtime->private_data; in fsl_asrc_m2m_comp_set_params() local
365 pair->sample_format[IN] = (__force snd_pcm_format_t)params->codec.format; in fsl_asrc_m2m_comp_set_params()
370 pair->sample_format[OUT] = (__force snd_pcm_format_t)params->codec.pcm_format; in fsl_asrc_m2m_comp_set_params()
377 pair->rate[IN] = params->codec.sample_rate; in fsl_asrc_m2m_comp_set_params()
386 pair->rate[OUT] = params->codec.options.src_d.out_sample_rate; in fsl_asrc_m2m_comp_set_params()
397 pair->channels = params->codec.ch_in; in fsl_asrc_m2m_comp_set_params()
398 pair->buf_len[IN] = params->buffer.fragment_size; in fsl_asrc_m2m_comp_set_params()
399 pair->buf_len[OUT] = params->buffer.fragment_size; in fsl_asrc_m2m_comp_set_params()
461 struct fsl_asrc_pair *pair = runtime->private_data; in fsl_asrc_m2m_comp_task_create() local
468 exp_info_in.priv = &pair->dma_buffer[IN]; in fsl_asrc_m2m_comp_task_create()
478 exp_info_out.priv = &pair->dma_buffer[OUT]; in fsl_asrc_m2m_comp_task_create()
485 /* Request asrc pair/context */ in fsl_asrc_m2m_comp_task_create()
486 ret = asrc->request_pair(pair->channels, pair); in fsl_asrc_m2m_comp_task_create()
488 dev_err(dev, "failed to request pair: %d\n", ret); in fsl_asrc_m2m_comp_task_create()
492 ret = asrc->m2m_prepare(pair); in fsl_asrc_m2m_comp_task_create()
494 dev_err(dev, "failed to start pair part one: %d\n", ret); in fsl_asrc_m2m_comp_task_create()
499 pair->dma_chan[IN] = asrc->get_dma_channel(pair, IN); in fsl_asrc_m2m_comp_task_create()
500 if (!pair->dma_chan[IN]) { in fsl_asrc_m2m_comp_task_create()
501 dev_err(dev, "[ctx%d] failed to get input DMA channel\n", pair->index); in fsl_asrc_m2m_comp_task_create()
506 pair->dma_chan[OUT] = asrc->get_dma_channel(pair, OUT); in fsl_asrc_m2m_comp_task_create()
507 if (!pair->dma_chan[OUT]) { in fsl_asrc_m2m_comp_task_create()
508 dev_err(dev, "[ctx%d] failed to get output DMA channel\n", pair->index); in fsl_asrc_m2m_comp_task_create()
516 dma_release_channel(pair->dma_chan[IN]); in fsl_asrc_m2m_comp_task_create()
519 asrc->m2m_unprepare(pair); in fsl_asrc_m2m_comp_task_create()
521 asrc->release_pair(pair); in fsl_asrc_m2m_comp_task_create()
530 struct fsl_asrc_pair *pair = runtime->private_data; in fsl_asrc_m2m_comp_task_start() local
532 return asrc_m2m_device_run(pair, task); in fsl_asrc_m2m_comp_task_start()
546 struct fsl_asrc_pair *pair = runtime->private_data; in fsl_asrc_m2m_comp_task_free() local
548 /* Stop & release pair/context */ in fsl_asrc_m2m_comp_task_free()
550 asrc->m2m_stop(pair); in fsl_asrc_m2m_comp_task_free()
553 asrc->m2m_unprepare(pair); in fsl_asrc_m2m_comp_task_free()
554 asrc->release_pair(pair); in fsl_asrc_m2m_comp_task_free()
557 if (pair->dma_chan[IN]) in fsl_asrc_m2m_comp_task_free()
558 dma_release_channel(pair->dma_chan[IN]); in fsl_asrc_m2m_comp_task_free()
559 if (pair->dma_chan[OUT]) in fsl_asrc_m2m_comp_task_free()
560 dma_release_channel(pair->dma_chan[OUT]); in fsl_asrc_m2m_comp_task_free()
633 struct fsl_asrc_pair *pair; in fsl_asrc_m2m_suspend() local
637 pair = asrc->pair[i]; in fsl_asrc_m2m_suspend()
638 if (!pair || !pair->dma_buffer[IN].area || !pair->dma_buffer[OUT].area) in fsl_asrc_m2m_suspend()
640 if (!completion_done(&pair->complete[IN])) { in fsl_asrc_m2m_suspend()
641 if (pair->dma_chan[IN]) in fsl_asrc_m2m_suspend()
642 dmaengine_terminate_all(pair->dma_chan[IN]); in fsl_asrc_m2m_suspend()
643 asrc_input_dma_callback((void *)pair); in fsl_asrc_m2m_suspend()
645 if (!completion_done(&pair->complete[OUT])) { in fsl_asrc_m2m_suspend()
646 if (pair->dma_chan[OUT]) in fsl_asrc_m2m_suspend()
647 dmaengine_terminate_all(pair->dma_chan[OUT]); in fsl_asrc_m2m_suspend()
648 asrc_output_dma_callback((void *)pair); in fsl_asrc_m2m_suspend()
652 asrc->m2m_pair_suspend(pair); in fsl_asrc_m2m_suspend()
661 struct fsl_asrc_pair *pair; in fsl_asrc_m2m_resume() local
665 pair = asrc->pair[i]; in fsl_asrc_m2m_resume()
666 if (!pair) in fsl_asrc_m2m_resume()
669 asrc->m2m_pair_resume(pair); in fsl_asrc_m2m_resume()