aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/pac7302.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/gspca/pac7302.c')
-rw-r--r--drivers/media/video/gspca/pac7302.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/media/video/gspca/pac7302.c b/drivers/media/video/gspca/pac7302.c
index a2a42f61d3c0..f196a0ff4fab 100644
--- a/drivers/media/video/gspca/pac7302.c
+++ b/drivers/media/video/gspca/pac7302.c
@@ -71,7 +71,7 @@
71 * 0 | 0xc7 | setbluebalance() 71 * 0 | 0xc7 | setbluebalance()
72 * 0 | 0xdc | setbrightcont(), setcolors() 72 * 0 | 0xdc | setbrightcont(), setcolors()
73 * 3 | 0x02 | setexposure() 73 * 3 | 0x02 | setexposure()
74 * 3 | 0x10 | setgain() 74 * 3 | 0x10, 0x12 | setgain()
75 * 3 | 0x11 | setcolors(), setgain(), setexposure(), sethvflip() 75 * 3 | 0x11 | setcolors(), setgain(), setexposure(), sethvflip()
76 * 3 | 0x21 | sethvflip() 76 * 3 | 0x21 | sethvflip()
77 */ 77 */
@@ -212,10 +212,10 @@ static const struct ctrl sd_ctrls[] = {
212 .type = V4L2_CTRL_TYPE_INTEGER, 212 .type = V4L2_CTRL_TYPE_INTEGER,
213 .name = "Gain", 213 .name = "Gain",
214 .minimum = 0, 214 .minimum = 0,
215 .maximum = 255, 215 .maximum = 62,
216 .step = 1, 216 .step = 1,
217#define GAIN_DEF 127 217#define GAIN_DEF 15
218#define GAIN_KNEE 255 /* Gain seems to cause little noise on the pac73xx */ 218#define GAIN_KNEE 46
219 .default_value = GAIN_DEF, 219 .default_value = GAIN_DEF,
220 }, 220 },
221 .set_control = setgain 221 .set_control = setgain
@@ -601,9 +601,19 @@ static void setbluebalance(struct gspca_dev *gspca_dev)
601static void setgain(struct gspca_dev *gspca_dev) 601static void setgain(struct gspca_dev *gspca_dev)
602{ 602{
603 struct sd *sd = (struct sd *) gspca_dev; 603 struct sd *sd = (struct sd *) gspca_dev;
604 u8 reg10, reg12;
605
606 if (sd->ctrls[GAIN].val < 32) {
607 reg10 = sd->ctrls[GAIN].val;
608 reg12 = 0;
609 } else {
610 reg10 = 31;
611 reg12 = sd->ctrls[GAIN].val - 31;
612 }
604 613
605 reg_w(gspca_dev, 0xff, 0x03); /* page 3 */ 614 reg_w(gspca_dev, 0xff, 0x03); /* page 3 */
606 reg_w(gspca_dev, 0x10, sd->ctrls[GAIN].val >> 3); 615 reg_w(gspca_dev, 0x10, reg10);
616 reg_w(gspca_dev, 0x12, reg12);
607 617
608 /* load registers to sensor (Bit 0, auto clear) */ 618 /* load registers to sensor (Bit 0, auto clear) */
609 reg_w(gspca_dev, 0x11, 0x01); 619 reg_w(gspca_dev, 0x11, 0x01);