hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/i2c/sc2336.c
....@@ -7,7 +7,7 @@
77 * V0.0X01.0X01 first version
88 */
99
10
-//#define DEBUG
10
+// #define DEBUG
1111 #include <linux/clk.h>
1212 #include <linux/device.h>
1313 #include <linux/delay.h>
....@@ -192,10 +192,10 @@
192192 {0x3301, 0x09},
193193 {0x3302, 0xff},
194194 {0x3303, 0x10},
195
- {0x3306, 0x60},
195
+ {0x3306, 0x68},
196196 {0x3307, 0x02},
197197 {0x330a, 0x01},
198
- {0x330b, 0x10},
198
+ {0x330b, 0x18},
199199 {0x330c, 0x16},
200200 {0x330d, 0xff},
201201 {0x3318, 0x02},
....@@ -219,8 +219,8 @@
219219 {0x33b1, 0x80},
220220 {0x33b2, 0x68},
221221 {0x33b3, 0x42},
222
- {0x33f9, 0x70},
223
- {0x33fb, 0xd0},
222
+ {0x33f9, 0x78},
223
+ {0x33fb, 0xe0},
224224 {0x33fc, 0x0f},
225225 {0x33fd, 0x1f},
226226 {0x349f, 0x03},
....@@ -229,9 +229,9 @@
229229 {0x34a8, 0x42},
230230 {0x34a9, 0x06},
231231 {0x34aa, 0x01},
232
- {0x34ab, 0x23},
232
+ {0x34ab, 0x28},
233233 {0x34ac, 0x01},
234
- {0x34ad, 0x84},
234
+ {0x34ad, 0x90},
235235 {0x3630, 0xf4},
236236 {0x3633, 0x22},
237237 {0x3639, 0xf4},
....@@ -242,9 +242,9 @@
242242 {0x3676, 0xed},
243243 {0x367c, 0x09},
244244 {0x367d, 0x0f},
245
- {0x3690, 0x33},
246
- {0x3691, 0x33},
247
- {0x3692, 0x43},
245
+ {0x3690, 0x22},
246
+ {0x3691, 0x22},
247
+ {0x3692, 0x22},
248248 {0x3698, 0x89},
249249 {0x3699, 0x96},
250250 {0x369a, 0xd0},
....@@ -452,15 +452,15 @@
452452 coarse_dgain = 0x00;
453453 fine_dgain = gain_factor * 128 / 1000;
454454 } else if (gain_factor < 1000 * 4) { /*2x ~ 4x gain*/
455
- coarse_again = 0x01;
455
+ coarse_again = 0x08;
456456 coarse_dgain = 0x00;
457457 fine_dgain = gain_factor * 128 / 1000 / 2;
458458 } else if (gain_factor < 1000 * 8) { /*4x ~ 8x gain*/
459
- coarse_again = 0x03;
459
+ coarse_again = 0x09;
460460 coarse_dgain = 0x00;
461461 fine_dgain = gain_factor * 128 / 1000 / 4;
462462 } else if (gain_factor < 1000 * 16) { /*8x ~ 16x gain*/
463
- coarse_again = 0x07;
463
+ coarse_again = 0x0b;
464464 coarse_dgain = 0x00;
465465 fine_dgain = gain_factor * 128 / 1000 / 8;
466466 } else if (gain_factor < 1000 * 32) { /*16x ~ 32x gain*/
....@@ -481,6 +481,7 @@
481481 coarse_dgain = 0x03;
482482 fine_dgain = 0x80;
483483 }
484
+ fine_dgain = fine_dgain / 4 * 4;
484485 dev_dbg(&sc2336->client->dev,
485486 "total_gain: 0x%x, d_gain: 0x%x, d_fine_gain: 0x%x, c_gain: 0x%x\n",
486487 gain, coarse_dgain, fine_dgain, coarse_again);
....@@ -1159,7 +1160,7 @@
11591160 switch (ctrl->id) {
11601161 case V4L2_CID_VBLANK:
11611162 /* Update max exposure while meeting expected vblanking */
1162
- max = sc2336->cur_mode->height + ctrl->val - 8;
1163
+ max = sc2336->cur_mode->height + ctrl->val - 6;
11631164 __v4l2_ctrl_modify_range(sc2336->exposure,
11641165 sc2336->exposure->minimum, max,
11651166 sc2336->exposure->step,
....@@ -1282,7 +1283,7 @@
12821283 V4L2_CID_VBLANK, vblank_def,
12831284 SC2336_VTS_MAX - mode->height,
12841285 1, vblank_def);
1285
- exposure_max = mode->vts_def - 8;
1286
+ exposure_max = mode->vts_def - 6;
12861287 sc2336->exposure = v4l2_ctrl_new_std(handler, &sc2336_ctrl_ops,
12871288 V4L2_CID_EXPOSURE, SC2336_EXPOSURE_MIN,
12881289 exposure_max, SC2336_EXPOSURE_STEP,