summaryrefslogtreecommitdiff
path: root/isp/controls.c
diff options
context:
space:
mode:
Diffstat (limited to 'isp/controls.c')
-rw-r--r--isp/controls.c29
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);
}