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 <zhangy26@motorola.com>
Reviewed-on: https://gerrit.mot.com/2186508
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Wei Deng <dengwei1@motorola.com>
Reviewed-by: Xiangpo Zhao <zhaoxp3@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
Yan Zhang 2022-01-29 17:01:03 +08:00
commit 5f767e535c
2 changed files with 25 additions and 18 deletions

View file

@ -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) {

View file

@ -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 */