summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavidycchen <davidycchen@google.com>2022-02-21 14:54:01 +0800
committerYen-Chao Chen <davidycchen@google.com>2022-02-21 07:01:06 +0000
commita2a6d77276ead3abb9200d417906641cf2dbb0af (patch)
tree8d43ddcdf19784ae9c86bb8bbf5f0c857b8bcf0f
parentad52eb1eff09a5123daa1a20ad69885ee1f97221 (diff)
downloadsynaptics_touch-a2a6d77276ead3abb9200d417906641cf2dbb0af.tar.gz
synaptics: add cpu_latency_qos request during irq
Bug: 199104314 Signed-off-by: davidycchen <davidycchen@google.com> Change-Id: I05cccd8202e81b6ff71f11f763046a39c1514ea0
-rw-r--r--syna_tcm2.c8
-rw-r--r--syna_tcm2.h4
2 files changed, 12 insertions, 0 deletions
diff --git a/syna_tcm2.c b/syna_tcm2.c
index dc76ddd..9a8159d 100644
--- a/syna_tcm2.c
+++ b/syna_tcm2.c
@@ -1136,6 +1136,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;
+ cpu_latency_qos_update_request(&tcm->pm_qos_req, 100 /* usec */);
+
/* It is possible that interrupts were disabled while the handler is
* executing, before acquiring the mutex. If so, simply return.
*/
@@ -1271,6 +1273,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);
return IRQ_HANDLED;
}
@@ -2423,6 +2426,8 @@ static int syna_dev_probe(struct platform_device *pdev)
init_completion(&tcm->bus_resumed);
complete_all(&tcm->bus_resumed);
+ cpu_latency_qos_add_request(&tcm->pm_qos_req, PM_QOS_DEFAULT_VALUE);
+
#if IS_ENABLED(CONFIG_TOUCHSCREEN_TBN)
if (register_tbn(&tcm->tbn_register_mask)) {
retval = -ENODEV;
@@ -2584,6 +2589,8 @@ err_connect:
if (tcm->tbn_register_mask)
unregister_tbn(&tcm->tbn_register_mask);
#endif
+ cpu_latency_qos_remove_request(&tcm->pm_qos_req);
+
if (tcm->event_wq)
destroy_workqueue(tcm->event_wq);
err_alloc_workqueue:
@@ -2624,6 +2631,7 @@ static int syna_dev_remove(struct platform_device *pdev)
if (tcm->tbn_register_mask)
unregister_tbn(&tcm->tbn_register_mask);
#endif
+ cpu_latency_qos_remove_request(&tcm->pm_qos_req);
if (tcm->raw_data_buffer)
kfree(tcm->raw_data_buffer);
diff --git a/syna_tcm2.h b/syna_tcm2.h
index 703c65c..0edfb8b 100644
--- a/syna_tcm2.h
+++ b/syna_tcm2.h
@@ -57,6 +57,8 @@
#include <heatmap.h>
#endif
+#include <linux/pm_qos.h>
+
#define PLATFORM_DRIVER_NAME "synaptics_tcm"
#define TOUCH_INPUT_NAME "synaptics_tcm_touch"
@@ -464,6 +466,8 @@ struct syna_tcm {
u32 tbn_register_mask;
#endif
+ struct pm_qos_request pm_qos_req;
+
/* fifo to pass the data to userspace */
unsigned int fifo_remaining_frame;
struct list_head frame_fifo_queue;