V4L/DVB (8710): gspca: Bad color control in sonixj.
authorJean-Francois Moine <moinejf@free.fr>
Wed, 3 Sep 2008 19:48:01 +0000 (16:48 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 3 Sep 2008 21:36:49 +0000 (18:36 -0300)
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/sonixj.c

index b17aaa45270fb9e9d76d108c94a06e28fe390d77..c34e02dccd5c866911ae56647088652cbc95a9d0 100644 (file)
@@ -794,7 +794,7 @@ static int configure_gpio(struct gspca_dev *gspca_dev,
 
        switch (sd->sensor) {
        case SENSOR_OM6802:
-               reg_w1(gspca_dev, 0x02, 0x71);
+               reg_w1(gspca_dev, 0x02, 0x73);          /* was 71 */
                reg_w1(gspca_dev, 0x01, 0x42);
                reg_w1(gspca_dev, 0x17, 0x64);
                reg_w1(gspca_dev, 0x01, 0x42);
@@ -1056,7 +1056,7 @@ static unsigned int setexposure(struct gspca_dev *gspca_dev,
                        expo = 0x0001;
                gainOm[3] = expo >> 2;
                i2c_w8(gspca_dev, gainOm);
-               reg_w1(gspca_dev, 0x96, expo >> 5);
+               reg_w1(gspca_dev, 0x96, (expo >> 5) & 0x1f);
                PDEBUG(D_CONF, "set exposure %d", gainOm[3]);
                break;
            }
@@ -1138,11 +1138,13 @@ static void setcolors(struct gspca_dev *gspca_dev)
        int colour;
 
        colour = sd->colors - 128;
-       if (colour > 0)
+       if (colour > 0) {
                data = (colour + 32) & 0x7f;    /* blue */
-       else
+               reg_w1(gspca_dev, 0x06, data);
+       } else {
                data = (-colour + 32) & 0x7f;   /* red */
-       reg_w1(gspca_dev, 0x05, data);
+               reg_w1(gspca_dev, 0x05, data);
+       }
 }
 
 static void setautogain(struct gspca_dev *gspca_dev)