amvecm: Flash a horizontal line when enable local contrast function [1/1]
authorMingLiang Dong <mingliang.dong@amlogic.com>
Tue, 1 Jan 2019 03:27:47 +0000 (22:27 -0500)
committerJianxin Pan <jianxin.pan@amlogic.com>
Wed, 9 Jan 2019 07:09:40 +0000 (23:09 -0800)
PD#SWPL-3563

Problem:
1.Flash a horizontal line in the bottom of the screen in
HDMI with 4K 50/60Hz signal after enable local contrast function
2.local contrast block is obvious when platform reboot

Solution:
1.Local contrast write curve with RDMA
2.lc init reset lc module

Verify:
verify on TL1

Change-Id: Ifd4218e3688d5b0728a6fcba81558467a1c3e05f
Signed-off-by: MingLiang Dong <mingliang.dong@amlogic.com>
drivers/amlogic/media/enhancement/amvecm/local_contrast.c

index 4697a3d..c14cfae 100644 (file)
@@ -23,7 +23,7 @@ int amlc_debug;
                        pr_info("AMVE: " fmt, ## args);\
        } while (0)
 
-int lc_en;
+int lc_en = 1;
 int lc_demo_mode;
 int lc_en_chflg = 0xff;
 static int lc_flag = 0xff;
@@ -481,13 +481,13 @@ static void lc_demo_wr_curve(int h_num, int v_num)
                                        (i * h_num + j) + 4] << 10) |
                                (lc_szcurve[6 *
                                        (i * h_num + j) + 5] << 20);
-                       WRITE_VPP_REG(SRSHARP1_LC_MAP_RAM_DATA, temp1);
-                       WRITE_VPP_REG(SRSHARP1_LC_MAP_RAM_DATA, temp2);
+                       VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_DATA, temp1);
+                       VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_DATA, temp2);
                }
                for (j = h_num / 2; j < h_num; j++) {
-                       WRITE_VPP_REG(SRSHARP1_LC_MAP_RAM_DATA,
+                       VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_DATA,
                                (0|(0<<10)|(512<<20)));
-                       WRITE_VPP_REG(SRSHARP1_LC_MAP_RAM_DATA,
+                       VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_DATA,
                                (1023|(1023<<10)|(512<<20)));
                }
        }
@@ -536,37 +536,37 @@ static int set_lc_curve(int binit, int bcheck)
        hvTemp = READ_VPP_REG(SRSHARP1_LC_HV_NUM);
        h_num = (hvTemp >> 8) & 0x1f;
        v_num = hvTemp & 0x1f;
-       WRITE_VPP_REG_BITS(SRSHARP1_LC_MAP_RAM_CTRL, 1, 0, 1);
+       VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_CTRL, 1);
        /*data sequence: ymin/minBv/pkBv/maxBv/ymaxv/ypkBv*/
        if (binit) {
-               WRITE_VPP_REG(SRSHARP1_LC_MAP_RAM_ADDR, 0);
+               VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_ADDR, 0);
                for (i = 0; i < h_num * v_num; i++) {
-                       WRITE_VPP_REG(SRSHARP1_LC_MAP_RAM_DATA,
+                       VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_DATA,
                                (0|(0<<10)|(512<<20)));
-                       WRITE_VPP_REG(SRSHARP1_LC_MAP_RAM_DATA,
+                       VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_DATA,
                                (1023|(1023<<10)|(512<<20)));
                }
        } else {
-               WRITE_VPP_REG(SRSHARP1_LC_MAP_RAM_ADDR, 0);
+               VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_ADDR, 0);
                if (lc_demo_mode)
                        lc_demo_wr_curve(h_num, v_num);
                else
                        for (i = 0; i < h_num * v_num; i++) {
-                               WRITE_VPP_REG(SRSHARP1_LC_MAP_RAM_DATA,
+                               VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_DATA,
                                        lc_szcurve[6 * i + 0]|
                                        (lc_szcurve[6 * i + 1]<<10)|
                                        (lc_szcurve[6 * i + 2]<<20));
-                               WRITE_VPP_REG(SRSHARP1_LC_MAP_RAM_DATA,
+                               VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_DATA,
                                        lc_szcurve[6 * i + 3]|
                                        (lc_szcurve[6 * i + 4]<<10)|
                                        (lc_szcurve[6 * i + 5]<<20));
                        }
        }
-       WRITE_VPP_REG_BITS(SRSHARP1_LC_MAP_RAM_CTRL, 0, 0, 1);
+       VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_CTRL, 0);
 
        if (bcheck) {
-               WRITE_VPP_REG_BITS(SRSHARP1_LC_MAP_RAM_CTRL, 1, 0, 1);
-               WRITE_VPP_REG(SRSHARP1_LC_MAP_RAM_ADDR, 0 | (1 << 31));
+               VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_CTRL, 1);
+               VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_ADDR, 0 | (1 << 31));
                if (lc_demo_mode)
                        rflag = lc_demo_check_curve(h_num, v_num);
                else
@@ -584,7 +584,7 @@ static int set_lc_curve(int binit, int bcheck)
                                if (temp != temp1)
                                        rflag = (2 * i + 1) | (1 << 31);
                        }
-               WRITE_VPP_REG_BITS(SRSHARP1_LC_MAP_RAM_CTRL, 0, 0, 1);
+               VSYNC_WR_MPEG_REG(SRSHARP1_LC_MAP_RAM_CTRL, 0);
        }
 
        return rflag;
@@ -1122,6 +1122,7 @@ void lc_init(void)
        lc_malloc_ok = 1;
        if (!lc_en)
                return;
+
        lc_top_config(0, h_num, v_num, height, width);
        lc_mtx_set(INP_MTX, LC_MTX_YUV709L_RGB, 1);
        lc_mtx_set(OUTP_MTX, LC_MTX_RGB_YUV709L, 1);
@@ -1154,6 +1155,11 @@ void lc_process(struct vframe_s *vf,
                }
                return;
        }
+
+       if (lc_flag == 0) {
+               lc_flag++;
+               return;
+       }
        dwTemp = READ_VPP_REG(LC_CURVE_HV_NUM);
        blk_hnum = (dwTemp >> 8) & 0x1f;
        blk_vnum = (dwTemp) & 0x1f;