aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/m5602/m5602_ov9650.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/gspca/m5602/m5602_ov9650.c')
-rw-r--r--drivers/media/video/gspca/m5602/m5602_ov9650.c38
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);
239out: 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
270out:
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);
403out: 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);
442out: 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);
460out: 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
488out:
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);
518out: 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);
548out: 546
549 return err; 547 return err;
550} 548}
551 549