From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Meng Wei Date: Tue, 27 Nov 2018 19:31:50 +0800 Subject: [PATCH] media: ov2775: Update v4l2 ctrl setting Fix error and update setting in v4l2 ctrls of ov2775 sensor driver Change-Id: I722b39ed8333ca69a4db9f86637cd2c9c9fae06d Tracked-On: PKT-1624 Signed-off-by: mingdaxu Signed-off-by: Meng Wei --- .../i2c/crlmodule/crl_ov2775_configuration.h | 242 +++++++++++------- include/uapi/linux/crlmodule.h | 3 + 2 files changed, 148 insertions(+), 97 deletions(-) diff --git a/drivers/media/i2c/crlmodule/crl_ov2775_configuration.h b/drivers/media/i2c/crlmodule/crl_ov2775_configuration.h index cffc0cccb865..917891371ebe 100644 --- a/drivers/media/i2c/crlmodule/crl_ov2775_configuration.h +++ b/drivers/media/i2c/crlmodule/crl_ov2775_configuration.h @@ -7306,6 +7306,13 @@ static struct crl_arithmetic_ops ov2775_ana_gain_vs_ops[] = { }, }; +static struct crl_arithmetic_ops ov2775_ana_gain_linear_ops[] = { + { + .op = CRL_BITWISE_LSHIFT, + .operand.entity_val = 6, + }, +}; + static struct crl_arithmetic_ops ov2775_digital_gain_ops[] = { { .op = CRL_BITWISE_RSHIFT, @@ -7366,6 +7373,16 @@ static struct crl_dynamic_register_access ov2775_ana_gain_vs_regs[] = { }, }; +static struct crl_dynamic_register_access ov2775_ana_gain_linear_cg_regs[] = { + { + .address = 0x30BB, + .len = CRL_REG_LEN_08BIT | CRL_REG_READ_AND_UPDATE, + .ops_items = ARRAY_SIZE(ov2775_ana_gain_linear_ops), + .ops = ov2775_ana_gain_linear_ops, + .mask = 0x40, + }, +}; + static struct crl_dynamic_register_access ov2775_digital_gain_h_regs[] = { { .address = 0x315A, @@ -7586,7 +7603,7 @@ static struct crl_mode_rep ov2775_modes[] = { .width = 1920, .height = 1088, .min_llp = 3550, - .min_fll = 1126, + .min_fll = 1096, .comp_items = 0, .ctrl_data = 0, .mode_regs_items = @@ -7602,7 +7619,7 @@ static struct crl_mode_rep ov2775_modes[] = { .width = 1920, .height = 1088, .min_llp = 3550, - .min_fll = 1126, + .min_fll = 1096, .comp_items = 0, .ctrl_data = 0, .mode_regs_items = @@ -7618,7 +7635,7 @@ static struct crl_mode_rep ov2775_modes[] = { .width = 1920, .height = 1088, .min_llp = 3550, - .min_fll = 1126, + .min_fll = 1096, .comp_items = 0, .ctrl_data = 0, .mode_regs_items = ARRAY_SIZE(ov2775_2x12_30fps_mipi960_regset), @@ -7633,7 +7650,7 @@ static struct crl_mode_rep ov2775_modes[] = { .width = 1920, .height = 1088, .min_llp = 3550, - .min_fll = 1126, + .min_fll = 1096, .comp_items = 0, .ctrl_data = 0, .mode_regs_items = ARRAY_SIZE(ov2775_3x12_30fps_mipi960_regset), @@ -7657,7 +7674,7 @@ static struct crl_sensor_limits ov2775_sensor_limits = { .y_addr_min = 0, .x_addr_max = 1936, .y_addr_max = 1096, - .min_frame_length_lines = 1126, + .min_frame_length_lines = 1096, .max_frame_length_lines = 65535, .min_line_length_pixels = 3550, .max_line_length_pixels = 32752, @@ -7778,18 +7795,18 @@ static struct crl_v4l2_ctrl ov2775_v4l2_ctrls[] = { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = CRL_CID_ANALOG_GAIN_S, - .name = "CRL_CID_ANALOG_GAIN_HCG", + .ctrl_id = V4L2_CID_HFLIP, + .name = "V4L2_CID_HFLIP", .type = CRL_V4L2_CTRL_TYPE_INTEGER, .data.std_data.min = 0, - .data.std_data.max = 4096, + .data.std_data.max = 1, .data.std_data.step = 1, - .data.std_data.def = 128, + .data.std_data.def = 0, .flags = 0, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_ana_gain_h_regs), - .regs = ov2775_ana_gain_h_regs, + .regs_items = ARRAY_SIZE(ov2775_h_flip_regs), + .regs = ov2775_h_flip_regs, .dep_items = 0, .dep_ctrls = 0, }, @@ -7797,18 +7814,18 @@ static struct crl_v4l2_ctrl ov2775_v4l2_ctrls[] = { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = CRL_CID_ANALOG_GAIN_L, - .name = "CRL_CID_ANALOG_GAIN_LCG", + .ctrl_id = V4L2_CID_VFLIP, + .name = "V4L2_CID_VFLIP", .type = CRL_V4L2_CTRL_TYPE_INTEGER, .data.std_data.min = 0, - .data.std_data.max = 4096, + .data.std_data.max = 1, .data.std_data.step = 1, - .data.std_data.def = 128, + .data.std_data.def = 0, .flags = 0, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_ana_gain_l_regs), - .regs = ov2775_ana_gain_l_regs, + .regs_items = ARRAY_SIZE(ov2775_v_flip_regs), + .regs = ov2775_v_flip_regs, .dep_items = 0, .dep_ctrls = 0, }, @@ -7816,171 +7833,199 @@ static struct crl_v4l2_ctrl ov2775_v4l2_ctrls[] = { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = CRL_CID_ANALOG_GAIN_VS, - .name = "CRL_CID_ANALOG_GAIN_VS", - .type = CRL_V4L2_CTRL_TYPE_INTEGER, - .data.std_data.min = 0, - .data.std_data.max = 4096, + .ctrl_id = V4L2_CID_FRAME_LENGTH_LINES, + .name = "Frame Length Lines", + .type = CRL_V4L2_CTRL_TYPE_CUSTOM, + .data.std_data.min = 160, + .data.std_data.max = 65535, .data.std_data.step = 1, - .data.std_data.def = 128, - .flags = 0, + .data.std_data.def = 1120, + .flags = V4L2_CTRL_FLAG_UPDATE, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_ana_gain_vs_regs), - .regs = ov2775_ana_gain_vs_regs, + .regs_items = ARRAY_SIZE(ov2775_vblank_regs), + .regs = ov2775_vblank_regs, .dep_items = 0, .dep_ctrls = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, }, { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = CRL_CID_DIGITAL_GAIN_L, - .name = "CRL_CID_DIGITAL_GAIN_LCG", - .type = CRL_V4L2_CTRL_TYPE_INTEGER, + .ctrl_id = V4L2_CID_LINE_LENGTH_PIXELS, + .name = "Line Length Pixels", + .type = CRL_V4L2_CTRL_TYPE_CUSTOM, + .data.std_data.min = 1024, + .data.std_data.max = 65520, + .data.std_data.step = 1, + .data.std_data.def = 3550, + .flags = V4L2_CTRL_FLAG_UPDATE, + .impact = CRL_IMPACTS_NO_IMPACT, + .ctrl = 0, + .regs_items = ARRAY_SIZE(ov2775_hblank_regs), + .regs = ov2775_hblank_regs, + .dep_items = 0, + .dep_ctrls = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + }, + { + .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, + .op_type = CRL_V4L2_CTRL_SET_OP, + .context = SENSOR_POWERED_ON, + .ctrl_id = CRL_CID_ANALOG_GAIN_L, + .name = "CRL_CID_ANALOG_GAIN_HCG", + .type = CRL_V4L2_CTRL_TYPE_CUSTOM, .data.std_data.min = 0, - .data.std_data.max = 4096, + .data.std_data.max = 0xFF, .data.std_data.step = 1, - .data.std_data.def = 128, + .data.std_data.def = 0, .flags = 0, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_digital_gain_l_regs), - .regs = ov2775_digital_gain_l_regs, + .regs_items = ARRAY_SIZE(ov2775_ana_gain_h_regs), + .regs = ov2775_ana_gain_h_regs, .dep_items = 0, .dep_ctrls = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, }, { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = CRL_CID_DIGITAL_GAIN_S, - .name = "CRL_CID_DIGITAL_GAIN_HCG", - .type = CRL_V4L2_CTRL_TYPE_INTEGER, + .ctrl_id = CRL_CID_ANALOG_GAIN_S, + .name = "CRL_CID_ANALOG_GAIN_LCG", + .type = CRL_V4L2_CTRL_TYPE_CUSTOM, .data.std_data.min = 0, - .data.std_data.max = 4096, + .data.std_data.max = 0xFF, .data.std_data.step = 1, - .data.std_data.def = 128, + .data.std_data.def = 0, .flags = 0, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_digital_gain_h_regs), - .regs = ov2775_digital_gain_h_regs, + .regs_items = ARRAY_SIZE(ov2775_ana_gain_l_regs), + .regs = ov2775_ana_gain_l_regs, .dep_items = 0, .dep_ctrls = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, }, { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = CRL_CID_DIGITAL_GAIN_VS, - .name = "CRL_CID_DIGITAL_GAIN_VS", - .type = CRL_V4L2_CTRL_TYPE_INTEGER, + .ctrl_id = CRL_CID_ANALOG_GAIN_VS, + .name = "CRL_CID_ANALOG_GAIN_VS", + .type = CRL_V4L2_CTRL_TYPE_CUSTOM, .data.std_data.min = 0, - .data.std_data.max = 4096, + .data.std_data.max = 0xFF, .data.std_data.step = 1, - .data.std_data.def = 128, + .data.std_data.def = 0, .flags = 0, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_digital_gain_vs_regs), - .regs = ov2775_digital_gain_vs_regs, + .regs_items = ARRAY_SIZE(ov2775_ana_gain_vs_regs), + .regs = ov2775_ana_gain_vs_regs, .dep_items = 0, .dep_ctrls = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, }, { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = CRL_CID_EXPOSURE_SHS1, - .name = "CRL_CID_EXPOSURE_DCG", - .type = CRL_V4L2_CTRL_TYPE_INTEGER, - .data.std_data.min = 1, - .data.std_data.max = 65500, + .ctrl_id = CRL_CID_ANALOG_LINEAR_CG, + .name = "CRL_CID_ANALOG_LINEAR_CG", + .type = CRL_V4L2_CTRL_TYPE_CUSTOM, + .data.std_data.min = 0, + .data.std_data.max = 0xFF, .data.std_data.step = 1, .data.std_data.def = 0, .flags = 0, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_exposure_dcg_regs), - .regs = ov2775_exposure_dcg_regs, - .dep_items = 0, /* FLL is changes automatically */ + .regs_items = ARRAY_SIZE(ov2775_ana_gain_linear_cg_regs), + .regs = ov2775_ana_gain_linear_cg_regs, + .dep_items = 0, .dep_ctrls = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, }, { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = CRL_CID_EXPOSURE_SHS2, - .name = "CRL_CID_EXPOSURE_VS", - .type = CRL_V4L2_CTRL_TYPE_INTEGER, + .ctrl_id = CRL_CID_DIGITAL_GAIN_L, + .name = "CRL_CID_DIGITAL_GAIN_HCG", + .type = CRL_V4L2_CTRL_TYPE_CUSTOM, .data.std_data.min = 1, - .data.std_data.max = 65500, + .data.std_data.max = 0xFFFF, .data.std_data.step = 1, - .data.std_data.def = 0, + .data.std_data.def = 0x100, .flags = 0, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_exposure_vs_regs), - .regs = ov2775_exposure_vs_regs, - .dep_items = 0, /* FLL is changes automatically */ + .regs_items = ARRAY_SIZE(ov2775_digital_gain_h_regs), + .regs = ov2775_digital_gain_h_regs, + .dep_items = 0, .dep_ctrls = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, }, { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = V4L2_CID_HFLIP, - .name = "V4L2_CID_HFLIP", - .type = CRL_V4L2_CTRL_TYPE_INTEGER, - .data.std_data.min = 0, - .data.std_data.max = 1, + .ctrl_id = CRL_CID_DIGITAL_GAIN_S, + .name = "CRL_CID_DIGITAL_GAIN_LCG", + .type = CRL_V4L2_CTRL_TYPE_CUSTOM, + .data.std_data.min = 1, + .data.std_data.max = 0xFFFF, .data.std_data.step = 1, - .data.std_data.def = 0, + .data.std_data.def = 0x100, .flags = 0, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_h_flip_regs), - .regs = ov2775_h_flip_regs, + .regs_items = ARRAY_SIZE(ov2775_digital_gain_l_regs), + .regs = ov2775_digital_gain_l_regs, .dep_items = 0, .dep_ctrls = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, }, { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = V4L2_CID_VFLIP, - .name = "V4L2_CID_VFLIP", - .type = CRL_V4L2_CTRL_TYPE_INTEGER, - .data.std_data.min = 0, - .data.std_data.max = 1, + .ctrl_id = CRL_CID_DIGITAL_GAIN_VS, + .name = "CRL_CID_DIGITAL_GAIN_VS", + .type = CRL_V4L2_CTRL_TYPE_CUSTOM, + .data.std_data.min = 1, + .data.std_data.max = 0xFFFF, .data.std_data.step = 1, - .data.std_data.def = 0, + .data.std_data.def = 0x100, .flags = 0, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_v_flip_regs), - .regs = ov2775_v_flip_regs, + .regs_items = ARRAY_SIZE(ov2775_digital_gain_vs_regs), + .regs = ov2775_digital_gain_vs_regs, .dep_items = 0, .dep_ctrls = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, }, { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = V4L2_CID_FRAME_LENGTH_LINES, - .name = "Frame Length Lines", + .ctrl_id = CRL_CID_EXPOSURE_SHS1, + .name = "CRL_CID_EXPOSURE_DCG", .type = CRL_V4L2_CTRL_TYPE_CUSTOM, - .data.std_data.min = 160, - .data.std_data.max = 65535, + .data.std_data.min = 1, + .data.std_data.max = 0xFFFF, .data.std_data.step = 1, - .data.std_data.def = 1126, - .flags = V4L2_CTRL_FLAG_UPDATE, + .data.std_data.def = 0x10, + .flags = 0, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_vblank_regs), - .regs = ov2775_vblank_regs, - .dep_items = 0, + .regs_items = ARRAY_SIZE(ov2775_exposure_dcg_regs), + .regs = ov2775_exposure_dcg_regs, + .dep_items = 0, /* FLL is changes automatically */ .dep_ctrls = 0, .v4l2_type = V4L2_CTRL_TYPE_INTEGER, }, @@ -7988,19 +8033,19 @@ static struct crl_v4l2_ctrl ov2775_v4l2_ctrls[] = { .sd_type = CRL_SUBDEV_TYPE_PIXEL_ARRAY, .op_type = CRL_V4L2_CTRL_SET_OP, .context = SENSOR_POWERED_ON, - .ctrl_id = V4L2_CID_LINE_LENGTH_PIXELS, - .name = "Line Length Pixels", + .ctrl_id = CRL_CID_EXPOSURE_SHS2, + .name = "CRL_CID_EXPOSURE_VS", .type = CRL_V4L2_CTRL_TYPE_CUSTOM, - .data.std_data.min = 1024, - .data.std_data.max = 65520, + .data.std_data.min = 1, + .data.std_data.max = 0xFFFF, .data.std_data.step = 1, - .data.std_data.def = 3550, - .flags = V4L2_CTRL_FLAG_UPDATE, + .data.std_data.def = 0x02, + .flags = 0, .impact = CRL_IMPACTS_NO_IMPACT, .ctrl = 0, - .regs_items = ARRAY_SIZE(ov2775_hblank_regs), - .regs = ov2775_hblank_regs, - .dep_items = 0, + .regs_items = ARRAY_SIZE(ov2775_exposure_vs_regs), + .regs = ov2775_exposure_vs_regs, + .dep_items = 0, /* FLL is changes automatically */ .dep_ctrls = 0, .v4l2_type = V4L2_CTRL_TYPE_INTEGER, }, @@ -8129,6 +8174,9 @@ static struct crl_sensor_configuration ov2775_crl_configuration = { .power_items = ARRAY_SIZE(ov2775_power_items), .power_entities = ov2775_power_items, + .onetime_init_regs_items = 0, + .onetime_init_regs = 0, + .powerup_regs_items = ARRAY_SIZE(ov2775_powerup_standby_regset), .powerup_regs = ov2775_powerup_standby_regset, diff --git a/include/uapi/linux/crlmodule.h b/include/uapi/linux/crlmodule.h index 8bcb8c92830f..f13d2788b88c 100644 --- a/include/uapi/linux/crlmodule.h +++ b/include/uapi/linux/crlmodule.h @@ -73,4 +73,7 @@ struct crl_registers_info { /* Set HDR mode exposure ratio */ #define CRL_CID_EXPOSURE_HDR_RATIO (V4L2_CID_CRLMODULE_BASE + 24) +/* choose hcg/lcg for linear analog */ +#define CRL_CID_ANALOG_LINEAR_CG (V4L2_CID_CRLMODULE_BASE + 25) + #endif /* UAPI_LINUX_CRLMODULE_H */ -- https://clearlinux.org