summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--goog_touch_interface.c14
-rw-r--r--goog_touch_interface.h3
2 files changed, 14 insertions, 3 deletions
diff --git a/goog_touch_interface.c b/goog_touch_interface.c
index db5666b..266e9c9 100644
--- a/goog_touch_interface.c
+++ b/goog_touch_interface.c
@@ -2686,6 +2686,8 @@ static int goog_pm_probe(struct goog_touch_interface *gti)
init_completion(&pm->bus_resumed);
complete_all(&pm->bus_resumed);
+ /* init pm_qos. */
+ cpu_latency_qos_add_request(&gti->pm_qos_req, PM_QOS_DEFAULT_VALUE);
pm->enabled = true;
return ret;
@@ -2697,9 +2699,13 @@ err_alloc_workqueue:
static int goog_pm_remove(struct goog_touch_interface *gti)
{
struct gti_pm* pm = &gti->pm;
- pm->enabled = false;
- if (pm->event_wq)
- destroy_workqueue(pm->event_wq);
+
+ if (pm->enabled) {
+ pm->enabled = false;
+ cpu_latency_qos_remove_request(&gti->pm_qos_req);
+ if (pm->event_wq)
+ destroy_workqueue(pm->event_wq);
+ }
return 0;
}
@@ -2723,12 +2729,14 @@ static irqreturn_t gti_irq_thread_fn(int irq, void *data)
struct goog_touch_interface *gti = (struct goog_touch_interface *)data;
ATRACE_BEGIN(__func__);
+ cpu_latency_qos_update_request(&gti->pm_qos_req, 100 /* usec */);
if (gti->vendor_irq_thread_fn)
ret = gti->vendor_irq_thread_fn(irq, gti->vendor_irq_cookie);
else
ret = IRQ_HANDLED;
goog_input_process(gti);
gti_debug_hc_update(gti, false);
+ cpu_latency_qos_update_request(&gti->pm_qos_req, PM_QOS_DEFAULT_VALUE);
ATRACE_END();
return ret;
diff --git a/goog_touch_interface.h b/goog_touch_interface.h
index 0bb1e36..379284c 100644
--- a/goog_touch_interface.h
+++ b/goog_touch_interface.h
@@ -12,6 +12,7 @@
#include <drm/drm_bridge.h>
#include <drm/drm_connector.h>
#include <linux/kfifo.h>
+#include <linux/pm_qos.h>
#include "heatmap.h"
#include "touch_offload.h"
@@ -465,6 +466,7 @@ struct gti_pm {
* @screen_protector_mode_setting: the setting of screen protector mode.
* @tbn_register_mask: the tbn_mask that used to request/release touch bus.
* @pm: struct that used by gti pm.
+ * @pm_qos_req: struct that used by pm qos.
* @panel_is_lp_mode: display is in low power mode.
* @force_legacy_report: force to directly report input by kernel input API.
* @offload_enable: touch offload is enabled or not.
@@ -518,6 +520,7 @@ struct goog_touch_interface {
enum gti_screen_protector_mode screen_protector_mode_setting;
u32 tbn_register_mask;
struct gti_pm pm;
+ struct pm_qos_request pm_qos_req;
bool panel_is_lp_mode;
bool force_legacy_report;