Lines Matching refs:ctx

158 	struct deinterlace_ctx *ctx = priv;  in deinterlace_job_ready()  local
159 struct deinterlace_dev *pcdev = ctx->dev; in deinterlace_job_ready()
161 if ((v4l2_m2m_num_src_bufs_ready(ctx->m2m_ctx) > 0) in deinterlace_job_ready()
162 && (v4l2_m2m_num_dst_bufs_ready(ctx->m2m_ctx) > 0) in deinterlace_job_ready()
163 && (atomic_read(&ctx->dev->busy) == 0)) { in deinterlace_job_ready()
175 struct deinterlace_ctx *ctx = priv; in deinterlace_job_abort() local
176 struct deinterlace_dev *pcdev = ctx->dev; in deinterlace_job_abort()
178 ctx->aborting = 1; in deinterlace_job_abort()
182 v4l2_m2m_job_finish(pcdev->m2m_dev, ctx->m2m_ctx); in deinterlace_job_abort()
187 struct deinterlace_ctx *ctx = priv; in deinterlace_lock() local
188 struct deinterlace_dev *pcdev = ctx->dev; in deinterlace_lock()
194 struct deinterlace_ctx *ctx = priv; in deinterlace_unlock() local
195 struct deinterlace_dev *pcdev = ctx->dev; in deinterlace_unlock()
224 static void deinterlace_issue_dma(struct deinterlace_ctx *ctx, int op, in deinterlace_issue_dma() argument
229 struct deinterlace_dev *pcdev = ctx->dev; in deinterlace_issue_dma()
238 src_buf = v4l2_m2m_next_src_buf(ctx->m2m_ctx); in deinterlace_issue_dma()
239 dst_buf = v4l2_m2m_next_dst_buf(ctx->m2m_ctx); in deinterlace_issue_dma()
256 ctx->xt->numf = s_height / 2; in deinterlace_issue_dma()
257 ctx->xt->sgl[0].size = s_width; in deinterlace_issue_dma()
258 ctx->xt->sgl[0].icg = s_width; in deinterlace_issue_dma()
259 ctx->xt->src_start = p_in; in deinterlace_issue_dma()
260 ctx->xt->dst_start = p_out; in deinterlace_issue_dma()
263 ctx->xt->numf = s_height / 2; in deinterlace_issue_dma()
264 ctx->xt->sgl[0].size = s_width; in deinterlace_issue_dma()
265 ctx->xt->sgl[0].icg = s_width; in deinterlace_issue_dma()
266 ctx->xt->src_start = p_in + s_size / 2; in deinterlace_issue_dma()
267 ctx->xt->dst_start = p_out + s_width; in deinterlace_issue_dma()
270 ctx->xt->numf = s_height / 4; in deinterlace_issue_dma()
271 ctx->xt->sgl[0].size = s_width / 2; in deinterlace_issue_dma()
272 ctx->xt->sgl[0].icg = s_width / 2; in deinterlace_issue_dma()
273 ctx->xt->src_start = p_in + s_size; in deinterlace_issue_dma()
274 ctx->xt->dst_start = p_out + s_size; in deinterlace_issue_dma()
277 ctx->xt->numf = s_height / 4; in deinterlace_issue_dma()
278 ctx->xt->sgl[0].size = s_width / 2; in deinterlace_issue_dma()
279 ctx->xt->sgl[0].icg = s_width / 2; in deinterlace_issue_dma()
280 ctx->xt->src_start = p_in + (9 * s_size) / 8; in deinterlace_issue_dma()
281 ctx->xt->dst_start = p_out + s_size + s_width / 2; in deinterlace_issue_dma()
284 ctx->xt->numf = s_height / 4; in deinterlace_issue_dma()
285 ctx->xt->sgl[0].size = s_width / 2; in deinterlace_issue_dma()
286 ctx->xt->sgl[0].icg = s_width / 2; in deinterlace_issue_dma()
287 ctx->xt->src_start = p_in + (5 * s_size) / 4; in deinterlace_issue_dma()
288 ctx->xt->dst_start = p_out + (5 * s_size) / 4; in deinterlace_issue_dma()
291 ctx->xt->numf = s_height / 4; in deinterlace_issue_dma()
292 ctx->xt->sgl[0].size = s_width / 2; in deinterlace_issue_dma()
293 ctx->xt->sgl[0].icg = s_width / 2; in deinterlace_issue_dma()
294 ctx->xt->src_start = p_in + (11 * s_size) / 8; in deinterlace_issue_dma()
295 ctx->xt->dst_start = p_out + (5 * s_size) / 4 + s_width / 2; in deinterlace_issue_dma()
298 ctx->xt->numf = s_height / 2; in deinterlace_issue_dma()
299 ctx->xt->sgl[0].size = s_width; in deinterlace_issue_dma()
300 ctx->xt->sgl[0].icg = s_width; in deinterlace_issue_dma()
301 ctx->xt->src_start = p_in; in deinterlace_issue_dma()
302 ctx->xt->dst_start = p_out + s_width; in deinterlace_issue_dma()
305 ctx->xt->numf = s_height / 4; in deinterlace_issue_dma()
306 ctx->xt->sgl[0].size = s_width / 2; in deinterlace_issue_dma()
307 ctx->xt->sgl[0].icg = s_width / 2; in deinterlace_issue_dma()
308 ctx->xt->src_start = p_in + s_size; in deinterlace_issue_dma()
309 ctx->xt->dst_start = p_out + s_size + s_width / 2; in deinterlace_issue_dma()
312 ctx->xt->numf = s_height / 4; in deinterlace_issue_dma()
313 ctx->xt->sgl[0].size = s_width / 2; in deinterlace_issue_dma()
314 ctx->xt->sgl[0].icg = s_width / 2; in deinterlace_issue_dma()
315 ctx->xt->src_start = p_in + (5 * s_size) / 4; in deinterlace_issue_dma()
316 ctx->xt->dst_start = p_out + (5 * s_size) / 4 + s_width / 2; in deinterlace_issue_dma()
319 ctx->xt->numf = s_height / 2; in deinterlace_issue_dma()
320 ctx->xt->sgl[0].size = s_width * 2; in deinterlace_issue_dma()
321 ctx->xt->sgl[0].icg = s_width * 2; in deinterlace_issue_dma()
322 ctx->xt->src_start = p_in; in deinterlace_issue_dma()
323 ctx->xt->dst_start = p_out; in deinterlace_issue_dma()
326 ctx->xt->numf = s_height / 2; in deinterlace_issue_dma()
327 ctx->xt->sgl[0].size = s_width * 2; in deinterlace_issue_dma()
328 ctx->xt->sgl[0].icg = s_width * 2; in deinterlace_issue_dma()
329 ctx->xt->src_start = p_in + s_size; in deinterlace_issue_dma()
330 ctx->xt->dst_start = p_out + s_width * 2; in deinterlace_issue_dma()
334 ctx->xt->numf = s_height / 2; in deinterlace_issue_dma()
335 ctx->xt->sgl[0].size = s_width * 2; in deinterlace_issue_dma()
336 ctx->xt->sgl[0].icg = s_width * 2; in deinterlace_issue_dma()
337 ctx->xt->src_start = p_in; in deinterlace_issue_dma()
338 ctx->xt->dst_start = p_out + s_width * 2; in deinterlace_issue_dma()
343 ctx->xt->frame_size = 1; in deinterlace_issue_dma()
344 ctx->xt->dir = DMA_MEM_TO_MEM; in deinterlace_issue_dma()
345 ctx->xt->src_sgl = false; in deinterlace_issue_dma()
346 ctx->xt->dst_sgl = true; in deinterlace_issue_dma()
349 tx = dmadev->device_prep_interleaved_dma(chan, ctx->xt, flags); in deinterlace_issue_dma()
357 tx->callback_param = ctx; in deinterlace_issue_dma()
360 ctx->cookie = dmaengine_submit(tx); in deinterlace_issue_dma()
361 if (dma_submit_error(ctx->cookie)) { in deinterlace_issue_dma()
364 ctx->cookie, (unsigned)p_in, (unsigned)p_out, in deinterlace_issue_dma()
374 struct deinterlace_ctx *ctx = priv; in deinterlace_device_run() local
377 atomic_set(&ctx->dev->busy, 1); in deinterlace_device_run()
379 dprintk(ctx->dev, "%s: DMA try issue.\n", __func__); in deinterlace_device_run()
403 dprintk(ctx->dev, "%s: yuv420 interlaced tb.\n", in deinterlace_device_run()
405 deinterlace_issue_dma(ctx, YUV420_DMA_Y_ODD, 0); in deinterlace_device_run()
406 deinterlace_issue_dma(ctx, YUV420_DMA_Y_EVEN, 0); in deinterlace_device_run()
407 deinterlace_issue_dma(ctx, YUV420_DMA_U_ODD, 0); in deinterlace_device_run()
408 deinterlace_issue_dma(ctx, YUV420_DMA_U_EVEN, 0); in deinterlace_device_run()
409 deinterlace_issue_dma(ctx, YUV420_DMA_V_ODD, 0); in deinterlace_device_run()
410 deinterlace_issue_dma(ctx, YUV420_DMA_V_EVEN, 1); in deinterlace_device_run()
414 dprintk(ctx->dev, "%s: yuv420 interlaced line doubling.\n", in deinterlace_device_run()
416 deinterlace_issue_dma(ctx, YUV420_DMA_Y_ODD, 0); in deinterlace_device_run()
417 deinterlace_issue_dma(ctx, YUV420_DMA_Y_ODD_DOUBLING, 0); in deinterlace_device_run()
418 deinterlace_issue_dma(ctx, YUV420_DMA_U_ODD, 0); in deinterlace_device_run()
419 deinterlace_issue_dma(ctx, YUV420_DMA_U_ODD_DOUBLING, 0); in deinterlace_device_run()
420 deinterlace_issue_dma(ctx, YUV420_DMA_V_ODD, 0); in deinterlace_device_run()
421 deinterlace_issue_dma(ctx, YUV420_DMA_V_ODD_DOUBLING, 1); in deinterlace_device_run()
430 dprintk(ctx->dev, "%s: yuyv interlaced_tb.\n", in deinterlace_device_run()
432 deinterlace_issue_dma(ctx, YUYV_DMA_ODD, 0); in deinterlace_device_run()
433 deinterlace_issue_dma(ctx, YUYV_DMA_EVEN, 1); in deinterlace_device_run()
437 dprintk(ctx->dev, "%s: yuyv interlaced line doubling.\n", in deinterlace_device_run()
439 deinterlace_issue_dma(ctx, YUYV_DMA_ODD, 0); in deinterlace_device_run()
440 deinterlace_issue_dma(ctx, YUYV_DMA_EVEN_DOUBLING, 1); in deinterlace_device_run()
446 dprintk(ctx->dev, "%s: DMA issue done.\n", __func__); in deinterlace_device_run()
512 static int vidioc_g_fmt(struct deinterlace_ctx *ctx, struct v4l2_format *f) in vidioc_g_fmt() argument
517 vq = v4l2_m2m_get_vq(ctx->m2m_ctx, f->type); in vidioc_g_fmt()
538 f->fmt.pix.colorspace = ctx->colorspace; in vidioc_g_fmt()
574 struct deinterlace_ctx *ctx = priv; in vidioc_try_fmt_vid_cap() local
580 f->fmt.pix.colorspace = ctx->colorspace; in vidioc_try_fmt_vid_cap()
609 static int vidioc_s_fmt(struct deinterlace_ctx *ctx, struct v4l2_format *f) in vidioc_s_fmt() argument
614 vq = v4l2_m2m_get_vq(ctx->m2m_ctx, f->type); in vidioc_s_fmt()
623 v4l2_err(&ctx->dev->v4l2_dev, "%s queue busy\n", __func__); in vidioc_s_fmt()
629 v4l2_err(&ctx->dev->v4l2_dev, in vidioc_s_fmt()
651 dprintk(ctx->dev, in vidioc_s_fmt()
673 struct deinterlace_ctx *ctx = priv; in vidioc_s_fmt_vid_out() local
682 ctx->colorspace = f->fmt.pix.colorspace; in vidioc_s_fmt_vid_out()
690 struct deinterlace_ctx *ctx = priv; in vidioc_reqbufs() local
692 return v4l2_m2m_reqbufs(file, ctx->m2m_ctx, reqbufs); in vidioc_reqbufs()
698 struct deinterlace_ctx *ctx = priv; in vidioc_querybuf() local
700 return v4l2_m2m_querybuf(file, ctx->m2m_ctx, buf); in vidioc_querybuf()
705 struct deinterlace_ctx *ctx = priv; in vidioc_qbuf() local
707 return v4l2_m2m_qbuf(file, ctx->m2m_ctx, buf); in vidioc_qbuf()
712 struct deinterlace_ctx *ctx = priv; in vidioc_dqbuf() local
714 return v4l2_m2m_dqbuf(file, ctx->m2m_ctx, buf); in vidioc_dqbuf()
721 struct deinterlace_ctx *ctx = priv; in vidioc_streamon() local
728 v4l2_err(&ctx->dev->v4l2_dev, in vidioc_streamon()
738 v4l2_err(&ctx->dev->v4l2_dev, in vidioc_streamon()
747 v4l2_err(&ctx->dev->v4l2_dev, in vidioc_streamon()
757 return v4l2_m2m_streamon(file, ctx->m2m_ctx, type); in vidioc_streamon()
763 struct deinterlace_ctx *ctx = priv; in vidioc_streamoff() local
765 return v4l2_m2m_streamoff(file, ctx->m2m_ctx, type); in vidioc_streamoff()
804 struct deinterlace_ctx *ctx = vb2_get_drv_priv(vq); in deinterlace_queue_setup() local
823 alloc_ctxs[0] = ctx->dev->alloc_ctx; in deinterlace_queue_setup()
825 dprintk(ctx->dev, "get %d buffer(s) of size %d each.\n", count, size); in deinterlace_queue_setup()
832 struct deinterlace_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue); in deinterlace_buf_prepare() local
835 dprintk(ctx->dev, "type: %d\n", vb->vb2_queue->type); in deinterlace_buf_prepare()
840 dprintk(ctx->dev, "%s data will not fit into plane (%lu < %lu)\n", in deinterlace_buf_prepare()
852 struct deinterlace_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue); in deinterlace_buf_queue() local
853 v4l2_m2m_buf_queue(ctx->m2m_ctx, vb); in deinterlace_buf_queue()
865 struct deinterlace_ctx *ctx = priv; in queue_init() local
870 src_vq->drv_priv = ctx; in queue_init()
887 dst_vq->drv_priv = ctx; in queue_init()
907 struct deinterlace_ctx *ctx = NULL; in deinterlace_open() local
909 ctx = kzalloc(sizeof *ctx, GFP_KERNEL); in deinterlace_open()
910 if (!ctx) in deinterlace_open()
913 file->private_data = ctx; in deinterlace_open()
914 ctx->dev = pcdev; in deinterlace_open()
916 ctx->m2m_ctx = v4l2_m2m_ctx_init(pcdev->m2m_dev, ctx, &queue_init); in deinterlace_open()
917 if (IS_ERR(ctx->m2m_ctx)) { in deinterlace_open()
918 int ret = PTR_ERR(ctx->m2m_ctx); in deinterlace_open()
920 kfree(ctx); in deinterlace_open()
924 ctx->xt = kzalloc(sizeof(struct dma_interleaved_template) + in deinterlace_open()
926 if (!ctx->xt) { in deinterlace_open()
927 kfree(ctx); in deinterlace_open()
931 ctx->colorspace = V4L2_COLORSPACE_REC709; in deinterlace_open()
933 dprintk(pcdev, "Created instance %p, m2m_ctx: %p\n", ctx, ctx->m2m_ctx); in deinterlace_open()
941 struct deinterlace_ctx *ctx = file->private_data; in deinterlace_release() local
943 dprintk(pcdev, "Releasing instance %p\n", ctx); in deinterlace_release()
945 v4l2_m2m_ctx_release(ctx->m2m_ctx); in deinterlace_release()
946 kfree(ctx->xt); in deinterlace_release()
947 kfree(ctx); in deinterlace_release()
955 struct deinterlace_ctx *ctx = file->private_data; in deinterlace_poll() local
958 deinterlace_lock(ctx); in deinterlace_poll()
959 ret = v4l2_m2m_poll(file, ctx->m2m_ctx, wait); in deinterlace_poll()
960 deinterlace_unlock(ctx); in deinterlace_poll()
967 struct deinterlace_ctx *ctx = file->private_data; in deinterlace_mmap() local
969 return v4l2_m2m_mmap(file, ctx->m2m_ctx, vma); in deinterlace_mmap()