aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2012-04-25 11:17:19 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-05-07 15:13:26 -0400
commitc894d26c5a89a241b10e2e8058ac12eb8f251252 (patch)
tree3619492bc61ac8420cf7aa4845811ddb6e99e63a /drivers
parent51ae23df428b94654dfb778bf70ca327a6aa83a0 (diff)
[media] gspca_pac7311: Adjust control scales to match registers
Now that the pac7302 and pac7311 drivers are split, they no longer share there control settings, so there is no need to scale the controls to register values, instead make them reflect the registers directly. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/video/gspca/pac7311.c41
1 files changed, 13 insertions, 28 deletions
diff --git a/drivers/media/video/gspca/pac7311.c b/drivers/media/video/gspca/pac7311.c
index d12576365038..4efa110e6932 100644
--- a/drivers/media/video/gspca/pac7311.c
+++ b/drivers/media/video/gspca/pac7311.c
@@ -92,10 +92,10 @@ static const struct ctrl sd_ctrls[] = {
92 .type = V4L2_CTRL_TYPE_INTEGER, 92 .type = V4L2_CTRL_TYPE_INTEGER,
93 .name = "Contrast", 93 .name = "Contrast",
94 .minimum = 0, 94 .minimum = 0,
95#define CONTRAST_MAX 255 95#define CONTRAST_MAX 15
96 .maximum = CONTRAST_MAX, 96 .maximum = CONTRAST_MAX,
97 .step = 1, 97 .step = 1,
98#define CONTRAST_DEF 127 98#define CONTRAST_DEF 7
99 .default_value = CONTRAST_DEF, 99 .default_value = CONTRAST_DEF,
100 }, 100 },
101 .set = sd_setcontrast, 101 .set = sd_setcontrast,
@@ -107,11 +107,11 @@ static const struct ctrl sd_ctrls[] = {
107 .type = V4L2_CTRL_TYPE_INTEGER, 107 .type = V4L2_CTRL_TYPE_INTEGER,
108 .name = "Gain", 108 .name = "Gain",
109 .minimum = 0, 109 .minimum = 0,
110#define GAIN_MAX 255 110#define GAIN_MAX 244
111 .maximum = GAIN_MAX, 111 .maximum = GAIN_MAX,
112 .step = 1, 112 .step = 1,
113#define GAIN_DEF 127 113#define GAIN_DEF 122
114#define GAIN_KNEE 255 /* Gain seems to cause little noise on the pac73xx */ 114#define GAIN_KNEE GAIN_MAX /* Gain seems to cause little noise on the 7311 */
115 .default_value = GAIN_DEF, 115 .default_value = GAIN_DEF,
116 }, 116 },
117 .set = sd_setgain, 117 .set = sd_setgain,
@@ -122,12 +122,12 @@ static const struct ctrl sd_ctrls[] = {
122 .id = V4L2_CID_EXPOSURE, 122 .id = V4L2_CID_EXPOSURE,
123 .type = V4L2_CTRL_TYPE_INTEGER, 123 .type = V4L2_CTRL_TYPE_INTEGER,
124 .name = "Exposure", 124 .name = "Exposure",
125 .minimum = 0, 125 .minimum = 2,
126#define EXPOSURE_MAX 255 126#define EXPOSURE_MAX 63
127 .maximum = EXPOSURE_MAX, 127 .maximum = EXPOSURE_MAX,
128 .step = 1, 128 .step = 1,
129#define EXPOSURE_DEF 16 /* 32 ms / 30 fps */ 129#define EXPOSURE_DEF 2 /* 30 fps */
130#define EXPOSURE_KNEE 50 /* 100 ms / 10 fps */ 130#define EXPOSURE_KNEE 6 /* 10 fps */
131 .default_value = EXPOSURE_DEF, 131 .default_value = EXPOSURE_DEF,
132 }, 132 },
133 .set = sd_setexposure, 133 .set = sd_setexposure,
@@ -400,7 +400,7 @@ static void setcontrast(struct gspca_dev *gspca_dev)
400 struct sd *sd = (struct sd *) gspca_dev; 400 struct sd *sd = (struct sd *) gspca_dev;
401 401
402 reg_w(gspca_dev, 0xff, 0x04); 402 reg_w(gspca_dev, 0xff, 0x04);
403 reg_w(gspca_dev, 0x10, sd->contrast >> 4); 403 reg_w(gspca_dev, 0x10, sd->contrast);
404 /* load registers to sensor (Bit 0, auto clear) */ 404 /* load registers to sensor (Bit 0, auto clear) */
405 reg_w(gspca_dev, 0x11, 0x01); 405 reg_w(gspca_dev, 0x11, 0x01);
406} 406}
@@ -408,15 +408,10 @@ static void setcontrast(struct gspca_dev *gspca_dev)
408static void setgain(struct gspca_dev *gspca_dev) 408static void setgain(struct gspca_dev *gspca_dev)
409{ 409{
410 struct sd *sd = (struct sd *) gspca_dev; 410 struct sd *sd = (struct sd *) gspca_dev;
411 int gain = GAIN_MAX - sd->gain;
412 411
413 if (gain < 1)
414 gain = 1;
415 else if (gain > 245)
416 gain = 245;
417 reg_w(gspca_dev, 0xff, 0x04); /* page 4 */ 412 reg_w(gspca_dev, 0xff, 0x04); /* page 4 */
418 reg_w(gspca_dev, 0x0e, 0x00); 413 reg_w(gspca_dev, 0x0e, 0x00);
419 reg_w(gspca_dev, 0x0f, gain); 414 reg_w(gspca_dev, 0x0f, GAIN_MAX - sd->gain + 1);
420 415
421 /* load registers to sensor (Bit 0, auto clear) */ 416 /* load registers to sensor (Bit 0, auto clear) */
422 reg_w(gspca_dev, 0x11, 0x01); 417 reg_w(gspca_dev, 0x11, 0x01);
@@ -425,19 +420,9 @@ static void setgain(struct gspca_dev *gspca_dev)
425static void setexposure(struct gspca_dev *gspca_dev) 420static void setexposure(struct gspca_dev *gspca_dev)
426{ 421{
427 struct sd *sd = (struct sd *) gspca_dev; 422 struct sd *sd = (struct sd *) gspca_dev;
428 __u8 reg;
429
430 /* register 2 of page 4 contains the clock divider configuring the
431 no fps according to the formula: 60 / reg. sd->exposure is the
432 desired exposure time in ms. */
433 reg = 120 * sd->exposure / 1000;
434 if (reg < 2)
435 reg = 2;
436 else if (reg > 63)
437 reg = 63;
438 423
439 reg_w(gspca_dev, 0xff, 0x04); /* page 4 */ 424 reg_w(gspca_dev, 0xff, 0x04); /* page 4 */
440 reg_w(gspca_dev, 0x02, reg); 425 reg_w(gspca_dev, 0x02, sd->exposure);
441 426
442 /* load registers to sensor (Bit 0, auto clear) */ 427 /* load registers to sensor (Bit 0, auto clear) */
443 reg_w(gspca_dev, 0x11, 0x01); 428 reg_w(gspca_dev, 0x11, 0x01);
@@ -446,7 +431,7 @@ static void setexposure(struct gspca_dev *gspca_dev)
446 640x480 mode and page 4 reg 2 <= 3 then it must be 9 */ 431 640x480 mode and page 4 reg 2 <= 3 then it must be 9 */
447 reg_w(gspca_dev, 0xff, 0x01); 432 reg_w(gspca_dev, 0xff, 0x01);
448 if (gspca_dev->cam.cam_mode[(int)gspca_dev->curr_mode].priv && 433 if (gspca_dev->cam.cam_mode[(int)gspca_dev->curr_mode].priv &&
449 reg <= 3) { 434 sd->exposure <= 3) {
450 reg_w(gspca_dev, 0x08, 0x09); 435 reg_w(gspca_dev, 0x08, 0x09);
451 } else { 436 } else {
452 reg_w(gspca_dev, 0x08, 0x08); 437 reg_w(gspca_dev, 0x08, 0x08);