调试的A64 7.0曝光的时候,发现从-1到-3都没作用,原因是s_ctrl流程有问题,以下补充了曝光流程
diff --git a/drivers/media/platform/sunxi-vfe/vfe.c b/drivers/media/platform/sunxi-vfe/vfe.c
index a7a8480..fbadbe8 100755
--- a/drivers/media/platform/sunxi-vfe/vfe.c
+++ b/drivers/media/platform/sunxi-vfe/vfe.c
@@ -3167,6 +3167,13 @@ static int vfe_s_ctrl(struct v4l2_ctrl *ctrl)
sunxi_flash_stop(dev->flash_sd);
ret = v4l2_subdev_call(dev->sd, core, s_ctrl, &c);
break;
+
+ case V4L2_CID_AUTO_EXPOSURE_BIAS:
+
+ ret = v4l2_subdev_call(dev->sd, core, s_ctrl, &c);
+ dev->ctrl_para.exp_bias = c.value;
+
default:
ret = v4l2_subdev_call(dev->sd, core, s_ctrl, &c);
break;
@@ -4021,6 +4028,18 @@ static const struct v4l2_ctrl_config custom_ctrls[] =
.qmenu = sensor_info_type,
.flags = V4L2_CTRL_FLAG_VOLATILE,
},
+
+ {
+ .ops = &vfe_ctrl_ops,
+ .id = V4L2_CID_AUTO_EXPOSURE_BIAS,
+ .name = "Auto Exposure, Bias",
+ .type = V4L2_CTRL_TYPE_INTEGER,
+ .min = -4,
+ .max = 4,
+ .step = 1,
+ .def = 0,
+ },
+
};
static const s64 iso_qmenu[] = {
50, 100, 200, 400, 800,
@@ -4033,8 +4052,9 @@ static int vfe_init_controls(struct v4l2_ctrl_handler *hdl)
{
struct v4l2_ctrl *ctrl;
unsigned int i, ret = 0;
-
- v4l2_ctrl_handler_init(hdl, 37 + ARRAY_SIZE(custom_ctrls));
+
+ //v4l2_ctrl_handler_init(hdl, 37 + ARRAY_SIZE(custom_ctrls));
+ v4l2_ctrl_handler_init(hdl, 36 + ARRAY_SIZE(custom_ctrls));
v4l2_ctrl_new_std(hdl, &vfe_ctrl_ops, V4L2_CID_BRIGHTNESS, 0, 255, 1, 128);
v4l2_ctrl_new_std(hdl, &vfe_ctrl_ops, V4L2_CID_CONTRAST, 0, 128, 1, 0);
v4l2_ctrl_new_std(hdl, &vfe_ctrl_ops, V4L2_CID_SATURATION, -4, 4, 1, 0);
@@ -4066,8 +4086,9 @@ static int vfe_init_controls(struct v4l2_ctrl_handler *hdl)
v4l2_ctrl_new_std(hdl, &vfe_ctrl_ops,V4L2_CID_FOCUS_ABSOLUTE, 0, 127, 1, 0);
v4l2_ctrl_new_std(hdl, &vfe_ctrl_ops,V4L2_CID_FOCUS_RELATIVE, -127, 127, 1, 0);
v4l2_ctrl_new_std(hdl, &vfe_ctrl_ops,V4L2_CID_FOCUS_AUTO, 0, 1, 1, 1);
- v4l2_ctrl_new_int_menu(hdl, &vfe_ctrl_ops,V4L2_CID_AUTO_EXPOSURE_BIAS, ARRAY_SIZE(exp_bias_qmenu) - 1,
- ARRAY_SIZE(exp_bias_qmenu)/2, exp_bias_qmenu);
+ //v4l2_ctrl_new_int_menu(hdl, &vfe_ctrl_ops,V4L2_CID_AUTO_EXPOSURE_BIAS, ARRAY_SIZE(exp_bias_qmenu) - 1,
+ // ARRAY_SIZE(exp_bias_qmenu)/2, exp_bias_qmenu);modify by hxl
+
v4l2_ctrl_new_std_menu(hdl, &vfe_ctrl_ops,V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE,
V4L2_WHITE_BALANCE_SHADE, 0, V4L2_WHITE_BALANCE_AUTO);
v4l2_ctrl_new_std(hdl, &vfe_ctrl_ops,V4L2_CID_WIDE_DYNAMIC_RANGE,0, 1, 1, 0);