diff options
Diffstat (limited to 'drivers/media/video/gspca')
-rw-r--r-- | drivers/media/video/gspca/sonixb.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/media/video/gspca/sonixb.c b/drivers/media/video/gspca/sonixb.c index 13cca7a82cb4..c6c65f2da351 100644 --- a/drivers/media/video/gspca/sonixb.c +++ b/drivers/media/video/gspca/sonixb.c | |||
@@ -209,7 +209,7 @@ static const struct ctrl sd_ctrls[NCTRLS] = { | |||
209 | .step = 1, | 209 | .step = 1, |
210 | #define AUTOGAIN_DEF 1 | 210 | #define AUTOGAIN_DEF 1 |
211 | .default_value = AUTOGAIN_DEF, | 211 | .default_value = AUTOGAIN_DEF, |
212 | .flags = 0, | 212 | .flags = V4L2_CTRL_FLAG_UPDATE |
213 | }, | 213 | }, |
214 | .set = sd_setautogain, | 214 | .set = sd_setautogain, |
215 | }, | 215 | }, |
@@ -1008,7 +1008,8 @@ static void do_autogain(struct gspca_dev *gspca_dev) | |||
1008 | struct sd *sd = (struct sd *) gspca_dev; | 1008 | struct sd *sd = (struct sd *) gspca_dev; |
1009 | int avg_lum = atomic_read(&sd->avg_lum); | 1009 | int avg_lum = atomic_read(&sd->avg_lum); |
1010 | 1010 | ||
1011 | if (avg_lum == -1 || !sd->ctrls[AUTOGAIN].val) | 1011 | if ((gspca_dev->ctrl_dis & (1 << AUTOGAIN)) || |
1012 | avg_lum == -1 || !sd->ctrls[AUTOGAIN].val) | ||
1012 | return; | 1013 | return; |
1013 | 1014 | ||
1014 | if (sd->autogain_ignore_frames > 0) { | 1015 | if (sd->autogain_ignore_frames > 0) { |
@@ -1062,6 +1063,10 @@ static int sd_config(struct gspca_dev *gspca_dev, | |||
1062 | sd->bridge = id->driver_info & 0xff; | 1063 | sd->bridge = id->driver_info & 0xff; |
1063 | 1064 | ||
1064 | gspca_dev->ctrl_dis = sensor_data[sd->sensor].ctrl_dis; | 1065 | gspca_dev->ctrl_dis = sensor_data[sd->sensor].ctrl_dis; |
1066 | #if AUTOGAIN_DEF | ||
1067 | if (!(gspca_dev->ctrl_dis & (1 << AUTOGAIN))) | ||
1068 | gspca_dev->ctrl_inac = (1 << GAIN) | (1 << EXPOSURE); | ||
1069 | #endif | ||
1065 | 1070 | ||
1066 | cam = &gspca_dev->cam; | 1071 | cam = &gspca_dev->cam; |
1067 | cam->ctrls = sd->ctrls; | 1072 | cam->ctrls = sd->ctrls; |
@@ -1400,6 +1405,11 @@ static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val) | |||
1400 | } | 1405 | } |
1401 | } | 1406 | } |
1402 | 1407 | ||
1408 | if (sd->ctrls[AUTOGAIN].val) | ||
1409 | gspca_dev->ctrl_inac = (1 << GAIN) | (1 << EXPOSURE); | ||
1410 | else | ||
1411 | gspca_dev->ctrl_inac = 0; | ||
1412 | |||
1403 | return 0; | 1413 | return 0; |
1404 | } | 1414 | } |
1405 | 1415 | ||