summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuper Liu <supercjliu@google.com>2021-11-05 15:33:22 +0800
committerSuper Liu <supercjliu@google.com>2021-11-23 09:57:52 +0800
commit78369c7d069d3ccd9f9bf5eaa521a96efdc8fb3c (patch)
tree59d73635b99519a9ed05cf0a71b147475897f0eb
parent5ac96fa45d594f68637a324e6d30a48b6e13d780 (diff)
downloadsec_touch-78369c7d069d3ccd9f9bf5eaa521a96efdc8fb3c.tar.gz
touch/sec: enable FW grip for wake-up gesture.
Enable grip supprestion on low power case during kernel suspend. Doc: go/touch_r3_grip Bug: 204525560 Signed-off-by: Super Liu <supercjliu@google.com> Change-Id: Iec3e85403ae1d4d430a55de47c42300aa2b23af6
-rw-r--r--sec_ts.c85
1 files changed, 54 insertions, 31 deletions
diff --git a/sec_ts.c b/sec_ts.c
index 8af51d7..f1aaed8 100644
--- a/sec_ts.c
+++ b/sec_ts.c
@@ -2647,42 +2647,63 @@ static void sec_ts_populate_frame(struct sec_ts_data *ts,
}
}
-int sec_ts_enable_grip(struct sec_ts_data *ts, bool enable)
+void sec_ts_enable_ptflib(struct sec_ts_data *ts, bool enable)
{
struct sec_ts_plat_data *pdata = ts->plat_data;
- u8 value = enable ? 1 : 0;
+
+ input_info(true, &ts->client->dev,
+ "%s: enable %d.\n", __func__, enable);
+
+ if (enable) {
+ sec_ts_ptflib_reinit(ts);
+ if (pdata->grip_prescreen_mode == GRIP_PRESCREEN_MODE_2) {
+ sec_ts_ptflib_grip_prescreen_timeout(ts,
+ pdata->grip_prescreen_timeout);
+ }
+ sec_ts_ptflib_grip_prescreen_enable(ts,
+ pdata->grip_prescreen_mode);
+ } else {
+ sec_ts_ptflib_grip_prescreen_enable(ts, GRIP_PRESCREEN_OFF);
+ }
+}
+
+int sec_ts_enable_fw_grip(struct sec_ts_data *ts, bool enable)
+{
+ struct sec_ts_plat_data *pdata = ts->plat_data;
+ u8 value;
int ret;
int final_result = 0;
+ input_info(true, &ts->client->dev,
+ "%s: enable %d.\n", __func__, enable);
+
/* Set grip */
+ value = enable ? 0x1F : 0;
ret = ts->sec_ts_write(ts, SEC_TS_CMD_SET_GRIP_DETEC, &value, 1);
if (ret < 0) {
input_err(true, &ts->client->dev,
"%s: SEC_TS_CMD_SET_GRIP_DETEC failed with ret=%d\n",
__func__, ret);
final_result = ret;
- }
-
- /* Set deadzone */
- value = enable ? 1 : 0;
- ret = ts->sec_ts_write(ts, SEC_TS_CMD_EDGE_DEADZONE, &value, 1);
- if (ret < 0) {
- input_err(true, &ts->client->dev,
- "%s: SEC_TS_CMD_EDGE_DEADZONE failed with ret=%d\n",
- __func__, ret);
- final_result = ret;
- }
-
- if (!enable) {
- sec_ts_ptflib_reinit(ts);
- if (pdata->grip_prescreen_mode == GRIP_PRESCREEN_MODE_2) {
- sec_ts_ptflib_grip_prescreen_timeout(ts,
- pdata->grip_prescreen_timeout);
- }
- sec_ts_ptflib_grip_prescreen_enable(ts,
- pdata->grip_prescreen_mode);
} else {
- sec_ts_ptflib_grip_prescreen_enable(ts, GRIP_PRESCREEN_OFF);
+ /* Configure grip */
+ if (enable) {
+ u8 mm = 10;
+ u8 px_lo = (mm * pdata->mm2px) & 0xFF;
+ u8 px_hi = ((mm * pdata->mm2px) >> 8) & 0xFF;
+ u8 long_press_zone[10] = {0x02, 0x00, /* long press reject zone type */
+ px_hi, px_lo, /* left edge */
+ 0x00, 0x00, /* top edge */
+ px_hi, px_lo, /* right edge */
+ 0x00, 0x00}; /* bottom edge */
+ ret = ts->sec_ts_write(ts, SEC_TS_CMD_LONGPRESS_DROP_AREA,
+ long_press_zone, sizeof(long_press_zone));
+ if (ret < 0) {
+ input_err(true, &ts->client->dev,
+ "%s: SEC_TS_CMD_LONGPRESS_DROP_AREA failed with ret=%d\n",
+ __func__, ret);
+ }
+ }
}
return final_result;
@@ -2693,11 +2714,11 @@ static void sec_ts_offload_set_running(struct sec_ts_data *ts, bool running)
if (ts->offload.offload_running != running) {
ts->offload.offload_running = running;
if (running) {
- pr_info("%s: disabling FW grip.\n", __func__);
- sec_ts_enable_grip(ts, false);
+ sec_ts_enable_fw_grip(ts, false);
+ sec_ts_enable_ptflib(ts, true);
} else {
- pr_info("%s: enabling FW grip.\n", __func__);
- sec_ts_enable_grip(ts, true);
+ sec_ts_enable_fw_grip(ts, true);
+ sec_ts_enable_ptflib(ts, false);
}
}
}
@@ -5473,6 +5494,8 @@ static void sec_ts_suspend_work(struct work_struct *work)
return;
}
+ sec_ts_enable_fw_grip(ts, true);
+
/* Stop T-IC */
sec_ts_fix_tmode(ts, TOUCH_SYSTEM_MODE_SLEEP, TOUCH_MODE_STATE_STOP);
ret = sec_ts_write(ts, SEC_TS_CMD_CLEAR_EVENT_STACK, NULL, 0);
@@ -5604,8 +5627,6 @@ static void sec_ts_resume_work(struct work_struct *work)
sec_ts_set_custom_library(ts);
#endif
- sec_ts_set_grip_type(ts, ONLY_EDGE_HANDLER);
-
ts->plat_data->is_heatmap_enabled = false;
ts->plat_data->encoded_frame_counter = 0;
ts->plat_data->encoded_skip_counter = 0;
@@ -5668,8 +5689,10 @@ static void sec_ts_resume_work(struct work_struct *work)
input_info(true, &ts->client->dev,
"applying touch_offload settings.\n");
- if (!ts->offload.config.filter_grip)
- sec_ts_enable_grip(ts, false);
+ if (!ts->offload.config.filter_grip) {
+ sec_ts_enable_fw_grip(ts, false);
+ sec_ts_enable_ptflib(ts, true);
+ }
}
#endif