diff options
Diffstat (limited to 'drivers/media/video/gspca/m5602/m5602_ov9650.c')
-rw-r--r-- | drivers/media/video/gspca/m5602/m5602_ov9650.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/drivers/media/video/gspca/m5602/m5602_ov9650.c b/drivers/media/video/gspca/m5602/m5602_ov9650.c index c908a8d6970..81e5d1d3bdb 100644 --- a/drivers/media/video/gspca/m5602/m5602_ov9650.c +++ b/drivers/media/video/gspca/m5602/m5602_ov9650.c | |||
@@ -222,21 +222,21 @@ int ov9650_get_exposure(struct gspca_dev *gspca_dev, __s32 *val) | |||
222 | 222 | ||
223 | err = m5602_read_sensor(sd, OV9650_COM1, &i2c_data, 1); | 223 | err = m5602_read_sensor(sd, OV9650_COM1, &i2c_data, 1); |
224 | if (err < 0) | 224 | if (err < 0) |
225 | goto out; | 225 | return err; |
226 | *val = i2c_data & 0x03; | 226 | *val = i2c_data & 0x03; |
227 | 227 | ||
228 | err = m5602_read_sensor(sd, OV9650_AECH, &i2c_data, 1); | 228 | err = m5602_read_sensor(sd, OV9650_AECH, &i2c_data, 1); |
229 | if (err < 0) | 229 | if (err < 0) |
230 | goto out; | 230 | return err; |
231 | *val |= (i2c_data << 2); | 231 | *val |= (i2c_data << 2); |
232 | 232 | ||
233 | err = m5602_read_sensor(sd, OV9650_AECHM, &i2c_data, 1); | 233 | err = m5602_read_sensor(sd, OV9650_AECHM, &i2c_data, 1); |
234 | if (err < 0) | 234 | if (err < 0) |
235 | goto out; | 235 | return err; |
236 | *val |= (i2c_data & 0x3f) << 10; | 236 | *val |= (i2c_data & 0x3f) << 10; |
237 | 237 | ||
238 | PDEBUG(D_V4L2, "Read exposure %d", *val); | 238 | PDEBUG(D_V4L2, "Read exposure %d", *val); |
239 | out: | 239 | |
240 | return err; | 240 | return err; |
241 | } | 241 | } |
242 | 242 | ||
@@ -254,20 +254,19 @@ int ov9650_set_exposure(struct gspca_dev *gspca_dev, __s32 val) | |||
254 | err = m5602_write_sensor(sd, OV9650_AECHM, | 254 | err = m5602_write_sensor(sd, OV9650_AECHM, |
255 | &i2c_data, 1); | 255 | &i2c_data, 1); |
256 | if (err < 0) | 256 | if (err < 0) |
257 | goto out; | 257 | return err; |
258 | 258 | ||
259 | /* The 8 middle bits */ | 259 | /* The 8 middle bits */ |
260 | i2c_data = (val >> 2) & 0xff; | 260 | i2c_data = (val >> 2) & 0xff; |
261 | err = m5602_write_sensor(sd, OV9650_AECH, | 261 | err = m5602_write_sensor(sd, OV9650_AECH, |
262 | &i2c_data, 1); | 262 | &i2c_data, 1); |
263 | if (err < 0) | 263 | if (err < 0) |
264 | goto out; | 264 | return err; |
265 | 265 | ||
266 | /* The 2 LSBs */ | 266 | /* The 2 LSBs */ |
267 | i2c_data = val & 0x03; | 267 | i2c_data = val & 0x03; |
268 | err = m5602_write_sensor(sd, OV9650_COM1, &i2c_data, 1); | 268 | err = m5602_write_sensor(sd, OV9650_COM1, &i2c_data, 1); |
269 | 269 | ||
270 | out: | ||
271 | return err; | 270 | return err; |
272 | } | 271 | } |
273 | 272 | ||
@@ -390,7 +389,7 @@ int ov9650_set_hflip(struct gspca_dev *gspca_dev, __s32 val) | |||
390 | PDEBUG(D_V4L2, "Set horizontal flip to %d", val); | 389 | PDEBUG(D_V4L2, "Set horizontal flip to %d", val); |
391 | err = m5602_read_sensor(sd, OV9650_MVFP, &i2c_data, 1); | 390 | err = m5602_read_sensor(sd, OV9650_MVFP, &i2c_data, 1); |
392 | if (err < 0) | 391 | if (err < 0) |
393 | goto out; | 392 | return err; |
394 | 393 | ||
395 | if (dmi_check_system(ov9650_flip_dmi_table)) | 394 | if (dmi_check_system(ov9650_flip_dmi_table)) |
396 | i2c_data = ((i2c_data & 0xdf) | | 395 | i2c_data = ((i2c_data & 0xdf) | |
@@ -400,7 +399,7 @@ int ov9650_set_hflip(struct gspca_dev *gspca_dev, __s32 val) | |||
400 | ((val & 0x01) << 5)); | 399 | ((val & 0x01) << 5)); |
401 | 400 | ||
402 | err = m5602_write_sensor(sd, OV9650_MVFP, &i2c_data, 1); | 401 | err = m5602_write_sensor(sd, OV9650_MVFP, &i2c_data, 1); |
403 | out: | 402 | |
404 | return err; | 403 | return err; |
405 | } | 404 | } |
406 | 405 | ||
@@ -429,7 +428,7 @@ int ov9650_set_vflip(struct gspca_dev *gspca_dev, __s32 val) | |||
429 | PDEBUG(D_V4L2, "Set vertical flip to %d", val); | 428 | PDEBUG(D_V4L2, "Set vertical flip to %d", val); |
430 | err = m5602_read_sensor(sd, OV9650_MVFP, &i2c_data, 1); | 429 | err = m5602_read_sensor(sd, OV9650_MVFP, &i2c_data, 1); |
431 | if (err < 0) | 430 | if (err < 0) |
432 | goto out; | 431 | return err; |
433 | 432 | ||
434 | if (dmi_check_system(ov9650_flip_dmi_table)) | 433 | if (dmi_check_system(ov9650_flip_dmi_table)) |
435 | i2c_data = ((i2c_data & 0xef) | | 434 | i2c_data = ((i2c_data & 0xef) | |
@@ -439,7 +438,7 @@ int ov9650_set_vflip(struct gspca_dev *gspca_dev, __s32 val) | |||
439 | ((val & 0x01) << 4)); | 438 | ((val & 0x01) << 4)); |
440 | 439 | ||
441 | err = m5602_write_sensor(sd, OV9650_MVFP, &i2c_data, 1); | 440 | err = m5602_write_sensor(sd, OV9650_MVFP, &i2c_data, 1); |
442 | out: | 441 | |
443 | return err; | 442 | return err; |
444 | } | 443 | } |
445 | 444 | ||
@@ -451,13 +450,13 @@ int ov9650_get_brightness(struct gspca_dev *gspca_dev, __s32 *val) | |||
451 | 450 | ||
452 | err = m5602_read_sensor(sd, OV9650_VREF, &i2c_data, 1); | 451 | err = m5602_read_sensor(sd, OV9650_VREF, &i2c_data, 1); |
453 | if (err < 0) | 452 | if (err < 0) |
454 | goto out; | 453 | return err; |
455 | *val = (i2c_data & 0x03) << 8; | 454 | *val = (i2c_data & 0x03) << 8; |
456 | 455 | ||
457 | err = m5602_read_sensor(sd, OV9650_GAIN, &i2c_data, 1); | 456 | err = m5602_read_sensor(sd, OV9650_GAIN, &i2c_data, 1); |
458 | *val |= i2c_data; | 457 | *val |= i2c_data; |
459 | PDEBUG(D_V4L2, "Read gain %d", *val); | 458 | PDEBUG(D_V4L2, "Read gain %d", *val); |
460 | out: | 459 | |
461 | return err; | 460 | return err; |
462 | } | 461 | } |
463 | 462 | ||
@@ -473,19 +472,18 @@ int ov9650_set_brightness(struct gspca_dev *gspca_dev, __s32 val) | |||
473 | corrupting the VREF high and low bits */ | 472 | corrupting the VREF high and low bits */ |
474 | err = m5602_read_sensor(sd, OV9650_VREF, &i2c_data, 1); | 473 | err = m5602_read_sensor(sd, OV9650_VREF, &i2c_data, 1); |
475 | if (err < 0) | 474 | if (err < 0) |
476 | goto out; | 475 | return err; |
477 | 476 | ||
478 | /* Mask away all uninteresting bits */ | 477 | /* Mask away all uninteresting bits */ |
479 | i2c_data = ((val & 0x0300) >> 2) | (i2c_data & 0x3F); | 478 | i2c_data = ((val & 0x0300) >> 2) | (i2c_data & 0x3F); |
480 | err = m5602_write_sensor(sd, OV9650_VREF, &i2c_data, 1); | 479 | err = m5602_write_sensor(sd, OV9650_VREF, &i2c_data, 1); |
481 | if (err < 0) | 480 | if (err < 0) |
482 | goto out; | 481 | return err; |
483 | 482 | ||
484 | /* The 8 LSBs */ | 483 | /* The 8 LSBs */ |
485 | i2c_data = val & 0xff; | 484 | i2c_data = val & 0xff; |
486 | err = m5602_write_sensor(sd, OV9650_GAIN, &i2c_data, 1); | 485 | err = m5602_write_sensor(sd, OV9650_GAIN, &i2c_data, 1); |
487 | 486 | ||
488 | out: | ||
489 | return err; | 487 | return err; |
490 | } | 488 | } |
491 | 489 | ||
@@ -511,11 +509,11 @@ int ov9650_set_auto_white_balance(struct gspca_dev *gspca_dev, __s32 val) | |||
511 | PDEBUG(D_V4L2, "Set auto white balance to %d", val); | 509 | PDEBUG(D_V4L2, "Set auto white balance to %d", val); |
512 | err = m5602_read_sensor(sd, OV9650_COM8, &i2c_data, 1); | 510 | err = m5602_read_sensor(sd, OV9650_COM8, &i2c_data, 1); |
513 | if (err < 0) | 511 | if (err < 0) |
514 | goto out; | 512 | return err; |
515 | 513 | ||
516 | i2c_data = ((i2c_data & 0xfd) | ((val & 0x01) << 1)); | 514 | i2c_data = ((i2c_data & 0xfd) | ((val & 0x01) << 1)); |
517 | err = m5602_write_sensor(sd, OV9650_COM8, &i2c_data, 1); | 515 | err = m5602_write_sensor(sd, OV9650_COM8, &i2c_data, 1); |
518 | out: | 516 | |
519 | return err; | 517 | return err; |
520 | } | 518 | } |
521 | 519 | ||
@@ -541,11 +539,11 @@ int ov9650_set_auto_gain(struct gspca_dev *gspca_dev, __s32 val) | |||
541 | PDEBUG(D_V4L2, "Set auto gain control to %d", val); | 539 | PDEBUG(D_V4L2, "Set auto gain control to %d", val); |
542 | err = m5602_read_sensor(sd, OV9650_COM8, &i2c_data, 1); | 540 | err = m5602_read_sensor(sd, OV9650_COM8, &i2c_data, 1); |
543 | if (err < 0) | 541 | if (err < 0) |
544 | goto out; | 542 | return err; |
545 | 543 | ||
546 | i2c_data = ((i2c_data & 0xfb) | ((val & 0x01) << 2)); | 544 | i2c_data = ((i2c_data & 0xfb) | ((val & 0x01) << 2)); |
547 | err = m5602_write_sensor(sd, OV9650_COM8, &i2c_data, 1); | 545 | err = m5602_write_sensor(sd, OV9650_COM8, &i2c_data, 1); |
548 | out: | 546 | |
549 | return err; | 547 | return err; |
550 | } | 548 | } |
551 | 549 | ||