From 1908fac4f7c8c94329cfb9ed1b0093cdc5f84c01 Mon Sep 17 00:00:00 2001 From: wangyq13 Date: Tue, 1 Nov 2022 16:25:09 +0800 Subject: [PATCH] input: ili9882_mmi: add last_event_time function ili9882_mmi: Add last event time function, record the last touch event time, used by phone back double tap. Change-Id: I793f79111c8a154074fd99c343d14b09df7c036b Signed-off-by: wangyq13 Reviewed-on: https://gerrit.mot.com/2417920 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Jing Hu Reviewed-by: Jianqi Yang Submit-Approved: Jira Key --- .../input/touchscreen/ili9882_mmi/Android.mk | 4 ++++ drivers/input/touchscreen/ili9882_mmi/Kbuild | 4 ++++ .../input/touchscreen/ili9882_mmi/ili9882.h | 3 +++ .../touchscreen/ili9882_mmi/ili9882_touch.c | 14 ++++++++++++ .../touchscreen/ili9882_mmi/ili_mmi_class.c | 22 +++++++++++++++++++ 5 files changed, 47 insertions(+) diff --git a/drivers/input/touchscreen/ili9882_mmi/Android.mk b/drivers/input/touchscreen/ili9882_mmi/Android.mk index 21c2abe0bd43..9cba9af6ade4 100644 --- a/drivers/input/touchscreen/ili9882_mmi/Android.mk +++ b/drivers/input/touchscreen/ili9882_mmi/Android.mk @@ -59,6 +59,10 @@ ifeq ($(BOARD_USES_STYLUS_PALM),true) KBUILD_OPTIONS += CONFIG_ILITEK_PASSIVE_PEN=y endif +ifeq ($(TOUCHSCREEN_LAST_TIME),true) + KBUILD_OPTIONS += CONFIG_ILI_TOUCH_LAST_TIME=y +endif + include $(CLEAR_VARS) ifneq ($(BOARD_USES_DOUBLE_TAP),) LOCAL_ADDITIONAL_DEPENDENCIES += $(KERNEL_MODULES_OUT)/sensors_class.ko diff --git a/drivers/input/touchscreen/ili9882_mmi/Kbuild b/drivers/input/touchscreen/ili9882_mmi/Kbuild index 30f158c2142e..d1f79a883c4c 100644 --- a/drivers/input/touchscreen/ili9882_mmi/Kbuild +++ b/drivers/input/touchscreen/ili9882_mmi/Kbuild @@ -56,6 +56,10 @@ ifneq ($(filter m y,$(CONFIG_ILITEK_PASSIVE_PEN)),) EXTRA_CFLAGS += -DILI_PASSIVE_PEN endif +ifneq ($(filter m y,$(CONFIG_ILI_TOUCH_LAST_TIME)),) + EXTRA_CFLAGS += -DILI_TOUCH_LAST_TIME +endif + ili9882_mmi-objs += ili9882.o ili9882_mmi-objs += ili9882_spi.o ili9882_mmi-objs += ili9882_qcom.o diff --git a/drivers/input/touchscreen/ili9882_mmi/ili9882.h b/drivers/input/touchscreen/ili9882_mmi/ili9882.h index 2e37499eaf60..5397c218334c 100755 --- a/drivers/input/touchscreen/ili9882_mmi/ili9882.h +++ b/drivers/input/touchscreen/ili9882_mmi/ili9882.h @@ -1037,6 +1037,9 @@ struct ilitek_ts_data { #if defined(CONFIG_INPUT_TOUCHSCREEN_MMI) struct ts_mmi_class_methods *imports; #endif +#ifdef ILI_TOUCH_LAST_TIME + ktime_t last_event_time; +#endif }; extern struct ilitek_ts_data *ilits; diff --git a/drivers/input/touchscreen/ili9882_mmi/ili9882_touch.c b/drivers/input/touchscreen/ili9882_mmi/ili9882_touch.c index e61c21af77c0..0690f3b76e19 100755 --- a/drivers/input/touchscreen/ili9882_mmi/ili9882_touch.c +++ b/drivers/input/touchscreen/ili9882_mmi/ili9882_touch.c @@ -946,6 +946,9 @@ void ili_touch_release_all_point(void) } static struct ilitek_touch_info touch_info[MAX_TOUCH_NUM]; +#ifdef ILI_TOUCH_LAST_TIME +static bool time_flag = 1; +#endif void ili_report_ap_mode(u8 *buf, int len) { @@ -1021,6 +1024,13 @@ void ili_report_ap_mode(u8 *buf, int len) ILI_DBG("figner number = %d, LastTouch = %d\n", ilits->finger, ilits->last_touch); if (ilits->finger) { +#ifdef ILI_TOUCH_LAST_TIME + if (time_flag) { + ilits->last_event_time = ktime_get_boottime(); + time_flag = 0; + ILI_DBG("set last_event_time\n"); + } +#endif if (MT_B_TYPE) { for (i = 0; i < ilits->finger; i++) { input_report_key(ilits->input, BTN_TOUCH, 1); @@ -1045,6 +1055,10 @@ void ili_report_ap_mode(u8 *buf, int len) ilits->last_touch = ilits->finger; } else { if (ilits->last_touch) { +#ifdef ILI_TOUCH_LAST_TIME + time_flag = 1; + ILI_DBG("last touch, reset time_flag\n"); +#endif if (MT_B_TYPE) { for (i = 0; i < MAX_TOUCH_NUM; i++) { if (ilits->curt_touch[i] == 0 && ilits->prev_touch[i] == 1) diff --git a/drivers/input/touchscreen/ili9882_mmi/ili_mmi_class.c b/drivers/input/touchscreen/ili9882_mmi/ili_mmi_class.c index 1374d6eead2c..5f4cf919216e 100644 --- a/drivers/input/touchscreen/ili9882_mmi/ili_mmi_class.c +++ b/drivers/input/touchscreen/ili9882_mmi/ili_mmi_class.c @@ -131,6 +131,25 @@ static ssize_t ili_palm_settings_store(struct device *dev, return err; } +#ifdef ILI_TOUCH_LAST_TIME +static ssize_t ili_mmi_timestamp_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + ktime_t last_ktime; + struct timespec64 last_ts; + + mutex_lock(&ilits->touch_mutex); + last_ktime = ilits->last_event_time; + ilits->last_event_time = 0; + mutex_unlock(&ilits->touch_mutex); + + last_ts = ktime_to_timespec64(last_ktime); + + return scnprintf(buf, PAGE_SIZE, "%lld.%ld\n", last_ts.tv_sec, last_ts.tv_nsec); +} +static DEVICE_ATTR(timestamp, S_IRUGO, ili_mmi_timestamp_show, NULL); +#endif + static DEVICE_ATTR(palm_settings, S_IRUGO | S_IWUSR | S_IWGRP, ili_palm_settings_show, ili_palm_settings_store); static int ili_mmi_extend_attribute_group(struct device *dev, struct attribute_group **group) @@ -138,6 +157,9 @@ static int ili_mmi_extend_attribute_group(struct device *dev, struct attribute_g int idx = 0; ADD_ATTR(palm_settings); +#ifdef ILI_TOUCH_LAST_TIME + ADD_ATTR(timestamp); +#endif if (idx) { ext_attributes[idx] = NULL;