diff options
author | PixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com> | 2022-11-13 18:38:14 -0800 |
---|---|---|
committer | SecurityBot <android-nexus-securitybot@system.gserviceaccount.com> | 2022-11-13 18:38:15 -0800 |
commit | 412e8639dc0aeed1d4a932b3052acbcf944bc5ed (patch) | |
tree | 29b48858a2cc136707967a97db0d4096ea21d09d | |
parent | 9f6a34bcedb0993e5652a678c5c01781bd66a15c (diff) | |
parent | 639eab1942966078c3cb0f8d661e47ef1333c045 (diff) | |
download | novatek_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.c | 45 | ||||
-rw-r--r-- | nt36xxx/nt36xxx.h | 13 | ||||
-rw-r--r-- | nt36xxx/nt36xxx_ext_api.c | 40 |
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; } |