Skip to content

Commit

Permalink
media: i2c: imx290: Add exposure time control
Browse files Browse the repository at this point in the history
Support configuring the exposure time, which is expressed as the
complement of the exposure time (frame period minus integration time).
The frame period is currently fixed.

Signed-off-by: Laurent Pinchart <[email protected]>
Acked-by: Alexander Stein <[email protected]>
Reviewed-by: Dave Stevenson <[email protected]>
Signed-off-by: Sakari Ailus <[email protected]>
  • Loading branch information
pinchartl authored and Sakari Ailus committed Oct 27, 2022
1 parent 79d99ae commit 827c7e6
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions drivers/media/i2c/imx290.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@
#define IMX290_PGCTRL_THRU BIT(1)
#define IMX290_PGCTRL_MODE(n) ((n) << 4)

#define IMX290_VMAX_DEFAULT 1125

static const char * const imx290_supply_name[] = {
"vdda",
"vddd",
Expand Down Expand Up @@ -176,7 +178,7 @@ static const char * const imx290_test_pattern_menu[] = {

static const struct imx290_regval imx290_global_init_settings[] = {
{ IMX290_CTRL_07, IMX290_WINMODE_1080P },
{ IMX290_VMAX, 1125 },
{ IMX290_VMAX, IMX290_VMAX_DEFAULT },
{ IMX290_EXTCK_FREQ, 0x2520 },
{ IMX290_WINWV_OB, 12 },
{ IMX290_WINPH, 0 },
Expand Down Expand Up @@ -480,6 +482,12 @@ static int imx290_set_ctrl(struct v4l2_ctrl *ctrl)
case V4L2_CID_GAIN:
ret = imx290_write(imx290, IMX290_GAIN, ctrl->val, NULL);
break;

case V4L2_CID_EXPOSURE:
ret = imx290_write(imx290, IMX290_SHS1,
IMX290_VMAX_DEFAULT - ctrl->val - 1, NULL);
break;

case V4L2_CID_TEST_PATTERN:
if (ctrl->val) {
imx290_write(imx290, IMX290_BLKLEVEL, 0, &ret);
Expand Down Expand Up @@ -1008,12 +1016,16 @@ static int imx290_probe(struct i2c_client *client)
*/
imx290_entity_init_cfg(&imx290->sd, NULL);

v4l2_ctrl_handler_init(&imx290->ctrls, 4);
v4l2_ctrl_handler_init(&imx290->ctrls, 5);
imx290->ctrls.lock = &imx290->lock;

v4l2_ctrl_new_std(&imx290->ctrls, &imx290_ctrl_ops,
V4L2_CID_GAIN, 0, 72, 1, 0);

v4l2_ctrl_new_std(&imx290->ctrls, &imx290_ctrl_ops,
V4L2_CID_EXPOSURE, 1, IMX290_VMAX_DEFAULT - 2, 1,
IMX290_VMAX_DEFAULT - 2);

imx290->link_freq =
v4l2_ctrl_new_int_menu(&imx290->ctrls, &imx290_ctrl_ops,
V4L2_CID_LINK_FREQ,
Expand Down

0 comments on commit 827c7e6

Please sign in to comment.