aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca
diff options
context:
space:
mode:
authorErik Andr?n <erik.andren@gmail.com>2009-01-08 01:53:50 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-06-16 17:20:25 -0400
commit3b9ae658ec77180d13152913a1f63b6f1b2756c2 (patch)
treeef8c4539b1df606cfa7649f0796fcb426f45845b /drivers/media/video/gspca
parentcb29e691977ac7677ca62c13cc9aa1eab2463075 (diff)
V4L/DVB (11459): gspca - m5602-po1030: Add auto white balancing control
Add a po1030 auto white balancing control that's disabled by default Signed-off-by: Erik Andr?n <erik.andren@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca')
-rw-r--r--drivers/media/video/gspca/m5602/m5602_po1030.c51
-rw-r--r--drivers/media/video/gspca/m5602/m5602_po1030.h2
2 files changed, 53 insertions, 0 deletions
diff --git a/drivers/media/video/gspca/m5602/m5602_po1030.c b/drivers/media/video/gspca/m5602/m5602_po1030.c
index 7ec3fbffc4be..7eec6e8ca72e 100644
--- a/drivers/media/video/gspca/m5602/m5602_po1030.c
+++ b/drivers/media/video/gspca/m5602/m5602_po1030.c
@@ -119,6 +119,20 @@ const static struct ctrl po1030_ctrls[] = {
119 }, 119 },
120 .set = po1030_set_vflip, 120 .set = po1030_set_vflip,
121 .get = po1030_get_vflip 121 .get = po1030_get_vflip
122 },
123#define AUTO_WHITE_BALANCE_IDX 6
124 {
125 {
126 .id = V4L2_CID_AUTO_WHITE_BALANCE,
127 .type = V4L2_CTRL_TYPE_BOOLEAN,
128 .name = "auto white balance",
129 .minimum = 0,
130 .maximum = 1,
131 .step = 1,
132 .default_value = 0,
133 },
134 .set = po1030_set_auto_white_balance,
135 .get = po1030_get_auto_white_balance
122 } 136 }
123}; 137};
124 138
@@ -238,6 +252,14 @@ int po1030_init(struct sd *sd)
238 252
239 err = po1030_set_red_balance(&sd->gspca_dev, 253 err = po1030_set_red_balance(&sd->gspca_dev,
240 sensor_settings[BLUE_BALANCE_IDX]); 254 sensor_settings[BLUE_BALANCE_IDX]);
255 if (err < 0)
256 return err;
257
258 err = po1030_set_auto_white_balance(&sd->gspca_dev,
259 sensor_settings[AUTO_WHITE_BALANCE_IDX]);
260 if (err < 0)
261 return err;
262
241 return err; 263 return err;
242} 264}
243 265
@@ -425,6 +447,35 @@ int po1030_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val)
425 return err; 447 return err;
426} 448}
427 449
450int po1030_get_auto_white_balance(struct gspca_dev *gspca_dev, __s32 *val)
451{
452 struct sd *sd = (struct sd *) gspca_dev;
453 s32 *sensor_settings = sd->sensor_priv;
454
455 *val = sensor_settings[AUTO_WHITE_BALANCE_IDX];
456 PDEBUG(D_V4L2, "Auto white balancing is %d", *val);
457
458 return 0;
459}
460
461int po1030_set_auto_white_balance(struct gspca_dev *gspca_dev, __s32 val)
462{
463 struct sd *sd = (struct sd *) gspca_dev;
464 s32 *sensor_settings = sd->sensor_priv;
465 u8 i2c_data;
466 int err;
467
468 sensor_settings[AUTO_WHITE_BALANCE_IDX] = val;
469
470 err = m5602_read_sensor(sd, PO1030_AUTOCTRL1, &i2c_data, 1);
471 if (err < 0)
472 return err;
473
474 i2c_data = (i2c_data & 0xfe) | (val & 0x01);
475 err = m5602_write_sensor(sd, PO1030_AUTOCTRL1, &i2c_data, 1);
476 return err;
477}
478
428void po1030_disconnect(struct sd *sd) 479void po1030_disconnect(struct sd *sd)
429{ 480{
430 sd->sensor = NULL; 481 sd->sensor = NULL;
diff --git a/drivers/media/video/gspca/m5602/m5602_po1030.h b/drivers/media/video/gspca/m5602/m5602_po1030.h
index 013be33d1b20..1260cfa6e4ef 100644
--- a/drivers/media/video/gspca/m5602/m5602_po1030.h
+++ b/drivers/media/video/gspca/m5602/m5602_po1030.h
@@ -162,6 +162,8 @@ int po1030_get_hflip(struct gspca_dev *gspca_dev, __s32 *val);
162int po1030_set_hflip(struct gspca_dev *gspca_dev, __s32 val); 162int po1030_set_hflip(struct gspca_dev *gspca_dev, __s32 val);
163int po1030_get_vflip(struct gspca_dev *gspca_dev, __s32 *val); 163int po1030_get_vflip(struct gspca_dev *gspca_dev, __s32 *val);
164int po1030_set_vflip(struct gspca_dev *gspca_dev, __s32 val); 164int po1030_set_vflip(struct gspca_dev *gspca_dev, __s32 val);
165int po1030_set_auto_white_balance(struct gspca_dev *gspca_dev, __s32 val);
166int po1030_get_auto_white_balance(struct gspca_dev *gspca_dev, __s32 *val);
165 167
166static const struct m5602_sensor po1030 = { 168static const struct m5602_sensor po1030 = {
167 .name = "PO1030", 169 .name = "PO1030",