amvecm: add cm enable/disable flag
authorDezhi Kong <dezhi.kong@amlogic.com>
Tue, 7 Aug 2018 10:33:59 +0000 (18:33 +0800)
committerJianxin Pan <jianxin.pan@amlogic.com>
Mon, 10 Sep 2018 13:52:30 +0000 (06:52 -0700)
PD#170727: amvecm: add cm enable/disable flag

Change-Id: Id56777a45c056216eb1c893fe7d8c7f4cabedfc0
Signed-off-by: Dezhi Kong <dezhi.kong@amlogic.com>
drivers/amlogic/media/enhancement/amvecm/amcm.c

index afd68b025b6fc0bbfd528c23cf471efb483ba516..564ac7abe803ff61eb78d43a16f514e6c307d3af 100644 (file)
@@ -69,6 +69,10 @@ struct cm_demo_s   cm_demo;
 static int cm_level_last = 0xff;/* 0:optimize;1:enhancement */
 unsigned int cm2_patch_flag;
 unsigned int cm_size;
+/* cm enable flag internal for cm size issue--0:disable;1:enable */
+static bool cm_en_flag;
+/* cm disable flag sync with pq-db--1:disable;0:enable */
+static bool cm_dis_flag;
 static struct am_regs_s amregs0;
 static struct am_regs_s amregs1;
 static struct am_regs_s amregs2;
@@ -161,6 +165,11 @@ void am_set_regmap(struct am_regs_s *p)
                                                p->am_reg[i].val & 0xfffffffd;
                                pr_amcm_dbg("[amcm]:%s REG_TYPE_INDEX_VPPCHROMA addr:0x%x",
                                        __func__, p->am_reg[i].addr);
+                       } else if (p->am_reg[i].addr == 0x208) {
+                               if (p->am_reg[i].val & 0x2)
+                                       cm_dis_flag = false;
+                               else
+                                       cm_dis_flag = true;
                        }
 
                        WRITE_VPP_REG(VPP_CHROMA_ADDR_PORT,
@@ -259,6 +268,7 @@ void amcm_disable(void)
                WRITE_VPP_REG(VPP_CHROMA_ADDR_PORT, 0x208);
                WRITE_VPP_REG(VPP_CHROMA_DATA_PORT, temp & 0xfffffffd);
        }
+       cm_en_flag = false;
 }
 
 void amcm_enable(void)
@@ -273,6 +283,7 @@ void amcm_enable(void)
                WRITE_VPP_REG(VPP_CHROMA_ADDR_PORT, 0x208);
                WRITE_VPP_REG(VPP_CHROMA_DATA_PORT, temp | 0x2);
        }
+       cm_en_flag = true;
 }
 
 
@@ -316,11 +327,12 @@ void cm2_frame_size_patch(unsigned int width, unsigned int height)
 {
        unsigned int vpp_size;
 
-       if (width < cm_width_limit)
-               amcm_disable();
        if (!cm_en)
                return;
-
+       else if (width < cm_width_limit)
+               amcm_disable();
+       else if ((cm_en_flag != true) && (cm_dis_flag == false))
+               amcm_enable();
        vpp_size = width|(height << 16);
        if (cm_size != vpp_size) {
                WRITE_VPP_REG(VPP_CHROMA_ADDR_PORT, 0x205);