hdr: add osd lut table for nts test
authorJihong Sui <jihong.sui@amlogic.com>
Tue, 22 May 2018 09:28:36 +0000 (17:28 +0800)
committerYixun Lan <yixun.lan@amlogic.com>
Mon, 28 May 2018 01:35:01 +0000 (18:35 -0700)
PD#164627: hdr: add osd lut table for nts test

1. debug fs : /sys/kernel/debug/hdr/cfg_en_osd_100
1: enable new osd lut table (for nts test)
0: use old osd lut table
2. dts: amlvecm:cfg_en_osd_100
1: enable new osd lut table (for nts test)
0/not define: use old osd lut table

Change-Id: If3c51eaba58f7d83188b8920ad7dca78d3b38c19
Signed-off-by: Jihong Sui <jihong.sui@amlogic.com>
22 files changed:
arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts
arch/arm64/boot/dts/amlogic/gxl_p212_1g_buildroot.dts
arch/arm64/boot/dts/amlogic/gxl_p212_1g_hd.dts
arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts
arch/arm64/boot/dts/amlogic/gxl_p212_2g_buildroot.dts
arch/arm64/boot/dts/amlogic/gxl_p230_2g.dts
arch/arm64/boot/dts/amlogic/gxl_p230_2g_buildroot.dts
arch/arm64/boot/dts/amlogic/gxl_p231_1g.dts
arch/arm64/boot/dts/amlogic/gxl_p231_2g.dts
arch/arm64/boot/dts/amlogic/gxl_p231_2g_buildroot.dts
arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts
arch/arm64/boot/dts/amlogic/gxl_p241_1g_buildroot.dts
arch/arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts
arch/arm64/boot/dts/amlogic/gxl_p241_v2_1g_buildroot.dts
arch/arm64/boot/dts/amlogic/gxm_q200_2g.dts
arch/arm64/boot/dts/amlogic/gxm_q200_2g_buildroot.dts
arch/arm64/boot/dts/amlogic/gxm_q201_1g.dts
arch/arm64/boot/dts/amlogic/gxm_q201_2g.dts
arch/arm64/boot/dts/amlogic/gxm_skt.dts
drivers/amlogic/media/enhancement/amvecm/amcsc.c
drivers/amlogic/media/enhancement/amvecm/amcsc.h
drivers/amlogic/media/enhancement/amvecm/amvecm.c

index b539e2f28eae5fb2e3df6d07a0be1d6adeef7dab..d6e46513bf5decd59c814c14004ee131a4f4d05c 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index d28a602a65eb46a46ca9115dac512512a70fd5ce..bc353faa3e6251f14d9b4dbc8635a3718775b1df 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index eccd54413c4c14d138885c1da3633a7220b4cdc7..964ffde56d3b755c2befe372f4c06dbe9469c072 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index 703ae022db874f90b2f2070da28da4e01caeb54b..bc7ed0a5f28222fc0a26faaddd643a3aa33d43df 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index c97e28a52e497ef0388fd0f4fd467c8f41baf234..ea63c53329a5848c7344a9bf180137a58c6d55b2 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index 2e20007704ea371f5a190d62db3631064e1e960d..e3ae48f2cacb27c87c2db90ce47352e9306c6c91 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index 1de8f140596a92bf5c631b69b91fbcbe0da203d8..1a240978367fd8ac16c1ead503650a61f27457b1 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index b7ef7481245e753656d0b9aa0d6391f75563006c..4546b4f4c56d7edfc5919ab1215fdac1b793e68a 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index b19d281c082f467b2e27d92457164a000924aa99..81a00623a69b98fac0746a682c7ced7d1f58988a 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index 84f8fd5f892ed6d3d2a3c63254b08c1a81a969f3..3298a6a6227eae9835817149891fe9b521756507 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index deffe55ff531b00398157dfd594e859ad4fed435..12dab2a0396b2f72d8bea8ad3f9ee9b2fab9ed16 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index 2aa1dfba926444bd3d2828132485e8e0ed0b7fd8..fc4b7cbe2efac5175e289b6b191e90f21a753a30 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index a970a72fe406eab3087af391a7c526f324827fc8..39b765aaeeee14b2b2455fc9642fab423b51af0c 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index 85ed694f66d0bbcf4520e828d8d4f8ea675df12e..ee89031005b242861a88c92072325951fecdbef8 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        unifykey{
index f3cb01ee0cda663d75b02c941beafb9c2ab4e8b7..fe3b26835534576877700fe9996e37d3b3e25e36 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
        amdolby_vision {
                compatible = "amlogic, dolby_vision_gxm";
index 7183bad2516c258bc04d1e9f23b712199b5d4493..4bdceeeb75ebe0a11b4cb64d24768de8cbe00c6c 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
 
        partitions: partitions{
index 6e373f0d7a552162fe8c63a0839cf6cab79a61f2..93e4d37856789eea1fc9362118db0c9170c013be 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
        amdolby_vision {
                compatible = "amlogic, dolby_vision_gxm";
index 437b570cd5731e281c36c1f93007b4004eba2575..aeef3c0102a17be9466335668a3cef5b7bf3eabb 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
        amdolby_vision {
                compatible = "amlogic, dolby_vision_gxm";
index 6ef79df822f1e3efcb933056ca464696e565112b..f5243d01016758f762735adff6c9d752792246cd 100644 (file)
                gamma_en = <0>;/*1:enabel ;0:disable*/
                wb_en = <0>;/*1:enabel ;0:disable*/
                cm_en = <0>;/*1:enabel ;0:disable*/
+               /*1:enabel osd lut 100 table;0:disable*/
+               cfg_en_osd_100 = <1>;
        };
        amdolby_vision {
                compatible = "amlogic, dolby_vision_gxm";
index bf503aea716b266a4cb863e51c125508485ac696..6f3f8a7806253f6b35cd158d502c922f44b26b9f 100644 (file)
@@ -21,6 +21,9 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
+#include <linux/debugfs.h>
+#include <linux/uaccess.h>
+
 #include <linux/amlogic/media/vfm/vframe.h>
 #include <linux/amlogic/media/vfm/video_common.h>
 #include <linux/amlogic/media/amvecm/amvecm.h>
@@ -47,6 +50,136 @@ signed int vd1_contrast_offset;
 
 signed int saturation_offset;
 
+/*hdr------------------------------------*/
+static struct hdr_data_t *phdr;
+
+struct hdr_data_t *hdr_get_data(void)
+{
+       return phdr;
+}
+
+int is_hdr_cfg_osd_100(void)
+{
+       int ret = 0;
+
+       if (phdr) {
+               if (phdr->hdr_cfg.en_osd_lut_100)
+                       ret = 1;
+       }
+
+       return ret;
+}
+void hdr_set_cfg_osd_100(int val)
+{
+       if (val == 1)
+               phdr->hdr_cfg.en_osd_lut_100 = 1;
+       else
+               phdr->hdr_cfg.en_osd_lut_100 = 0;
+}
+static ssize_t read_file_hdr_cfgosd(struct file *file, char __user *userbuf,
+                                size_t count, loff_t *ppos)
+{
+       char buf[20];
+       ssize_t len;
+
+       len = snprintf(buf, 20, "%d\n", phdr->hdr_cfg.en_osd_lut_100);
+       return simple_read_from_buffer(userbuf, count, ppos, buf, len);
+}
+
+static ssize_t write_file_hdr_cfgosd(
+       struct file *file, const char __user *userbuf,
+       size_t count, loff_t *ppos)
+{
+       int val;
+       char buf[20];
+       int ret = 0;
+
+       count = min_t(size_t, count, (sizeof(buf)-1));
+       if (copy_from_user(buf, userbuf, count))
+               return -EFAULT;
+       buf[count] = 0;
+       ret = kstrtoint(buf, 0, &val);
+       if (ret != 0) {
+               pr_info("cfg_en_osd_100 do nothing!\n");
+               return -EINVAL;
+       }
+
+       hdr_set_cfg_osd_100(val);
+
+       pr_info("hdr:en_osd_lut_100: %d\n", phdr->hdr_cfg.en_osd_lut_100);
+
+       return count;
+}
+
+static const struct file_operations file_ops_hdr_cfgosd = {
+       .open           = simple_open,
+       .read           = read_file_hdr_cfgosd,
+       .write          = write_file_hdr_cfgosd,
+};
+
+struct hdr_debugfs_files_t {
+       const char *name;
+       const umode_t mode;
+       const struct file_operations *fops;
+};
+
+static struct hdr_debugfs_files_t hdr_debugfs_files[] = {
+       {"cfg_en_osd_100", S_IFREG | 0644, &file_ops_hdr_cfgosd},
+
+};
+
+
+static void hdr_debugfs_init(void)
+{
+       int i;
+       struct dentry *ent;
+
+       if (phdr == NULL)
+               return;
+
+       if (phdr->dbg_root)
+               return;
+
+       phdr->dbg_root = debugfs_create_dir("hdr", NULL);
+       if (!phdr->dbg_root) {
+               pr_err("can't create debugfs dir hdr\n");
+               return;
+       }
+
+       for (i = 0; i < ARRAY_SIZE(hdr_debugfs_files); i++) {
+               ent = debugfs_create_file(hdr_debugfs_files[i].name,
+                       hdr_debugfs_files[i].mode,
+                       phdr->dbg_root, NULL,
+                       hdr_debugfs_files[i].fops);
+               if (!ent)
+                       pr_err("debugfs create failed\n");
+       }
+
+}
+static void hdr_debugfs_exit(void)
+{
+       if (phdr && phdr->dbg_root)
+               debugfs_remove(phdr->dbg_root);
+}
+
+void hdr_init(struct hdr_data_t *phdr_data)
+{
+       if (phdr_data) {
+               phdr = phdr_data;
+       } else {
+               phdr = NULL;
+               pr_err("%s failed\n", __func__);
+               return;
+       }
+
+       hdr_debugfs_init();
+}
+void hdr_exit(void)
+{
+       hdr_debugfs_exit();
+}
+
+/*-----------------------------------------*/
 static void vpp_set_mtx_en_write(void);
 
 struct hdr_osd_reg_s hdr_osd_reg = {
@@ -1422,6 +1555,25 @@ static unsigned int osd_oetf_41_2084_mapping[OSD_OETF_LUT_SIZE] = {
        1023
 };
 
+/* osd eotf lut: 709 from baozheng */
+static unsigned int osd_eotf_33_709_mapping_100[EOTF_LUT_SIZE] = {
+           0,     8,    37,    90,   169,   276,   412,   579,
+         776,  1006,  1268,  1564,  1894,  2258,  2658,  3094,
+        3566,  4075,  4621,  5204,  5826,  6486,  7185,  7923,
+        8701,  9518, 10376, 11274, 12213, 13194, 14215, 15279,
+       16384
+};
+
+/* osd oetf lut: 2084 from baozheng */
+static unsigned int osd_oetf_41_2084_mapping_100[OSD_OETF_LUT_SIZE] = {
+          0,  110,  141,  162,  178,  191,  203,  212,
+        221,  270,  302,  325,  344,  360,  374,  386,
+        396,  406,  415,  423,  431,  438,  445,  451,
+        457,  462,  468,  473,  478,  482,  487,  491,
+        495,  499,  503,  507,  510,  514,  517,  520,
+        523
+};
+
 /* osd eotf lut: sdr->hlg */
 static unsigned int osd_eotf_33_sdr2hlg_mapping[EOTF_LUT_SIZE] = {
            0,   512,  1024,  1536,  2048,  2560,  3072,  3584,
@@ -4206,12 +4358,20 @@ static int hdr_process(
                /*(VIU_OSD1_BLK0_CFG_W0,0, 7, 1); */
 
                /* eotf lut 709 */
-               set_vpp_lut(VPP_LUT_OSD_EOTF,
-                       osd_eotf_33_709_mapping, /* R */
-                       osd_eotf_33_709_mapping, /* G */
-                       osd_eotf_33_709_mapping, /* B */
-                       CSC_ON);
+               if (is_hdr_cfg_osd_100()) {
+                       set_vpp_lut(VPP_LUT_OSD_EOTF,
+                               osd_eotf_33_709_mapping_100, /* R */
+                               osd_eotf_33_709_mapping_100, /* G */
+                               osd_eotf_33_709_mapping_100, /* B */
+                               CSC_ON);
 
+               } else {
+                       set_vpp_lut(VPP_LUT_OSD_EOTF,
+                               osd_eotf_33_709_mapping, /* R */
+                               osd_eotf_33_709_mapping, /* G */
+                               osd_eotf_33_709_mapping, /* B */
+                               CSC_ON);
+               }
                /* eotf matrix 709->2020 */
                osd_mtx[EOTF_COEFF_SIZE - 1] = osd_m.right_shift;
                for (i = 0; i < 3; i++)
@@ -4227,12 +4387,19 @@ static int hdr_process(
                        CSC_ON);
 
                /* oetf lut 2084 */
-               set_vpp_lut(VPP_LUT_OSD_OETF,
-                       osd_oetf_41_2084_mapping, /* R */
-                       osd_oetf_41_2084_mapping, /* G */
-                       osd_oetf_41_2084_mapping, /* B */
-                       CSC_ON);
-
+               if (is_hdr_cfg_osd_100()) {
+                       set_vpp_lut(VPP_LUT_OSD_OETF,
+                               osd_oetf_41_2084_mapping_100, /* R */
+                               osd_oetf_41_2084_mapping_100, /* G */
+                               osd_oetf_41_2084_mapping_100, /* B */
+                               CSC_ON);
+               } else {
+                       set_vpp_lut(VPP_LUT_OSD_OETF,
+                               osd_oetf_41_2084_mapping, /* R */
+                               osd_oetf_41_2084_mapping, /* G */
+                               osd_oetf_41_2084_mapping, /* B */
+                               CSC_ON);
+               }
                /* osd matrix RGB2020 to YUV2020 limit */
                set_vpp_matrix(VPP_MATRIX_OSD,
                        RGB2020_to_YUV2020l_coeff,
@@ -4601,19 +4768,27 @@ static void bypass_hdr_process(
                        (vinfo->viu_color_fmt != COLOR_FMT_RGB444))) {
                        /* OSD convert to HDR to match HDR video */
                        /* osd eotf lut 709 */
-                       if (get_hdr_type() & HLG_FLAG)
+                       if (get_hdr_type() & HLG_FLAG) {
                                set_vpp_lut(VPP_LUT_OSD_EOTF,
                                        osd_eotf_33_sdr2hlg_mapping, /* R */
                                        osd_eotf_33_sdr2hlg_mapping, /* G */
                                        osd_eotf_33_sdr2hlg_mapping, /* B */
                                        CSC_ON);
-                       else
-                               set_vpp_lut(VPP_LUT_OSD_EOTF,
-                                       osd_eotf_33_709_mapping, /* R */
-                                       osd_eotf_33_709_mapping, /* G */
-                                       osd_eotf_33_709_mapping, /* B */
-                                       CSC_ON);
-
+                       } else {
+                               if (is_hdr_cfg_osd_100()) {
+                                       set_vpp_lut(VPP_LUT_OSD_EOTF,
+                                               osd_eotf_33_709_mapping_100,
+                                               osd_eotf_33_709_mapping_100,
+                                               osd_eotf_33_709_mapping_100,
+                                               CSC_ON);
+                               } else {
+                                       set_vpp_lut(VPP_LUT_OSD_EOTF,
+                                               osd_eotf_33_709_mapping, /*R*/
+                                               osd_eotf_33_709_mapping, /*G*/
+                                               osd_eotf_33_709_mapping, /*B*/
+                                               CSC_ON);
+                               }
+                       }
                        /* osd eotf matrix 709->2020 */
                        if (master_info->present_flag & 1) {
                                pr_csc("\tMaster_display_colour available.\n");
@@ -4646,19 +4821,27 @@ static void bypass_hdr_process(
                                CSC_ON);
 
                        /* osd oetf lut 2084 */
-                       if (get_hdr_type() & HLG_FLAG)
+                       if (get_hdr_type() & HLG_FLAG) {
                                set_vpp_lut(VPP_LUT_OSD_OETF,
                                        osd_oetf_41_sdr2hlg_mapping, /* R */
                                        osd_oetf_41_sdr2hlg_mapping, /* G */
                                        osd_oetf_41_sdr2hlg_mapping, /* B */
                                        CSC_ON);
-                       else
-                               set_vpp_lut(VPP_LUT_OSD_OETF,
-                                       osd_oetf_41_2084_mapping, /* R */
-                                       osd_oetf_41_2084_mapping, /* G */
-                                       osd_oetf_41_2084_mapping, /* B */
-                                       CSC_ON);
-
+                       } else {
+                               if (is_hdr_cfg_osd_100()) {
+                                       set_vpp_lut(VPP_LUT_OSD_OETF,
+                                               osd_oetf_41_2084_mapping_100,
+                                               osd_oetf_41_2084_mapping_100,
+                                               osd_oetf_41_2084_mapping_100,
+                                               CSC_ON);
+                               } else {
+                                       set_vpp_lut(VPP_LUT_OSD_OETF,
+                                               osd_oetf_41_2084_mapping,
+                                               osd_oetf_41_2084_mapping,
+                                               osd_oetf_41_2084_mapping,
+                                               CSC_ON);
+                               }
+                       }
                        /* osd matrix RGB2020 to YUV2020 limit */
                        set_vpp_matrix(VPP_MATRIX_OSD,
                                RGB2020_to_YUV2020l_coeff,
index 566e136d753e11d1b79290151dba4aa3160b6cd0..bd698b864380ac7375052c264987d07fb16e4435 100644 (file)
@@ -143,5 +143,25 @@ extern int VSYNC_WR_MPEG_REG(u32 adr, u32 val);
 
 extern u32 get_video_enabled(void);
 extern void get_hdr_source_type(void);
+
+/*hdr*/
+/*#define DBG_BUF_SIZE (1024)*/
+
+struct hdr_cfg_t {
+       unsigned int en_osd_lut_100;
+};
+struct hdr_data_t {
+       struct hdr_cfg_t hdr_cfg;
+
+       /*debug_fs*/
+       struct dentry *dbg_root;
+       /*char dbg_buf[DBG_BUF_SIZE];*/
+
+};
+
+extern void hdr_init(struct hdr_data_t *phdr_data);
+extern void hdr_exit(void);
+extern void hdr_set_cfg_osd_100(int val);
+
 #endif /* AM_CSC_H */
 
index fc35a6cb310b890c57d10d070d66abdd52065bef..2f5fe4778aae12faa39d3bbefbe5fc53f2fc2dc8 100644 (file)
@@ -79,6 +79,9 @@ struct amvecm_dev_s {
        struct device               *dev;
        struct class                *clsp;
        wait_queue_head_t           hdr_queue;
+       /*hdr*/
+       struct hdr_data_t       hdr_d;
+
 };
 
 static struct amvecm_dev_s amvecm_dev;
@@ -4470,6 +4473,16 @@ static void aml_vecm_dt_parse(struct platform_device *pdev)
                        pr_info("Can't find  wb_sel.\n");
                else
                        video_rgb_ogo_xvy_mtx = val;
+               /*hdr:cfg:osd_100*/
+               ret = of_property_read_u32(node, "cfg_en_osd_100", &val);
+               if (ret) {
+                       hdr_set_cfg_osd_100(0);
+                       pr_info("hdr:Can't find  cfg_en_osd_100.\n");
+
+               } else {
+                       hdr_set_cfg_osd_100((int)val);
+               }
+
        }
        /* init module status */
        amvecm_wb_init(wb_en);
@@ -4595,7 +4608,9 @@ static int aml_vecm_probe(struct platform_device *pdev)
                vlock_en = 1;
        else
                vlock_en = 0;
+       hdr_init(&amvecm_dev.hdr_d);
        aml_vecm_dt_parse(pdev);
+
        probe_ok = 1;
        pr_info("%s: ok\n", __func__);
        return 0;
@@ -4624,6 +4639,8 @@ fail_alloc_region:
 static int __exit aml_vecm_remove(struct platform_device *pdev)
 {
        struct amvecm_dev_s *devp = &amvecm_dev;
+
+       hdr_exit();
        device_destroy(devp->clsp, devp->devno);
        cdev_del(&devp->cdev);
        class_destroy(devp->clsp);
@@ -4660,6 +4677,7 @@ static void amvecm_shutdown(struct platform_device *pdev)
 {
        struct amvecm_dev_s *devp = &amvecm_dev;
 
+       hdr_exit();
        ve_disable_dnlp();
        amcm_disable();
        WRITE_VPP_REG(VPP_VADJ_CTRL, 0x0);