summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com>2022-11-13 18:38:14 -0800
committerSecurityBot <android-nexus-securitybot@system.gserviceaccount.com>2022-11-13 18:38:15 -0800
commit412e8639dc0aeed1d4a932b3052acbcf944bc5ed (patch)
tree29b48858a2cc136707967a97db0d4096ea21d09d
parent9f6a34bcedb0993e5652a678c5c01781bd66a15c (diff)
parent639eab1942966078c3cb0f8d661e47ef1333c045 (diff)
downloadnovatek_touch-412e8639dc0aeed1d4a932b3052acbcf944bc5ed.tar.gz
Merge android13-gs-pixel-5.10-tm-qpr2 into android13-gs-pixel-5.10-tm-qpr3
SBMerger: 478053055 Change-Id: I9dbf6cfad45e655d34ecefa5f6105119136cd8ff Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
-rw-r--r--nt36xxx/nt36xxx.c45
-rw-r--r--nt36xxx/nt36xxx.h13
-rw-r--r--nt36xxx/nt36xxx_ext_api.c40
3 files changed, 63 insertions, 35 deletions
diff --git a/nt36xxx/nt36xxx.c b/nt36xxx/nt36xxx.c
index 2c9a706..a2437cd 100644
--- a/nt36xxx/nt36xxx.c
+++ b/nt36xxx/nt36xxx.c
@@ -1116,7 +1116,8 @@ void nvt_ts_wakeup_gesture_report(uint8_t gesture_id, uint8_t *data)
return;
}
- keycode = gesture_keycode[gesture_id];
+ if (gesture_id < GESTURE_ID_MAX)
+ keycode = gesture_keycode[gesture_id];
if (keycode) {
NVT_LOG("Gesture: %s(%d) triggered and report keycode(%d).\n",
gesture_string[gesture_id], gesture_id, keycode);
@@ -1592,7 +1593,10 @@ static irqreturn_t nvt_ts_work_func(int irq, void *data)
uint8_t touch_freq_index;
uint8_t pen_freq_index;
- if (ts->wkg_flag && ts->bTouchIsAwake == false)
+ if (!ts->probe_done)
+ return IRQ_HANDLED;
+
+ if (ts->wkg_option != WAKEUP_GESTURE_OFF && ts->bTouchIsAwake == false)
pm_wakeup_event(&ts->input_dev->dev, 5 * MSEC_PER_SEC);
else
pm_wakeup_event(&ts->client->dev, MSEC_PER_SEC);
@@ -1648,7 +1652,7 @@ static irqreturn_t nvt_ts_work_func(int irq, void *data)
}
#endif /* POINT_DATA_CHECKSUM */
- if (ts->wkg_flag && ts->bTouchIsAwake == false) {
+ if (ts->wkg_option != WAKEUP_GESTURE_OFF && ts->bTouchIsAwake == false) {
input_id = (uint8_t)(point_data[1] >> 3);
nvt_ts_wakeup_gesture_report(input_id, point_data);
mutex_unlock(&ts->lock);
@@ -2120,7 +2124,7 @@ return:
static int32_t nvt_ts_probe(struct spi_device *client)
{
int32_t ret = 0;
-#if (TOUCH_KEY_NUM || WAKEUP_GESTURE)
+#if (TOUCH_KEY_NUM || WAKEUP_GESTURE_DEFAULT)
int32_t retry = 0;
#endif
#ifdef CONFIG_OF
@@ -2289,8 +2293,9 @@ static int32_t nvt_ts_probe(struct spi_device *client)
ts->input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
ts->input_dev->propbit[0] = BIT(INPUT_PROP_DIRECT);
ts->report_protocol = REPORT_PROTOCOL_B;
-#if WAKEUP_GESTURE
- ts->wkg_flag = 1;
+#if WAKEUP_GESTURE_DEFAULT
+ ts->wkg_default = WAKEUP_GESTURE_DEFAULT;
+ ts->wkg_option = WAKEUP_GESTURE_DEFAULT;
#endif
if (ts->report_protocol == REPORT_PROTOCOL_B)
@@ -2328,7 +2333,7 @@ static int32_t nvt_ts_probe(struct spi_device *client)
}
#endif
-#if WAKEUP_GESTURE
+#if WAKEUP_GESTURE_DEFAULT
for (retry = 0;
retry < ARRAY_SIZE(gesture_keycode);
retry++) {
@@ -2452,7 +2457,7 @@ static int32_t nvt_ts_probe(struct spi_device *client)
}
}
-#if WAKEUP_GESTURE
+#if WAKEUP_GESTURE_DEFAULT
device_init_wakeup(&ts->input_dev->dev, 1);
#endif
@@ -2579,6 +2584,7 @@ static int32_t nvt_ts_probe(struct spi_device *client)
nvt_irq_enable(true);
+ ts->probe_done = true;
return 0;
#if defined(CONFIG_FB)
@@ -2628,7 +2634,7 @@ err_create_nvt_esd_check_wq_failed:
}
err_create_nvt_fwu_wq_failed:
#endif
-#if WAKEUP_GESTURE
+#if WAKEUP_GESTURE_DEFAULT
device_init_wakeup(&ts->input_dev->dev, 0);
#endif
free_irq(client->irq, ts);
@@ -2750,7 +2756,7 @@ static int32_t nvt_ts_remove(struct spi_device *client)
nvt_fwu_wq = NULL;
}
#endif
-#if WAKEUP_GESTURE
+#if WAKEUP_GESTURE_DEFAULT
device_init_wakeup(&ts->input_dev->dev, 0);
#endif
@@ -2860,7 +2866,7 @@ static void nvt_ts_shutdown(struct spi_device *client)
nvt_fwu_wq = NULL;
}
#endif
-#if WAKEUP_GESTURE
+#if WAKEUP_GESTURE_DEFAULT
device_init_wakeup(&ts->input_dev->dev, 0);
#endif
}
@@ -2895,7 +2901,7 @@ int nvt_ts_suspend(struct device *dev)
/* Initialize heatmap_host_cmd to force sending again after resume. */
ts->heatmap_host_cmd = HEATMAP_HOST_CMD_DISABLE;
- if (!ts->wkg_flag)
+ if (ts->wkg_option == WAKEUP_GESTURE_OFF)
nvt_irq_enable(false);
reinit_completion(&ts->bus_resumed);
@@ -2951,13 +2957,18 @@ int nvt_ts_suspend(struct device *dev)
input_report_key(ts->pen_input_dev, BTN_STYLUS, 0);
input_report_key(ts->pen_input_dev, BTN_STYLUS2, 0);
input_sync(ts->pen_input_dev);
+
+ ts->pen_active = 0;
+ ts->pen_offload_coord_timestamp = ts->timestamp;
+ memset(&ts->pen_offload_coord, 0,
+ sizeof(ts->pen_offload_coord));
}
-#if (WAKEUP_GESTURE) && (NVT_TOUCH_EXT_API)
- nvt_set_dttw(ts->wkg_flag, false);
+#if WAKEUP_GESTURE_DEFAULT
+ nvt_set_dttw(false);
#endif
- if (ts->wkg_flag) {
+ if (ts->wkg_option != WAKEUP_GESTURE_OFF) {
//---write command to enter "wakeup gesture mode"---
buf[0] = EVENT_MAP_HOST_CMD;
buf[1] = 0x13;
@@ -2975,7 +2986,7 @@ int nvt_ts_suspend(struct device *dev)
mutex_unlock(&ts->lock);
#if defined(CONFIG_SOC_GOOGLE)
- if (!ts->wkg_flag)
+ if (ts->wkg_option == WAKEUP_GESTURE_OFF)
nvt_pinctrl_configure(ts, false);
#else
msleep(50);
@@ -3018,7 +3029,7 @@ int nvt_ts_resume(struct device *dev)
nvt_check_fw_reset_state(RESET_STATE_REK);
}
- if (!ts->wkg_flag)
+ if (ts->wkg_option == WAKEUP_GESTURE_OFF)
nvt_irq_enable(true);
#if NVT_TOUCH_ESD_PROTECT
diff --git a/nt36xxx/nt36xxx.h b/nt36xxx/nt36xxx.h
index b70d650..66ce04e 100644
--- a/nt36xxx/nt36xxx.h
+++ b/nt36xxx/nt36xxx.h
@@ -116,7 +116,6 @@ extern const uint16_t touch_key_array[TOUCH_KEY_NUM];
#define REPORT_PROTOCOL_A 1
#define REPORT_PROTOCOL_B 0
#define NVT_TOUCH_MP 1
-#define WAKEUP_GESTURE 1
#define BOOT_UPDATE_FIRMWARE 1
#define BOOT_UPDATE_FIRMWARE_MS_DELAY 100
#define BOOT_UPDATE_FIRMWARE_NAME "novatek_ts_fw.bin"
@@ -178,6 +177,12 @@ enum {
/* FW History */
#define NVT_HISTORY_BUF_LEN (65 * 4)
+/* Gesture */
+#define WAKEUP_GESTURE_OFF 0
+#define WAKEUP_GESTURE_STTW 1
+#define WAKEUP_GESTURE_DTTW 2
+#define WAKEUP_GESTURE_DEFAULT WAKEUP_GESTURE_STTW
+
enum gesture_id : u8 {
GESTURE_WORD_C = 12,
GESTURE_WORD_W = 13,
@@ -239,6 +244,7 @@ struct nvt_ts_data {
uint8_t *xbuf;
char history_buf[NVT_HISTORY_BUF_LEN];
struct mutex xbuf_lock;
+ bool probe_done;
bool irq_enabled;
bool pen_support;
bool wgp_stylus;
@@ -253,7 +259,8 @@ struct nvt_ts_data {
struct mtk_chip_config spi_ctrl;
#endif
uint8_t report_protocol;
- uint8_t wkg_flag;
+ u8 wkg_option;
+ u8 wkg_default;
uint8_t bTouchIsAwake;
uint8_t pen_format_id;
uint32_t pen_bat_capa;
@@ -392,7 +399,7 @@ extern void nvt_read_fw_history(uint32_t addr);
extern int32_t nvt_extra_api_init(void);
extern void nvt_extra_api_deinit(void);
extern void nvt_get_dttw_conf(void);
-extern ssize_t nvt_set_dttw(uint8_t wkg_flag, bool check_result);
+extern void nvt_set_dttw(bool check_result);
#endif
#if NVT_TOUCH_EXT_USI
extern int32_t nvt_extra_usi_init(void);
diff --git a/nt36xxx/nt36xxx_ext_api.c b/nt36xxx/nt36xxx_ext_api.c
index 0553d73..d8ef7c5 100644
--- a/nt36xxx/nt36xxx_ext_api.c
+++ b/nt36xxx/nt36xxx_ext_api.c
@@ -1363,15 +1363,17 @@ static uint16_t nvt_get_dttw_para(uint64_t dttw_addr)
return ((uint16_t)(spi_buf[2] << 8) + spi_buf[1]);
}
-ssize_t nvt_set_dttw(uint8_t wkg_flag, bool check_result)
+void nvt_set_dttw(bool check_result)
{
uint8_t spi_buf[3] = {0};
uint16_t cmd_test_bit = DTTW_MODE_CMD_TEST_BIT;
int32_t ret = 0;
- NVT_LOG("++\n");
+ if (ts->wkg_default != WAKEUP_GESTURE_DTTW)
+ return;
- if (wkg_flag) {
+ NVT_LOG("++\n");
+ if (ts->wkg_option == WAKEUP_GESTURE_DTTW) {
spi_buf[0] = EVENT_MAP_HOST_CMD;
spi_buf[1] = 0x70;
spi_buf[2] = 0x31;
@@ -1382,17 +1384,18 @@ ssize_t nvt_set_dttw(uint8_t wkg_flag, bool check_result)
spi_buf[2] = 0x30;
CTP_SPI_WRITE(ts->client, spi_buf, 3);
}
+ msleep(20);
if (check_result) {
- msleep(20);
- ret = nvt_check_api_cmd_result(cmd_test_bit, wkg_flag == 1);
+ ret = nvt_check_api_cmd_result(cmd_test_bit,
+ (ts->wkg_option != WAKEUP_GESTURE_OFF) ? 1 : 0);
if (ret) {
NVT_ERR("DTTW conf: failed to setup, ret = %d.\n", ret);
- return -EINVAL;
+ return;
}
}
- if (wkg_flag) {
+ if (ts->wkg_option == WAKEUP_GESTURE_DTTW) {
NVT_LOG("DTTW conf: area max/min %d %d, contact max/min %d %d.\n",
ts->dttw_touch_area_max, ts->dttw_touch_area_min,
ts->dttw_contact_duration_max, ts->dttw_contact_duration_min);
@@ -1402,11 +1405,10 @@ ssize_t nvt_set_dttw(uint8_t wkg_flag, bool check_result)
NVT_LOG("DTTW conf: motion %d, edge %d.\n",
ts->dttw_motion_tolerance, ts->dttw_detection_window_edge);
} else {
- NVT_LOG("DTTW conf: off.\n");
+ NVT_LOG("Gesture conf: off.\n");
}
NVT_LOG("--\n");
- return (wkg_flag == 1);
}
static ssize_t nvt_dttw_mode_show(struct device *dev,
@@ -1419,7 +1421,7 @@ static ssize_t nvt_dttw_mode_show(struct device *dev,
if (mutex_lock_interruptible(&ts->lock))
return -ERESTARTSYS;
- ret = snprintf(buf, PAGE_SIZE, "%d\n", ts->wkg_flag);
+ ret = snprintf(buf, PAGE_SIZE, "%d\n", ts->wkg_option);
mutex_unlock(&ts->lock);
@@ -1434,7 +1436,7 @@ static ssize_t nvt_dttw_mode_store(struct device *dev, struct device_attribute *
NVT_LOG("++\n");
- if (kstrtou8(buf, 10, &mode) || mode > CMD_ENABLE || !ts->bTouchIsAwake)
+ if (kstrtou8(buf, 10, &mode) || !ts->bTouchIsAwake)
return -EINVAL;
if (mutex_lock_interruptible(&ts->lock))
@@ -1442,12 +1444,20 @@ static ssize_t nvt_dttw_mode_store(struct device *dev, struct device_attribute *
switch (mode) {
case CMD_DISABLE:
- NVT_LOG("Disable DTTW Mode\n");
- ts->wkg_flag = 0;
+ ts->wkg_option = WAKEUP_GESTURE_OFF;
+ NVT_LOG("Disable Gesture.\n");
break;
case CMD_ENABLE:
- NVT_LOG("Enable DTTW Mode\n");
- ts->wkg_flag = 1;
+ ts->wkg_default = WAKEUP_GESTURE_DEFAULT;
+ ts->wkg_option = WAKEUP_GESTURE_DEFAULT;
+ NVT_LOG("Enable Default Gesture(%d).\n", ts->wkg_option);
+ break;
+ default:
+ if (mode >= WAKEUP_GESTURE_OFF || mode <= WAKEUP_GESTURE_DTTW) {
+ ts->wkg_option = mode;
+ ts->wkg_default = mode;
+ NVT_LOG("Enable Gesture(%d) as default.\n", mode);
+ }
break;
}