diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/video/gspca/pac7311.c | 30 |
1 files changed, 6 insertions, 24 deletions
diff --git a/drivers/media/video/gspca/pac7311.c b/drivers/media/video/gspca/pac7311.c index d4c6ad2f1156..81f018406bbd 100644 --- a/drivers/media/video/gspca/pac7311.c +++ b/drivers/media/video/gspca/pac7311.c | |||
@@ -70,6 +70,8 @@ enum e_ctrl { | |||
70 | struct sd { | 70 | struct sd { |
71 | struct gspca_dev gspca_dev; /* !! must be the first item */ | 71 | struct gspca_dev gspca_dev; /* !! must be the first item */ |
72 | struct gspca_ctrl ctrls[NCTRLS]; | 72 | struct gspca_ctrl ctrls[NCTRLS]; |
73 | int exp_too_low_cnt; | ||
74 | int exp_too_high_cnt; | ||
73 | 75 | ||
74 | u8 sof_read; | 76 | u8 sof_read; |
75 | u8 autogain_ignore_frames; | 77 | u8 autogain_ignore_frames; |
@@ -81,7 +83,6 @@ struct sd { | |||
81 | static void setcontrast(struct gspca_dev *gspca_dev); | 83 | static void setcontrast(struct gspca_dev *gspca_dev); |
82 | static void setgain(struct gspca_dev *gspca_dev); | 84 | static void setgain(struct gspca_dev *gspca_dev); |
83 | static void setexposure(struct gspca_dev *gspca_dev); | 85 | static void setexposure(struct gspca_dev *gspca_dev); |
84 | static void setautogain(struct gspca_dev *gspca_dev); | ||
85 | static void sethvflip(struct gspca_dev *gspca_dev); | 86 | static void sethvflip(struct gspca_dev *gspca_dev); |
86 | 87 | ||
87 | static const struct ctrl sd_ctrls[] = { | 88 | static const struct ctrl sd_ctrls[] = { |
@@ -106,7 +107,6 @@ static const struct ctrl sd_ctrls[] = { | |||
106 | .maximum = 244, | 107 | .maximum = 244, |
107 | .step = 1, | 108 | .step = 1, |
108 | .default_value = 122, | 109 | .default_value = 122, |
109 | #define GAIN_KNEE 244 /* Gain seems to cause little noise on the 7311 */ | ||
110 | }, | 110 | }, |
111 | .set_control = setgain, | 111 | .set_control = setgain, |
112 | }, | 112 | }, |
@@ -118,8 +118,7 @@ static const struct ctrl sd_ctrls[] = { | |||
118 | .minimum = 2, | 118 | .minimum = 2, |
119 | .maximum = 63, | 119 | .maximum = 63, |
120 | .step = 1, | 120 | .step = 1, |
121 | .default_value = 2, /* 30 fps */ | 121 | .default_value = 3, /* 20 fps, avoid using high compr. */ |
122 | #define EXPOSURE_KNEE 6 /* 10 fps */ | ||
123 | }, | 122 | }, |
124 | .set_control = setexposure, | 123 | .set_control = setexposure, |
125 | }, | 124 | }, |
@@ -133,7 +132,6 @@ static const struct ctrl sd_ctrls[] = { | |||
133 | .step = 1, | 132 | .step = 1, |
134 | .default_value = 1, | 133 | .default_value = 1, |
135 | }, | 134 | }, |
136 | .set_control = setautogain, | ||
137 | }, | 135 | }, |
138 | [HFLIP] = { | 136 | [HFLIP] = { |
139 | { | 137 | { |
@@ -497,7 +495,7 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
497 | reg_w(gspca_dev, 0x78, 0x44); /* Bit_0=start stream, Bit_6=LED */ | 495 | reg_w(gspca_dev, 0x78, 0x44); /* Bit_0=start stream, Bit_6=LED */ |
498 | } | 496 | } |
499 | 497 | ||
500 | #define WANT_REGULAR_AUTOGAIN | 498 | #define WANT_COARSE_EXPO_AUTOGAIN |
501 | #include "autogain_functions.h" | 499 | #include "autogain_functions.h" |
502 | 500 | ||
503 | static void do_autogain(struct gspca_dev *gspca_dev) | 501 | static void do_autogain(struct gspca_dev *gspca_dev) |
@@ -514,8 +512,8 @@ static void do_autogain(struct gspca_dev *gspca_dev) | |||
514 | 512 | ||
515 | if (sd->autogain_ignore_frames > 0) | 513 | if (sd->autogain_ignore_frames > 0) |
516 | sd->autogain_ignore_frames--; | 514 | sd->autogain_ignore_frames--; |
517 | else if (auto_gain_n_exposure(gspca_dev, avg_lum, desired_lum, | 515 | else if (coarse_grained_expo_autogain(gspca_dev, avg_lum, desired_lum, |
518 | deadzone, GAIN_KNEE, EXPOSURE_KNEE)) | 516 | deadzone)) |
519 | sd->autogain_ignore_frames = PAC_AUTOGAIN_IGNORE_FRAMES; | 517 | sd->autogain_ignore_frames = PAC_AUTOGAIN_IGNORE_FRAMES; |
520 | } | 518 | } |
521 | 519 | ||
@@ -619,22 +617,6 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
619 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); | 617 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |
620 | } | 618 | } |
621 | 619 | ||
622 | static void setautogain(struct gspca_dev *gspca_dev) | ||
623 | { | ||
624 | struct sd *sd = (struct sd *) gspca_dev; | ||
625 | |||
626 | if (sd->ctrls[AUTOGAIN].val) { | ||
627 | sd->ctrls[EXPOSURE].val = 2; | ||
628 | sd->ctrls[GAIN].val = 122; | ||
629 | if (gspca_dev->streaming) { | ||
630 | sd->autogain_ignore_frames = | ||
631 | PAC_AUTOGAIN_IGNORE_FRAMES; | ||
632 | setexposure(gspca_dev); | ||
633 | setgain(gspca_dev); | ||
634 | } | ||
635 | } | ||
636 | } | ||
637 | |||
638 | #if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE) | 620 | #if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE) |
639 | static int sd_int_pkt_scan(struct gspca_dev *gspca_dev, | 621 | static int sd_int_pkt_scan(struct gspca_dev *gspca_dev, |
640 | u8 *data, /* interrupt packet data */ | 622 | u8 *data, /* interrupt packet data */ |