From 6193899b8ec642c126ff074a38bd1be460d15444 Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Tue, 14 Nov 2017 10:15:29 +0800 Subject: [PATCH] isp11: rockchip: v0.3.0 Set VTS with exposure time and gain Change-Id: Id45593654b0cec25acf0c3c721c0b653138b22b7 Signed-off-by: Hu Kejun --- drivers/media/platform/rk-isp11/cif_isp11.c | 13 +++++++++---- drivers/media/platform/rk-isp11/cif_isp11.h | 1 + .../rk-isp11/cif_isp11_img_src_v4l2-subdev.c | 2 ++ drivers/media/platform/rk-isp11/cif_isp11_v4l2.c | 2 ++ drivers/media/platform/rk-isp11/cif_isp11_version.h | 5 ++++- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/media/platform/rk-isp11/cif_isp11.c b/drivers/media/platform/rk-isp11/cif_isp11.c index 6f0373f346b4..74a28ca2964c 100644 --- a/drivers/media/platform/rk-isp11/cif_isp11.c +++ b/drivers/media/platform/rk-isp11/cif_isp11.c @@ -5566,7 +5566,6 @@ static void cif_isp11_vs_work(struct work_struct *work) struct cif_isp11_device *dev = vs_wk->dev; unsigned int v_frame_id; - switch (vs_wk->cmd) { case CIF_ISP11_VS_EXP: { struct cif_isp11_img_src_exp *exp = @@ -6478,7 +6477,7 @@ int cif_isp11_s_exp( struct cif_isp11_img_src_ctrl *ctrl_exp_t = NULL, *ctrl_exp_g = NULL; struct cif_isp11_img_src_exp *exp = NULL, *exp_t = NULL, *exp_g = NULL; unsigned long lock_flags; - int retval, i; + int retval, i, exp_cnt; if (!dev->vs_wq) return -ENODEV; @@ -6501,7 +6500,7 @@ int cif_isp11_s_exp( retval = -ENOMEM; goto failed; } - ctrl_exp_t = kmalloc(sizeof(struct cif_isp11_img_src_ctrl), GFP_KERNEL); + ctrl_exp_t = kmalloc(sizeof(struct cif_isp11_img_src_ctrl) * 2, GFP_KERNEL); if (!ctrl_exp_t) { retval = -ENOMEM; goto failed; @@ -6518,9 +6517,15 @@ int cif_isp11_s_exp( goto failed; } + exp_cnt = 0; for (i = 0; i < exp_ctrl->cnt; i++) { if (exp_ctrl->ctrls[i].id == V4L2_CID_EXPOSURE) { *ctrl_exp_t = exp_ctrl->ctrls[i]; + exp_cnt++; + } + if (exp_ctrl->ctrls[i].id == RK_V4L2_CID_VTS) { + *(ctrl_exp_t + 1) = exp_ctrl->ctrls[i]; + exp_cnt++; } if (exp_ctrl->ctrls[i].id == V4L2_CID_GAIN) { *ctrl_exp_g = exp_ctrl->ctrls[i]; @@ -6532,7 +6537,7 @@ int cif_isp11_s_exp( kfree(exp_ctrl->ctrls); exp_ctrl->ctrls = NULL; - exp_t->exp.cnt = 1; + exp_t->exp.cnt = exp_cnt; exp_t->exp.class = exp_ctrl->class; exp_t->exp.ctrls = ctrl_exp_t; exp_g->exp.cnt = 2; diff --git a/drivers/media/platform/rk-isp11/cif_isp11.h b/drivers/media/platform/rk-isp11/cif_isp11.h index b3e5bf49421a..c4602d62db84 100644 --- a/drivers/media/platform/rk-isp11/cif_isp11.h +++ b/drivers/media/platform/rk-isp11/cif_isp11.h @@ -129,6 +129,7 @@ enum cif_isp11_cid { CIF_ISP11_CID_VBLANKING = 17, CIF_ISP11_CID_ISO_SENSITIVITY = 18, CIF_ISP11_CID_BAND_STOP_FILTER = 19, + CIF_ISP11_CID_VTS = 20, }; /* correspond to bit field values */ diff --git a/drivers/media/platform/rk-isp11/cif_isp11_img_src_v4l2-subdev.c b/drivers/media/platform/rk-isp11/cif_isp11_img_src_v4l2-subdev.c index 42dd019397ab..de8b1992d080 100644 --- a/drivers/media/platform/rk-isp11/cif_isp11_img_src_v4l2-subdev.c +++ b/drivers/media/platform/rk-isp11/cif_isp11_img_src_v4l2-subdev.c @@ -245,6 +245,8 @@ static int cif_isp11_v4l2_cid2v4l2_cid(u32 cif_isp11_cid) return V4L2_CID_VFLIP; case CIF_ISP11_CID_BAND_STOP_FILTER: return V4L2_CID_BAND_STOP_FILTER; + case CIF_ISP11_CID_VTS: + return RK_V4L2_CID_VTS; default: cif_isp11_pltfrm_pr_err(NULL, "unknown/unsupported CIF ISP20 ID %d\n", diff --git a/drivers/media/platform/rk-isp11/cif_isp11_v4l2.c b/drivers/media/platform/rk-isp11/cif_isp11_v4l2.c index fc36b3cae8b9..5f1f30ad6dd5 100644 --- a/drivers/media/platform/rk-isp11/cif_isp11_v4l2.c +++ b/drivers/media/platform/rk-isp11/cif_isp11_v4l2.c @@ -275,6 +275,8 @@ static int cif_isp11_v4l2_cid2cif_isp11_cid(u32 v4l2_cid) return CIF_ISP11_CID_ISO_SENSITIVITY; case RK_V4L2_CID_AUTO_FPS: return CIF_ISP11_CID_AUTO_FPS; + case RK_V4L2_CID_VTS: + return CIF_ISP11_CID_VTS; case V4L2_CID_BAND_STOP_FILTER: return CIF_ISP11_CID_BAND_STOP_FILTER; default: diff --git a/drivers/media/platform/rk-isp11/cif_isp11_version.h b/drivers/media/platform/rk-isp11/cif_isp11_version.h index 5ae4d1cb3333..bee305a1d188 100644 --- a/drivers/media/platform/rk-isp11/cif_isp11_version.h +++ b/drivers/media/platform/rk-isp11/cif_isp11_version.h @@ -147,9 +147,12 @@ *v0.2.f: *1. Add support for dvfs; * +*v0.3.0: +*1. Set vts with exposure time and gain; +* */ -#define CONFIG_CIFISP11_DRIVER_VERSION KERNEL_VERSION(0, 2, 0xf) +#define CONFIG_CIFISP11_DRIVER_VERSION KERNEL_VERSION(0, 3, 0x0) #endif