diff options
author | Erik Andr?n <erik.andren@gmail.com> | 2009-01-13 12:16:03 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-06-16 17:20:32 -0400 |
commit | 74b123cf7ac638ede605e483cde0f534951f5266 (patch) | |
tree | 7a7d177824b4d884d7e7b46891e2effd7fa44a93 | |
parent | 12e4ed7d5e4a3145cb342be91423e92a24257212 (diff) |
V4L/DVB (11525): gspca - m5602-mt9m111: Add blue balance ctrl
Signed-off-by: Erik Andr?n <erik.andren@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r-- | drivers/media/video/gspca/m5602/m5602_mt9m111.c | 48 | ||||
-rw-r--r-- | drivers/media/video/gspca/m5602/m5602_mt9m111.h | 7 |
2 files changed, 52 insertions, 3 deletions
diff --git a/drivers/media/video/gspca/m5602/m5602_mt9m111.c b/drivers/media/video/gspca/m5602/m5602_mt9m111.c index c1ff4770e3a..8bdd29c7d8f 100644 --- a/drivers/media/video/gspca/m5602/m5602_mt9m111.c +++ b/drivers/media/video/gspca/m5602/m5602_mt9m111.c | |||
@@ -30,6 +30,8 @@ static int mt9m111_get_auto_white_balance(struct gspca_dev *gspca_dev, | |||
30 | __s32 *val); | 30 | __s32 *val); |
31 | static int mt9m111_get_green_balance(struct gspca_dev *gspca_dev, __s32 *val); | 31 | static int mt9m111_get_green_balance(struct gspca_dev *gspca_dev, __s32 *val); |
32 | static int mt9m111_set_green_balance(struct gspca_dev *gspca_dev, __s32 val); | 32 | static int mt9m111_set_green_balance(struct gspca_dev *gspca_dev, __s32 val); |
33 | static int mt9m111_get_blue_balance(struct gspca_dev *gspca_dev, __s32 *val); | ||
34 | static int mt9m111_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val); | ||
33 | 35 | ||
34 | static struct v4l2_pix_format mt9m111_modes[] = { | 36 | static struct v4l2_pix_format mt9m111_modes[] = { |
35 | { | 37 | { |
@@ -117,7 +119,21 @@ const static struct ctrl mt9m111_ctrls[] = { | |||
117 | .set = mt9m111_set_green_balance, | 119 | .set = mt9m111_set_green_balance, |
118 | .get = mt9m111_get_green_balance | 120 | .get = mt9m111_get_green_balance |
119 | }, | 121 | }, |
120 | 122 | #define BLUE_BALANCE_IDX 5 | |
123 | { | ||
124 | { | ||
125 | .id = V4L2_CID_BLUE_BALANCE, | ||
126 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
127 | .name = "blue balance", | ||
128 | .minimum = 0x00, | ||
129 | .maximum = 0x7ff, | ||
130 | .step = 0x1, | ||
131 | .default_value = MT9M111_BLUE_GAIN_DEFAULT, | ||
132 | .flags = V4L2_CTRL_FLAG_SLIDER | ||
133 | }, | ||
134 | .set = mt9m111_set_blue_balance, | ||
135 | .get = mt9m111_get_blue_balance | ||
136 | }, | ||
121 | }; | 137 | }; |
122 | 138 | ||
123 | static void mt9m111_dump_registers(struct sd *sd); | 139 | static void mt9m111_dump_registers(struct sd *sd); |
@@ -219,6 +235,11 @@ int mt9m111_init(struct sd *sd) | |||
219 | if (err < 0) | 235 | if (err < 0) |
220 | return err; | 236 | return err; |
221 | 237 | ||
238 | err = mt9m111_set_blue_balance(&sd->gspca_dev, | ||
239 | sensor_settings[BLUE_BALANCE_IDX]); | ||
240 | if (err < 0) | ||
241 | return err; | ||
242 | |||
222 | return mt9m111_set_gain(&sd->gspca_dev, sensor_settings[GAIN_IDX]); | 243 | return mt9m111_set_gain(&sd->gspca_dev, sensor_settings[GAIN_IDX]); |
223 | } | 244 | } |
224 | 245 | ||
@@ -415,6 +436,31 @@ static int mt9m111_get_green_balance(struct gspca_dev *gspca_dev, __s32 *val) | |||
415 | return 0; | 436 | return 0; |
416 | } | 437 | } |
417 | 438 | ||
439 | static int mt9m111_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val) | ||
440 | { | ||
441 | u8 data[2]; | ||
442 | struct sd *sd = (struct sd *) gspca_dev; | ||
443 | s32 *sensor_settings = sd->sensor_priv; | ||
444 | |||
445 | sensor_settings[BLUE_BALANCE_IDX] = val; | ||
446 | data[0] = (val & 0xff); | ||
447 | data[1] = (val & 0xff00) >> 8; | ||
448 | |||
449 | PDEBUG(D_V4L2, "Set blue balance %d", val); | ||
450 | |||
451 | return m5602_write_sensor(sd, MT9M111_SC_BLUE_GAIN, | ||
452 | data, 2); | ||
453 | } | ||
454 | |||
455 | static int mt9m111_get_blue_balance(struct gspca_dev *gspca_dev, __s32 *val) | ||
456 | { | ||
457 | struct sd *sd = (struct sd *) gspca_dev; | ||
458 | s32 *sensor_settings = sd->sensor_priv; | ||
459 | |||
460 | *val = sensor_settings[BLUE_BALANCE_IDX]; | ||
461 | PDEBUG(D_V4L2, "Read blue balance %d", *val); | ||
462 | return 0; | ||
463 | } | ||
418 | 464 | ||
419 | static void mt9m111_dump_registers(struct sd *sd) | 465 | static void mt9m111_dump_registers(struct sd *sd) |
420 | { | 466 | { |
diff --git a/drivers/media/video/gspca/m5602/m5602_mt9m111.h b/drivers/media/video/gspca/m5602/m5602_mt9m111.h index 2d39e12d642..57dcb56efef 100644 --- a/drivers/media/video/gspca/m5602/m5602_mt9m111.h +++ b/drivers/media/video/gspca/m5602/m5602_mt9m111.h | |||
@@ -94,6 +94,7 @@ | |||
94 | #define INITIAL_MAX_GAIN 64 | 94 | #define INITIAL_MAX_GAIN 64 |
95 | #define DEFAULT_GAIN 283 | 95 | #define DEFAULT_GAIN 283 |
96 | #define MT9M111_GREEN_GAIN_DEFAULT 0x20 | 96 | #define MT9M111_GREEN_GAIN_DEFAULT 0x20 |
97 | #define MT9M111_BLUE_GAIN_DEFAULT 0x20 | ||
97 | 98 | ||
98 | /*****************************************************************************/ | 99 | /*****************************************************************************/ |
99 | 100 | ||
@@ -183,8 +184,10 @@ static const unsigned char init_mt9m111[][4] = | |||
183 | {SENSOR, MT9M111_CP_OPERATING_MODE_CTL, 0x00, | 184 | {SENSOR, MT9M111_CP_OPERATING_MODE_CTL, 0x00, |
184 | MT9M111_CP_OPERATING_MODE_CTL}, | 185 | MT9M111_CP_OPERATING_MODE_CTL}, |
185 | {SENSOR, MT9M111_CP_LENS_CORRECTION_1, 0x04, 0x2a}, | 186 | {SENSOR, MT9M111_CP_LENS_CORRECTION_1, 0x04, 0x2a}, |
186 | {SENSOR, MT9M111_CP_DEFECT_CORR_CONTEXT_A, 0x00, MT9M111_2D_DEFECT_CORRECTION_ENABLE}, | 187 | {SENSOR, MT9M111_CP_DEFECT_CORR_CONTEXT_A, 0x00, |
187 | {SENSOR, MT9M111_CP_DEFECT_CORR_CONTEXT_B, 0x00, MT9M111_2D_DEFECT_CORRECTION_ENABLE}, | 188 | MT9M111_2D_DEFECT_CORRECTION_ENABLE}, |
189 | {SENSOR, MT9M111_CP_DEFECT_CORR_CONTEXT_B, 0x00, | ||
190 | MT9M111_2D_DEFECT_CORRECTION_ENABLE}, | ||
188 | {SENSOR, MT9M111_CP_LUMA_OFFSET, 0x00, 0x00}, | 191 | {SENSOR, MT9M111_CP_LUMA_OFFSET, 0x00, 0x00}, |
189 | {SENSOR, MT9M111_CP_LUMA_CLIP, 0xff, 0x00}, | 192 | {SENSOR, MT9M111_CP_LUMA_CLIP, 0xff, 0x00}, |
190 | {SENSOR, MT9M111_CP_OUTPUT_FORMAT_CTL2_CONTEXT_A, 0x14, 0x00}, | 193 | {SENSOR, MT9M111_CP_OUTPUT_FORMAT_CTL2_CONTEXT_A, 0x14, 0x00}, |