Lines Matching refs:ctx

86 void coda_write_base(struct coda_ctx *ctx, struct coda_q_data *q_data,  in coda_write_base()  argument
109 coda_write(ctx->dev, base_y, reg_y); in coda_write_base()
110 coda_write(ctx->dev, base_cb, reg_y + 4); in coda_write_base()
111 coda_write(ctx->dev, base_cr, reg_y + 8); in coda_write_base()
330 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_querycap() local
333 strlcpy(cap->card, coda_product_name(ctx->dev->devtype->product), in coda_querycap()
368 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_g_fmt() local
370 q_data = get_q_data(ctx, f->type); in coda_g_fmt()
384 f->fmt.pix.colorspace = ctx->colorspace; in coda_g_fmt()
389 static int coda_try_pixelformat(struct coda_ctx *ctx, struct v4l2_format *f) in coda_try_pixelformat() argument
396 formats = ctx->cvd->src_formats; in coda_try_pixelformat()
398 formats = ctx->cvd->dst_formats; in coda_try_pixelformat()
410 q_data = get_q_data(ctx, f->type); in coda_try_pixelformat()
416 static unsigned int coda_estimate_sizeimage(struct coda_ctx *ctx, u32 sizeimage, in coda_estimate_sizeimage() argument
428 static int coda_try_fmt(struct coda_ctx *ctx, const struct coda_codec *codec, in coda_try_fmt() argument
431 struct coda_dev *dev = ctx->dev; in coda_try_fmt()
473 f->fmt.pix.sizeimage = coda_estimate_sizeimage(ctx, in coda_try_fmt()
488 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_try_fmt_vid_cap() local
494 ret = coda_try_pixelformat(ctx, f); in coda_try_fmt_vid_cap()
498 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); in coda_try_fmt_vid_cap()
504 src_vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); in coda_try_fmt_vid_cap()
510 f->fmt.pix.colorspace = ctx->colorspace; in coda_try_fmt_vid_cap()
512 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); in coda_try_fmt_vid_cap()
513 codec = coda_find_codec(ctx->dev, q_data_src->fourcc, in coda_try_fmt_vid_cap()
518 ret = coda_try_fmt(ctx, codec, f); in coda_try_fmt_vid_cap()
537 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_try_fmt_vid_out() local
538 struct coda_dev *dev = ctx->dev; in coda_try_fmt_vid_out()
543 ret = coda_try_pixelformat(ctx, f); in coda_try_fmt_vid_out()
558 q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE); in coda_try_fmt_vid_out()
561 return coda_try_fmt(ctx, codec, f); in coda_try_fmt_vid_out()
564 static int coda_s_fmt(struct coda_ctx *ctx, struct v4l2_format *f) in coda_s_fmt() argument
569 vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, f->type); in coda_s_fmt()
573 q_data = get_q_data(ctx, f->type); in coda_s_fmt()
578 v4l2_err(&ctx->dev->v4l2_dev, "%s queue busy\n", __func__); in coda_s_fmt()
595 ctx->tiled_map_type = GDI_TILED_FRAME_MB_RASTER_MAP; in coda_s_fmt()
602 ctx->tiled_map_type = GDI_LINEAR_FRAME_MAP; in coda_s_fmt()
608 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_s_fmt()
618 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_s_fmt_vid_cap() local
625 return coda_s_fmt(ctx, f); in coda_s_fmt_vid_cap()
631 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_s_fmt_vid_out() local
639 ret = coda_s_fmt(ctx, f); in coda_s_fmt_vid_out()
643 ctx->colorspace = f->fmt.pix.colorspace; in coda_s_fmt_vid_out()
655 return coda_s_fmt(ctx, &f_cap); in coda_s_fmt_vid_out()
661 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_reqbufs() local
664 ret = v4l2_m2m_reqbufs(file, ctx->fh.m2m_ctx, rb); in coda_reqbufs()
672 if (rb->type == V4L2_BUF_TYPE_VIDEO_OUTPUT && ctx->ops->reqbufs) in coda_reqbufs()
673 return ctx->ops->reqbufs(ctx, rb); in coda_reqbufs()
681 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_qbuf() local
683 return v4l2_m2m_qbuf(file, ctx->fh.m2m_ctx, buf); in coda_qbuf()
686 static bool coda_buf_is_end_of_stream(struct coda_ctx *ctx, in coda_buf_is_end_of_stream() argument
691 src_vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); in coda_buf_is_end_of_stream()
693 return ((ctx->bit_stream_param & CODA_BIT_STREAM_END_FLAG) && in coda_buf_is_end_of_stream()
694 (buf->sequence == (ctx->qsequence - 1))); in coda_buf_is_end_of_stream()
697 void coda_m2m_buf_done(struct coda_ctx *ctx, struct vb2_v4l2_buffer *buf, in coda_m2m_buf_done() argument
704 if (coda_buf_is_end_of_stream(ctx, buf)) { in coda_m2m_buf_done()
707 v4l2_event_queue_fh(&ctx->fh, &eos_event); in coda_m2m_buf_done()
716 struct coda_ctx *ctx = fh_to_ctx(fh); in coda_g_selection() local
720 q_data = get_q_data(ctx, s->type); in coda_g_selection()
775 struct coda_ctx *ctx = fh_to_ctx(fh); in coda_decoder_cmd() local
783 if (ctx->inst_type != CODA_INST_DECODER) in coda_decoder_cmd()
787 coda_bit_stream_end_flag(ctx); in coda_decoder_cmd()
788 ctx->hold = false; in coda_decoder_cmd()
789 v4l2_m2m_try_schedule(ctx->fh.m2m_ctx); in coda_decoder_cmd()
796 struct coda_ctx *ctx = fh_to_ctx(fh); in coda_g_parm() local
804 tpf->denominator = ctx->params.framerate & CODA_FRATE_RES_MASK; in coda_g_parm()
805 tpf->numerator = 1 + (ctx->params.framerate >> in coda_g_parm()
879 struct coda_ctx *ctx = fh_to_ctx(fh); in coda_s_parm() local
887 ctx->params.framerate = coda_timeperframe_to_frate(tpf); in coda_s_parm()
945 struct coda_ctx *ctx = m2m_priv; in coda_device_run() local
946 struct coda_dev *dev = ctx->dev; in coda_device_run()
948 queue_work(dev->workqueue, &ctx->pic_run_work); in coda_device_run()
953 struct coda_ctx *ctx = container_of(work, struct coda_ctx, pic_run_work); in coda_pic_run_work() local
954 struct coda_dev *dev = ctx->dev; in coda_pic_run_work()
957 mutex_lock(&ctx->buffer_mutex); in coda_pic_run_work()
960 ret = ctx->ops->prepare_run(ctx); in coda_pic_run_work()
961 if (ret < 0 && ctx->inst_type == CODA_INST_DECODER) { in coda_pic_run_work()
963 mutex_unlock(&ctx->buffer_mutex); in coda_pic_run_work()
968 if (!wait_for_completion_timeout(&ctx->completion, in coda_pic_run_work()
972 ctx->hold = true; in coda_pic_run_work()
974 coda_hw_reset(ctx); in coda_pic_run_work()
975 } else if (!ctx->aborting) { in coda_pic_run_work()
976 ctx->ops->finish_run(ctx); in coda_pic_run_work()
979 if ((ctx->aborting || (!ctx->streamon_cap && !ctx->streamon_out)) && in coda_pic_run_work()
980 ctx->ops->seq_end_work) in coda_pic_run_work()
981 queue_work(dev->workqueue, &ctx->seq_end_work); in coda_pic_run_work()
984 mutex_unlock(&ctx->buffer_mutex); in coda_pic_run_work()
986 v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx); in coda_pic_run_work()
991 struct coda_ctx *ctx = m2m_priv; in coda_job_ready() local
992 int src_bufs = v4l2_m2m_num_src_bufs_ready(ctx->fh.m2m_ctx); in coda_job_ready()
999 if (!src_bufs && ctx->inst_type != CODA_INST_DECODER) { in coda_job_ready()
1000 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
1005 if (!v4l2_m2m_num_dst_bufs_ready(ctx->fh.m2m_ctx)) { in coda_job_ready()
1006 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
1011 if (ctx->inst_type == CODA_INST_DECODER && ctx->use_bit) { in coda_job_ready()
1012 bool stream_end = ctx->bit_stream_param & in coda_job_ready()
1014 int num_metas = ctx->num_metas; in coda_job_ready()
1016 if (ctx->hold && !src_bufs) { in coda_job_ready()
1017 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
1019 ctx->idx); in coda_job_ready()
1024 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
1026 ctx->idx, num_metas, src_bufs); in coda_job_ready()
1032 (coda_get_bitstream_payload(ctx) < 512)) { in coda_job_ready()
1033 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
1035 ctx->idx, coda_get_bitstream_payload(ctx)); in coda_job_ready()
1040 if (ctx->aborting) { in coda_job_ready()
1041 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
1046 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
1054 struct coda_ctx *ctx = priv; in coda_job_abort() local
1056 ctx->aborting = 1; in coda_job_abort()
1058 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_abort()
1064 struct coda_ctx *ctx = m2m_priv; in coda_lock() local
1065 struct coda_dev *pcdev = ctx->dev; in coda_lock()
1072 struct coda_ctx *ctx = m2m_priv; in coda_unlock() local
1073 struct coda_dev *pcdev = ctx->dev; in coda_unlock()
1086 static void set_default_params(struct coda_ctx *ctx) in set_default_params() argument
1090 ctx->codec = coda_find_codec(ctx->dev, ctx->cvd->src_formats[0], in set_default_params()
1091 ctx->cvd->dst_formats[0]); in set_default_params()
1092 max_w = min(ctx->codec->max_w, 1920U); in set_default_params()
1093 max_h = min(ctx->codec->max_h, 1088U); in set_default_params()
1095 csize = coda_estimate_sizeimage(ctx, usize, max_w, max_h); in set_default_params()
1097 ctx->params.codec_mode = ctx->codec->mode; in set_default_params()
1098 ctx->colorspace = V4L2_COLORSPACE_REC709; in set_default_params()
1099 ctx->params.framerate = 30; in set_default_params()
1102 ctx->q_data[V4L2_M2M_SRC].fourcc = ctx->cvd->src_formats[0]; in set_default_params()
1103 ctx->q_data[V4L2_M2M_DST].fourcc = ctx->cvd->dst_formats[0]; in set_default_params()
1104 ctx->q_data[V4L2_M2M_SRC].width = max_w; in set_default_params()
1105 ctx->q_data[V4L2_M2M_SRC].height = max_h; in set_default_params()
1106 ctx->q_data[V4L2_M2M_DST].width = max_w; in set_default_params()
1107 ctx->q_data[V4L2_M2M_DST].height = max_h; in set_default_params()
1108 if (ctx->codec->src_fourcc == V4L2_PIX_FMT_YUV420) { in set_default_params()
1109 ctx->q_data[V4L2_M2M_SRC].bytesperline = max_w; in set_default_params()
1110 ctx->q_data[V4L2_M2M_SRC].sizeimage = usize; in set_default_params()
1111 ctx->q_data[V4L2_M2M_DST].bytesperline = 0; in set_default_params()
1112 ctx->q_data[V4L2_M2M_DST].sizeimage = csize; in set_default_params()
1114 ctx->q_data[V4L2_M2M_SRC].bytesperline = 0; in set_default_params()
1115 ctx->q_data[V4L2_M2M_SRC].sizeimage = csize; in set_default_params()
1116 ctx->q_data[V4L2_M2M_DST].bytesperline = max_w; in set_default_params()
1117 ctx->q_data[V4L2_M2M_DST].sizeimage = usize; in set_default_params()
1119 ctx->q_data[V4L2_M2M_SRC].rect.width = max_w; in set_default_params()
1120 ctx->q_data[V4L2_M2M_SRC].rect.height = max_h; in set_default_params()
1121 ctx->q_data[V4L2_M2M_DST].rect.width = max_w; in set_default_params()
1122 ctx->q_data[V4L2_M2M_DST].rect.height = max_h; in set_default_params()
1128 ctx->tiled_map_type = GDI_LINEAR_FRAME_MAP; in set_default_params()
1138 struct coda_ctx *ctx = vb2_get_drv_priv(vq); in coda_queue_setup() local
1142 q_data = get_q_data(ctx, vq->type); in coda_queue_setup()
1149 alloc_ctxs[0] = ctx->dev->alloc_ctx; in coda_queue_setup()
1151 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_queue_setup()
1159 struct coda_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue); in coda_buf_prepare() local
1162 q_data = get_q_data(ctx, vb->vb2_queue->type); in coda_buf_prepare()
1165 v4l2_warn(&ctx->dev->v4l2_dev, in coda_buf_prepare()
1178 struct coda_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue); in coda_buf_queue() local
1182 q_data = get_q_data(ctx, vb->vb2_queue->type); in coda_buf_queue()
1188 if (ctx->bitstream.size && vq->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) { in coda_buf_queue()
1194 coda_bit_stream_end_flag(ctx); in coda_buf_queue()
1195 mutex_lock(&ctx->bitstream_mutex); in coda_buf_queue()
1196 v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vbuf); in coda_buf_queue()
1198 coda_fill_bitstream(ctx, true); in coda_buf_queue()
1199 mutex_unlock(&ctx->bitstream_mutex); in coda_buf_queue()
1201 v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vbuf); in coda_buf_queue()
1247 struct coda_ctx *ctx = vb2_get_drv_priv(q); in coda_start_streaming() local
1248 struct v4l2_device *v4l2_dev = &ctx->dev->v4l2_dev; in coda_start_streaming()
1253 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); in coda_start_streaming()
1255 if (ctx->inst_type == CODA_INST_DECODER && ctx->use_bit) { in coda_start_streaming()
1257 mutex_lock(&ctx->bitstream_mutex); in coda_start_streaming()
1258 coda_fill_bitstream(ctx, false); in coda_start_streaming()
1259 mutex_unlock(&ctx->bitstream_mutex); in coda_start_streaming()
1261 if (coda_get_bitstream_payload(ctx) < 512) { in coda_start_streaming()
1272 ctx->streamon_out = 1; in coda_start_streaming()
1279 ctx->streamon_cap = 1; in coda_start_streaming()
1283 if (!(ctx->streamon_out & ctx->streamon_cap)) in coda_start_streaming()
1286 q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE); in coda_start_streaming()
1299 if (ctx->inst_type == CODA_INST_DECODER && ctx->use_bit) in coda_start_streaming()
1300 v4l2_m2m_set_src_buffered(ctx->fh.m2m_ctx, true); in coda_start_streaming()
1302 ctx->gopcounter = ctx->params.gop_size - 1; in coda_start_streaming()
1304 ctx->codec = coda_find_codec(ctx->dev, q_data_src->fourcc, in coda_start_streaming()
1306 if (!ctx->codec) { in coda_start_streaming()
1313 ctx->params.gop_size = 1; in coda_start_streaming()
1314 ctx->gopcounter = ctx->params.gop_size - 1; in coda_start_streaming()
1316 ret = ctx->ops->start_streaming(ctx); in coda_start_streaming()
1317 if (ctx->inst_type == CODA_INST_DECODER) { in coda_start_streaming()
1328 while ((buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx))) in coda_start_streaming()
1331 while ((buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx))) in coda_start_streaming()
1339 struct coda_ctx *ctx = vb2_get_drv_priv(q); in coda_stop_streaming() local
1340 struct coda_dev *dev = ctx->dev; in coda_stop_streaming()
1345 stop = ctx->streamon_out && ctx->streamon_cap; in coda_stop_streaming()
1350 ctx->streamon_out = 0; in coda_stop_streaming()
1352 coda_bit_stream_end_flag(ctx); in coda_stop_streaming()
1354 ctx->qsequence = 0; in coda_stop_streaming()
1356 while ((buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx))) in coda_stop_streaming()
1361 ctx->streamon_cap = 0; in coda_stop_streaming()
1363 ctx->osequence = 0; in coda_stop_streaming()
1364 ctx->sequence_offset = 0; in coda_stop_streaming()
1366 while ((buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx))) in coda_stop_streaming()
1373 if (ctx->ops->seq_end_work) { in coda_stop_streaming()
1374 queue_work(dev->workqueue, &ctx->seq_end_work); in coda_stop_streaming()
1375 flush_work(&ctx->seq_end_work); in coda_stop_streaming()
1377 spin_lock_irqsave(&ctx->buffer_meta_lock, flags); in coda_stop_streaming()
1378 while (!list_empty(&ctx->buffer_meta_list)) { in coda_stop_streaming()
1379 meta = list_first_entry(&ctx->buffer_meta_list, in coda_stop_streaming()
1384 ctx->num_metas = 0; in coda_stop_streaming()
1385 spin_unlock_irqrestore(&ctx->buffer_meta_lock, flags); in coda_stop_streaming()
1386 kfifo_init(&ctx->bitstream_fifo, in coda_stop_streaming()
1387 ctx->bitstream.vaddr, ctx->bitstream.size); in coda_stop_streaming()
1388 ctx->runcounter = 0; in coda_stop_streaming()
1389 ctx->aborting = 0; in coda_stop_streaming()
1392 if (!ctx->streamon_out && !ctx->streamon_cap) in coda_stop_streaming()
1393 ctx->bit_stream_param &= ~CODA_BIT_STREAM_END_FLAG; in coda_stop_streaming()
1408 struct coda_ctx *ctx = in coda_s_ctrl() local
1411 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_s_ctrl()
1417 ctx->params.rot_mode |= CODA_MIR_HOR; in coda_s_ctrl()
1419 ctx->params.rot_mode &= ~CODA_MIR_HOR; in coda_s_ctrl()
1423 ctx->params.rot_mode |= CODA_MIR_VER; in coda_s_ctrl()
1425 ctx->params.rot_mode &= ~CODA_MIR_VER; in coda_s_ctrl()
1428 ctx->params.bitrate = ctrl->val / 1000; in coda_s_ctrl()
1431 ctx->params.gop_size = ctrl->val; in coda_s_ctrl()
1434 ctx->params.h264_intra_qp = ctrl->val; in coda_s_ctrl()
1437 ctx->params.h264_inter_qp = ctrl->val; in coda_s_ctrl()
1440 ctx->params.h264_min_qp = ctrl->val; in coda_s_ctrl()
1443 ctx->params.h264_max_qp = ctrl->val; in coda_s_ctrl()
1446 ctx->params.h264_deblk_alpha = ctrl->val; in coda_s_ctrl()
1449 ctx->params.h264_deblk_beta = ctrl->val; in coda_s_ctrl()
1452 ctx->params.h264_deblk_enabled = (ctrl->val == in coda_s_ctrl()
1456 ctx->params.mpeg4_intra_qp = ctrl->val; in coda_s_ctrl()
1459 ctx->params.mpeg4_inter_qp = ctrl->val; in coda_s_ctrl()
1462 ctx->params.slice_mode = ctrl->val; in coda_s_ctrl()
1465 ctx->params.slice_max_mb = ctrl->val; in coda_s_ctrl()
1468 ctx->params.slice_max_bits = ctrl->val * 8; in coda_s_ctrl()
1473 ctx->params.intra_refresh = ctrl->val; in coda_s_ctrl()
1476 coda_set_jpeg_compression_quality(ctx, ctrl->val); in coda_s_ctrl()
1479 ctx->params.jpeg_restart_interval = ctrl->val; in coda_s_ctrl()
1482 ctx->params.vbv_delay = ctrl->val; in coda_s_ctrl()
1485 ctx->params.vbv_size = min(ctrl->val * 8192, 0x7fffffff); in coda_s_ctrl()
1488 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_s_ctrl()
1501 static void coda_encode_ctrls(struct coda_ctx *ctx) in coda_encode_ctrls() argument
1503 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1505 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1507 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1509 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1511 if (ctx->dev->devtype->product != CODA_960) { in coda_encode_ctrls()
1512 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1515 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1517 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1519 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1521 v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1525 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1527 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1529 v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1533 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1535 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1538 v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1543 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1546 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1552 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1556 static void coda_jpeg_encode_ctrls(struct coda_ctx *ctx) in coda_jpeg_encode_ctrls() argument
1558 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_jpeg_encode_ctrls()
1560 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_jpeg_encode_ctrls()
1564 static int coda_ctrls_setup(struct coda_ctx *ctx) in coda_ctrls_setup() argument
1566 v4l2_ctrl_handler_init(&ctx->ctrls, 2); in coda_ctrls_setup()
1568 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_ctrls_setup()
1570 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_ctrls_setup()
1572 if (ctx->inst_type == CODA_INST_ENCODER) { in coda_ctrls_setup()
1573 if (ctx->cvd->dst_formats[0] == V4L2_PIX_FMT_JPEG) in coda_ctrls_setup()
1574 coda_jpeg_encode_ctrls(ctx); in coda_ctrls_setup()
1576 coda_encode_ctrls(ctx); in coda_ctrls_setup()
1579 if (ctx->ctrls.error) { in coda_ctrls_setup()
1580 v4l2_err(&ctx->dev->v4l2_dev, in coda_ctrls_setup()
1582 ctx->ctrls.error); in coda_ctrls_setup()
1586 return v4l2_ctrl_handler_setup(&ctx->ctrls); in coda_ctrls_setup()
1589 static int coda_queue_init(struct coda_ctx *ctx, struct vb2_queue *vq) in coda_queue_init() argument
1591 vq->drv_priv = ctx; in coda_queue_init()
1595 vq->lock = &ctx->dev->dev_mutex; in coda_queue_init()
1666 struct coda_ctx *ctx = NULL; in coda_open() local
1671 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); in coda_open()
1672 if (!ctx) in coda_open()
1688 ctx->debugfs_entry = debugfs_create_dir(name, dev->debugfs_root); in coda_open()
1691 ctx->cvd = to_coda_video_device(vdev); in coda_open()
1692 ctx->inst_type = ctx->cvd->type; in coda_open()
1693 ctx->ops = ctx->cvd->ops; in coda_open()
1694 ctx->use_bit = !ctx->cvd->direct; in coda_open()
1695 init_completion(&ctx->completion); in coda_open()
1696 INIT_WORK(&ctx->pic_run_work, coda_pic_run_work); in coda_open()
1697 if (ctx->ops->seq_end_work) in coda_open()
1698 INIT_WORK(&ctx->seq_end_work, ctx->ops->seq_end_work); in coda_open()
1699 v4l2_fh_init(&ctx->fh, video_devdata(file)); in coda_open()
1700 file->private_data = &ctx->fh; in coda_open()
1701 v4l2_fh_add(&ctx->fh); in coda_open()
1702 ctx->dev = dev; in coda_open()
1703 ctx->idx = idx; in coda_open()
1706 ctx->frame_mem_ctrl = 1 << 12; in coda_open()
1709 ctx->reg_idx = 0; in coda_open()
1712 ctx->reg_idx = idx; in coda_open()
1730 set_default_params(ctx); in coda_open()
1731 ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, ctx, in coda_open()
1732 ctx->ops->queue_init); in coda_open()
1733 if (IS_ERR(ctx->fh.m2m_ctx)) { in coda_open()
1734 ret = PTR_ERR(ctx->fh.m2m_ctx); in coda_open()
1741 ret = coda_ctrls_setup(ctx); in coda_open()
1747 ctx->fh.ctrl_handler = &ctx->ctrls; in coda_open()
1749 mutex_init(&ctx->bitstream_mutex); in coda_open()
1750 mutex_init(&ctx->buffer_mutex); in coda_open()
1751 INIT_LIST_HEAD(&ctx->buffer_meta_list); in coda_open()
1752 spin_lock_init(&ctx->buffer_meta_lock); in coda_open()
1754 coda_lock(ctx); in coda_open()
1755 list_add(&ctx->list, &dev->instances); in coda_open()
1756 coda_unlock(ctx); in coda_open()
1759 ctx->idx, ctx); in coda_open()
1764 v4l2_m2m_ctx_release(ctx->fh.m2m_ctx); in coda_open()
1772 v4l2_fh_del(&ctx->fh); in coda_open()
1773 v4l2_fh_exit(&ctx->fh); in coda_open()
1774 clear_bit(ctx->idx, &dev->instance_mask); in coda_open()
1777 kfree(ctx); in coda_open()
1784 struct coda_ctx *ctx = fh_to_ctx(file->private_data); in coda_release() local
1787 ctx); in coda_release()
1789 if (ctx->inst_type == CODA_INST_DECODER && ctx->use_bit) in coda_release()
1790 coda_bit_stream_end_flag(ctx); in coda_release()
1793 v4l2_m2m_ctx_release(ctx->fh.m2m_ctx); in coda_release()
1796 if (ctx->ops->seq_end_work) { in coda_release()
1797 queue_work(dev->workqueue, &ctx->seq_end_work); in coda_release()
1798 flush_work(&ctx->seq_end_work); in coda_release()
1801 coda_lock(ctx); in coda_release()
1802 list_del(&ctx->list); in coda_release()
1803 coda_unlock(ctx); in coda_release()
1805 if (ctx->dev->devtype->product == CODA_DX6) in coda_release()
1806 coda_free_aux_buf(dev, &ctx->workbuf); in coda_release()
1808 v4l2_ctrl_handler_free(&ctx->ctrls); in coda_release()
1812 v4l2_fh_del(&ctx->fh); in coda_release()
1813 v4l2_fh_exit(&ctx->fh); in coda_release()
1814 clear_bit(ctx->idx, &dev->instance_mask); in coda_release()
1815 if (ctx->ops->release) in coda_release()
1816 ctx->ops->release(ctx); in coda_release()
1817 debugfs_remove_recursive(ctx->debugfs_entry); in coda_release()
1818 kfree(ctx); in coda_release()