Loading drivers/input/touchscreen/hxchipset/himax_common.c +42 −65 Original line number Diff line number Diff line Loading @@ -47,29 +47,23 @@ struct himax_target_report_data *g_target_report_data; static int HX_TOUCH_INFO_POINT_CNT; unsigned long FW_VER_MAJ_FLASH_ADDR; unsigned long FW_VER_MIN_FLASH_ADDR; unsigned long CFG_VER_MAJ_FLASH_ADDR; unsigned long CFG_VER_MIN_FLASH_ADDR; unsigned long CID_VER_MAJ_FLASH_ADDR; unsigned long CID_VER_MIN_FLASH_ADDR; unsigned long FW_VER_MAJ_FLASH_LENG; unsigned long FW_VER_MIN_FLASH_LENG; unsigned long CFG_VER_MAJ_FLASH_LENG; unsigned long CFG_VER_MIN_FLASH_LENG; unsigned long CID_VER_MAJ_FLASH_LENG; unsigned long CID_VER_MIN_FLASH_LENG; /* Himax: Set FW and CFG Flash Address */ #define FW_VER_MAJ_FLASH_ADDR 0x00C005 #define FW_VER_MIN_FLASH_ADDR 0x00C006 #define CFG_VER_MAJ_FLASH_ADDR 0x00C100 #define CFG_VER_MIN_FLASH_ADDR 0x00C101 #define CID_VER_MAJ_FLASH_ADDR 0x00C002 #define CID_VER_MIN_FLASH_ADDR 0x00C003 #define FW_VER_MAJ_FLASH_LENG 1 #define FW_VER_MIN_FLASH_LENG 1 #define CFG_VER_MAJ_FLASH_LENG 1 #define CFG_VER_MIN_FLASH_LENG 1 #define CID_VER_MAJ_FLASH_LENG 1 #define CID_VER_MIN_FLASH_LENG 1 unsigned long FW_CFG_VER_FLASH_ADDR; #ifdef HX_AUTO_UPDATE_FW int g_i_FW_VER = 0; int g_i_CFG_VER = 0; int g_i_CID_MAJ = 0; /* GUEST ID */ int g_i_CID_MIN = 0; /* VER for GUEST */ #endif unsigned char IC_CHECKSUM; #ifdef HX_ESD_RECOVERY Loading Loading @@ -513,25 +507,32 @@ static int i_update_FW(void) int upgrade_times = 0; unsigned char *ImageBuffer = NULL; int fullFileLength = 0; uint8_t ret = 0, result = 0; int ret = 0, result = 0; uint32_t i_FW_VER = 0, i_CFG_VER = 0; himax_int_enable(0); I("file name = %s\n", i_CTPM_firmware_name); ret = request_firmware(&i_CTPM_FW, i_CTPM_firmware_name, private_ts->dev); if (ret < 0) { E("%s,fail in line%d error code=%d\n", __func__, __LINE__, ret); D("file name = %s\n", i_CTPM_firmware_name); if (request_firmware(&i_CTPM_FW, i_CTPM_firmware_name, private_ts->dev)) { I("%s: no firmware file\n", __func__); return OPEN_FILE_FAIL; } if (i_CTPM_FW != NULL) { fullFileLength = i_CTPM_FW->size; ImageBuffer = (unsigned char *)i_CTPM_FW->data; } else { I("%s: i_CTPM_FW = NULL\n", __func__); return OPEN_FILE_FAIL; i_FW_VER = (ImageBuffer[FW_VER_MAJ_FLASH_ADDR] << 8) | ImageBuffer[FW_VER_MIN_FLASH_ADDR]; i_CFG_VER = (ImageBuffer[CFG_VER_MAJ_FLASH_ADDR] << 8) | ImageBuffer[CFG_VER_MIN_FLASH_ADDR]; if ((ic_data->vendor_fw_ver >= i_FW_VER) && (ic_data->vendor_config_ver >= i_CFG_VER)) { D("FW_VER 0x%x, CFG_VER 0x%x\n", i_FW_VER, i_CFG_VER); release_firmware(i_CTPM_FW); return 0; } himax_int_enable(0); update_retry: if (fullFileLength == FW_SIZE_32k) Loading Loading @@ -559,7 +560,7 @@ static int i_update_FW(void) g_core_fp.fp_read_FW_ver(); g_core_fp.fp_touch_information(); result = 1;/* upgrade success */ I("%s: TP upgrade OK\n", __func__); D("%s: TP upgrade OK\n", __func__); } #ifdef HX_RST_PIN_FUNC Loading Loading @@ -1887,15 +1888,14 @@ static const struct t_cable_status_notifier himax_cable_status_handler = { #endif #ifdef HX_AUTO_UPDATE_FW static void himax_update_register(struct work_struct *work) void himax_update_register(struct work_struct *work) { I(" %s in", __func__); D(" %s in", __func__); if (i_update_FW() <= 0) I("FW =NOT UPDATE=\n"); D("FW =NOT UPDATE=\n"); else I("Have new FW =UPDATE=\n"); D("Have new FW =UPDATE=\n"); } #endif Loading Loading @@ -2008,29 +2008,11 @@ int himax_chip_common_init(void) if (pdata->virtual_key) ts->button = pdata->virtual_key; #ifdef HX_AUTO_UPDATE_FW auto_update_flag = (!g_core_fp.fp_calculateChecksum(false)); auto_update_flag |= g_core_fp.fp_flash_lastdata_check(); if (auto_update_flag) goto FW_force_upgrade; #endif g_core_fp.fp_read_FW_ver(); #ifdef HX_AUTO_UPDATE_FW FW_force_upgrade: auto_update_flag |= ((ic_data->vendor_fw_ver < g_i_FW_VER) || (ic_data->vendor_config_ver < g_i_CFG_VER)); /* Not sure to do */ /* auto_update_flag |= ((ic_data->vendor_cid_maj_ver != g_i_CID_MAJ) || (ic_data->vendor_cid_min_ver < g_i_CID_MIN)); */ if (auto_update_flag) { ts->himax_update_wq = create_singlethread_workqueue("HMX_update_request"); if (!ts->himax_update_wq) { E(" allocate syn_update_wq failed\n"); err = -ENOMEM; goto err_update_wq_failed; } INIT_DELAYED_WORK(&ts->work_update, himax_update_register); queue_delayed_work(ts->himax_update_wq, &ts->work_update, msecs_to_jiffies(2000)); } queue_delayed_work(ts->himax_update_wq, &ts->work_update, msecs_to_jiffies(2000)); #endif #ifdef HX_ZERO_FLASH auto_update_flag = true; Loading Loading @@ -2135,12 +2117,7 @@ int himax_chip_common_init(void) E(" %s: debug initial failed!\n", __func__); #endif #if defined(HX_AUTO_UPDATE_FW) || defined(HX_ZERO_FLASH) if (auto_update_flag) himax_int_enable(0); #endif return 0; err_register_interrupt_failed: remove_proc_entry(HIMAX_PROC_TOUCH_FOLDER, NULL); Loading @@ -2161,7 +2138,7 @@ remove_proc_entry(HIMAX_PROC_TOUCH_FOLDER, NULL); cancel_delayed_work_sync(&ts->work_update); destroy_workqueue(ts->himax_update_wq); } err_update_wq_failed: #endif error_ic_detect_failed: Loading drivers/input/touchscreen/hxchipset/himax_common.h +3 −9 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ #define HX_RST_PIN_FUNC #define HX_RESUME_SEND_CMD #define HX_ESD_RECOVERY /*#define HX_AUTO_UPDATE_FW*/ #define HX_AUTO_UPDATE_FW /*#define HX_SMART_WAKEUP*/ /*#define HX_GESTURE_TRACK*/ /*#define HX_HIGH_SENSE*/ Loading Loading @@ -439,14 +439,6 @@ extern struct himax_core_fp g_core_fp; extern struct himax_debug *debug_data; extern uint8_t HX_PROC_SEND_FLAG; #ifdef HX_AUTO_UPDATE_FW extern int g_i_FW_VER; extern int g_i_CFG_VER; extern int g_i_CID_MAJ; /* GUEST ID */ extern int g_i_CID_MIN; /* VER for GUEST */ extern unsigned char i_CTPM_FW[]; #endif extern unsigned long FW_VER_MAJ_FLASH_ADDR; extern unsigned long FW_VER_MIN_FLASH_ADDR; extern unsigned long CFG_VER_MAJ_FLASH_ADDR; Loading Loading @@ -496,5 +488,7 @@ extern struct himax_target_report_data *g_target_report_data; extern int himax_report_data(struct himax_ts_data *ts, int ts_path, int ts_status); /* ts_work about end */ void himax_update_register(struct work_struct *work); #endif drivers/input/touchscreen/hxchipset/himax_ic_HX83112.c +0 −20 Original line number Diff line number Diff line Loading @@ -188,26 +188,6 @@ static void hx83112_chip_init(void) private_ts->chip_cell_type = CHIP_IS_IN_CELL; D("%s:IC cell type = %d\n", __func__, private_ts->chip_cell_type); IC_CHECKSUM = HX_TP_BIN_CHECKSUM_CRC; /* Himax: Set FW and CFG Flash Address */ FW_VER_MAJ_FLASH_ADDR = 49157; /* 0x00C005 */ FW_VER_MAJ_FLASH_LENG = 1; FW_VER_MIN_FLASH_ADDR = 49158; /* 0x00C006 */ FW_VER_MIN_FLASH_LENG = 1; CFG_VER_MAJ_FLASH_ADDR = 49408; /* 0x00C100 */ CFG_VER_MAJ_FLASH_LENG = 1; CFG_VER_MIN_FLASH_ADDR = 49409; /* 0x00C101 */ CFG_VER_MIN_FLASH_LENG = 1; CID_VER_MAJ_FLASH_ADDR = 49154; /* 0x00C002 */ CID_VER_MAJ_FLASH_LENG = 1; CID_VER_MIN_FLASH_ADDR = 49155; /* 0x00C003 */ CID_VER_MIN_FLASH_LENG = 1; #ifdef HX_AUTO_UPDATE_FW g_i_FW_VER = (i_CTPM_FW[FW_VER_MAJ_FLASH_ADDR] << 8) | i_CTPM_FW[FW_VER_MIN_FLASH_ADDR]; g_i_CFG_VER = (i_CTPM_FW[CFG_VER_MAJ_FLASH_ADDR] << 8) | i_CTPM_FW[CFG_VER_MIN_FLASH_ADDR]; g_i_CID_MAJ = i_CTPM_FW[CID_VER_MAJ_FLASH_ADDR]; g_i_CID_MIN = i_CTPM_FW[CID_VER_MIN_FLASH_ADDR]; #endif } #ifdef CONFIG_CHIP_DTCFG Loading drivers/input/touchscreen/hxchipset/himax_platform.c +9 −0 Original line number Diff line number Diff line Loading @@ -828,6 +828,15 @@ int himax_chip_common_probe(struct i2c_client *client, const struct i2c_device_i goto err_fb_notify_reg_failed; #endif #ifdef HX_AUTO_UPDATE_FW ts->himax_update_wq = create_singlethread_workqueue("HMX_update_request"); if (!ts->himax_update_wq) { E(" allocate syn_update_wq failed\n"); goto err_fb_notify_reg_failed; } INIT_DELAYED_WORK(&ts->work_update, himax_update_register); #endif return ret; err_fb_notify_reg_failed: Loading Loading
drivers/input/touchscreen/hxchipset/himax_common.c +42 −65 Original line number Diff line number Diff line Loading @@ -47,29 +47,23 @@ struct himax_target_report_data *g_target_report_data; static int HX_TOUCH_INFO_POINT_CNT; unsigned long FW_VER_MAJ_FLASH_ADDR; unsigned long FW_VER_MIN_FLASH_ADDR; unsigned long CFG_VER_MAJ_FLASH_ADDR; unsigned long CFG_VER_MIN_FLASH_ADDR; unsigned long CID_VER_MAJ_FLASH_ADDR; unsigned long CID_VER_MIN_FLASH_ADDR; unsigned long FW_VER_MAJ_FLASH_LENG; unsigned long FW_VER_MIN_FLASH_LENG; unsigned long CFG_VER_MAJ_FLASH_LENG; unsigned long CFG_VER_MIN_FLASH_LENG; unsigned long CID_VER_MAJ_FLASH_LENG; unsigned long CID_VER_MIN_FLASH_LENG; /* Himax: Set FW and CFG Flash Address */ #define FW_VER_MAJ_FLASH_ADDR 0x00C005 #define FW_VER_MIN_FLASH_ADDR 0x00C006 #define CFG_VER_MAJ_FLASH_ADDR 0x00C100 #define CFG_VER_MIN_FLASH_ADDR 0x00C101 #define CID_VER_MAJ_FLASH_ADDR 0x00C002 #define CID_VER_MIN_FLASH_ADDR 0x00C003 #define FW_VER_MAJ_FLASH_LENG 1 #define FW_VER_MIN_FLASH_LENG 1 #define CFG_VER_MAJ_FLASH_LENG 1 #define CFG_VER_MIN_FLASH_LENG 1 #define CID_VER_MAJ_FLASH_LENG 1 #define CID_VER_MIN_FLASH_LENG 1 unsigned long FW_CFG_VER_FLASH_ADDR; #ifdef HX_AUTO_UPDATE_FW int g_i_FW_VER = 0; int g_i_CFG_VER = 0; int g_i_CID_MAJ = 0; /* GUEST ID */ int g_i_CID_MIN = 0; /* VER for GUEST */ #endif unsigned char IC_CHECKSUM; #ifdef HX_ESD_RECOVERY Loading Loading @@ -513,25 +507,32 @@ static int i_update_FW(void) int upgrade_times = 0; unsigned char *ImageBuffer = NULL; int fullFileLength = 0; uint8_t ret = 0, result = 0; int ret = 0, result = 0; uint32_t i_FW_VER = 0, i_CFG_VER = 0; himax_int_enable(0); I("file name = %s\n", i_CTPM_firmware_name); ret = request_firmware(&i_CTPM_FW, i_CTPM_firmware_name, private_ts->dev); if (ret < 0) { E("%s,fail in line%d error code=%d\n", __func__, __LINE__, ret); D("file name = %s\n", i_CTPM_firmware_name); if (request_firmware(&i_CTPM_FW, i_CTPM_firmware_name, private_ts->dev)) { I("%s: no firmware file\n", __func__); return OPEN_FILE_FAIL; } if (i_CTPM_FW != NULL) { fullFileLength = i_CTPM_FW->size; ImageBuffer = (unsigned char *)i_CTPM_FW->data; } else { I("%s: i_CTPM_FW = NULL\n", __func__); return OPEN_FILE_FAIL; i_FW_VER = (ImageBuffer[FW_VER_MAJ_FLASH_ADDR] << 8) | ImageBuffer[FW_VER_MIN_FLASH_ADDR]; i_CFG_VER = (ImageBuffer[CFG_VER_MAJ_FLASH_ADDR] << 8) | ImageBuffer[CFG_VER_MIN_FLASH_ADDR]; if ((ic_data->vendor_fw_ver >= i_FW_VER) && (ic_data->vendor_config_ver >= i_CFG_VER)) { D("FW_VER 0x%x, CFG_VER 0x%x\n", i_FW_VER, i_CFG_VER); release_firmware(i_CTPM_FW); return 0; } himax_int_enable(0); update_retry: if (fullFileLength == FW_SIZE_32k) Loading Loading @@ -559,7 +560,7 @@ static int i_update_FW(void) g_core_fp.fp_read_FW_ver(); g_core_fp.fp_touch_information(); result = 1;/* upgrade success */ I("%s: TP upgrade OK\n", __func__); D("%s: TP upgrade OK\n", __func__); } #ifdef HX_RST_PIN_FUNC Loading Loading @@ -1887,15 +1888,14 @@ static const struct t_cable_status_notifier himax_cable_status_handler = { #endif #ifdef HX_AUTO_UPDATE_FW static void himax_update_register(struct work_struct *work) void himax_update_register(struct work_struct *work) { I(" %s in", __func__); D(" %s in", __func__); if (i_update_FW() <= 0) I("FW =NOT UPDATE=\n"); D("FW =NOT UPDATE=\n"); else I("Have new FW =UPDATE=\n"); D("Have new FW =UPDATE=\n"); } #endif Loading Loading @@ -2008,29 +2008,11 @@ int himax_chip_common_init(void) if (pdata->virtual_key) ts->button = pdata->virtual_key; #ifdef HX_AUTO_UPDATE_FW auto_update_flag = (!g_core_fp.fp_calculateChecksum(false)); auto_update_flag |= g_core_fp.fp_flash_lastdata_check(); if (auto_update_flag) goto FW_force_upgrade; #endif g_core_fp.fp_read_FW_ver(); #ifdef HX_AUTO_UPDATE_FW FW_force_upgrade: auto_update_flag |= ((ic_data->vendor_fw_ver < g_i_FW_VER) || (ic_data->vendor_config_ver < g_i_CFG_VER)); /* Not sure to do */ /* auto_update_flag |= ((ic_data->vendor_cid_maj_ver != g_i_CID_MAJ) || (ic_data->vendor_cid_min_ver < g_i_CID_MIN)); */ if (auto_update_flag) { ts->himax_update_wq = create_singlethread_workqueue("HMX_update_request"); if (!ts->himax_update_wq) { E(" allocate syn_update_wq failed\n"); err = -ENOMEM; goto err_update_wq_failed; } INIT_DELAYED_WORK(&ts->work_update, himax_update_register); queue_delayed_work(ts->himax_update_wq, &ts->work_update, msecs_to_jiffies(2000)); } queue_delayed_work(ts->himax_update_wq, &ts->work_update, msecs_to_jiffies(2000)); #endif #ifdef HX_ZERO_FLASH auto_update_flag = true; Loading Loading @@ -2135,12 +2117,7 @@ int himax_chip_common_init(void) E(" %s: debug initial failed!\n", __func__); #endif #if defined(HX_AUTO_UPDATE_FW) || defined(HX_ZERO_FLASH) if (auto_update_flag) himax_int_enable(0); #endif return 0; err_register_interrupt_failed: remove_proc_entry(HIMAX_PROC_TOUCH_FOLDER, NULL); Loading @@ -2161,7 +2138,7 @@ remove_proc_entry(HIMAX_PROC_TOUCH_FOLDER, NULL); cancel_delayed_work_sync(&ts->work_update); destroy_workqueue(ts->himax_update_wq); } err_update_wq_failed: #endif error_ic_detect_failed: Loading
drivers/input/touchscreen/hxchipset/himax_common.h +3 −9 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ #define HX_RST_PIN_FUNC #define HX_RESUME_SEND_CMD #define HX_ESD_RECOVERY /*#define HX_AUTO_UPDATE_FW*/ #define HX_AUTO_UPDATE_FW /*#define HX_SMART_WAKEUP*/ /*#define HX_GESTURE_TRACK*/ /*#define HX_HIGH_SENSE*/ Loading Loading @@ -439,14 +439,6 @@ extern struct himax_core_fp g_core_fp; extern struct himax_debug *debug_data; extern uint8_t HX_PROC_SEND_FLAG; #ifdef HX_AUTO_UPDATE_FW extern int g_i_FW_VER; extern int g_i_CFG_VER; extern int g_i_CID_MAJ; /* GUEST ID */ extern int g_i_CID_MIN; /* VER for GUEST */ extern unsigned char i_CTPM_FW[]; #endif extern unsigned long FW_VER_MAJ_FLASH_ADDR; extern unsigned long FW_VER_MIN_FLASH_ADDR; extern unsigned long CFG_VER_MAJ_FLASH_ADDR; Loading Loading @@ -496,5 +488,7 @@ extern struct himax_target_report_data *g_target_report_data; extern int himax_report_data(struct himax_ts_data *ts, int ts_path, int ts_status); /* ts_work about end */ void himax_update_register(struct work_struct *work); #endif
drivers/input/touchscreen/hxchipset/himax_ic_HX83112.c +0 −20 Original line number Diff line number Diff line Loading @@ -188,26 +188,6 @@ static void hx83112_chip_init(void) private_ts->chip_cell_type = CHIP_IS_IN_CELL; D("%s:IC cell type = %d\n", __func__, private_ts->chip_cell_type); IC_CHECKSUM = HX_TP_BIN_CHECKSUM_CRC; /* Himax: Set FW and CFG Flash Address */ FW_VER_MAJ_FLASH_ADDR = 49157; /* 0x00C005 */ FW_VER_MAJ_FLASH_LENG = 1; FW_VER_MIN_FLASH_ADDR = 49158; /* 0x00C006 */ FW_VER_MIN_FLASH_LENG = 1; CFG_VER_MAJ_FLASH_ADDR = 49408; /* 0x00C100 */ CFG_VER_MAJ_FLASH_LENG = 1; CFG_VER_MIN_FLASH_ADDR = 49409; /* 0x00C101 */ CFG_VER_MIN_FLASH_LENG = 1; CID_VER_MAJ_FLASH_ADDR = 49154; /* 0x00C002 */ CID_VER_MAJ_FLASH_LENG = 1; CID_VER_MIN_FLASH_ADDR = 49155; /* 0x00C003 */ CID_VER_MIN_FLASH_LENG = 1; #ifdef HX_AUTO_UPDATE_FW g_i_FW_VER = (i_CTPM_FW[FW_VER_MAJ_FLASH_ADDR] << 8) | i_CTPM_FW[FW_VER_MIN_FLASH_ADDR]; g_i_CFG_VER = (i_CTPM_FW[CFG_VER_MAJ_FLASH_ADDR] << 8) | i_CTPM_FW[CFG_VER_MIN_FLASH_ADDR]; g_i_CID_MAJ = i_CTPM_FW[CID_VER_MAJ_FLASH_ADDR]; g_i_CID_MIN = i_CTPM_FW[CID_VER_MIN_FLASH_ADDR]; #endif } #ifdef CONFIG_CHIP_DTCFG Loading
drivers/input/touchscreen/hxchipset/himax_platform.c +9 −0 Original line number Diff line number Diff line Loading @@ -828,6 +828,15 @@ int himax_chip_common_probe(struct i2c_client *client, const struct i2c_device_i goto err_fb_notify_reg_failed; #endif #ifdef HX_AUTO_UPDATE_FW ts->himax_update_wq = create_singlethread_workqueue("HMX_update_request"); if (!ts->himax_update_wq) { E(" allocate syn_update_wq failed\n"); goto err_fb_notify_reg_failed; } INIT_DELAYED_WORK(&ts->work_update, himax_update_register); #endif return ret; err_fb_notify_reg_failed: Loading