From 5f767e535c5f4cbfd21167facaf40b16c55a8dc2 Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Sat, 29 Jan 2022 17:01:03 +0800 Subject: [PATCH] Update zero tap down and up logic Add zero tap finger up event for framework to improve FOD zero type performance. Change-Id: I35bae1931121431943e0a991a2adfd5cc47f8a7d Signed-off-by: Yan Zhang Reviewed-on: https://gerrit.mot.com/2186508 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Wei Deng Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key --- .../goodix_berlin_mmi/goodix_ts_gesture_fod.c | 36 ++++++++++--------- .../touchscreen_mmi/touchscreen_mmi_gesture.c | 7 +++- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture_fod.c b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture_fod.c index 6e11f6229078..d9d23334c674 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture_fod.c +++ b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture_fod.c @@ -374,7 +374,7 @@ static int gsx_gesture_ist(struct goodix_ts_core *cd, #if defined(CONFIG_INPUT_TOUCHSCREEN_MMI) struct gesture_event_data mmi_event; static unsigned long start = 0; - int fod_down_interval; + int fod_down_interval = 0; int fod_down = cd->ts_event.gesture_data[0]; #endif if (atomic_read(&cd->suspended) == 0 || cd->gesture_type == 0) @@ -424,32 +424,34 @@ static int gsx_gesture_ist(struct goodix_ts_core *cd, mmi_event.evcode = 2; mmi_event.evdata.x= 540; mmi_event.evdata.y= 2164; - ts_info("get FOD-DOWN gesture %d fod_down_interval=%d",fod_down,fod_down_interval); - if(fod_down_interval < 250) - { - if( fod_down) { - goto fod_exit; - } - } else { + + ts_debug("Get FOD-DOWN gesture down:%d interval:%d",fod_down,fod_down_interval); + if(fod_down_interval > 2000) fod_down = 0; + if(fod_down_interval > 0 && fod_down_interval < 250 && fod_down) { + goto gesture_ist_exit; } start = jiffies; - if(fod_down <4) { + //maximum allow send down event 7 times + if(fod_down < 6) { ret = cd->imports->report_gesture(&mmi_event); if (!ret) PM_WAKEUP_EVENT(cd->gesture_wakelock, 3000); - } } -fod_exit: fod_down++; - goto gesture_ist_exit; - }else if(cd->gesture_type & GESTURE_FOD_PRESS && gs_event.gesture_type == GOODIX_GESTURE_FOD_UP) { - ts_info("get FOD-UP gesture"); + }else if(cd->gesture_type & GESTURE_FOD_PRESS && gs_event.gesture_type == GOODIX_GESTURE_FOD_UP) { + ts_info("Get FOD-UP gesture"); mmi_event.evcode = 3; + mmi_event.evdata.x= 0; + mmi_event.evdata.y= 0; + ret = cd->imports->report_gesture(&mmi_event); + if (!ret) + PM_WAKEUP_EVENT(cd->gesture_wakelock, 500); fod_down = 0; - } else { - ts_debug("not support gesture type[%02X] to wakeup, suspended =%d", gs_event.gesture_type, atomic_read(&cd->suspended)); - fod_down = 0; + } else { + ts_debug("not support gesture type[%02X] to wakeup, suspended =%d", gs_event.gesture_type, atomic_read(&cd->suspended)); + fod_down = 0; + } } #else switch (gs_event.gesture_type) { diff --git a/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_gesture.c b/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_gesture.c index 49eca3a5b841..fc7e622a3c42 100644 --- a/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_gesture.c +++ b/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_gesture.c @@ -223,7 +223,11 @@ static int ts_mmi_gesture_handler(struct gesture_event_data *gev) input_report_abs(sensor_pdata->input_sensor_dev, ABS_X, gev->evdata.x); input_report_abs(sensor_pdata->input_sensor_dev, ABS_Y, gev->evdata.y); pr_info("%s: zero tap; x=%x, y=%x\n", __func__, gev->evdata.x, gev->evdata.y); - break; + break; + case 3: + key_code = KEY_F3; + pr_info("%s: zero tap up\n", __func__); + break; default: need2report = false; pr_info("%s: unknown id=%x\n", __func__, gev->evcode); @@ -483,6 +487,7 @@ int ts_mmi_gesture_init(struct ts_mmi_dev *touch_cdev) __set_bit(EV_KEY, sensor_input_dev->evbit); __set_bit(KEY_F1, sensor_input_dev->keybit); __set_bit(KEY_F2, sensor_input_dev->keybit); + __set_bit(KEY_F3, sensor_input_dev->keybit); __set_bit(EV_ABS, sensor_input_dev->evbit); __set_bit(EV_SYN, sensor_input_dev->evbit); /* TODO: fill in real screen resolution */