Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: ov5640: Add horizontal and vertical totals

All the initialization arrays are changing the horizontal and vertical
totals for some value.

In order to clean up the driver, and since we're going to need that value
later on, let's introduce in the ov5640_mode_info structure the horizontal
and vertical total sizes, and move these out of the bytes array.

Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>

authored by

Maxime Ripard and committed by
Mauro Carvalho Chehab
476dec01 dba13a0b

+97 -59
+97 -59
drivers/media/i2c/ov5640.c
··· 169 169 enum ov5640_mode_id id; 170 170 enum ov5640_downsize_mode dn_mode; 171 171 u32 hact; 172 + u32 htot; 172 173 u32 vact; 174 + u32 vtot; 173 175 const struct reg_value *reg_data; 174 176 u32 reg_data_size; 175 177 }; ··· 272 270 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 273 271 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 274 272 {0x3808, 0x02, 0, 0}, {0x3809, 0x80, 0, 0}, {0x380a, 0x01, 0, 0}, 275 - {0x380b, 0xe0, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 276 - {0x380e, 0x03, 0, 0}, {0x380f, 0xd8, 0, 0}, {0x3810, 0x00, 0, 0}, 273 + {0x380b, 0xe0, 0, 0}, 274 + {0x3810, 0x00, 0, 0}, 277 275 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x06, 0, 0}, 278 276 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 279 277 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 346 344 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 347 345 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 348 346 {0x3808, 0x02, 0, 0}, {0x3809, 0x80, 0, 0}, {0x380a, 0x01, 0, 0}, 349 - {0x380b, 0xe0, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 350 - {0x380e, 0x04, 0, 0}, {0x380f, 0x38, 0, 0}, {0x3810, 0x00, 0, 0}, 347 + {0x380b, 0xe0, 0, 0}, 348 + {0x3810, 0x00, 0, 0}, 351 349 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x06, 0, 0}, 352 350 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 353 351 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 367 365 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 368 366 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 369 367 {0x3808, 0x02, 0, 0}, {0x3809, 0x80, 0, 0}, {0x380a, 0x01, 0, 0}, 370 - {0x380b, 0xe0, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 371 - {0x380e, 0x03, 0, 0}, {0x380f, 0xd8, 0, 0}, {0x3810, 0x00, 0, 0}, 368 + {0x380b, 0xe0, 0, 0}, 369 + {0x3810, 0x00, 0, 0}, 372 370 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x06, 0, 0}, 373 371 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 374 372 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 388 386 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 389 387 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 390 388 {0x3808, 0x02, 0, 0}, {0x3809, 0x80, 0, 0}, {0x380a, 0x01, 0, 0}, 391 - {0x380b, 0xe0, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 392 - {0x380e, 0x04, 0, 0}, {0x380f, 0x38, 0, 0}, {0x3810, 0x00, 0, 0}, 389 + {0x380b, 0xe0, 0, 0}, 390 + {0x3810, 0x00, 0, 0}, 393 391 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x06, 0, 0}, 394 392 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 395 393 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 411 409 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 412 410 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 413 411 {0x3808, 0x02, 0, 0}, {0x3809, 0x80, 0, 0}, {0x380a, 0x01, 0, 0}, 414 - {0x380b, 0xe0, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 415 - {0x380e, 0x03, 0, 0}, {0x380f, 0xd8, 0, 0}, {0x3810, 0x00, 0, 0}, 412 + {0x380b, 0xe0, 0, 0}, 413 + {0x3810, 0x00, 0, 0}, 416 414 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x06, 0, 0}, 417 415 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 418 416 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 433 431 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 434 432 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 435 433 {0x3808, 0x01, 0, 0}, {0x3809, 0x40, 0, 0}, {0x380a, 0x00, 0, 0}, 436 - {0x380b, 0xf0, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 437 - {0x380e, 0x03, 0, 0}, {0x380f, 0xd8, 0, 0}, {0x3810, 0x00, 0, 0}, 434 + {0x380b, 0xf0, 0, 0}, 435 + {0x3810, 0x00, 0, 0}, 438 436 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x06, 0, 0}, 439 437 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 440 438 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 454 452 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 455 453 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 456 454 {0x3808, 0x01, 0, 0}, {0x3809, 0x40, 0, 0}, {0x380a, 0x00, 0, 0}, 457 - {0x380b, 0xf0, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 458 - {0x380e, 0x03, 0, 0}, {0x380f, 0xd8, 0, 0}, {0x3810, 0x00, 0, 0}, 455 + {0x380b, 0xf0, 0, 0}, 456 + {0x3810, 0x00, 0, 0}, 459 457 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x06, 0, 0}, 460 458 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 461 459 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 475 473 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 476 474 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 477 475 {0x3808, 0x00, 0, 0}, {0x3809, 0xb0, 0, 0}, {0x380a, 0x00, 0, 0}, 478 - {0x380b, 0x90, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 479 - {0x380e, 0x03, 0, 0}, {0x380f, 0xd8, 0, 0}, {0x3810, 0x00, 0, 0}, 476 + {0x380b, 0x90, 0, 0}, 477 + {0x3810, 0x00, 0, 0}, 480 478 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x06, 0, 0}, 481 479 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 482 480 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 496 494 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 497 495 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 498 496 {0x3808, 0x00, 0, 0}, {0x3809, 0xb0, 0, 0}, {0x380a, 0x00, 0, 0}, 499 - {0x380b, 0x90, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 500 - {0x380e, 0x03, 0, 0}, {0x380f, 0xd8, 0, 0}, {0x3810, 0x00, 0, 0}, 497 + {0x380b, 0x90, 0, 0}, 498 + {0x3810, 0x00, 0, 0}, 501 499 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x06, 0, 0}, 502 500 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 503 501 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 517 515 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 518 516 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 519 517 {0x3808, 0x02, 0, 0}, {0x3809, 0xd0, 0, 0}, {0x380a, 0x01, 0, 0}, 520 - {0x380b, 0xe0, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 521 - {0x380e, 0x03, 0, 0}, {0x380f, 0xd8, 0, 0}, {0x3810, 0x00, 0, 0}, 518 + {0x380b, 0xe0, 0, 0}, 519 + {0x3810, 0x00, 0, 0}, 522 520 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x3c, 0, 0}, 523 521 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 524 522 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 538 536 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 539 537 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 540 538 {0x3808, 0x02, 0, 0}, {0x3809, 0xd0, 0, 0}, {0x380a, 0x01, 0, 0}, 541 - {0x380b, 0xe0, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 542 - {0x380e, 0x03, 0, 0}, {0x380f, 0xd8, 0, 0}, {0x3810, 0x00, 0, 0}, 539 + {0x380b, 0xe0, 0, 0}, 540 + {0x3810, 0x00, 0, 0}, 543 541 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x3c, 0, 0}, 544 542 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 545 543 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 559 557 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 560 558 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 561 559 {0x3808, 0x02, 0, 0}, {0x3809, 0xd0, 0, 0}, {0x380a, 0x02, 0, 0}, 562 - {0x380b, 0x40, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 563 - {0x380e, 0x03, 0, 0}, {0x380f, 0xd8, 0, 0}, {0x3810, 0x00, 0, 0}, 560 + {0x380b, 0x40, 0, 0}, 561 + {0x3810, 0x00, 0, 0}, 564 562 {0x3811, 0x38, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x06, 0, 0}, 565 563 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 566 564 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 580 578 {0x3802, 0x00, 0, 0}, {0x3803, 0x04, 0, 0}, {0x3804, 0x0a, 0, 0}, 581 579 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9b, 0, 0}, 582 580 {0x3808, 0x02, 0, 0}, {0x3809, 0xd0, 0, 0}, {0x380a, 0x02, 0, 0}, 583 - {0x380b, 0x40, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x68, 0, 0}, 584 - {0x380e, 0x03, 0, 0}, {0x380f, 0xd8, 0, 0}, {0x3810, 0x00, 0, 0}, 581 + {0x380b, 0x40, 0, 0}, 582 + {0x3810, 0x00, 0, 0}, 585 583 {0x3811, 0x38, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x06, 0, 0}, 586 584 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 587 585 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 602 600 {0x3802, 0x00, 0, 0}, {0x3803, 0xfa, 0, 0}, {0x3804, 0x0a, 0, 0}, 603 601 {0x3805, 0x3f, 0, 0}, {0x3806, 0x06, 0, 0}, {0x3807, 0xa9, 0, 0}, 604 602 {0x3808, 0x05, 0, 0}, {0x3809, 0x00, 0, 0}, {0x380a, 0x02, 0, 0}, 605 - {0x380b, 0xd0, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x64, 0, 0}, 606 - {0x380e, 0x02, 0, 0}, {0x380f, 0xe4, 0, 0}, {0x3810, 0x00, 0, 0}, 603 + {0x380b, 0xd0, 0, 0}, 604 + {0x3810, 0x00, 0, 0}, 607 605 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x04, 0, 0}, 608 606 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 609 607 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x02, 0, 0}, ··· 624 622 {0x3802, 0x00, 0, 0}, {0x3803, 0xfa, 0, 0}, {0x3804, 0x0a, 0, 0}, 625 623 {0x3805, 0x3f, 0, 0}, {0x3806, 0x06, 0, 0}, {0x3807, 0xa9, 0, 0}, 626 624 {0x3808, 0x05, 0, 0}, {0x3809, 0x00, 0, 0}, {0x380a, 0x02, 0, 0}, 627 - {0x380b, 0xd0, 0, 0}, {0x380c, 0x07, 0, 0}, {0x380d, 0x64, 0, 0}, 628 - {0x380e, 0x02, 0, 0}, {0x380f, 0xe4, 0, 0}, {0x3810, 0x00, 0, 0}, 625 + {0x380b, 0xd0, 0, 0}, 626 + {0x3810, 0x00, 0, 0}, 629 627 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x04, 0, 0}, 630 628 {0x3618, 0x00, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x64, 0, 0}, 631 629 {0x3709, 0x52, 0, 0}, {0x370c, 0x03, 0, 0}, {0x3a02, 0x02, 0, 0}, ··· 646 644 {0x3802, 0x00, 0, 0}, {0x3803, 0x00, 0, 0}, {0x3804, 0x0a, 0, 0}, 647 645 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9f, 0, 0}, 648 646 {0x3808, 0x0a, 0, 0}, {0x3809, 0x20, 0, 0}, {0x380a, 0x07, 0, 0}, 649 - {0x380b, 0x98, 0, 0}, {0x380c, 0x0b, 0, 0}, {0x380d, 0x1c, 0, 0}, 650 - {0x380e, 0x07, 0, 0}, {0x380f, 0xb0, 0, 0}, {0x3810, 0x00, 0, 0}, 647 + {0x380b, 0x98, 0, 0}, 648 + {0x3810, 0x00, 0, 0}, 651 649 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x04, 0, 0}, 652 650 {0x3618, 0x04, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x21, 0, 0}, 653 651 {0x3709, 0x12, 0, 0}, {0x370c, 0x00, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 663 661 {0x3803, 0xb2, 0, 0}, {0x3804, 0x08, 0, 0}, {0x3805, 0xef, 0, 0}, 664 662 {0x3806, 0x05, 0, 0}, {0x3807, 0xf1, 0, 0}, {0x3808, 0x07, 0, 0}, 665 663 {0x3809, 0x80, 0, 0}, {0x380a, 0x04, 0, 0}, {0x380b, 0x38, 0, 0}, 666 - {0x380c, 0x09, 0, 0}, {0x380d, 0xc4, 0, 0}, {0x380e, 0x04, 0, 0}, 667 - {0x380f, 0x60, 0, 0}, {0x3612, 0x2b, 0, 0}, {0x3708, 0x64, 0, 0}, 664 + {0x3612, 0x2b, 0, 0}, {0x3708, 0x64, 0, 0}, 668 665 {0x3a02, 0x04, 0, 0}, {0x3a03, 0x60, 0, 0}, {0x3a08, 0x01, 0, 0}, 669 666 {0x3a09, 0x50, 0, 0}, {0x3a0a, 0x01, 0, 0}, {0x3a0b, 0x18, 0, 0}, 670 667 {0x3a0e, 0x03, 0, 0}, {0x3a0d, 0x04, 0, 0}, {0x3a14, 0x04, 0, 0}, ··· 682 681 {0x3802, 0x00, 0, 0}, {0x3803, 0x00, 0, 0}, {0x3804, 0x0a, 0, 0}, 683 682 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9f, 0, 0}, 684 683 {0x3808, 0x0a, 0, 0}, {0x3809, 0x20, 0, 0}, {0x380a, 0x07, 0, 0}, 685 - {0x380b, 0x98, 0, 0}, {0x380c, 0x0b, 0, 0}, {0x380d, 0x1c, 0, 0}, 686 - {0x380e, 0x07, 0, 0}, {0x380f, 0xb0, 0, 0}, {0x3810, 0x00, 0, 0}, 684 + {0x380b, 0x98, 0, 0}, 685 + {0x3810, 0x00, 0, 0}, 687 686 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x04, 0, 0}, 688 687 {0x3618, 0x04, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x21, 0, 0}, 689 688 {0x3709, 0x12, 0, 0}, {0x370c, 0x00, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 699 698 {0x3803, 0xb2, 0, 0}, {0x3804, 0x08, 0, 0}, {0x3805, 0xef, 0, 0}, 700 699 {0x3806, 0x05, 0, 0}, {0x3807, 0xf1, 0, 0}, {0x3808, 0x07, 0, 0}, 701 700 {0x3809, 0x80, 0, 0}, {0x380a, 0x04, 0, 0}, {0x380b, 0x38, 0, 0}, 702 - {0x380c, 0x09, 0, 0}, {0x380d, 0xc4, 0, 0}, {0x380e, 0x04, 0, 0}, 703 - {0x380f, 0x60, 0, 0}, {0x3612, 0x2b, 0, 0}, {0x3708, 0x64, 0, 0}, 701 + {0x3612, 0x2b, 0, 0}, {0x3708, 0x64, 0, 0}, 704 702 {0x3a02, 0x04, 0, 0}, {0x3a03, 0x60, 0, 0}, {0x3a08, 0x01, 0, 0}, 705 703 {0x3a09, 0x50, 0, 0}, {0x3a0a, 0x01, 0, 0}, {0x3a0b, 0x18, 0, 0}, 706 704 {0x3a0e, 0x03, 0, 0}, {0x3a0d, 0x04, 0, 0}, {0x3a14, 0x04, 0, 0}, ··· 717 717 {0x3802, 0x00, 0, 0}, {0x3803, 0x00, 0, 0}, {0x3804, 0x0a, 0, 0}, 718 718 {0x3805, 0x3f, 0, 0}, {0x3806, 0x07, 0, 0}, {0x3807, 0x9f, 0, 0}, 719 719 {0x3808, 0x0a, 0, 0}, {0x3809, 0x20, 0, 0}, {0x380a, 0x07, 0, 0}, 720 - {0x380b, 0x98, 0, 0}, {0x380c, 0x0b, 0, 0}, {0x380d, 0x1c, 0, 0}, 721 - {0x380e, 0x07, 0, 0}, {0x380f, 0xb0, 0, 0}, {0x3810, 0x00, 0, 0}, 720 + {0x380b, 0x98, 0, 0}, 721 + {0x3810, 0x00, 0, 0}, 722 722 {0x3811, 0x10, 0, 0}, {0x3812, 0x00, 0, 0}, {0x3813, 0x04, 0, 0}, 723 723 {0x3618, 0x04, 0, 0}, {0x3612, 0x29, 0, 0}, {0x3708, 0x21, 0, 0}, 724 724 {0x3709, 0x12, 0, 0}, {0x370c, 0x00, 0, 0}, {0x3a02, 0x03, 0, 0}, ··· 732 732 733 733 /* power-on sensor init reg table */ 734 734 static const struct ov5640_mode_info ov5640_mode_init_data = { 735 - 0, SUBSAMPLING, 640, 480, ov5640_init_setting_30fps_VGA, 735 + 0, SUBSAMPLING, 640, 1896, 480, 984, 736 + ov5640_init_setting_30fps_VGA, 736 737 ARRAY_SIZE(ov5640_init_setting_30fps_VGA), 737 738 }; 738 739 739 740 static const struct ov5640_mode_info 740 741 ov5640_mode_data[OV5640_NUM_FRAMERATES][OV5640_NUM_MODES] = { 741 742 { 742 - {OV5640_MODE_QCIF_176_144, SUBSAMPLING, 176, 144, 743 + {OV5640_MODE_QCIF_176_144, SUBSAMPLING, 744 + 176, 1896, 144, 984, 743 745 ov5640_setting_15fps_QCIF_176_144, 744 746 ARRAY_SIZE(ov5640_setting_15fps_QCIF_176_144)}, 745 - {OV5640_MODE_QVGA_320_240, SUBSAMPLING, 320, 240, 747 + {OV5640_MODE_QVGA_320_240, SUBSAMPLING, 748 + 320, 1896, 240, 984, 746 749 ov5640_setting_15fps_QVGA_320_240, 747 750 ARRAY_SIZE(ov5640_setting_15fps_QVGA_320_240)}, 748 - {OV5640_MODE_VGA_640_480, SUBSAMPLING, 640, 480, 751 + {OV5640_MODE_VGA_640_480, SUBSAMPLING, 752 + 640, 1896, 480, 1080, 749 753 ov5640_setting_15fps_VGA_640_480, 750 754 ARRAY_SIZE(ov5640_setting_15fps_VGA_640_480)}, 751 - {OV5640_MODE_NTSC_720_480, SUBSAMPLING, 720, 480, 755 + {OV5640_MODE_NTSC_720_480, SUBSAMPLING, 756 + 720, 1896, 480, 984, 752 757 ov5640_setting_15fps_NTSC_720_480, 753 758 ARRAY_SIZE(ov5640_setting_15fps_NTSC_720_480)}, 754 - {OV5640_MODE_PAL_720_576, SUBSAMPLING, 720, 576, 759 + {OV5640_MODE_PAL_720_576, SUBSAMPLING, 760 + 720, 1896, 576, 984, 755 761 ov5640_setting_15fps_PAL_720_576, 756 762 ARRAY_SIZE(ov5640_setting_15fps_PAL_720_576)}, 757 - {OV5640_MODE_XGA_1024_768, SUBSAMPLING, 1024, 768, 763 + {OV5640_MODE_XGA_1024_768, SUBSAMPLING, 764 + 1024, 1896, 768, 1080, 758 765 ov5640_setting_15fps_XGA_1024_768, 759 766 ARRAY_SIZE(ov5640_setting_15fps_XGA_1024_768)}, 760 - {OV5640_MODE_720P_1280_720, SUBSAMPLING, 1280, 720, 767 + {OV5640_MODE_720P_1280_720, SUBSAMPLING, 768 + 1280, 1892, 720, 740, 761 769 ov5640_setting_15fps_720P_1280_720, 762 770 ARRAY_SIZE(ov5640_setting_15fps_720P_1280_720)}, 763 - {OV5640_MODE_1080P_1920_1080, SCALING, 1920, 1080, 771 + {OV5640_MODE_1080P_1920_1080, SCALING, 772 + 1920, 2500, 1080, 1120, 764 773 ov5640_setting_15fps_1080P_1920_1080, 765 774 ARRAY_SIZE(ov5640_setting_15fps_1080P_1920_1080)}, 766 - {OV5640_MODE_QSXGA_2592_1944, SCALING, 2592, 1944, 775 + {OV5640_MODE_QSXGA_2592_1944, SCALING, 776 + 2592, 2844, 1944, 1968, 767 777 ov5640_setting_15fps_QSXGA_2592_1944, 768 778 ARRAY_SIZE(ov5640_setting_15fps_QSXGA_2592_1944)}, 769 779 }, { 770 - {OV5640_MODE_QCIF_176_144, SUBSAMPLING, 176, 144, 780 + {OV5640_MODE_QCIF_176_144, SUBSAMPLING, 781 + 176, 1896, 144, 984, 771 782 ov5640_setting_30fps_QCIF_176_144, 772 783 ARRAY_SIZE(ov5640_setting_30fps_QCIF_176_144)}, 773 - {OV5640_MODE_QVGA_320_240, SUBSAMPLING, 320, 240, 784 + {OV5640_MODE_QVGA_320_240, SUBSAMPLING, 785 + 320, 1896, 240, 984, 774 786 ov5640_setting_30fps_QVGA_320_240, 775 787 ARRAY_SIZE(ov5640_setting_30fps_QVGA_320_240)}, 776 - {OV5640_MODE_VGA_640_480, SUBSAMPLING, 640, 480, 788 + {OV5640_MODE_VGA_640_480, SUBSAMPLING, 789 + 640, 1896, 480, 1080, 777 790 ov5640_setting_30fps_VGA_640_480, 778 791 ARRAY_SIZE(ov5640_setting_30fps_VGA_640_480)}, 779 - {OV5640_MODE_NTSC_720_480, SUBSAMPLING, 720, 480, 792 + {OV5640_MODE_NTSC_720_480, SUBSAMPLING, 793 + 720, 1896, 480, 984, 780 794 ov5640_setting_30fps_NTSC_720_480, 781 795 ARRAY_SIZE(ov5640_setting_30fps_NTSC_720_480)}, 782 - {OV5640_MODE_PAL_720_576, SUBSAMPLING, 720, 576, 796 + {OV5640_MODE_PAL_720_576, SUBSAMPLING, 797 + 720, 1896, 576, 984, 783 798 ov5640_setting_30fps_PAL_720_576, 784 799 ARRAY_SIZE(ov5640_setting_30fps_PAL_720_576)}, 785 - {OV5640_MODE_XGA_1024_768, SUBSAMPLING, 1024, 768, 800 + {OV5640_MODE_XGA_1024_768, SUBSAMPLING, 801 + 1024, 1896, 768, 1080, 786 802 ov5640_setting_30fps_XGA_1024_768, 787 803 ARRAY_SIZE(ov5640_setting_30fps_XGA_1024_768)}, 788 - {OV5640_MODE_720P_1280_720, SUBSAMPLING, 1280, 720, 804 + {OV5640_MODE_720P_1280_720, SUBSAMPLING, 805 + 1280, 1892, 720, 740, 789 806 ov5640_setting_30fps_720P_1280_720, 790 807 ARRAY_SIZE(ov5640_setting_30fps_720P_1280_720)}, 791 - {OV5640_MODE_1080P_1920_1080, SCALING, 1920, 1080, 808 + {OV5640_MODE_1080P_1920_1080, SCALING, 809 + 1920, 2500, 1080, 1120, 792 810 ov5640_setting_30fps_1080P_1920_1080, 793 811 ARRAY_SIZE(ov5640_setting_30fps_1080P_1920_1080)}, 794 - {OV5640_MODE_QSXGA_2592_1944, -1, 0, 0, NULL, 0}, 812 + {OV5640_MODE_QSXGA_2592_1944, -1, 0, 0, 0, 0, NULL, 0}, 795 813 }, 796 814 }; 797 815 ··· 1399 1381 return ov5640_write_reg(sensor, OV5640_REG_DEBUG_MODE, temp); 1400 1382 } 1401 1383 1384 + static int ov5640_set_timings(struct ov5640_dev *sensor, 1385 + const struct ov5640_mode_info *mode) 1386 + { 1387 + int ret; 1388 + 1389 + ret = ov5640_write_reg16(sensor, OV5640_REG_TIMING_HTS, mode->htot); 1390 + if (ret < 0) 1391 + return ret; 1392 + 1393 + ret = ov5640_write_reg16(sensor, OV5640_REG_TIMING_VTS, mode->vtot); 1394 + if (ret < 0) 1395 + return ret; 1396 + 1397 + return 0; 1398 + } 1399 + 1402 1400 static const struct ov5640_mode_info * 1403 1401 ov5640_find_mode(struct ov5640_dev *sensor, enum ov5640_frame_rate fr, 1404 1402 int width, int height, bool nearest) ··· 1663 1629 ret = ov5640_set_mode_direct(sensor, mode, exposure); 1664 1630 } 1665 1631 1632 + if (ret < 0) 1633 + return ret; 1634 + 1635 + ret = ov5640_set_timings(sensor, mode); 1666 1636 if (ret < 0) 1667 1637 return ret; 1668 1638