summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWendly Li <wendlyli@google.com>2022-06-06 06:10:15 +0000
committerWendly Li <wendlyli@google.com>2022-06-07 07:13:50 +0000
commite29c9d98224bd37a84929a3d2bb98c808efdca0e (patch)
tree5cbb7a32184aad4735fe6407e86195ec5a1f6d79
parent0841e784fec0636ce57415d4b49e6c8d8f1f88d2 (diff)
downloadgoodix_touch-e29c9d98224bd37a84929a3d2bb98c808efdca0e.tar.gz
Import v1.0.10 driver
Bug: 214118837 Test: Check heatmap works Change-Id: Id7e23480bd7a6b1e38c493ad54cf362106ee43c1 Signed-off-by: Wendly Li <wendlyli@google.com>
-rw-r--r--goodix_brl_hw.c35
-rw-r--r--goodix_ts_core.h2
-rw-r--r--goodix_ts_gesture.c2
-rw-r--r--goodix_ts_proc.c54
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, ",");