aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/mars.c
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2009-02-28 08:09:24 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-30 12:43:03 -0300
commit253bae5748010e218539603f1ec18f7fc6a03002 (patch)
tree1f8c8f2a1ae4afe0af51e296822d595189219ea3 /drivers/media/video/gspca/mars.c
parent7434ca4343c001267cec25b0ade01b0551beb1e4 (diff)
downloadkernel_samsung_smdk4412-253bae5748010e218539603f1ec18f7fc6a03002.zip
kernel_samsung_smdk4412-253bae5748010e218539603f1ec18f7fc6a03002.tar.gz
kernel_samsung_smdk4412-253bae5748010e218539603f1ec18f7fc6a03002.tar.bz2
V4L/DVB (10787): gspca - mars: Bad webcam register values tied to saturation.
Signed-off-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca/mars.c')
-rw-r--r--drivers/media/video/gspca/mars.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/media/video/gspca/mars.c b/drivers/media/video/gspca/mars.c
index 7f605ce..ce065d3 100644
--- a/drivers/media/video/gspca/mars.c
+++ b/drivers/media/video/gspca/mars.c
@@ -69,10 +69,10 @@ static struct ctrl sd_ctrls[] = {
.id = V4L2_CID_SATURATION,
.type = V4L2_CTRL_TYPE_INTEGER,
.name = "Color",
- .minimum = 0,
- .maximum = 220,
+ .minimum = 1,
+ .maximum = 255,
.step = 1,
-#define COLOR_DEF 190
+#define COLOR_DEF 200
.default_value = COLOR_DEF,
},
.set = sd_setcolors,
@@ -191,7 +191,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
struct sd *sd = (struct sd *) gspca_dev;
int err_code;
u8 *data;
- int i, val;
+ int i;
data = gspca_dev->usb_buf;
@@ -247,9 +247,11 @@ static int sd_start(struct gspca_dev *gspca_dev)
data[0] = 0x5e; /* address */
data[1] = 0; /* reg 94, Y Gain (auto) */
/*jfm: from win trace*/
- val = sd->colors * 0x40 + 0x400;
- data[2] = val; /* reg 0x5f/0x60 (LE) = saturation */
- data[3] = val >> 8;
+ /* reg 0x5f/0x60 (LE) = saturation */
+ /* h (60): xxxx x100
+ * l (5f): xxxx x000 */
+ data[2] = sd->colors << 3;
+ data[3] = ((sd->colors >> 2) & 0xf8) | 0x04;
data[4] = sd->brightness; /* reg 0x61 = brightness */
data[5] = 0x00;
@@ -365,10 +367,11 @@ static int sd_setcolors(struct gspca_dev *gspca_dev, __s32 val)
sd->colors = val;
if (gspca_dev->streaming) {
- val = val * 0x40 + 0x400;
+
+ /* see sd_start */
gspca_dev->usb_buf[0] = 0x5f;
- gspca_dev->usb_buf[1] = val;
- gspca_dev->usb_buf[2] = val >> 8;
+ gspca_dev->usb_buf[1] = sd->colors << 3;
+ gspca_dev->usb_buf[2] = ((sd->colors >> 2) & 0xf8) | 0x04;
reg_w(gspca_dev, 3);
}
return 0;