summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRavi Jain <raviajain@google.com>2022-12-26 19:57:48 +0800
committerWendly Li <wendlyli@google.com>2023-03-07 13:05:46 +0000
commit899bce3ec61d0699d62f3ce265590ae077167452 (patch)
tree9d60e00cf3757db7d988fe3a20845dcec559c70e
parent9a1bdd15f21249e755ef38ce2439e6ca407ca54c (diff)
downloadgoodix_touch-899bce3ec61d0699d62f3ce265590ae077167452.tar.gz
touch: goodix: Update report stylus event
- Fix pen pressure algo - Report entry timestamp to input subsystem - Add systrace node Test: Tested by flashing locally Bug: 262478113 Bug: 263444046 Change-Id: I4fb791708b2893cb74ccdc050cb1732f96414b33 Signed-off-by: Ravi Jain <raviajain@google.com>
-rw-r--r--goodix_ts_core.c26
-rw-r--r--goodix_ts_core.h6
2 files changed, 27 insertions, 5 deletions
diff --git a/goodix_ts_core.c b/goodix_ts_core.c
index c86c0b7..051b22c 100644
--- a/goodix_ts_core.c
+++ b/goodix_ts_core.c
@@ -1554,15 +1554,25 @@ static int goodix_parse_dt(
#endif
static void goodix_ts_report_pen(
- struct input_dev *dev, struct goodix_pen_data *pen_data)
+ struct goodix_ts_core *cd, struct goodix_pen_data *pen_data)
{
+ struct input_dev *dev = cd->pen_dev;
int i;
static unsigned int pen_pressure;
struct goodix_hid_hogp *hogp;
+ char trace_tag[128];
+ ktime_t pen_ktime;
mutex_lock(&dev->mutex);
+ input_set_timestamp(dev, cd->coords_timestamp);
+ pen_ktime = ktime_get();
if (pen_data->coords.status == TS_TOUCH) {
+ scnprintf(trace_tag, sizeof(trace_tag),
+ "stylus-active: IN_TS=%lld TS=%lld DELTA=%lld ns.\n",
+ ktime_to_ns(cd->coords_timestamp), ktime_to_ns(pen_ktime),
+ ktime_to_ns(ktime_sub(pen_ktime, cd->coords_timestamp)));
+ ATRACE_BEGIN(trace_tag);
input_report_key(dev, BTN_TOUCH, 1);
input_report_key(dev, pen_data->coords.tool_type, 1);
input_report_abs(dev, ABS_X, pen_data->coords.x);
@@ -1577,7 +1587,8 @@ static void goodix_ts_report_pen(
goodix_ble_data.hogp_ready = 0;
mutex_unlock(&goodix_ble_data.lock);
- pen_data->coords.p = pen_pressure;
+ if (pen_data->coords.p && pen_pressure)
+ pen_data->coords.p = pen_pressure;
input_report_abs(dev, ABS_PRESSURE, pen_data->coords.p);
if (pen_data->coords.p == 0)
input_report_abs(dev, ABS_DISTANCE, 1);
@@ -1593,6 +1604,11 @@ static void goodix_ts_report_pen(
pen_data->keys[0].status == TS_TOUCH ? 1 : 0,
pen_data->keys[1].status == TS_TOUCH ? 1 : 0);
} else {
+ scnprintf(trace_tag, sizeof(trace_tag),
+ "stylus-inactive: IN_TS=%lld TS=%lld DELTA=%lld ns.\n",
+ ktime_to_ns(cd->coords_timestamp), ktime_to_ns(pen_ktime),
+ ktime_to_ns(ktime_sub(pen_ktime, cd->coords_timestamp)));
+ ATRACE_BEGIN(trace_tag);
pen_pressure = 0;
input_report_key(dev, BTN_TOUCH, 0);
input_report_key(dev, pen_data->coords.tool_type, 0);
@@ -1604,8 +1620,8 @@ static void goodix_ts_report_pen(
else
input_report_key(dev, pen_data->keys[i].code, 0);
}
-
input_sync(dev);
+ ATRACE_END();
mutex_unlock(&dev->mutex);
}
@@ -1919,8 +1935,8 @@ static irqreturn_t goodix_ts_threadirq_func(int irq, void *data)
}
if (core_data->board_data.pen_enable &&
ts_event->event_type & EVENT_PEN) {
- goodix_ts_report_pen(
- core_data->pen_dev, &ts_event->pen_data);
+ core_data->coords_timestamp = core_data->isr_timestamp;
+ goodix_ts_report_pen(core_data, &ts_event->pen_data);
}
if (ts_event->event_type & EVENT_REQUEST)
goodix_ts_request_handle(core_data, ts_event);
diff --git a/goodix_ts_core.h b/goodix_ts_core.h
index 44f136c..19f6930 100644
--- a/goodix_ts_core.h
+++ b/goodix_ts_core.h
@@ -47,6 +47,12 @@
#if IS_ENABLED(CONFIG_GOOG_TOUCH_INTERFACE)
#include <goog_touch_interface.h>
#endif
+#if IS_ENABLED(CONFIG_VH_SYSTRACE)
+#include <trace/hooks/systrace.h>
+#else
+#define ATRACE_BEGIN(f)
+#define ATRACE_END()
+#endif
#define GOODIX_CORE_DRIVER_NAME "goodix_ts"
#define GOODIX_PEN_DRIVER_NAME "goodix_ts,pen"