mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
media: ov2680: Fix exposure and gain ctrls range and default value
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. The gain control, controls an analog gain so use V4L2_CID_ANALOGUE_GAIN for it instead of V4L2_CID_GAIN. 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. Acked-by: Rui Miguel Silva <rmfrfs@gmail.com> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
3b378b35e8
commit
05d6bd86dc
|
|
@ -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
|
||||
|
||||
|
|
@ -779,7 +782,7 @@ static int ov2680_s_ctrl(struct v4l2_ctrl *ctrl)
|
|||
}
|
||||
|
||||
switch (ctrl->id) {
|
||||
case V4L2_CID_GAIN:
|
||||
case V4L2_CID_ANALOGUE_GAIN:
|
||||
ret = ov2680_gain_set(sensor, ctrl->val);
|
||||
break;
|
||||
case V4L2_CID_EXPOSURE:
|
||||
|
|
@ -849,6 +852,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);
|
||||
|
|
@ -874,9 +878,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_ANALOGUE_GAIN,
|
||||
0, 1023, 1, 250);
|
||||
|
||||
if (hdl->error) {
|
||||
ret = hdl->error;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user