[media] gspca_sonixb: Fix exposure control min/max value for coarse expo sensors
authorHans de Goede <hdegoede@redhat.com>
Fri, 30 Dec 2011 13:58:44 +0000 (10:58 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 6 Jan 2012 12:40:05 +0000 (10:40 -0200)
This got broken by some gscpa core fixes, this patch restores the proper
min/max values for these controls.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/sonixb.c

index 146b459..31f7aba 100644 (file)
@@ -1079,20 +1079,23 @@ static int sd_config(struct gspca_dev *gspca_dev,
        }
        cam->npkt = 36;                 /* 36 packets per ISOC message */
 
-       if (sensor_data[sd->sensor].flags & F_COARSE_EXPO) {
-               sd->ctrls[EXPOSURE].min = COARSE_EXPOSURE_MIN;
-               sd->ctrls[EXPOSURE].max = COARSE_EXPOSURE_MAX;
-               sd->ctrls[EXPOSURE].def = COARSE_EXPOSURE_DEF;
-       }
-
        return 0;
 }
 
 /* this function is called at probe and resume time */
 static int sd_init(struct gspca_dev *gspca_dev)
 {
+       struct sd *sd = (struct sd *) gspca_dev;
        const __u8 stop = 0x09; /* Disable stream turn of LED */
 
+       if (sensor_data[sd->sensor].flags & F_COARSE_EXPO) {
+               sd->ctrls[EXPOSURE].min = COARSE_EXPOSURE_MIN;
+               sd->ctrls[EXPOSURE].max = COARSE_EXPOSURE_MAX;
+               sd->ctrls[EXPOSURE].def = COARSE_EXPOSURE_DEF;
+               if (sd->ctrls[EXPOSURE].val > COARSE_EXPOSURE_MAX)
+                       sd->ctrls[EXPOSURE].val = COARSE_EXPOSURE_DEF;
+       }
+
        reg_w(gspca_dev, 0x01, &stop, 1);
 
        return 0;