From: Hans de Goede <hdegoede@redhat.com>
Date: Sun, 11 Oct 2009 08:22:29 +0000 (-0300)
Subject: V4L/DVB (13142): gspca_mr97310a: small tweak to CIF sensor type 1 exposure setting
X-Git-Tag: firefly_0821_release~9833^2~3918^2~271
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d76f975c574230fb00d07848d330e04d97e51475;p=firefly-linux-kernel-4.4.55.git

V4L/DVB (13142): gspca_mr97310a: small tweak to CIF sensor type 1 exposure setting

The CIF sensor type 1 exposure setting got clamped at 300, as settings below
300 do not work well (and do work for the other sensors). This patch
scales the 0-4095 range to 300-4095 instead of ignoring changes between
300, avoiding have a part of the control range where nothing happens.

This is esp. important for software autogain as done by libv4l.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---

diff --git a/drivers/media/video/gspca/mr97310a.c b/drivers/media/video/gspca/mr97310a.c
index abc56e37efcb..f282f8000701 100644
--- a/drivers/media/video/gspca/mr97310a.c
+++ b/drivers/media/video/gspca/mr97310a.c
@@ -842,8 +842,9 @@ static void setexposure(struct gspca_dev *gspca_dev)
 		return;
 
 	if (sd->cam_type == CAM_TYPE_CIF && sd->sensor_type == 1) {
-		/* This cam does not like very low exposure settings */
-		exposure = (sd->exposure < 300) ? 300 : sd->exposure;
+		/* This cam does not like exposure settings > 300,
+		   so scale 0 - 4095 to 300 - 4095 */
+		exposure = (sd->exposure * 9267) / 10000 + 300;
 		sensor_write1(gspca_dev, 3, exposure >> 4);
 		sensor_write1(gspca_dev, 4, exposure & 0x0f);
 	} else {