MLK-22205-3: media: ov5640: Fix the first some black frames issue
authorGuoniu.Zhou <guoniu.zhou@nxp.com>
Tue, 9 Jul 2019 03:21:50 +0000 (11:21 +0800)
committerGuoniu.Zhou <guoniu.zhou@nxp.com>
Wed, 7 Aug 2019 06:29:03 +0000 (14:29 +0800)
The first some frames will be black or have transparent green
layer on the image. It caused by sensor not stable after releasing
power down. So driver need to delay some time for different resolution
to wait sensor stable.

Signed-off-by: Guoniu.Zhou <guoniu.zhou@nxp.com>
drivers/media/platform/imx8/ov5640_mipi_v3.c

index b586232..7b90aa2 100644 (file)
@@ -219,7 +219,7 @@ static struct reg_value ov5640_init_setting_30fps_VGA[] = {
        {0x583b, 0x28, 0, 0}, {0x583c, 0x42, 0, 0}, {0x583d, 0xce, 0, 0},
        {0x5025, 0x00, 0, 0}, {0x3a0f, 0x30, 0, 0}, {0x3a10, 0x28, 0, 0},
        {0x3a1b, 0x30, 0, 0}, {0x3a1e, 0x26, 0, 0}, {0x3a11, 0x60, 0, 0},
-       {0x3a1f, 0x14, 0, 0}, {0x3008, 0x42, 0, 0}, {0x3c00, 0x04, 0, 300},
+       {0x3a1f, 0x14, 0, 0}, {0x3008, 0x42, 0, 10}, {0x3c00, 0x04, 0, 300},
 };
 
 static struct reg_value ov5640_setting_30fps_VGA_640_480[] = {
@@ -242,7 +242,7 @@ static struct reg_value ov5640_setting_30fps_VGA_640_480[] = {
        {0x4001, 0x02, 0, 0}, {0x4004, 0x02, 0, 0}, {0x4713, 0x03, 0, 0},
        {0x4407, 0x04, 0, 0}, {0x460b, 0x35, 0, 0}, {0x460c, 0x22, 0, 0},
        {0x3824, 0x02, 0, 0}, {0x5001, 0xa3, 0, 0},
-       {0x4005, 0x1a, 0, 0}, {0x3008, 0x02, 0, 0}, {0x3503, 0x00, 0, 0},
+       {0x4005, 0x1a, 0, 0}, {0x3008, 0x02, 0, 10}, {0x3503, 0x00, 0, 0},
 };
 
 static struct reg_value ov5640_setting_30fps_QVGA_320_240[] = {
@@ -265,7 +265,7 @@ static struct reg_value ov5640_setting_30fps_QVGA_320_240[] = {
        {0x4001, 0x02, 0, 0}, {0x4004, 0x02, 0, 0}, {0x4713, 0x03, 0, 0},
        {0x4407, 0x04, 0, 0}, {0x460b, 0x35, 0, 0}, {0x460c, 0x22, 0, 0},
        {0x3824, 0x02, 0, 0}, {0x5001, 0xa3, 0, 0},
-       {0x4005, 0x1a, 0, 0}, {0x3008, 0x02, 0, 0}, {0x3503, 0x00, 0, 0},
+       {0x4005, 0x1a, 0, 0}, {0x3008, 0x02, 0, 10}, {0x3503, 0x00, 0, 0},
 };
 
 static struct reg_value ov5640_setting_30fps_NTSC_720_480[] = {
@@ -288,7 +288,7 @@ static struct reg_value ov5640_setting_30fps_NTSC_720_480[] = {
        {0x4001, 0x02, 0, 0}, {0x4004, 0x02, 0, 0}, {0x4713, 0x03, 0, 0},
        {0x4407, 0x04, 0, 0}, {0x460b, 0x35, 0, 0}, {0x460c, 0x22, 0, 0},
        {0x3824, 0x02, 0, 0}, {0x5001, 0xa3, 0, 0},
-       {0x4005, 0x1a, 0, 0}, {0x3008, 0x02, 0, 0}, {0x3503, 0, 0, 0},
+       {0x4005, 0x1a, 0, 0}, {0x3008, 0x02, 0, 10}, {0x3503, 0, 0, 0},
 };
 
 static struct reg_value ov5640_setting_30fps_720P_1280_720[] = {
@@ -311,7 +311,7 @@ static struct reg_value ov5640_setting_30fps_720P_1280_720[] = {
        {0x4001, 0x02, 0, 0}, {0x4004, 0x02, 0, 0}, {0x4713, 0x02, 0, 0},
        {0x4407, 0x04, 0, 0}, {0x460b, 0x37, 0, 0}, {0x460c, 0x20, 0, 0},
        {0x3824, 0x04, 0, 0}, {0x5001, 0x83, 0, 0}, {0x4005, 0x1a, 0, 0},
-       {0x3008, 0x02, 0, 0}, {0x3503, 0,    0, 0},
+       {0x3008, 0x02, 0, 15}, {0x3503, 0,    0, 0},
 };
 
 static struct reg_value ov5640_setting_30fps_1080P_1920_1080[] = {
@@ -347,7 +347,7 @@ static struct reg_value ov5640_setting_30fps_1080P_1920_1080[] = {
        {0x3a0e, 0x03, 0, 0}, {0x3a0d, 0x04, 0, 0}, {0x3a14, 0x04, 0, 0},
        {0x3a15, 0x60, 0, 0}, {0x4713, 0x02, 0, 0}, {0x4407, 0x04, 0, 0},
        {0x460b, 0x37, 0, 0}, {0x460c, 0x20, 0, 0}, {0x3824, 0x04, 0, 0},
-       {0x4005, 0x1a, 0, 0}, {0x3008, 0x02, 0, 0},
+       {0x4005, 0x1a, 0, 0}, {0x3008, 0x02, 0, 20},
        {0x3503, 0, 0, 0},
 };
 
@@ -371,7 +371,7 @@ static struct reg_value ov5640_setting_15fps_QSXGA_2592_1944[] = {
        {0x3a0d, 0x04, 0, 0}, {0x3a14, 0x03, 0, 0}, {0x3a15, 0xd8, 0, 0},
        {0x4001, 0x02, 0, 0}, {0x4004, 0x06, 0, 0}, {0x4713, 0x03, 0, 0},
        {0x4407, 0x04, 0, 0}, {0x460b, 0x35, 0, 0}, {0x460c, 0x22, 0, 0},
-       {0x3824, 0x02, 0, 0}, {0x5001, 0x83, 0, 70}, {0x3008, 0x02, 0, 0},
+       {0x3824, 0x02, 0, 0}, {0x5001, 0x83, 0, 70}, {0x3008, 0x02, 0, 267},
 };
 
 static struct ov5640_mode_info ov5640_mode_info_data[2][ov5640_mode_MAX + 1] = {
@@ -714,6 +714,9 @@ static void ov5640_start(struct ov5640 *sensor)
 
        /* Color bar control */
        /*ov5640_write_reg(sensor, 0x503d, 0x80);*/
+
+       /* skip the first three frame for 30fps */
+       msleep(100);
 }
 
 static int ov5640_change_mode(struct ov5640 *sensor)