summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavidycchen <davidycchen@google.com>2022-05-09 15:10:54 +0800
committerdavidycchen <davidycchen@google.com>2022-05-09 15:15:18 +0800
commit921d8675e43f11ab8ec2b41b22824ba18439bf88 (patch)
tree1edf1bbad03e168c49cdd9af0254655e5c19d976
parentdd8ac97f73c32cf96e2690a8b9efb911cccdee98 (diff)
downloadsynaptics_touch-921d8675e43f11ab8ec2b41b22824ba18439bf88.tar.gz
synaptics: add trace point for touch driver
Add more trace point in the interrupt process so we can have more detail information when we get the systrace. Bug: 231409427 Test: trigger systrace and check the perfetto result. Signed-off-by: davidycchen <davidycchen@google.com> Change-Id: I439efb3668abf74fee763a9573122e0e91e853c3
-rw-r--r--syna_tcm2.c22
-rw-r--r--syna_tcm2.h1
2 files changed, 23 insertions, 0 deletions
diff --git a/syna_tcm2.c b/syna_tcm2.c
index 08be4a2..7f52ec5 100644
--- a/syna_tcm2.c
+++ b/syna_tcm2.c
@@ -1025,6 +1025,8 @@ static void syna_offload_report(void *handle,
int touch_count = 0;
int tool_type;
+ ATRACE_BEGIN("syna_offload_report");
+
syna_pal_mutex_lock(&tcm->tp_event_mutex);
input_set_timestamp(tcm->input_dev, report->timestamp);
@@ -1079,6 +1081,8 @@ static void syna_offload_report(void *handle,
syna_update_motion_filter(tcm, touch_count);
syna_pal_mutex_unlock(&tcm->tp_event_mutex);
+
+ ATRACE_END();
}
static int syna_dev_ptflib_decoder(struct syna_tcm *tcm, const u16 *in_array,
@@ -1230,16 +1234,25 @@ static void syna_populate_frame(struct syna_tcm *tcm, bool has_heatmap)
frame->header.index = index++;
frame->header.timestamp = tcm->coords_timestamp;
+ ATRACE_BEGIN(__func__);
+
/* Populate all channels */
for (i = 0; i < frame->num_channels; i++) {
if (frame->channel_type[i] == TOUCH_DATA_TYPE_COORD) {
+ ATRACE_BEGIN("populate coord");
syna_populate_coordinate_channel(tcm, frame, i);
+ ATRACE_END();
} else if ((frame->channel_type[i] & TOUCH_SCAN_TYPE_MUTUAL) != 0) {
+ ATRACE_BEGIN("populate mutual data");
syna_populate_mutual_channel(tcm, frame, i, has_heatmap);
+ ATRACE_END();
} else if ((frame->channel_type[i] & TOUCH_SCAN_TYPE_SELF) != 0) {
+ ATRACE_BEGIN("populate self data");
syna_populate_self_channel(tcm, frame, i, has_heatmap);
+ ATRACE_END();
}
}
+ ATRACE_END();
}
#endif /* CONFIG_TOUCHSCREEN_OFFLOAD */
@@ -1318,6 +1331,8 @@ static irqreturn_t syna_dev_interrupt_thread(int irq, void *data)
struct syna_hw_attn_data *attn = &tcm->hw_if->bdata_attn;
struct tcm_dev *tcm_dev = tcm->tcm_dev;
+ ATRACE_BEGIN(__func__);
+
cpu_latency_qos_update_request(&tcm->pm_qos_req, 100 /* usec */);
/* It is possible that interrupts were disabled while the handler is
@@ -1337,6 +1352,7 @@ static irqreturn_t syna_dev_interrupt_thread(int irq, void *data)
goto exit;
}
#endif
+ ATRACE_BEGIN("get_event_data");
/* retrieve the original report date generated by firmware */
retval = syna_tcm_get_event_data(tcm->tcm_dev,
&code,
@@ -1345,6 +1361,7 @@ static irqreturn_t syna_dev_interrupt_thread(int irq, void *data)
LOGE("Fail to get event data\n");
goto exit;
}
+ ATRACE_END();
#ifdef ENABLE_EXTERNAL_FRAME_PROCESS
if (tcm->report_to_queue[code] == EFP_ENABLE) {
@@ -1392,7 +1409,9 @@ static irqreturn_t syna_dev_interrupt_thread(int irq, void *data)
#endif
/* forward the touch event to system */
+ ATRACE_BEGIN("report_input_events");
syna_dev_report_input_events(tcm);
+ ATRACE_END();
} else if (code == tcm->raw_data_report_code) {
if (!tcm->raw_data_buffer) {
tcm->raw_data_buffer = kmalloc(
@@ -1438,7 +1457,9 @@ static irqreturn_t syna_dev_interrupt_thread(int irq, void *data)
}
#endif
#if IS_ENABLED(CONFIG_TOUCHSCREEN_HEATMAP)
+ ATRACE_BEGIN("heatmap_read");
heatmap_read(&tcm->v4l2, ktime_to_ns(tcm->coords_timestamp));
+ ATRACE_END();
#endif
break;
case REPORT_FW_STATUS:
@@ -1457,6 +1478,7 @@ static irqreturn_t syna_dev_interrupt_thread(int irq, void *data)
exit:
syna_set_bus_ref(tcm, SYNA_BUS_REF_IRQ, false);
cpu_latency_qos_update_request(&tcm->pm_qos_req, PM_QOS_DEFAULT_VALUE);
+ ATRACE_END();
return IRQ_HANDLED;
}
diff --git a/syna_tcm2.h b/syna_tcm2.h
index 89668fc..908ddaa 100644
--- a/syna_tcm2.h
+++ b/syna_tcm2.h
@@ -58,6 +58,7 @@
#endif
#include <linux/pm_qos.h>
+#include "../../../gs-google/drivers/soc/google/vh/kernel/systrace.h"
#define PLATFORM_DRIVER_NAME "synaptics_tcm"