.. | .. |
---|
61 | 61 | #define SC230AI_REG_SEXPOSURE_L 0x3e05 |
---|
62 | 62 | #define SC230AI_EXPOSURE_MIN 1 |
---|
63 | 63 | #define SC230AI_EXPOSURE_STEP 1 |
---|
64 | | -#define SC230AI_EXPOSURE_LIN_MAX (2 * 0x465 - 9) |
---|
65 | | -#define SC230AI_EXPOSURE_HDR_MAX_S (2 * 0x465 - 9) |
---|
66 | | -#define SC230AI_EXPOSURE_HDR_MAX_L (2 * 0x465 - 9) |
---|
67 | 64 | #define SC230AI_VTS_MAX 0x7fff |
---|
68 | 65 | |
---|
69 | 66 | #define SC230AI_REG_DIG_GAIN 0x3e06 |
---|
.. | .. |
---|
74 | 71 | #define SC230AI_REG_SANA_GAIN 0x3e12 |
---|
75 | 72 | #define SC230AI_REG_SANA_FINE_GAIN 0x3e13 |
---|
76 | 73 | #define SC230AI_GAIN_MIN 1000 |
---|
77 | | -#define SC230AI_GAIN_MAX 1722628 //108.512*15.875*1000 |
---|
| 74 | +#define SC230AI_GAIN_MAX 1574800 // 99.2*15.875*1000 |
---|
78 | 75 | #define SC230AI_GAIN_STEP 1 |
---|
79 | 76 | #define SC230AI_GAIN_DEFAULT 1000 |
---|
80 | 77 | #define SC230AI_LGAIN 0 |
---|
.. | .. |
---|
678 | 675 | *again = 0x00; |
---|
679 | 676 | *dgain = 0x00; |
---|
680 | 677 | *dgain_fine = total_gain * 128 / 1000; |
---|
681 | | - } else if (total_gain < 3391) { /* 2 ~ 3.391 gain*/ |
---|
| 678 | + } else if (total_gain < 3100) { /* 2 ~ 3.1 gain*/ |
---|
682 | 679 | *again = 0x01; |
---|
683 | 680 | *dgain = 0x00; |
---|
684 | 681 | *dgain_fine = total_gain * 128 / 1000 / 2; |
---|
685 | | - } else if (total_gain < 3391 * 2) { /* 3.391 ~ 6.782 gain*/ |
---|
| 682 | + } else if (total_gain < 3100 * 2) { /* 3.100 ~ 6.200 gain*/ |
---|
686 | 683 | *again = 0x40; |
---|
687 | 684 | *dgain = 0x00; |
---|
688 | | - *dgain_fine = total_gain * 128 / 3391; |
---|
689 | | - } else if (total_gain < 3391 * 4) { /* 6.782 ~ 13.564 gain*/ |
---|
| 685 | + *dgain_fine = total_gain * 128 / 3100; |
---|
| 686 | + } else if (total_gain < 3100 * 4) { /* 6.200 ~ 12.400 gain*/ |
---|
690 | 687 | *again = 0x48; |
---|
691 | 688 | *dgain = 0x00; |
---|
692 | | - *dgain_fine = total_gain * 128 / 3391 / 2; |
---|
693 | | - } else if (total_gain < 3391 * 8) { /* 13.564 ~ 27.128 gain*/ |
---|
| 689 | + *dgain_fine = total_gain * 128 / 3100 / 2; |
---|
| 690 | + } else if (total_gain < 3100 * 8) { /* 12.400 ~ 24.800 gain*/ |
---|
694 | 691 | *again = 0x49; |
---|
695 | 692 | *dgain = 0x00; |
---|
696 | | - *dgain_fine = total_gain * 128 / 3391 / 4; |
---|
697 | | - } else if (total_gain < 3391 * 16) { /* 27.128 ~ 54.256 gain*/ |
---|
| 693 | + *dgain_fine = total_gain * 128 / 3100 / 4; |
---|
| 694 | + } else if (total_gain < 3100 * 16) { /* 24.800 ~ 49.600 gain*/ |
---|
698 | 695 | *again = 0x4b; |
---|
699 | 696 | *dgain = 0x00; |
---|
700 | | - *dgain_fine = total_gain * 128 / 3391 / 8; |
---|
701 | | - } else if (total_gain < 3391 * 32) { /* 54.256 ~ 108.512 gain*/ |
---|
| 697 | + *dgain_fine = total_gain * 128 / 3100 / 8; |
---|
| 698 | + } else if (total_gain < 3100 * 32) { /* 49.600 ~ 99.200 gain*/ |
---|
702 | 699 | *again = 0x4f; |
---|
703 | 700 | *dgain = 0x00; |
---|
704 | | - *dgain_fine = total_gain * 128 / 3391 / 16; |
---|
705 | | - } else if (total_gain < 3391 * 64) { /* 108.512 ~ 217.024 gain*/ |
---|
| 701 | + *dgain_fine = total_gain * 128 / 3100 / 16; |
---|
| 702 | + } else if (total_gain < 3100 * 64) { /* 99.200 ~ 198.400 gain*/ |
---|
706 | 703 | *again = 0x5f; |
---|
707 | 704 | *dgain = 0x00; |
---|
708 | | - *dgain_fine = total_gain * 128 / 3391 / 32; |
---|
709 | | - } else if (total_gain < 3391 * 128) { /* 217.024 ~ 434.048 gain*/ |
---|
| 705 | + *dgain_fine = total_gain * 128 / 3100 / 32; |
---|
| 706 | + } else if (total_gain < 3100 * 128) { /* 198.400 ~ 396.800 gain*/ |
---|
710 | 707 | *again = 0x5f; |
---|
711 | 708 | *dgain = 0x01; |
---|
712 | | - *dgain_fine = total_gain * 128 / 3391 / 64; |
---|
713 | | - } else if (total_gain < 3391 * 256) { /* 434.048 ~ 868.096 gain*/ |
---|
| 709 | + *dgain_fine = total_gain * 128 / 3100 / 64; |
---|
| 710 | + } else if (total_gain < 3100 * 256) { /* 396.800 ~ 793.600 gain*/ |
---|
714 | 711 | *again = 0x5f; |
---|
715 | 712 | *dgain = 0x03; |
---|
716 | | - *dgain_fine = total_gain * 128 / 3391 / 128; |
---|
717 | | - } else if (total_gain < 3391 * 512) { /* 868.096 ~ 1736.192 gain*/ |
---|
| 713 | + *dgain_fine = total_gain * 128 / 3100 / 128; |
---|
| 714 | + } else { /* 793.600 ~ 1587.200 gain*/ |
---|
718 | 715 | *again = 0x5f; |
---|
719 | 716 | *dgain = 0x07; |
---|
720 | | - *dgain_fine = total_gain * 128 / 3391 / 128; |
---|
| 717 | + *dgain_fine = total_gain * 128 / 3100 / 128; |
---|
721 | 718 | } |
---|
722 | 719 | |
---|
723 | 720 | return ret; |
---|
.. | .. |
---|
1406 | 1403 | switch (ctrl->id) { |
---|
1407 | 1404 | case V4L2_CID_VBLANK: |
---|
1408 | 1405 | /* Update max exposure while meeting expected vblanking */ |
---|
1409 | | - max = sc230ai->cur_mode->height + ctrl->val - 4; |
---|
| 1406 | + max = sc230ai->cur_mode->height + ctrl->val - 5; |
---|
1410 | 1407 | __v4l2_ctrl_modify_range(sc230ai->exposure, |
---|
1411 | 1408 | sc230ai->exposure->minimum, max, |
---|
1412 | 1409 | sc230ai->exposure->step, |
---|
.. | .. |
---|
1469 | 1466 | (ctrl->val + sc230ai->cur_mode->height) |
---|
1470 | 1467 | & 0xff); |
---|
1471 | 1468 | sc230ai->cur_vts = ctrl->val + sc230ai->cur_mode->height; |
---|
1472 | | - if (sc230ai->cur_vts != sc230ai->cur_mode->vts_def) |
---|
1473 | | - sc230ai_modify_fps_info(sc230ai); |
---|
| 1469 | + sc230ai_modify_fps_info(sc230ai); |
---|
1474 | 1470 | break; |
---|
1475 | 1471 | case V4L2_CID_TEST_PATTERN: |
---|
1476 | 1472 | ret = sc230ai_enable_test_pattern(sc230ai, ctrl->val); |
---|
.. | .. |
---|
1546 | 1542 | V4L2_CID_VBLANK, vblank_def, |
---|
1547 | 1543 | SC230AI_VTS_MAX - mode->height, |
---|
1548 | 1544 | 1, vblank_def); |
---|
1549 | | - exposure_max = SC230AI_EXPOSURE_LIN_MAX; |
---|
| 1545 | + exposure_max = mode->vts_def - 5; |
---|
1550 | 1546 | sc230ai->exposure = v4l2_ctrl_new_std(handler, &sc230ai_ctrl_ops, |
---|
1551 | 1547 | V4L2_CID_EXPOSURE, SC230AI_EXPOSURE_MIN, |
---|
1552 | 1548 | exposure_max, SC230AI_EXPOSURE_STEP, |
---|