diff options
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); } |