aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/m5602/m5602_mt9m111.c
diff options
context:
space:
mode:
authorErik Andr?n <erik.andren@gmail.com>2009-01-13 12:18:53 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-06-16 17:20:32 -0400
commit0746673d21ea53d4bd710b47ad67c413e9510a5a (patch)
treeaa53d0e68b3041ab8d1f1161e0ce8941865d2421 /drivers/media/video/gspca/m5602/m5602_mt9m111.c
parent74b123cf7ac638ede605e483cde0f534951f5266 (diff)
V4L/DVB (11526): gspca - m5602-mt9m111: Add red balance ctrl
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/m5602/m5602_mt9m111.c')
-rw-r--r--drivers/media/video/gspca/m5602/m5602_mt9m111.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/drivers/media/video/gspca/m5602/m5602_mt9m111.c b/drivers/media/video/gspca/m5602/m5602_mt9m111.c
index 8bdd29c7d8ff..95b6e95aa088 100644
--- a/drivers/media/video/gspca/m5602/m5602_mt9m111.c
+++ b/drivers/media/video/gspca/m5602/m5602_mt9m111.c
@@ -32,6 +32,8 @@ static int mt9m111_get_green_balance(struct gspca_dev *gspca_dev, __s32 *val);
32static int mt9m111_set_green_balance(struct gspca_dev *gspca_dev, __s32 val); 32static int mt9m111_set_green_balance(struct gspca_dev *gspca_dev, __s32 val);
33static int mt9m111_get_blue_balance(struct gspca_dev *gspca_dev, __s32 *val); 33static int mt9m111_get_blue_balance(struct gspca_dev *gspca_dev, __s32 *val);
34static int mt9m111_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val); 34static int mt9m111_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val);
35static int mt9m111_get_red_balance(struct gspca_dev *gspca_dev, __s32 *val);
36static int mt9m111_set_red_balance(struct gspca_dev *gspca_dev, __s32 val);
35 37
36static struct v4l2_pix_format mt9m111_modes[] = { 38static struct v4l2_pix_format mt9m111_modes[] = {
37 { 39 {
@@ -134,6 +136,21 @@ const static struct ctrl mt9m111_ctrls[] = {
134 .set = mt9m111_set_blue_balance, 136 .set = mt9m111_set_blue_balance,
135 .get = mt9m111_get_blue_balance 137 .get = mt9m111_get_blue_balance
136 }, 138 },
139#define RED_BALANCE_IDX 5
140 {
141 {
142 .id = V4L2_CID_RED_BALANCE,
143 .type = V4L2_CTRL_TYPE_INTEGER,
144 .name = "red balance",
145 .minimum = 0x00,
146 .maximum = 0x7ff,
147 .step = 0x1,
148 .default_value = MT9M111_RED_GAIN_DEFAULT,
149 .flags = V4L2_CTRL_FLAG_SLIDER
150 },
151 .set = mt9m111_set_red_balance,
152 .get = mt9m111_get_red_balance
153 },
137}; 154};
138 155
139static void mt9m111_dump_registers(struct sd *sd); 156static void mt9m111_dump_registers(struct sd *sd);
@@ -240,6 +257,11 @@ int mt9m111_init(struct sd *sd)
240 if (err < 0) 257 if (err < 0)
241 return err; 258 return err;
242 259
260 err = mt9m111_set_red_balance(&sd->gspca_dev,
261 sensor_settings[RED_BALANCE_IDX]);
262 if (err < 0)
263 return err;
264
243 return mt9m111_set_gain(&sd->gspca_dev, sensor_settings[GAIN_IDX]); 265 return mt9m111_set_gain(&sd->gspca_dev, sensor_settings[GAIN_IDX]);
244} 266}
245 267
@@ -462,6 +484,32 @@ static int mt9m111_get_blue_balance(struct gspca_dev *gspca_dev, __s32 *val)
462 return 0; 484 return 0;
463} 485}
464 486
487static int mt9m111_set_red_balance(struct gspca_dev *gspca_dev, __s32 val)
488{
489 u8 data[2];
490 struct sd *sd = (struct sd *) gspca_dev;
491 s32 *sensor_settings = sd->sensor_priv;
492
493 sensor_settings[RED_BALANCE_IDX] = val;
494 data[0] = (val & 0xff);
495 data[1] = (val & 0xff00) >> 8;
496
497 PDEBUG(D_V4L2, "Set red balance %d", val);
498
499 return m5602_write_sensor(sd, MT9M111_SC_RED_GAIN,
500 data, 2);
501}
502
503static int mt9m111_get_red_balance(struct gspca_dev *gspca_dev, __s32 *val)
504{
505 struct sd *sd = (struct sd *) gspca_dev;
506 s32 *sensor_settings = sd->sensor_priv;
507
508 *val = sensor_settings[RED_BALANCE_IDX];
509 PDEBUG(D_V4L2, "Read red balance %d", *val);
510 return 0;
511}
512
465static void mt9m111_dump_registers(struct sd *sd) 513static void mt9m111_dump_registers(struct sd *sd)
466{ 514{
467 u8 address, value[2] = {0x00, 0x00}; 515 u8 address, value[2] = {0x00, 0x00};