[media] gspca - ov519: Check the disabled controls at start time only
authorJean-François Moine <moinejf@free.fr>
Fri, 12 Nov 2010 16:59:48 +0000 (13:59 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 29 Dec 2010 10:16:43 +0000 (08:16 -0200)
Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/ov519.c

index 7ae304d..d603220 100644 (file)
@@ -3667,8 +3667,6 @@ static void sethvflip(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
 
-       if (sd->sensor != SEN_OV7670)
-               return;
        if (sd->gspca_dev.streaming)
                ov51x_stop(sd);
        i2c_w_mask(sd, OV7670_R1E_MVFP,
@@ -3812,12 +3810,18 @@ static int sd_start(struct gspca_dev *gspca_dev)
 
        set_ov_sensor_window(sd);
 
-       setcontrast(gspca_dev);
-       setbrightness(gspca_dev);
-       setcolors(gspca_dev);
-       sethvflip(gspca_dev);
-       setautobright(gspca_dev);
-       setfreq_i(sd);
+       if (!(sd->gspca_dev.ctrl_dis & (1 << CONTRAST)))
+               setcontrast(gspca_dev);
+       if (!(sd->gspca_dev.ctrl_dis & (1 << BRIGHTNESS)))
+               setbrightness(gspca_dev);
+       if (!(sd->gspca_dev.ctrl_dis & (1 << COLORS)))
+               setcolors(gspca_dev);
+       if (!(sd->gspca_dev.ctrl_dis & ((1 << HFLIP) | (1 << VFLIP))))
+               sethvflip(gspca_dev);
+       if (!(sd->gspca_dev.ctrl_dis & (1 << AUTOBRIGHT)))
+               setautobright(gspca_dev);
+       if (!(sd->gspca_dev.ctrl_dis & (1 << FREQ)))
+               setfreq_i(sd);
 
        /* Force clear snapshot state in case the snapshot button was
           pressed while we weren't streaming */
@@ -4184,19 +4188,11 @@ static void setautobright(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
 
-       if (sd->sensor == SEN_OV7640 || sd->sensor == SEN_OV7648 ||
-           sd->sensor == SEN_OV7670 ||
-           sd->sensor == SEN_OV2610 || sd->sensor == SEN_OV3610)
-               return;
-
        i2c_w_mask(sd, 0x2d, sd->ctrls[AUTOBRIGHT].val ? 0x10 : 0x00, 0x10);
 }
 
 static void setfreq_i(struct sd *sd)
 {
-       if (sd->sensor == SEN_OV2610 || sd->sensor == SEN_OV3610)
-               return;
-
        if (sd->sensor == SEN_OV7670) {
                switch (sd->ctrls[FREQ].val) {
                case 0: /* Banding filter disabled */