V4L/DVB (8713): gspca: Bad color control again in sonixj.
authorJean-Francois Moine <moinejf@free.fr>
Wed, 3 Sep 2008 19:48:04 +0000 (16:48 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 3 Sep 2008 21:36:52 +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 6673a3edf1908b79a18f08a7ea5a806813458f09..19c9791309e12cc8575027e2a9e03b1b7df224fe 100644 (file)
@@ -108,9 +108,9 @@ static struct ctrl sd_ctrls[] = {
                .type    = V4L2_CTRL_TYPE_INTEGER,
                .name    = "Color",
                .minimum = 0,
-               .maximum = 255,
+               .maximum = 64,
                .step    = 1,
-#define COLOR_DEF 127
+#define COLOR_DEF 32
                .default_value = COLOR_DEF,
            },
            .set = sd_setcolors,
@@ -1132,17 +1132,18 @@ static void setcontrast(struct gspca_dev *gspca_dev)
 static void setcolors(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
-       __u8 data;
-       int colour;
+       __u8 blue, red;
 
-       colour = sd->colors - 128;
-       if (colour > 0) {
-               data = (colour + 32) & 0x7f;    /* blue */
-               reg_w1(gspca_dev, 0x06, data);
+       if (sd->colors >= 32) {
+               red = 32 + (sd->colors - 32) / 2;
+               blue = 64 - sd->colors;
        } else {
-               data = (-colour + 32) & 0x7f;   /* red */
-               reg_w1(gspca_dev, 0x05, data);
+               red = sd->colors;
+               blue = 32 + (32 - sd->colors) / 2;
        }
+       reg_w1(gspca_dev, 0x05, red);
+/*     reg_w1(gspca_dev, 0x07, 32); */
+       reg_w1(gspca_dev, 0x06, blue);
 }
 
 static void setautogain(struct gspca_dev *gspca_dev)