aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJean-François Moine <moinejf@free.fr>2010-04-25 14:05:31 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-05-19 11:58:16 -0400
commit07ae4918f75f26f4f4200de186a27178c7e58038 (patch)
tree108cf3d48269a985678a17001946c27456ee3c45 /drivers
parenta6a86f0d2cb472450f72774794db4a76a570766d (diff)
V4L/DVB: gspca - zc3xx.c: Remove the brightness control
Brightness is done by the gamma tables and not by single bridge registers. It will be back as soon as an algorithm will be found. This change also fixes the autogain problem found by Jose Alberto Reguero (webcam 046d:08dd). Signed-off-by: Jean-François Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/video/gspca/zc3xx.c73
1 files changed, 1 insertions, 72 deletions
diff --git a/drivers/media/video/gspca/zc3xx.c b/drivers/media/video/gspca/zc3xx.c
index 582a30dcb504..1bab5086bada 100644
--- a/drivers/media/video/gspca/zc3xx.c
+++ b/drivers/media/video/gspca/zc3xx.c
@@ -40,7 +40,6 @@ static int force_sensor = -1;
40struct sd { 40struct sd {
41 struct gspca_dev gspca_dev; /* !! must be the first item */ 41 struct gspca_dev gspca_dev; /* !! must be the first item */
42 42
43 u8 brightness;
44 u8 contrast; 43 u8 contrast;
45 u8 gamma; 44 u8 gamma;
46 u8 autogain; 45 u8 autogain;
@@ -80,8 +79,6 @@ struct sd {
80}; 79};
81 80
82/* V4L2 controls supported by the driver */ 81/* V4L2 controls supported by the driver */
83static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val);
84static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val);
85static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val); 82static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val);
86static int sd_getcontrast(struct gspca_dev *gspca_dev, __s32 *val); 83static int sd_getcontrast(struct gspca_dev *gspca_dev, __s32 *val);
87static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val); 84static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val);
@@ -94,21 +91,6 @@ static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val);
94static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val); 91static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val);
95 92
96static const struct ctrl sd_ctrls[] = { 93static const struct ctrl sd_ctrls[] = {
97#define BRIGHTNESS_IDX 0
98 {
99 {
100 .id = V4L2_CID_BRIGHTNESS,
101 .type = V4L2_CTRL_TYPE_INTEGER,
102 .name = "Brightness",
103 .minimum = 0,
104 .maximum = 255,
105 .step = 1,
106#define BRIGHTNESS_DEF 128
107 .default_value = BRIGHTNESS_DEF,
108 },
109 .set = sd_setbrightness,
110 .get = sd_getbrightness,
111 },
112 { 94 {
113 { 95 {
114 .id = V4L2_CID_CONTRAST, 96 .id = V4L2_CID_CONTRAST,
@@ -150,7 +132,7 @@ static const struct ctrl sd_ctrls[] = {
150 .set = sd_setautogain, 132 .set = sd_setautogain,
151 .get = sd_getautogain, 133 .get = sd_getautogain,
152 }, 134 },
153#define LIGHTFREQ_IDX 4 135#define LIGHTFREQ_IDX 3
154 { 136 {
155 { 137 {
156 .id = V4L2_CID_POWER_LINE_FREQUENCY, 138 .id = V4L2_CID_POWER_LINE_FREQUENCY,
@@ -6004,33 +5986,6 @@ static void setmatrix(struct gspca_dev *gspca_dev)
6004 reg_w(gspca_dev->dev, matrix[i], 0x010a + i); 5986 reg_w(gspca_dev->dev, matrix[i], 0x010a + i);
6005} 5987}
6006 5988
6007static void setbrightness(struct gspca_dev *gspca_dev)
6008{
6009 struct sd *sd = (struct sd *) gspca_dev;
6010 u8 brightness;
6011
6012 switch (sd->sensor) {
6013 case SENSOR_GC0305:
6014 case SENSOR_OV7620:
6015 case SENSOR_PAS202B:
6016 case SENSOR_PO2030:
6017 return;
6018 }
6019/*fixme: is it really write to 011d and 018d for all other sensors? */
6020 brightness = sd->brightness;
6021 reg_w(gspca_dev->dev, brightness, 0x011d);
6022 switch (sd->sensor) {
6023 case SENSOR_ADCM2700:
6024 case SENSOR_HV7131B:
6025 return;
6026 }
6027 if (brightness < 0x70)
6028 brightness += 0x10;
6029 else
6030 brightness = 0x80;
6031 reg_w(gspca_dev->dev, brightness, 0x018d);
6032}
6033
6034static void setsharpness(struct gspca_dev *gspca_dev) 5989static void setsharpness(struct gspca_dev *gspca_dev)
6035{ 5990{
6036 struct sd *sd = (struct sd *) gspca_dev; 5991 struct sd *sd = (struct sd *) gspca_dev;
@@ -6789,7 +6744,6 @@ static int sd_config(struct gspca_dev *gspca_dev,
6789 cam->nmodes = ARRAY_SIZE(broken_vga_mode); 6744 cam->nmodes = ARRAY_SIZE(broken_vga_mode);
6790 break; 6745 break;
6791 } 6746 }
6792 sd->brightness = BRIGHTNESS_DEF;
6793 sd->contrast = CONTRAST_DEF; 6747 sd->contrast = CONTRAST_DEF;
6794 sd->gamma = gamma[sd->sensor]; 6748 sd->gamma = gamma[sd->sensor];
6795 sd->autogain = AUTOGAIN_DEF; 6749 sd->autogain = AUTOGAIN_DEF;
@@ -6797,12 +6751,6 @@ static int sd_config(struct gspca_dev *gspca_dev,
6797 sd->quality = QUALITY_DEF; 6751 sd->quality = QUALITY_DEF;
6798 6752
6799 switch (sd->sensor) { 6753 switch (sd->sensor) {
6800 case SENSOR_GC0305:
6801 case SENSOR_OV7620:
6802 case SENSOR_PAS202B:
6803 case SENSOR_PO2030:
6804 gspca_dev->ctrl_dis = (1 << BRIGHTNESS_IDX);
6805 break;
6806 case SENSOR_HV7131B: 6754 case SENSOR_HV7131B:
6807 case SENSOR_HV7131C: 6755 case SENSOR_HV7131C:
6808 case SENSOR_OV7630C: 6756 case SENSOR_OV7630C:
@@ -6893,7 +6841,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
6893 } 6841 }
6894 6842
6895 setmatrix(gspca_dev); 6843 setmatrix(gspca_dev);
6896 setbrightness(gspca_dev);
6897 switch (sd->sensor) { 6844 switch (sd->sensor) {
6898 case SENSOR_ADCM2700: 6845 case SENSOR_ADCM2700:
6899 case SENSOR_OV7620: 6846 case SENSOR_OV7620:
@@ -7015,24 +6962,6 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
7015 gspca_frame_add(gspca_dev, INTER_PACKET, data, len); 6962 gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
7016} 6963}
7017 6964
7018static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
7019{
7020 struct sd *sd = (struct sd *) gspca_dev;
7021
7022 sd->brightness = val;
7023 if (gspca_dev->streaming)
7024 setbrightness(gspca_dev);
7025 return 0;
7026}
7027
7028static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val)
7029{
7030 struct sd *sd = (struct sd *) gspca_dev;
7031
7032 *val = sd->brightness;
7033 return 0;
7034}
7035
7036static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val) 6965static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val)
7037{ 6966{
7038 struct sd *sd = (struct sd *) gspca_dev; 6967 struct sd *sd = (struct sd *) gspca_dev;