Lines Matching refs:ctx
43 void fimc_m2m_job_finish(struct fimc_ctx *ctx, int vb_state) in fimc_m2m_job_finish() argument
47 if (!ctx || !ctx->fh.m2m_ctx) in fimc_m2m_job_finish()
50 src_vb = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx); in fimc_m2m_job_finish()
51 dst_vb = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx); in fimc_m2m_job_finish()
56 v4l2_m2m_job_finish(ctx->fimc_dev->m2m.m2m_dev, in fimc_m2m_job_finish()
57 ctx->fh.m2m_ctx); in fimc_m2m_job_finish()
62 static int fimc_m2m_shutdown(struct fimc_ctx *ctx) in fimc_m2m_shutdown() argument
64 struct fimc_dev *fimc = ctx->fimc_dev; in fimc_m2m_shutdown()
70 fimc_ctx_state_set(FIMC_CTX_SHUT, ctx); in fimc_m2m_shutdown()
73 !fimc_ctx_state_is_set(FIMC_CTX_SHUT, ctx), in fimc_m2m_shutdown()
81 struct fimc_ctx *ctx = q->drv_priv; in start_streaming() local
84 ret = pm_runtime_get_sync(&ctx->fimc_dev->pdev->dev); in start_streaming()
90 struct fimc_ctx *ctx = q->drv_priv; in stop_streaming() local
93 ret = fimc_m2m_shutdown(ctx); in stop_streaming()
95 fimc_m2m_job_finish(ctx, VB2_BUF_STATE_ERROR); in stop_streaming()
97 pm_runtime_put(&ctx->fimc_dev->pdev->dev); in stop_streaming()
103 struct fimc_ctx *ctx = priv; in fimc_device_run() local
109 if (WARN(!ctx, "Null context\n")) in fimc_device_run()
112 fimc = ctx->fimc_dev; in fimc_device_run()
116 sf = &ctx->s_frame; in fimc_device_run()
117 df = &ctx->d_frame; in fimc_device_run()
119 if (ctx->state & FIMC_PARAMS) { in fimc_device_run()
121 fimc_prepare_dma_offset(ctx, sf); in fimc_device_run()
122 fimc_prepare_dma_offset(ctx, df); in fimc_device_run()
125 src_vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); in fimc_device_run()
126 ret = fimc_prepare_addr(ctx, &src_vb->vb2_buf, sf, &sf->paddr); in fimc_device_run()
130 dst_vb = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx); in fimc_device_run()
131 ret = fimc_prepare_addr(ctx, &dst_vb->vb2_buf, df, &df->paddr); in fimc_device_run()
141 if (fimc->m2m.ctx != ctx) { in fimc_device_run()
142 ctx->state |= FIMC_PARAMS; in fimc_device_run()
143 fimc->m2m.ctx = ctx; in fimc_device_run()
146 if (ctx->state & FIMC_PARAMS) { in fimc_device_run()
147 fimc_set_yuv_order(ctx); in fimc_device_run()
148 fimc_hw_set_input_path(ctx); in fimc_device_run()
149 fimc_hw_set_in_dma(ctx); in fimc_device_run()
150 ret = fimc_set_scaler_info(ctx); in fimc_device_run()
153 fimc_hw_set_prescaler(ctx); in fimc_device_run()
154 fimc_hw_set_mainscaler(ctx); in fimc_device_run()
155 fimc_hw_set_target_format(ctx); in fimc_device_run()
156 fimc_hw_set_rotation(ctx); in fimc_device_run()
157 fimc_hw_set_effect(ctx); in fimc_device_run()
158 fimc_hw_set_out_dma(ctx); in fimc_device_run()
160 fimc_hw_set_rgb_alpha(ctx); in fimc_device_run()
161 fimc_hw_set_output_path(ctx); in fimc_device_run()
166 fimc_activate_capture(ctx); in fimc_device_run()
167 ctx->state &= (FIMC_CTX_M2M | FIMC_CTX_CAP); in fimc_device_run()
183 struct fimc_ctx *ctx = vb2_get_drv_priv(vq); in fimc_queue_setup() local
187 f = ctx_get_frame(ctx, vq->type); in fimc_queue_setup()
200 allocators[i] = ctx->fimc_dev->alloc_ctx; in fimc_queue_setup()
207 struct fimc_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue); in fimc_buf_prepare() local
211 frame = ctx_get_frame(ctx, vb->vb2_queue->type); in fimc_buf_prepare()
224 struct fimc_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue); in fimc_buf_queue() local
225 v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vbuf); in fimc_buf_queue()
277 struct fimc_ctx *ctx = fh_to_ctx(fh); in fimc_m2m_g_fmt_mplane() local
278 struct fimc_frame *frame = ctx_get_frame(ctx, f->type); in fimc_m2m_g_fmt_mplane()
287 static int fimc_try_fmt_mplane(struct fimc_ctx *ctx, struct v4l2_format *f) in fimc_try_fmt_mplane() argument
289 struct fimc_dev *fimc = ctx->fimc_dev; in fimc_try_fmt_mplane()
336 struct fimc_ctx *ctx = fh_to_ctx(fh); in fimc_m2m_try_fmt_mplane() local
337 return fimc_try_fmt_mplane(ctx, f); in fimc_m2m_try_fmt_mplane()
364 struct fimc_ctx *ctx = fh_to_ctx(fh); in fimc_m2m_s_fmt_mplane() local
365 struct fimc_dev *fimc = ctx->fimc_dev; in fimc_m2m_s_fmt_mplane()
371 ret = fimc_try_fmt_mplane(ctx, f); in fimc_m2m_s_fmt_mplane()
375 vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, f->type); in fimc_m2m_s_fmt_mplane()
383 frame = &ctx->s_frame; in fimc_m2m_s_fmt_mplane()
385 frame = &ctx->d_frame; in fimc_m2m_s_fmt_mplane()
395 fimc_alpha_ctrl_update(ctx); in fimc_m2m_s_fmt_mplane()
403 struct fimc_ctx *ctx = fh_to_ctx(fh); in fimc_m2m_cropcap() local
406 frame = ctx_get_frame(ctx, cr->type); in fimc_m2m_cropcap()
421 struct fimc_ctx *ctx = fh_to_ctx(fh); in fimc_m2m_g_crop() local
424 frame = ctx_get_frame(ctx, cr->type); in fimc_m2m_g_crop()
436 static int fimc_m2m_try_crop(struct fimc_ctx *ctx, struct v4l2_crop *cr) in fimc_m2m_try_crop() argument
438 struct fimc_dev *fimc = ctx->fimc_dev; in fimc_m2m_try_crop()
449 f = &ctx->d_frame; in fimc_m2m_try_crop()
451 f = &ctx->s_frame; in fimc_m2m_try_crop()
455 min_size = (f == &ctx->s_frame) ? in fimc_m2m_try_crop()
490 struct fimc_ctx *ctx = fh_to_ctx(fh); in fimc_m2m_s_crop() local
491 struct fimc_dev *fimc = ctx->fimc_dev; in fimc_m2m_s_crop()
496 ret = fimc_m2m_try_crop(ctx, &cr); in fimc_m2m_s_crop()
501 &ctx->s_frame : &ctx->d_frame; in fimc_m2m_s_crop()
505 ret = fimc_check_scaler_ratio(ctx, cr.c.width, in fimc_m2m_s_crop()
506 cr.c.height, ctx->d_frame.width, in fimc_m2m_s_crop()
507 ctx->d_frame.height, ctx->rotation); in fimc_m2m_s_crop()
509 ret = fimc_check_scaler_ratio(ctx, ctx->s_frame.width, in fimc_m2m_s_crop()
510 ctx->s_frame.height, cr.c.width, in fimc_m2m_s_crop()
511 cr.c.height, ctx->rotation); in fimc_m2m_s_crop()
523 fimc_ctx_state_set(FIMC_PARAMS, ctx); in fimc_m2m_s_crop()
554 struct fimc_ctx *ctx = priv; in queue_init() local
559 src_vq->drv_priv = ctx; in queue_init()
564 src_vq->lock = &ctx->fimc_dev->lock; in queue_init()
572 dst_vq->drv_priv = ctx; in queue_init()
577 dst_vq->lock = &ctx->fimc_dev->lock; in queue_init()
582 static int fimc_m2m_set_default_format(struct fimc_ctx *ctx) in fimc_m2m_set_default_format() argument
599 __set_frame_format(&ctx->s_frame, fmt, &pixm); in fimc_m2m_set_default_format()
600 __set_frame_format(&ctx->d_frame, fmt, &pixm); in fimc_m2m_set_default_format()
608 struct fimc_ctx *ctx; in fimc_m2m_open() local
622 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); in fimc_m2m_open()
623 if (!ctx) { in fimc_m2m_open()
627 v4l2_fh_init(&ctx->fh, &fimc->m2m.vfd); in fimc_m2m_open()
628 ctx->fimc_dev = fimc; in fimc_m2m_open()
631 ctx->s_frame.fmt = fimc_get_format(0); in fimc_m2m_open()
632 ctx->d_frame.fmt = fimc_get_format(0); in fimc_m2m_open()
634 ret = fimc_ctrls_create(ctx); in fimc_m2m_open()
639 ctx->fh.ctrl_handler = &ctx->ctrls.handler; in fimc_m2m_open()
640 file->private_data = &ctx->fh; in fimc_m2m_open()
641 v4l2_fh_add(&ctx->fh); in fimc_m2m_open()
644 ctx->state = FIMC_CTX_M2M; in fimc_m2m_open()
645 ctx->flags = 0; in fimc_m2m_open()
646 ctx->in_path = FIMC_IO_DMA; in fimc_m2m_open()
647 ctx->out_path = FIMC_IO_DMA; in fimc_m2m_open()
648 ctx->scaler.enabled = 1; in fimc_m2m_open()
650 ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(fimc->m2m.m2m_dev, ctx, queue_init); in fimc_m2m_open()
651 if (IS_ERR(ctx->fh.m2m_ctx)) { in fimc_m2m_open()
652 ret = PTR_ERR(ctx->fh.m2m_ctx); in fimc_m2m_open()
659 ret = fimc_m2m_set_default_format(ctx); in fimc_m2m_open()
667 v4l2_m2m_ctx_release(ctx->fh.m2m_ctx); in fimc_m2m_open()
669 fimc_ctrls_delete(ctx); in fimc_m2m_open()
671 v4l2_fh_del(&ctx->fh); in fimc_m2m_open()
672 v4l2_fh_exit(&ctx->fh); in fimc_m2m_open()
673 kfree(ctx); in fimc_m2m_open()
681 struct fimc_ctx *ctx = fh_to_ctx(file->private_data); in fimc_m2m_release() local
682 struct fimc_dev *fimc = ctx->fimc_dev; in fimc_m2m_release()
689 v4l2_m2m_ctx_release(ctx->fh.m2m_ctx); in fimc_m2m_release()
690 fimc_ctrls_delete(ctx); in fimc_m2m_release()
691 v4l2_fh_del(&ctx->fh); in fimc_m2m_release()
692 v4l2_fh_exit(&ctx->fh); in fimc_m2m_release()
696 kfree(ctx); in fimc_m2m_release()