Hi Hans another drive-by question On Tue, Jun 27, 2023 at 03:18:25PM +0200, Hans de Goede wrote: > The exposure control's max effective value is VTS - 8, set the control > range to match this. Thas means that if/when a future commit makes VTS > configurable as a control itself the exposure range needs to be > updated dynamically to match the VTS value. > > The gain control goes from 0 - 1023, higher values wrap around to > the lowest gain setting. > > Also stop setting 0 as default for both controls this leads to > a totally black picture which is no good. This is esp. important > for tests of the sensor driver without (userspace driven) > auto exposure / gain. I see the driver uses V4L2_CID_GAIN. Is this intentional or should this be V4L2_CID_ANALOGUE_GAIN? As you're plumbing libcamera support in, this is the control libcamera expects to use to control analogue gain. > > Acked-by: Rui Miguel Silva <rmfrfs@xxxxxxxxx> > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> > --- > drivers/media/i2c/ov2680.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/i2c/ov2680.c b/drivers/media/i2c/ov2680.c > index 6591ce3b9244..e26a6487d421 100644 > --- a/drivers/media/i2c/ov2680.c > +++ b/drivers/media/i2c/ov2680.c > @@ -81,6 +81,9 @@ > /* If possible send 16 extra rows / lines to the ISP as padding */ > #define OV2680_END_MARGIN 16 > > +/* Max exposure time is VTS - 8 */ > +#define OV2680_INTEGRATION_TIME_MARGIN 8 > + > #define OV2680_DEFAULT_WIDTH 800 > #define OV2680_DEFAULT_HEIGHT 600 > > @@ -823,6 +826,7 @@ static int ov2680_v4l2_register(struct ov2680_dev *sensor) > const struct v4l2_ctrl_ops *ops = &ov2680_ctrl_ops; > struct ov2680_ctrls *ctrls = &sensor->ctrls; > struct v4l2_ctrl_handler *hdl = &ctrls->handler; > + int exp_max = OV2680_LINES_PER_FRAME - OV2680_INTEGRATION_TIME_MARGIN; > int ret = 0; > > v4l2_i2c_subdev_init(&sensor->sd, client, &ov2680_subdev_ops); > @@ -849,9 +853,10 @@ static int ov2680_v4l2_register(struct ov2680_dev *sensor) > 0, 0, test_pattern_menu); > > ctrls->exposure = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_EXPOSURE, > - 0, 32767, 1, 0); > + 0, exp_max, 1, exp_max); > > - ctrls->gain = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_GAIN, 0, 2047, 1, 0); > + ctrls->gain = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_GAIN, > + 0, 1023, 1, 250); > > if (hdl->error) { > ret = hdl->error; > -- > 2.41.0 >