diff options
Diffstat (limited to 'common/ini/model.c')
-rw-r--r-- | common/ini/model.c | 119 |
1 files changed, 116 insertions, 3 deletions
diff --git a/common/ini/model.c b/common/ini/model.c index b3b2a77817..704eda804f 100644 --- a/common/ini/model.c +++ b/common/ini/model.c @@ -31,7 +31,7 @@ #define CC_PARAM_CHECK_ERROR_NEED_UPDATE_PARAM (-1) #define CC_PARAM_CHECK_ERROR_NOT_NEED_UPDATE_PARAM (-2) -static int gLcdDataCnt = 0, gLcdExtDataCnt = 0, gBlDataCnt = 0; +static int gLcdDataCnt = 0, gLcdExtDataCnt = 0, gBlDataCnt = 0, gLcdTconDataCnt = 0; static int g_lcd_pwr_on_seq_cnt = 0, g_lcd_pwr_off_seq_cnt = 0; static int gLcdExtInitOnCnt = 0, gLcdExtInitOffCnt = 0; @@ -86,6 +86,22 @@ static int check_param_valid(int mode, int parse_len, unsigned char parse_buf[], return CC_PARAM_CHECK_ERROR_NEED_UPDATE_PARAM; } // end check parse data valid + } else if (mode == 1) { + // start check parse data valid + //ALOGD("%s, start check parse data valid\n", __func__); + if (check_hex_data_no_header_valid(&parse_cal_crc32, CC_MAX_DATA_SIZE, parse_len, parse_buf) < 0) + return CC_PARAM_CHECK_ERROR_NOT_NEED_UPDATE_PARAM; + + // start check flash key data valid + //ALOGD("%s, start check flash key data valid\n", __func__); + if (check_hex_data_no_header_valid(&ori_cal_crc32, CC_MAX_DATA_SIZE, ori_len, ori_buf) < 0) + return CC_PARAM_CHECK_ERROR_NEED_UPDATE_PARAM; + + if (parse_cal_crc32 != ori_cal_crc32) { + //ALOGE("%s, parse data not equal flash data(0x%08X, 0x%08X)\n", __func__, parse_cal_crc32, ori_cal_crc32); + return CC_PARAM_CHECK_ERROR_NEED_UPDATE_PARAM; + } + // end check parse data valid } else { // start check parse data valid //ALOGD("%s, start check parse data valid\n", __func__); @@ -940,8 +956,6 @@ static int handle_panel_misc(struct panel_misc_s *p_misc) return 0; } - - static int parse_panel_ini(const char *file_name, struct lcd_attr_s *lcd_attr, struct lcd_ext_attr_s *lcd_ext_attr, struct bl_attr_s *bl_attr, struct panel_misc_s *misc_attr) { memset((void *)lcd_attr, 0, sizeof(struct lcd_attr_s)); @@ -991,6 +1005,99 @@ static int parse_panel_ini(const char *file_name, struct lcd_attr_s *lcd_attr, s return 0; } +static int read_tcon_bin(const char *file_name, unsigned char *tcon_buf) +{ + int size; + + memset(tcon_buf, 0, CC_MAX_TCON_BIN_SIZE); + + BinFileInit(); + + size = ReadBinFile(file_name); + if (size < 0) { + ALOGE("%s, load bin file error!\n", __func__); + BinFileUninit(); + return -1; + } + + if (size > CC_MAX_TCON_BIN_SIZE) { + ALOGE("%s, bin file size out of support!\n", __func__); + BinFileUninit(); + return -1; + } + + gLcdTconDataCnt = size; + GetBinData(tcon_buf, size); + + BinFileUninit(); + + return 0; +} + +static int handle_tcon_bin(void) +{ + int tmp_len = 0; + unsigned char *tmp_buf = NULL; + unsigned char *tcon_buf = NULL; + char *file_name; + + file_name = getenv("model_tcon"); + if (file_name == NULL) { + /*ALOGD("%s, no model_tcon path\n", __func__);*/ + return 0; + } + + /*ALOGD("%s\n", __func__);*/ + tmp_buf = (unsigned char *)malloc(CC_MAX_TCON_BIN_SIZE); + if (tmp_buf == NULL) { + ALOGE("%s, malloc buffer memory error!!!\n", __func__); + return -1; + } + + tcon_buf = (unsigned char *)malloc(CC_MAX_TCON_BIN_SIZE); + if (tcon_buf == NULL) { + free(tmp_buf); + tmp_buf = NULL; + ALOGE("%s, malloc buffer memory error!!!\n", __func__); + return -1; + } + + // start handle tcon bin name + if (!iniIsFileExist(file_name)) { + ALOGE("%s, file name \"%s\" not exist.\n", __func__, file_name); + free(tmp_buf); + tmp_buf = NULL; + free(tcon_buf); + tcon_buf = NULL; + return -1; + } + + if (read_tcon_bin(file_name, tcon_buf) < 0) { + free(tmp_buf); + tmp_buf = NULL; + free(tcon_buf); + tcon_buf = NULL; + return -1; + } + + // start handle lcd_tcon param + memset((void *)tmp_buf, 0, CC_MAX_TCON_BIN_SIZE); + tmp_len = ReadTconBinParam(tmp_buf); + //ALOGD("%s, start check lcd_tcon param data (0x%x).\n", __func__, tmp_len); + if (check_param_valid(1, gLcdTconDataCnt, tcon_buf, tmp_len, tmp_buf) == CC_PARAM_CHECK_ERROR_NEED_UPDATE_PARAM) { + ALOGD("%s, check tcon bin data error (0x%x), save tcon bin data.\n", __func__, tmp_len); + SaveTconBinParam(gLcdTconDataCnt, tcon_buf); + } + // end handle lcd_tcon param + + free(tmp_buf); + tmp_buf = NULL; + free(tcon_buf); + tcon_buf = NULL; + + return 0; +} + int handle_panel_ini(void) { int tmp_len = 0; @@ -1121,6 +1228,8 @@ int handle_panel_ini(void) free(parse_buf); parse_buf = NULL; + handle_tcon_bin(); + return 0; } @@ -1142,6 +1251,10 @@ int parse_model_sum(const char *file_name, char *model_name) else ALOGE("%s, invalid PANELINI_PATH!!!\n", __func__); + ini_value = IniGetString(model_name, "TCON_BIN_PATH", "null"); + if (strcmp(ini_value, "null") != 0) + setenv("model_tcon", ini_value); + ini_value = IniGetString(model_name, "EDID_14_FILE_PATH", "null"); if (strcmp(ini_value, "null") != 0) setenv("model_edid", ini_value); |