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()
381 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_querycap() local
384 strlcpy(cap->card, coda_product_name(ctx->dev->devtype->product), in coda_querycap()
424 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_g_fmt() local
426 q_data = get_q_data(ctx, f->type); in coda_g_fmt()
440 f->fmt.pix.colorspace = ctx->colorspace; in coda_g_fmt()
445 static int coda_try_pixelformat(struct coda_ctx *ctx, struct v4l2_format *f) in coda_try_pixelformat() argument
452 formats = ctx->cvd->src_formats; in coda_try_pixelformat()
454 formats = ctx->cvd->dst_formats; in coda_try_pixelformat()
466 q_data = get_q_data(ctx, f->type); in coda_try_pixelformat()
472 static unsigned int coda_estimate_sizeimage(struct coda_ctx *ctx, u32 sizeimage, in coda_estimate_sizeimage() argument
484 static int coda_try_fmt(struct coda_ctx *ctx, const struct coda_codec *codec, in coda_try_fmt() argument
487 struct coda_dev *dev = ctx->dev; in coda_try_fmt()
529 f->fmt.pix.sizeimage = coda_estimate_sizeimage(ctx, in coda_try_fmt()
544 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_try_fmt_vid_cap() local
550 ret = coda_try_pixelformat(ctx, f); in coda_try_fmt_vid_cap()
554 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); in coda_try_fmt_vid_cap()
560 src_vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); in coda_try_fmt_vid_cap()
566 f->fmt.pix.colorspace = ctx->colorspace; in coda_try_fmt_vid_cap()
568 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); in coda_try_fmt_vid_cap()
569 codec = coda_find_codec(ctx->dev, q_data_src->fourcc, in coda_try_fmt_vid_cap()
574 ret = coda_try_fmt(ctx, codec, f); in coda_try_fmt_vid_cap()
593 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_try_fmt_vid_out() local
594 struct coda_dev *dev = ctx->dev; in coda_try_fmt_vid_out()
599 ret = coda_try_pixelformat(ctx, f); in coda_try_fmt_vid_out()
614 q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE); in coda_try_fmt_vid_out()
617 return coda_try_fmt(ctx, codec, f); in coda_try_fmt_vid_out()
620 static int coda_s_fmt(struct coda_ctx *ctx, struct v4l2_format *f) in coda_s_fmt() argument
625 vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, f->type); in coda_s_fmt()
629 q_data = get_q_data(ctx, f->type); in coda_s_fmt()
634 v4l2_err(&ctx->dev->v4l2_dev, "%s queue busy\n", __func__); in coda_s_fmt()
648 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_s_fmt()
658 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_s_fmt_vid_cap() local
665 return coda_s_fmt(ctx, f); in coda_s_fmt_vid_cap()
671 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_s_fmt_vid_out() local
679 ret = coda_s_fmt(ctx, f); in coda_s_fmt_vid_out()
683 ctx->colorspace = f->fmt.pix.colorspace; in coda_s_fmt_vid_out()
695 return coda_s_fmt(ctx, &f_cap); in coda_s_fmt_vid_out()
701 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_reqbufs() local
704 ret = v4l2_m2m_reqbufs(file, ctx->fh.m2m_ctx, rb); in coda_reqbufs()
712 if (rb->type == V4L2_BUF_TYPE_VIDEO_OUTPUT && ctx->ops->reqbufs) in coda_reqbufs()
713 return ctx->ops->reqbufs(ctx, rb); in coda_reqbufs()
721 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_qbuf() local
723 return v4l2_m2m_qbuf(file, ctx->fh.m2m_ctx, buf); in coda_qbuf()
726 static bool coda_buf_is_end_of_stream(struct coda_ctx *ctx, in coda_buf_is_end_of_stream() argument
731 src_vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); in coda_buf_is_end_of_stream()
733 return ((ctx->bit_stream_param & CODA_BIT_STREAM_END_FLAG) && in coda_buf_is_end_of_stream()
734 (buf->sequence == (ctx->qsequence - 1))); in coda_buf_is_end_of_stream()
740 struct coda_ctx *ctx = fh_to_ctx(priv); in coda_dqbuf() local
743 ret = v4l2_m2m_dqbuf(file, ctx->fh.m2m_ctx, buf); in coda_dqbuf()
747 coda_buf_is_end_of_stream(ctx, buf)) { in coda_dqbuf()
752 v4l2_event_queue_fh(&ctx->fh, &eos_event); in coda_dqbuf()
761 struct coda_ctx *ctx = fh_to_ctx(fh); in coda_g_selection() local
765 q_data = get_q_data(ctx, s->type); in coda_g_selection()
820 struct coda_ctx *ctx = fh_to_ctx(fh); in coda_decoder_cmd() local
828 if (ctx->inst_type != CODA_INST_DECODER) in coda_decoder_cmd()
832 coda_bit_stream_end_flag(ctx); in coda_decoder_cmd()
833 ctx->hold = false; in coda_decoder_cmd()
834 v4l2_m2m_try_schedule(ctx->fh.m2m_ctx); in coda_decoder_cmd()
883 void coda_set_gdi_regs(struct coda_ctx *ctx) in coda_set_gdi_regs() argument
885 struct gdi_tiled_map *tiled_map = &ctx->tiled_map; in coda_set_gdi_regs()
886 struct coda_dev *dev = ctx->dev; in coda_set_gdi_regs()
910 struct coda_ctx *ctx = m2m_priv; in coda_device_run() local
911 struct coda_dev *dev = ctx->dev; in coda_device_run()
913 queue_work(dev->workqueue, &ctx->pic_run_work); in coda_device_run()
918 struct coda_ctx *ctx = container_of(work, struct coda_ctx, pic_run_work); in coda_pic_run_work() local
919 struct coda_dev *dev = ctx->dev; in coda_pic_run_work()
922 mutex_lock(&ctx->buffer_mutex); in coda_pic_run_work()
925 ret = ctx->ops->prepare_run(ctx); in coda_pic_run_work()
926 if (ret < 0 && ctx->inst_type == CODA_INST_DECODER) { in coda_pic_run_work()
928 mutex_unlock(&ctx->buffer_mutex); in coda_pic_run_work()
933 if (!wait_for_completion_timeout(&ctx->completion, in coda_pic_run_work()
937 ctx->hold = true; in coda_pic_run_work()
939 coda_hw_reset(ctx); in coda_pic_run_work()
940 } else if (!ctx->aborting) { in coda_pic_run_work()
941 ctx->ops->finish_run(ctx); in coda_pic_run_work()
944 if ((ctx->aborting || (!ctx->streamon_cap && !ctx->streamon_out)) && in coda_pic_run_work()
945 ctx->ops->seq_end_work) in coda_pic_run_work()
946 queue_work(dev->workqueue, &ctx->seq_end_work); in coda_pic_run_work()
949 mutex_unlock(&ctx->buffer_mutex); in coda_pic_run_work()
951 v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx); in coda_pic_run_work()
956 struct coda_ctx *ctx = m2m_priv; in coda_job_ready() local
963 if (!v4l2_m2m_num_src_bufs_ready(ctx->fh.m2m_ctx) && in coda_job_ready()
964 ctx->inst_type != CODA_INST_DECODER) { in coda_job_ready()
965 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
970 if (!v4l2_m2m_num_dst_bufs_ready(ctx->fh.m2m_ctx)) { in coda_job_ready()
971 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
976 if (ctx->inst_type == CODA_INST_DECODER && ctx->use_bit) { in coda_job_ready()
982 if (ctx->hold && !v4l2_m2m_num_src_bufs_ready(ctx->fh.m2m_ctx)) { in coda_job_ready()
983 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
985 ctx->idx); in coda_job_ready()
989 stream_end = ctx->bit_stream_param & in coda_job_ready()
993 list_for_each(meta, &ctx->buffer_meta_list) in coda_job_ready()
996 src_bufs = v4l2_m2m_num_src_bufs_ready(ctx->fh.m2m_ctx); in coda_job_ready()
999 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
1001 ctx->idx, num_metas, src_bufs); in coda_job_ready()
1006 if (!v4l2_m2m_num_src_bufs_ready(ctx->fh.m2m_ctx) && in coda_job_ready()
1007 !stream_end && (coda_get_bitstream_payload(ctx) < 512)) { in coda_job_ready()
1008 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
1010 ctx->idx, coda_get_bitstream_payload(ctx)); in coda_job_ready()
1015 if (ctx->aborting) { in coda_job_ready()
1016 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
1021 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_ready()
1028 struct coda_ctx *ctx = priv; in coda_job_abort() local
1030 ctx->aborting = 1; in coda_job_abort()
1032 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_job_abort()
1038 struct coda_ctx *ctx = m2m_priv; in coda_lock() local
1039 struct coda_dev *pcdev = ctx->dev; in coda_lock()
1046 struct coda_ctx *ctx = m2m_priv; in coda_unlock() local
1047 struct coda_dev *pcdev = ctx->dev; in coda_unlock()
1060 static void coda_set_tiled_map_type(struct coda_ctx *ctx, int tiled_map_type) in coda_set_tiled_map_type() argument
1062 struct gdi_tiled_map *tiled_map = &ctx->tiled_map; in coda_set_tiled_map_type()
1080 dev_err(&ctx->dev->plat_dev->dev, "invalid map type: %d\n", in coda_set_tiled_map_type()
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->codec->src_fourcc; in set_default_params()
1103 ctx->q_data[V4L2_M2M_DST].fourcc = ctx->codec->dst_fourcc; 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()
1124 if (ctx->dev->devtype->product == CODA_960) in set_default_params()
1125 coda_set_tiled_map_type(ctx, GDI_LINEAR_FRAME_MAP); in set_default_params()
1136 struct coda_ctx *ctx = vb2_get_drv_priv(vq); in coda_queue_setup() local
1140 q_data = get_q_data(ctx, vq->type); in coda_queue_setup()
1147 alloc_ctxs[0] = ctx->dev->alloc_ctx; in coda_queue_setup()
1149 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_queue_setup()
1157 struct coda_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue); in coda_buf_prepare() local
1160 q_data = get_q_data(ctx, vb->vb2_queue->type); in coda_buf_prepare()
1163 v4l2_warn(&ctx->dev->v4l2_dev, in coda_buf_prepare()
1175 struct coda_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue); in coda_buf_queue() local
1179 q_data = get_q_data(ctx, vb->vb2_queue->type); in coda_buf_queue()
1185 if (ctx->bitstream.size && vq->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) { in coda_buf_queue()
1191 coda_bit_stream_end_flag(ctx); in coda_buf_queue()
1192 mutex_lock(&ctx->bitstream_mutex); in coda_buf_queue()
1193 v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vb); in coda_buf_queue()
1195 coda_fill_bitstream(ctx, true); in coda_buf_queue()
1196 mutex_unlock(&ctx->bitstream_mutex); in coda_buf_queue()
1198 v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vb); in coda_buf_queue()
1244 struct coda_ctx *ctx = vb2_get_drv_priv(q); in coda_start_streaming() local
1245 struct v4l2_device *v4l2_dev = &ctx->dev->v4l2_dev; in coda_start_streaming()
1250 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); in coda_start_streaming()
1254 ctx->dev->devtype->product == CODA_7541)) { in coda_start_streaming()
1256 mutex_lock(&ctx->bitstream_mutex); in coda_start_streaming()
1257 coda_fill_bitstream(ctx, false); in coda_start_streaming()
1258 mutex_unlock(&ctx->bitstream_mutex); in coda_start_streaming()
1260 if (coda_get_bitstream_payload(ctx) < 512) { in coda_start_streaming()
1271 ctx->streamon_out = 1; in coda_start_streaming()
1278 ctx->streamon_cap = 1; in coda_start_streaming()
1282 if (!(ctx->streamon_out & ctx->streamon_cap)) in coda_start_streaming()
1285 q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE); in coda_start_streaming()
1298 if (ctx->inst_type == CODA_INST_DECODER && ctx->use_bit) in coda_start_streaming()
1299 v4l2_m2m_set_src_buffered(ctx->fh.m2m_ctx, true); in coda_start_streaming()
1301 ctx->gopcounter = ctx->params.gop_size - 1; in coda_start_streaming()
1303 ctx->codec = coda_find_codec(ctx->dev, q_data_src->fourcc, in coda_start_streaming()
1305 if (!ctx->codec) { in coda_start_streaming()
1312 ctx->params.gop_size = 1; in coda_start_streaming()
1313 ctx->gopcounter = ctx->params.gop_size - 1; in coda_start_streaming()
1315 ret = ctx->ops->start_streaming(ctx); in coda_start_streaming()
1316 if (ctx->inst_type == CODA_INST_DECODER) { in coda_start_streaming()
1323 ctx->initialized = 1; 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()
1344 stop = ctx->streamon_out && ctx->streamon_cap; in coda_stop_streaming()
1349 ctx->streamon_out = 0; in coda_stop_streaming()
1351 coda_bit_stream_end_flag(ctx); in coda_stop_streaming()
1353 ctx->qsequence = 0; in coda_stop_streaming()
1355 while ((buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx))) in coda_stop_streaming()
1360 ctx->streamon_cap = 0; in coda_stop_streaming()
1362 ctx->osequence = 0; in coda_stop_streaming()
1363 ctx->sequence_offset = 0; in coda_stop_streaming()
1365 while ((buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx))) in coda_stop_streaming()
1372 if (ctx->ops->seq_end_work) { in coda_stop_streaming()
1373 queue_work(dev->workqueue, &ctx->seq_end_work); in coda_stop_streaming()
1374 flush_work(&ctx->seq_end_work); in coda_stop_streaming()
1376 mutex_lock(&ctx->bitstream_mutex); in coda_stop_streaming()
1377 while (!list_empty(&ctx->buffer_meta_list)) { in coda_stop_streaming()
1378 meta = list_first_entry(&ctx->buffer_meta_list, in coda_stop_streaming()
1383 mutex_unlock(&ctx->bitstream_mutex); in coda_stop_streaming()
1384 kfifo_init(&ctx->bitstream_fifo, in coda_stop_streaming()
1385 ctx->bitstream.vaddr, ctx->bitstream.size); in coda_stop_streaming()
1386 ctx->initialized = 0; in coda_stop_streaming()
1387 ctx->runcounter = 0; in coda_stop_streaming()
1388 ctx->aborting = 0; in coda_stop_streaming()
1404 struct coda_ctx *ctx = in coda_s_ctrl() local
1407 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_s_ctrl()
1413 ctx->params.rot_mode |= CODA_MIR_HOR; in coda_s_ctrl()
1415 ctx->params.rot_mode &= ~CODA_MIR_HOR; in coda_s_ctrl()
1419 ctx->params.rot_mode |= CODA_MIR_VER; in coda_s_ctrl()
1421 ctx->params.rot_mode &= ~CODA_MIR_VER; in coda_s_ctrl()
1424 ctx->params.bitrate = ctrl->val / 1000; in coda_s_ctrl()
1427 ctx->params.gop_size = ctrl->val; in coda_s_ctrl()
1430 ctx->params.h264_intra_qp = ctrl->val; in coda_s_ctrl()
1433 ctx->params.h264_inter_qp = ctrl->val; in coda_s_ctrl()
1436 ctx->params.h264_min_qp = ctrl->val; in coda_s_ctrl()
1439 ctx->params.h264_max_qp = ctrl->val; in coda_s_ctrl()
1442 ctx->params.h264_deblk_alpha = ctrl->val; in coda_s_ctrl()
1445 ctx->params.h264_deblk_beta = ctrl->val; in coda_s_ctrl()
1448 ctx->params.h264_deblk_enabled = (ctrl->val == in coda_s_ctrl()
1452 ctx->params.mpeg4_intra_qp = ctrl->val; in coda_s_ctrl()
1455 ctx->params.mpeg4_inter_qp = ctrl->val; in coda_s_ctrl()
1458 ctx->params.slice_mode = ctrl->val; in coda_s_ctrl()
1461 ctx->params.slice_max_mb = ctrl->val; in coda_s_ctrl()
1464 ctx->params.slice_max_bits = ctrl->val * 8; in coda_s_ctrl()
1469 ctx->params.intra_refresh = ctrl->val; in coda_s_ctrl()
1472 coda_set_jpeg_compression_quality(ctx, ctrl->val); in coda_s_ctrl()
1475 ctx->params.jpeg_restart_interval = ctrl->val; in coda_s_ctrl()
1478 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, in coda_s_ctrl()
1491 static void coda_encode_ctrls(struct coda_ctx *ctx) in coda_encode_ctrls() argument
1493 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1495 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1497 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1499 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1501 if (ctx->dev->devtype->product != CODA_960) { in coda_encode_ctrls()
1502 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 v4l2_ctrl_new_std_menu(&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_menu(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1523 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1525 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_encode_ctrls()
1528 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()
1538 static void coda_jpeg_encode_ctrls(struct coda_ctx *ctx) in coda_jpeg_encode_ctrls() argument
1540 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_jpeg_encode_ctrls()
1542 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_jpeg_encode_ctrls()
1546 static int coda_ctrls_setup(struct coda_ctx *ctx) in coda_ctrls_setup() argument
1548 v4l2_ctrl_handler_init(&ctx->ctrls, 2); in coda_ctrls_setup()
1550 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_ctrls_setup()
1552 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, in coda_ctrls_setup()
1554 if (ctx->inst_type == CODA_INST_ENCODER) { in coda_ctrls_setup()
1555 if (ctx->cvd->dst_formats[0] == V4L2_PIX_FMT_JPEG) in coda_ctrls_setup()
1556 coda_jpeg_encode_ctrls(ctx); in coda_ctrls_setup()
1558 coda_encode_ctrls(ctx); in coda_ctrls_setup()
1561 if (ctx->ctrls.error) { in coda_ctrls_setup()
1562 v4l2_err(&ctx->dev->v4l2_dev, in coda_ctrls_setup()
1564 ctx->ctrls.error); in coda_ctrls_setup()
1568 return v4l2_ctrl_handler_setup(&ctx->ctrls); in coda_ctrls_setup()
1571 static int coda_queue_init(struct coda_ctx *ctx, struct vb2_queue *vq) in coda_queue_init() argument
1573 vq->drv_priv = ctx; in coda_queue_init()
1577 vq->lock = &ctx->dev->dev_mutex; in coda_queue_init()
1648 struct coda_ctx *ctx = NULL; in coda_open() local
1653 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); in coda_open()
1654 if (!ctx) in coda_open()
1670 ctx->debugfs_entry = debugfs_create_dir(name, dev->debugfs_root); in coda_open()
1673 ctx->cvd = to_coda_video_device(vdev); in coda_open()
1674 ctx->inst_type = ctx->cvd->type; in coda_open()
1675 ctx->ops = ctx->cvd->ops; in coda_open()
1676 ctx->use_bit = !ctx->cvd->direct; in coda_open()
1677 init_completion(&ctx->completion); in coda_open()
1678 INIT_WORK(&ctx->pic_run_work, coda_pic_run_work); in coda_open()
1679 if (ctx->ops->seq_end_work) in coda_open()
1680 INIT_WORK(&ctx->seq_end_work, ctx->ops->seq_end_work); in coda_open()
1681 v4l2_fh_init(&ctx->fh, video_devdata(file)); in coda_open()
1682 file->private_data = &ctx->fh; in coda_open()
1683 v4l2_fh_add(&ctx->fh); in coda_open()
1684 ctx->dev = dev; in coda_open()
1685 ctx->idx = idx; in coda_open()
1688 ctx->frame_mem_ctrl = 1 << 12; in coda_open()
1691 ctx->reg_idx = 0; in coda_open()
1694 ctx->reg_idx = idx; in coda_open()
1712 set_default_params(ctx); in coda_open()
1713 ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, ctx, in coda_open()
1714 ctx->ops->queue_init); in coda_open()
1715 if (IS_ERR(ctx->fh.m2m_ctx)) { in coda_open()
1716 ret = PTR_ERR(ctx->fh.m2m_ctx); in coda_open()
1723 ret = coda_ctrls_setup(ctx); in coda_open()
1729 ctx->fh.ctrl_handler = &ctx->ctrls; in coda_open()
1731 mutex_init(&ctx->bitstream_mutex); in coda_open()
1732 mutex_init(&ctx->buffer_mutex); in coda_open()
1733 INIT_LIST_HEAD(&ctx->buffer_meta_list); in coda_open()
1735 coda_lock(ctx); in coda_open()
1736 list_add(&ctx->list, &dev->instances); in coda_open()
1737 coda_unlock(ctx); in coda_open()
1740 ctx->idx, ctx); in coda_open()
1745 v4l2_m2m_ctx_release(ctx->fh.m2m_ctx); in coda_open()
1753 v4l2_fh_del(&ctx->fh); in coda_open()
1754 v4l2_fh_exit(&ctx->fh); in coda_open()
1755 clear_bit(ctx->idx, &dev->instance_mask); in coda_open()
1758 kfree(ctx); in coda_open()
1765 struct coda_ctx *ctx = fh_to_ctx(file->private_data); in coda_release() local
1768 ctx); in coda_release()
1770 if (ctx->inst_type == CODA_INST_DECODER && ctx->use_bit) in coda_release()
1771 coda_bit_stream_end_flag(ctx); in coda_release()
1774 v4l2_m2m_ctx_release(ctx->fh.m2m_ctx); in coda_release()
1777 if (ctx->initialized && ctx->ops->seq_end_work) { in coda_release()
1778 queue_work(dev->workqueue, &ctx->seq_end_work); in coda_release()
1779 flush_work(&ctx->seq_end_work); in coda_release()
1782 coda_lock(ctx); in coda_release()
1783 list_del(&ctx->list); in coda_release()
1784 coda_unlock(ctx); in coda_release()
1786 if (ctx->dev->devtype->product == CODA_DX6) in coda_release()
1787 coda_free_aux_buf(dev, &ctx->workbuf); in coda_release()
1789 v4l2_ctrl_handler_free(&ctx->ctrls); in coda_release()
1793 v4l2_fh_del(&ctx->fh); in coda_release()
1794 v4l2_fh_exit(&ctx->fh); in coda_release()
1795 clear_bit(ctx->idx, &dev->instance_mask); in coda_release()
1796 if (ctx->ops->release) in coda_release()
1797 ctx->ops->release(ctx); in coda_release()
1798 debugfs_remove_recursive(ctx->debugfs_entry); in coda_release()
1799 kfree(ctx); in coda_release()