[media] gspca - sonixb: Update inactive flags to reflect autogain setting
authorHans de Goede <hdegoede@redhat.com>
Sun, 13 Mar 2011 19:05:55 +0000 (16:05 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 22 Mar 2011 07:54:46 +0000 (04:54 -0300)
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/sonixb.c

index 13cca7a82cb439b9947232d62fa37958c2a7c44d..c6c65f2da351ffb0c0728c878313d95f0242be70 100644 (file)
@@ -209,7 +209,7 @@ static const struct ctrl sd_ctrls[NCTRLS] = {
                        .step = 1,
 #define AUTOGAIN_DEF 1
                        .default_value = AUTOGAIN_DEF,
-                       .flags = 0,
+                       .flags = V4L2_CTRL_FLAG_UPDATE
                },
                .set = sd_setautogain,
        },
@@ -1008,7 +1008,8 @@ static void do_autogain(struct gspca_dev *gspca_dev)
        struct sd *sd = (struct sd *) gspca_dev;
        int avg_lum = atomic_read(&sd->avg_lum);
 
-       if (avg_lum == -1 || !sd->ctrls[AUTOGAIN].val)
+       if ((gspca_dev->ctrl_dis & (1 << AUTOGAIN)) ||
+           avg_lum == -1 || !sd->ctrls[AUTOGAIN].val)
                return;
 
        if (sd->autogain_ignore_frames > 0) {
@@ -1062,6 +1063,10 @@ static int sd_config(struct gspca_dev *gspca_dev,
        sd->bridge = id->driver_info & 0xff;
 
        gspca_dev->ctrl_dis = sensor_data[sd->sensor].ctrl_dis;
+#if AUTOGAIN_DEF
+       if (!(gspca_dev->ctrl_dis & (1 << AUTOGAIN)))
+               gspca_dev->ctrl_inac = (1 << GAIN) | (1 << EXPOSURE);
+#endif
 
        cam = &gspca_dev->cam;
        cam->ctrls = sd->ctrls;
@@ -1400,6 +1405,11 @@ static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val)
                }
        }
 
+       if (sd->ctrls[AUTOGAIN].val)
+               gspca_dev->ctrl_inac = (1 << GAIN) | (1 << EXPOSURE);
+       else
+               gspca_dev->ctrl_inac = 0;
+
        return 0;
 }