diff options
-rw-r--r-- | goodix_brl_hw.c | 35 | ||||
-rw-r--r-- | goodix_ts_core.h | 2 | ||||
-rw-r--r-- | goodix_ts_gesture.c | 2 | ||||
-rw-r--r-- | goodix_ts_proc.c | 54 |
4 files changed, 68 insertions, 25 deletions
diff --git a/goodix_brl_hw.c b/goodix_brl_hw.c index 91d933b..ac908b1 100644 --- a/goodix_brl_hw.c +++ b/goodix_brl_hw.c @@ -1249,11 +1249,16 @@ static int brl_after_event_handler(struct goodix_ts_core *cd) { struct goodix_ts_hw_ops *hw_ops = cd->hw_ops; struct goodix_ic_info_misc *misc = &cd->ic_info.misc; - u8 sync_clean = 0; + u8 sync_clean[1] = { 0 }; + int ret = 0; if (cd->tools_ctrl_sync) return 0; - return hw_ops->write(cd, misc->touch_data_addr, &sync_clean, 1); + + ret = hw_ops->write(cd, misc->touch_data_addr, sync_clean, sizeof(sync_clean)); + if (ret != 0) + return ret; + return hw_ops->write(cd, misc->frame_data_addr, sync_clean, sizeof(sync_clean)); } static int brld_get_framedata( @@ -1498,19 +1503,33 @@ int brl_set_continuously_report_enabled(struct goodix_ts_core *cd, bool enabled) return 0; } -#define GOODIX_CMD_SET_HEATMAP_ENABLED 0x90 +#define GOODIX_CMD_SET_FRAMEDATA_ENABLED 0x90 +#define GOODIX_CMD_SET_HEATMAP_ENABLED 0xC9 int brl_set_heatmap_enabled(struct goodix_ts_core *cd, bool enabled) { struct goodix_ts_cmd cmd; + int ret = 0; cmd.cmd = GOODIX_CMD_SET_HEATMAP_ENABLED; cmd.len = 5; - cmd.data[0] = enabled ? 2 : 0; - if (cd->hw_ops->send_cmd(cd, &cmd)) - ts_err("failed to set heatmap enabled: %s", - enabled ? "enabled" : "disabled"); + cmd.data[0] = enabled ? 1 : 0; + ret = cd->hw_ops->send_cmd(cd, &cmd); + if (ret != 0) { + ts_err("failed to set heatmap %s, err: %d", + enabled ? "enabled" : "disabled", ret); + return ret; + } - return 0; + cmd.cmd = GOODIX_CMD_SET_FRAMEDATA_ENABLED; + cmd.len = 5; + cmd.data[0] = enabled ? 0x82 : 0; + ret = cd->hw_ops->send_cmd(cd, &cmd); + if (ret != 0) { + ts_err("failed to set framedata %s, err: %d", + enabled ? "enabled" : "disabled", ret); + return ret; + } + return ret; } static struct goodix_ts_hw_ops brl_hw_ops = { diff --git a/goodix_ts_core.h b/goodix_ts_core.h index b2eba7e..b441f00 100644 --- a/goodix_ts_core.h +++ b/goodix_ts_core.h @@ -53,7 +53,7 @@ #define GOODIX_CORE_DRIVER_NAME "goodix_ts" #define GOODIX_PEN_DRIVER_NAME "goodix_ts,pen" -#define GOODIX_DRIVER_VERSION "v1.0.8" +#define GOODIX_DRIVER_VERSION "v1.0.10" #define GOODIX_MAX_TOUCH 10 #define GOODIX_PEN_MAX_PRESSURE 4096 #define GOODIX_MAX_PEN_KEY 2 diff --git a/goodix_ts_gesture.c b/goodix_ts_gesture.c index 394a32e..4de2a97 100644 --- a/goodix_ts_gesture.c +++ b/goodix_ts_gesture.c @@ -239,11 +239,13 @@ static int gsx_gesture_ist( ret = hw_ops->event_handler(cd, &gs_event); if (ret) { ts_err("failed get gesture data"); + cd->hw_ops->gesture(cd, 0); goto re_send_ges_cmd; } if (!(gs_event.event_type & EVENT_GESTURE)) { ts_err("invalid event type: 0x%x", cd->ts_event.event_type); + cd->hw_ops->gesture(cd, 0); goto re_send_ges_cmd; } diff --git a/goodix_ts_proc.c b/goodix_ts_proc.c index 0418f3e..51bf0bf 100644 --- a/goodix_ts_proc.c +++ b/goodix_ts_proc.c @@ -12,6 +12,7 @@ #define CMD_AUTO_NOISE_TEST "auto_noise_test" #define CMD_SHORT_TEST "short_test" #define CMD_GET_PACKAGE_ID "get_package_id" +#define CMD_GET_MCU_ID "get_mcu_id" #define CMD_GET_VERSION "get_version" #define CMD_GET_RAWDATA "get_raw" #define CMD_GET_DIFFDATA "get_diff" @@ -46,16 +47,17 @@ char *cmd_list[] = { CMD_FW_UPDATE, CMD_AUTO_TEST, CMD_OPEN_TEST, CMD_SELF_OPEN_TEST, CMD_NOISE_TEST, CMD_AUTO_NOISE_TEST, CMD_SHORT_TEST, - CMD_GET_PACKAGE_ID, CMD_GET_VERSION, CMD_GET_RAWDATA, CMD_GET_DIFFDATA, - CMD_GET_BASEDATA, CMD_GET_SELF_RAWDATA, CMD_GET_SELF_DIFFDATA, - CMD_GET_SELF_BASEDATA, CMD_SET_DOUBLE_TAP, CMD_SET_SINGLE_TAP, - CMD_SET_LONG_PRESS, CMD_SET_ST_PARAM, CMD_SET_LP_PARAM, - CMD_SET_CHARGE_MODE, CMD_SET_IRQ_ENABLE, CMD_SET_ESD_ENABLE, - CMD_SET_DEBUG_LOG, CMD_SET_SCAN_MODE, CMD_GET_SCAN_MODE, - CMD_SET_CONTINUE_MODE, CMD_GET_CHANNEL_NUM, CMD_GET_TX_FREQ, CMD_RESET, - CMD_SET_SENSE_MODE, CMD_GET_CONFIG, CMD_GET_FW_STATUS, - CMD_SET_HIGHSENSE_MODE, CMD_SET_GRIP_DATA, CMD_SET_PALM_MODE, - CMD_SET_NOISE_MODE, CMD_SET_WATER_MODE, CMD_SET_HEATMAP, NULL }; + CMD_GET_PACKAGE_ID, CMD_GET_MCU_ID, CMD_GET_VERSION, CMD_GET_RAWDATA, + CMD_GET_DIFFDATA, CMD_GET_BASEDATA, CMD_GET_SELF_RAWDATA, + CMD_GET_SELF_DIFFDATA, CMD_GET_SELF_BASEDATA, CMD_SET_DOUBLE_TAP, + CMD_SET_SINGLE_TAP, CMD_SET_LONG_PRESS, CMD_SET_ST_PARAM, + CMD_SET_LP_PARAM, CMD_SET_CHARGE_MODE, CMD_SET_IRQ_ENABLE, + CMD_SET_ESD_ENABLE, CMD_SET_DEBUG_LOG, CMD_SET_SCAN_MODE, + CMD_GET_SCAN_MODE, CMD_SET_CONTINUE_MODE, CMD_GET_CHANNEL_NUM, + CMD_GET_TX_FREQ, CMD_RESET, CMD_SET_SENSE_MODE, CMD_GET_CONFIG, + CMD_GET_FW_STATUS, CMD_SET_HIGHSENSE_MODE, CMD_SET_GRIP_DATA, + CMD_SET_PALM_MODE, CMD_SET_NOISE_MODE, CMD_SET_WATER_MODE, + CMD_SET_HEATMAP, NULL }; /* test limits keyword */ #define CSV_TP_SPECIAL_RAW_MIN "special_raw_min" @@ -688,21 +690,25 @@ static int goodix_shortcircut_analysis(void) { int ret; int err = 0; + u8 temp_buf[62]; test_result_t test_result; - ret = cd->hw_ops->read(cd, SHORT_TEST_RESULT_REG_NOT, - (u8 *)&test_result, sizeof(test_result)); + ret = cd->hw_ops->read( + cd, SHORT_TEST_RESULT_REG_NOT, temp_buf, sizeof(temp_buf)); if (ret < 0) { ts_err("Read TEST_RESULT_REG failed"); return ret; } - if (checksum_cmp((u8 *)&test_result, sizeof(test_result), + if (checksum_cmp(&temp_buf[sizeof(test_result)], + sizeof(temp_buf) - sizeof(test_result), CHECKSUM_MODE_U8_LE)) { - ts_err("shrot result checksum err"); + ts_err("short result checksum err"); return -EINVAL; } + memcpy((u8 *)&test_result, temp_buf, sizeof(test_result)); + if (!(test_result.result & 0x0F)) { ts_info(">>>>> No shortcircut"); return 0; @@ -2206,7 +2212,7 @@ static void goodix_get_scan_mode(void) { u8 status; - cd->hw_ops->read(cd, 0x10218, &status, 1); + cd->hw_ops->read(cd, 0x10219, &status, 1); ts_info("ic status:%d", status); if (status == 1) { @@ -2559,13 +2565,19 @@ static void goodix_set_heatmap(int val) if (val == 0) { index = sprintf(rbuf, "disable heatmap\n"); temp_cmd.len = 5; + temp_cmd.cmd = 0xC9; + temp_cmd.data[0] = 0; + cd->hw_ops->send_cmd(cd, &temp_cmd); temp_cmd.cmd = 0x90; temp_cmd.data[0] = 0; } else { index = sprintf(rbuf, "enable heatmap\n"); temp_cmd.len = 5; + temp_cmd.cmd = 0xC9; + temp_cmd.data[0] = 1; + cd->hw_ops->send_cmd(cd, &temp_cmd); temp_cmd.cmd = 0x90; - temp_cmd.data[0] = 2; + temp_cmd.data[0] = 0x82; } cd->hw_ops->send_cmd(cd, &temp_cmd); cd->hw_ops->irq_enable(cd, true); @@ -2959,6 +2971,16 @@ static ssize_t driver_test_write( goto exit; } + if (!strncmp(p, CMD_GET_MCU_ID, strlen(CMD_GET_MCU_ID))) { + rbuf = kzalloc(SHORT_SIZE, GFP_KERNEL); + ret = goodix_flash_read(0x1F314, &id, 1); + if (ret < 0) + index = sprintf(rbuf, "%s: NG\n", CMD_GET_MCU_ID); + else + index = sprintf(rbuf, "%s: 0x%x\n", CMD_GET_MCU_ID, id); + goto exit; + } + if (!strncmp(p, CMD_SET_SCAN_MODE, strlen(CMD_SET_SCAN_MODE))) { rbuf = kzalloc(SHORT_SIZE, GFP_KERNEL); token = strsep(&p, ","); |