diff options
Diffstat (limited to 'drivers/media/video/gspca/pac7302.c')
-rw-r--r-- | drivers/media/video/gspca/pac7302.c | 20 |
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) | |||
601 | static void setgain(struct gspca_dev *gspca_dev) | 601 | static 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); |