diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2012-06-21 14:40:10 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2012-06-21 15:03:41 +0200 |
commit | b336af7ccc70d05e695b4eee55a8e03645d21348 (patch) | |
tree | f31d82563dcfc4004a9980d8e92a09288003858b /isp/controls.c | |
parent | 972cb1c49b47a4c8775e24024c5b825a0990ee65 (diff) |
sensor: Support setting gains selectively
Setting a gain value to OMAP3_ISP_SENSOR_GAIN_KEEP will prevent that
gain from being set.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'isp/controls.c')
-rw-r--r-- | isp/controls.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/isp/controls.c b/isp/controls.c index 4939ae0..b189f7b 100644 --- a/isp/controls.c +++ b/isp/controls.c @@ -380,19 +380,26 @@ int omap3_isp_sensor_set_gain(struct omap3_isp_device *isp, unsigned int gain) return v4l2_subdev_set_controls(isp->sensor.entity, ARRAY_SIZE(ctrls), ctrls); } -int omap3_isp_sensor_set_gains(struct omap3_isp_device *isp, unsigned int red, - unsigned int green, unsigned int blue) +int omap3_isp_sensor_set_gains(struct omap3_isp_device *isp, + int red, int green, int blue) { struct v4l2_ext_control ctrls[4]; + unsigned int i = 0; - ctrls[0].id = V4L2_CID_GAIN_RED; - ctrls[0].value = red; - ctrls[1].id = V4L2_CID_GAIN_GREEN1; - ctrls[1].value = green; - ctrls[2].id = V4L2_CID_GAIN_GREEN2; - ctrls[2].value = green; - ctrls[3].id = V4L2_CID_GAIN_BLUE; - ctrls[3].value = blue; + if (red != OMAP3_ISP_SENSOR_GAIN_KEEP) { + ctrls[i].id = V4L2_CID_GAIN_RED; + ctrls[i++].value = red; + } + if (green != OMAP3_ISP_SENSOR_GAIN_KEEP) { + ctrls[i].id = V4L2_CID_GAIN_GREEN1; + ctrls[i++].value = green; + ctrls[i].id = V4L2_CID_GAIN_GREEN2; + ctrls[i++].value = green; + } + if (blue != OMAP3_ISP_SENSOR_GAIN_KEEP) { + ctrls[i].id = V4L2_CID_GAIN_BLUE; + ctrls[i++].value = blue; + } - return v4l2_subdev_set_controls(isp->sensor.entity, ARRAY_SIZE(ctrls), ctrls); + return v4l2_subdev_set_controls(isp->sensor.entity, i, ctrls); } |