summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com>2022-10-23 18:34:06 -0700
committerSecurityBot <android-nexus-securitybot@system.gserviceaccount.com>2022-10-23 18:34:07 -0700
commit7a86265ed8bcf40e13367c3a56e5db8d95e42d4c (patch)
tree0742048b799e3bd5ac6b8a98f043caa521372024
parent5eae3a6bf991b589a5051c610b06827d83d11efe (diff)
parent9f6a34bcedb0993e5652a678c5c01781bd66a15c (diff)
downloadnovatek_touch-7a86265ed8bcf40e13367c3a56e5db8d95e42d4c.tar.gz
Merge android13-gs-pixel-5.10-tm-qpr2 into android13-gs-pixel-5.10-udc
SBMerger: 478053055 Change-Id: Ia55b39a2938a86ac4bfde7c0120f5b58ac1e3d07 Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
-rw-r--r--nt36xxx/nt36xxx.c194
-rw-r--r--nt36xxx/nt36xxx.h28
-rw-r--r--nt36xxx/nt36xxx_ext_api.c61
-rw-r--r--nt36xxx/nt36xxx_goog.c52
4 files changed, 194 insertions, 141 deletions
diff --git a/nt36xxx/nt36xxx.c b/nt36xxx/nt36xxx.c
index 09b806c..2c9a706 100644
--- a/nt36xxx/nt36xxx.c
+++ b/nt36xxx/nt36xxx.c
@@ -111,24 +111,43 @@ const uint16_t touch_key_array[TOUCH_KEY_NUM] = {
};
#endif
-const uint16_t gesture_key_array[] = {
- KEY_POWER, //GESTURE_WORD_C
- KEY_POWER, //GESTURE_WORD_W
- KEY_POWER, //GESTURE_WORD_V
#if defined(CONFIG_SOC_GOOGLE)
- KEY_WAKEUP, //GESTURE_DOUBLE_CLICK
+const unsigned int gesture_keycode[GESTURE_ID_MAX] = {
+ [GESTURE_SINGLE_TAP] = KEY_WAKEUP,
+ [GESTURE_DOUBLE_TAP] = KEY_WAKEUP,
+};
#else
- KEY_POWER, //GESTURE_DOUBLE_CLICK
-#endif
- KEY_POWER, //GESTURE_WORD_Z
- KEY_POWER, //GESTURE_WORD_M
- KEY_POWER, //GESTURE_WORD_O
- KEY_POWER, //GESTURE_WORD_e
- KEY_POWER, //GESTURE_WORD_S
- KEY_POWER, //GESTURE_SLIDE_UP
- KEY_POWER, //GESTURE_SLIDE_DOWN
- KEY_POWER, //GESTURE_SLIDE_LEFT
- KEY_POWER, //GESTURE_SLIDE_RIGHT
+const unsigned int gesture_keycode[GESTURE_ID_MAX] = {
+ [GESTURE_WORD_C] = KEY_POWER,
+ [GESTURE_WORD_W] = KEY_POWER,
+ [GESTURE_SINGLE_TAP] = KEY_POWER,
+ [GESTURE_DOUBLE_TAP] = KEY_POWER,
+ [GESTURE_WORD_Z] = KEY_POWER,
+ [GESTURE_WORD_M] = KEY_POWER,
+ [GESTURE_WORD_O] = KEY_POWER,
+ [GESTURE_WORD_e] = KEY_POWER,
+ [GESTURE_WORD_S] = KEY_POWER,
+ [GESTURE_SLIDE_UP] = KEY_POWER,
+ [GESTURE_SLIDE_DOWN] = KEY_POWER,
+ [GESTURE_SLIDE_LEFT] = KEY_POWER,
+ [GESTURE_SLIDE_RIGHT] = KEY_POWER,
+};
+#endif
+
+const char *gesture_string[GESTURE_ID_MAX] = {
+ [GESTURE_WORD_C] = "Word-C",
+ [GESTURE_WORD_W] = "Word-W",
+ [GESTURE_SINGLE_TAP] = "Single Tap",
+ [GESTURE_DOUBLE_TAP] = "Double Tap",
+ [GESTURE_WORD_Z] = "Word-Z",
+ [GESTURE_WORD_M] = "Word-M",
+ [GESTURE_WORD_O] = "Word-O",
+ [GESTURE_WORD_e] = "Word-e",
+ [GESTURE_WORD_S] = "Word-S",
+ [GESTURE_SLIDE_UP] = "Slide UP",
+ [GESTURE_SLIDE_DOWN] = "Slide DOWN",
+ [GESTURE_SLIDE_LEFT] = "Slide LEFT",
+ [GESTURE_SLIDE_RIGHT] = "Slide UP",
};
#ifdef CONFIG_MTK_SPI
@@ -845,6 +864,11 @@ info_retry:
ts->heatmap_host_cmd = HEATMAP_HOST_CMD_DISABLE;
nvt_set_heatmap_host_cmd(ts);
+#if NVT_TOUCH_EXT_API
+ /* Get DTTW initialized conf. */
+ nvt_get_dttw_conf();
+#endif
+
ret = 0;
out:
@@ -1064,19 +1088,6 @@ static void nvt_flash_proc_deinit(void)
}
#endif
-#define GESTURE_WORD_C 12
-#define GESTURE_WORD_W 13
-#define GESTURE_WORD_V 14
-#define GESTURE_DOUBLE_CLICK 15
-#define GESTURE_WORD_Z 16
-#define GESTURE_WORD_M 17
-#define GESTURE_WORD_O 18
-#define GESTURE_WORD_e 19
-#define GESTURE_WORD_S 20
-#define GESTURE_SLIDE_UP 21
-#define GESTURE_SLIDE_DOWN 22
-#define GESTURE_SLIDE_LEFT 23
-#define GESTURE_SLIDE_RIGHT 24
/* customized gesture id */
#define DATA_PROTOCOL 30
@@ -1092,83 +1103,29 @@ return:
*******************************************************/
void nvt_ts_wakeup_gesture_report(uint8_t gesture_id, uint8_t *data)
{
- uint32_t keycode = 0;
+ unsigned int keycode = 0;
uint8_t func_type = data[2];
uint8_t func_id = data[3];
- /* support fw specifal data protocol */
+ /* support fw special data protocol */
if ((gesture_id == DATA_PROTOCOL) && (func_type == FUNCPAGE_GESTURE)) {
gesture_id = func_id;
- } else if (gesture_id > DATA_PROTOCOL) {
- NVT_ERR("gesture_id %d is invalid, func_type=%d, func_id=%d\n", gesture_id,
+ } else if (gesture_id > DATA_PROTOCOL || gesture_id >= GESTURE_ID_MAX) {
+ NVT_ERR("gesture_id %d is invalid, func_type %d, func_id %d\n", gesture_id,
func_type, func_id);
return;
}
- NVT_LOG("gesture_id = %d\n", gesture_id);
-
- switch (gesture_id) {
- case GESTURE_WORD_C:
- NVT_LOG("Gesture : Word-C.\n");
- keycode = gesture_key_array[0];
- break;
- case GESTURE_WORD_W:
- NVT_LOG("Gesture : Word-W.\n");
- keycode = gesture_key_array[1];
- break;
- case GESTURE_WORD_V:
- NVT_LOG("Gesture : Word-V.\n");
- keycode = gesture_key_array[2];
- break;
- case GESTURE_DOUBLE_CLICK:
- NVT_LOG("Gesture : Double Click.\n");
- keycode = gesture_key_array[3];
- break;
- case GESTURE_WORD_Z:
- NVT_LOG("Gesture : Word-Z.\n");
- keycode = gesture_key_array[4];
- break;
- case GESTURE_WORD_M:
- NVT_LOG("Gesture : Word-M.\n");
- keycode = gesture_key_array[5];
- break;
- case GESTURE_WORD_O:
- NVT_LOG("Gesture : Word-O.\n");
- keycode = gesture_key_array[6];
- break;
- case GESTURE_WORD_e:
- NVT_LOG("Gesture : Word-e.\n");
- keycode = gesture_key_array[7];
- break;
- case GESTURE_WORD_S:
- NVT_LOG("Gesture : Word-S.\n");
- keycode = gesture_key_array[8];
- break;
- case GESTURE_SLIDE_UP:
- NVT_LOG("Gesture : Slide UP.\n");
- keycode = gesture_key_array[9];
- break;
- case GESTURE_SLIDE_DOWN:
- NVT_LOG("Gesture : Slide DOWN.\n");
- keycode = gesture_key_array[10];
- break;
- case GESTURE_SLIDE_LEFT:
- NVT_LOG("Gesture : Slide LEFT.\n");
- keycode = gesture_key_array[11];
- break;
- case GESTURE_SLIDE_RIGHT:
- NVT_LOG("Gesture : Slide RIGHT.\n");
- keycode = gesture_key_array[12];
- break;
- default:
- break;
- }
-
- if (keycode > 0) {
+ keycode = gesture_keycode[gesture_id];
+ if (keycode) {
+ NVT_LOG("Gesture: %s(%d) triggered and report keycode(%d).\n",
+ gesture_string[gesture_id], gesture_id, keycode);
input_report_key(ts->input_dev, keycode, 1);
input_sync(ts->input_dev);
input_report_key(ts->input_dev, keycode, 0);
input_sync(ts->input_dev);
+ } else {
+ NVT_ERR("invalid gesture_id %d!\n", gesture_id);
}
}
@@ -1918,6 +1875,17 @@ static irqreturn_t nvt_ts_work_func(int irq, void *data)
// pen_tilt_x, pen_tilt_y, pen_distance, pen_btn1, pen_btn2, pen_battery);
input_set_timestamp(ts->pen_input_dev, ts->timestamp);
+
+ /* Snapshot some stylus context information for
+ * offload
+ */
+ ts->pen_active = 1;
+ ts->pen_offload_coord.status = COORD_STATUS_PEN;
+ ts->pen_offload_coord.x = pen_x;
+ ts->pen_offload_coord.y = pen_y;
+ ts->pen_offload_coord.pressure = pen_pressure;
+ ts->pen_offload_coord_timestamp = ts->timestamp;
+
input_report_abs(ts->pen_input_dev, ABS_X, pen_x);
input_report_abs(ts->pen_input_dev, ABS_Y, pen_y);
input_report_abs(ts->pen_input_dev, ABS_PRESSURE, pen_pressure);
@@ -1938,6 +1906,13 @@ static irqreturn_t nvt_ts_work_func(int irq, void *data)
}
} else { // pen_format_id = 0xFF, i.e. no pen present
input_set_timestamp(ts->pen_input_dev, ts->timestamp);
+
+ /* Snapshot some stylus context information for offload */
+ ts->pen_active = 0;
+ ts->pen_offload_coord_timestamp = ts->timestamp;
+ memset(&ts->pen_offload_coord, 0,
+ sizeof(ts->pen_offload_coord));
+
input_report_abs(ts->pen_input_dev, ABS_X, 0);
input_report_abs(ts->pen_input_dev, ABS_Y, 0);
input_report_abs(ts->pen_input_dev, ABS_PRESSURE, 0);
@@ -2355,12 +2330,11 @@ static int32_t nvt_ts_probe(struct spi_device *client)
#if WAKEUP_GESTURE
for (retry = 0;
- retry < (sizeof(gesture_key_array) / sizeof(gesture_key_array[0]));
+ retry < ARRAY_SIZE(gesture_keycode);
retry++) {
- input_set_capability(ts->input_dev, EV_KEY, gesture_key_array[retry]);
+ if (gesture_keycode[retry])
+ input_set_capability(ts->input_dev, EV_KEY, gesture_keycode[retry]);
}
-#elif defined(CONFIG_SOC_GOOGLE)
- input_set_capability(ts->input_dev, EV_KEY, KEY_WAKEUP);
#endif
snprintf(ts->phys, sizeof(ts->phys), "input/ts");
@@ -2450,7 +2424,7 @@ static int32_t nvt_ts_probe(struct spi_device *client)
ts->gti = goog_touch_interface_probe(ts, &ts->client->dev,
ts->input_dev, nvt_callback, NULL);
if (ts->gti == NULL) {
- NVT_ERR("offload probe failed. ret=%d!\n", ret);
+ NVT_ERR("goog_touch_interface probe failed. ret=%d!\n", ret);
goto err_goog_touch_interface;
}
#ifdef GOOG_TOUCH_INTERFACE
@@ -2979,27 +2953,8 @@ int nvt_ts_suspend(struct device *dev)
input_sync(ts->pen_input_dev);
}
-#if WAKEUP_GESTURE
- if (ts->wkg_flag) {
- switch (nvt_set_dttw(ts->wkg_flag)) {
- case 1:
- NVT_LOG("DTTW conf: area max/min %d %d, contact max/min %d %d.\n",
- ts->dttw_touch_area_max, ts->dttw_touch_area_min,
- ts->dttw_contact_duration_max, ts->dttw_contact_duration_min);
- NVT_LOG("DTTW conf: tap offset %d, gap max/min %d %d.\n",
- ts->dttw_tap_offset,
- ts->dttw_tap_gap_duration_max, ts->dttw_tap_gap_duration_min);
- NVT_LOG("DTTW conf: motion %d, edge %d.\n",
- ts->dttw_motion_tolerance, ts->dttw_detection_window_edge);
- break;
- case 0:
- NVT_LOG("DTTW conf: off.\n");
- break;
- default:
- NVT_ERR("DTTW conf: failed to setup.\n");
- break;
- }
- }
+#if (WAKEUP_GESTURE) && (NVT_TOUCH_EXT_API)
+ nvt_set_dttw(ts->wkg_flag, false);
#endif
if (ts->wkg_flag) {
@@ -3019,7 +2974,6 @@ int nvt_ts_suspend(struct device *dev)
mutex_unlock(&ts->lock);
-
#if defined(CONFIG_SOC_GOOGLE)
if (!ts->wkg_flag)
nvt_pinctrl_configure(ts, false);
diff --git a/nt36xxx/nt36xxx.h b/nt36xxx/nt36xxx.h
index e6531a0..b70d650 100644
--- a/nt36xxx/nt36xxx.h
+++ b/nt36xxx/nt36xxx.h
@@ -117,7 +117,6 @@ extern const uint16_t touch_key_array[TOUCH_KEY_NUM];
#define REPORT_PROTOCOL_B 0
#define NVT_TOUCH_MP 1
#define WAKEUP_GESTURE 1
-extern const uint16_t gesture_key_array[];
#define BOOT_UPDATE_FIRMWARE 1
#define BOOT_UPDATE_FIRMWARE_MS_DELAY 100
#define BOOT_UPDATE_FIRMWARE_NAME "novatek_ts_fw.bin"
@@ -179,6 +178,23 @@ enum {
/* FW History */
#define NVT_HISTORY_BUF_LEN (65 * 4)
+enum gesture_id : u8 {
+ GESTURE_WORD_C = 12,
+ GESTURE_WORD_W = 13,
+ GESTURE_SINGLE_TAP = 14,
+ GESTURE_DOUBLE_TAP = 15,
+ GESTURE_WORD_Z = 16,
+ GESTURE_WORD_M = 17,
+ GESTURE_WORD_O = 18,
+ GESTURE_WORD_e = 19,
+ GESTURE_WORD_S = 20,
+ GESTURE_SLIDE_UP = 21,
+ GESTURE_SLIDE_DOWN = 22,
+ GESTURE_SLIDE_LEFT = 23,
+ GESTURE_SLIDE_RIGHT = 24,
+ GESTURE_ID_MAX,
+};
+
struct nvt_ts_data {
struct spi_device *client;
struct input_dev *input_dev;
@@ -300,6 +316,13 @@ struct nvt_ts_data {
uint32_t extra_spi_buf_size;
uint8_t *extra_spi_buf;
uint32_t touch_heatmap_comp_len;
+
+ /*
+ * Stylus context used by touch_offload
+ */
+ struct TouchOffloadCoord pen_offload_coord;
+ ktime_t pen_offload_coord_timestamp;
+ u8 pen_active;
};
#if NVT_TOUCH_PROC
@@ -368,7 +391,8 @@ extern void nvt_read_fw_history(uint32_t addr);
#if NVT_TOUCH_EXT_API
extern int32_t nvt_extra_api_init(void);
extern void nvt_extra_api_deinit(void);
-extern ssize_t nvt_set_dttw(uint8_t wkg_flag);
+extern void nvt_get_dttw_conf(void);
+extern ssize_t nvt_set_dttw(uint8_t wkg_flag, bool check_result);
#endif
#if NVT_TOUCH_EXT_USI
extern int32_t nvt_extra_usi_init(void);
diff --git a/nt36xxx/nt36xxx_ext_api.c b/nt36xxx/nt36xxx_ext_api.c
index e468182..0553d73 100644
--- a/nt36xxx/nt36xxx_ext_api.c
+++ b/nt36xxx/nt36xxx_ext_api.c
@@ -1363,24 +1363,14 @@ static uint16_t nvt_get_dttw_para(uint64_t dttw_addr)
return ((uint16_t)(spi_buf[2] << 8) + spi_buf[1]);
}
-ssize_t nvt_set_dttw(uint8_t wkg_flag)
+ssize_t nvt_set_dttw(uint8_t wkg_flag, bool check_result)
{
uint8_t spi_buf[3] = {0};
uint16_t cmd_test_bit = DTTW_MODE_CMD_TEST_BIT;
- int32_t ret;
+ int32_t ret = 0;
NVT_LOG("++\n");
- ts->dttw_touch_area_max = nvt_get_dttw_para(DTTW_TOUCH_AREA_MAX_ADDR);
- ts->dttw_touch_area_min = nvt_get_dttw_para(DTTW_TOUCH_AREA_MIN_ADDR);
- ts->dttw_contact_duration_max = nvt_get_dttw_para(DTTW_CONTACT_DURATION_MAX_ADDR);
- ts->dttw_contact_duration_min = nvt_get_dttw_para(DTTW_CONTACT_DURATION_MIN_ADDR);
- ts->dttw_tap_offset = nvt_get_dttw_para(DTTW_TAP_OFFSET_ADDR);
- ts->dttw_tap_gap_duration_max = nvt_get_dttw_para(DTTW_TAP_GAP_DURATION_MAX_ADDR);
- ts->dttw_tap_gap_duration_min = nvt_get_dttw_para(DTTW_TAP_GAP_DURATION_MIN_ADDR);
- ts->dttw_motion_tolerance = nvt_get_dttw_para(DTTW_MOTION_TOLERANCE_ADDR);
- ts->dttw_detection_window_edge = nvt_get_dttw_para(DTTW_DETECTION_WINDOW_EDGE_ADDR);
-
if (wkg_flag) {
spi_buf[0] = EVENT_MAP_HOST_CMD;
spi_buf[1] = 0x70;
@@ -1392,12 +1382,27 @@ ssize_t nvt_set_dttw(uint8_t wkg_flag)
spi_buf[2] = 0x30;
CTP_SPI_WRITE(ts->client, spi_buf, 3);
}
- msleep(20);
- ret = nvt_check_api_cmd_result(cmd_test_bit, wkg_flag == 1);
- if (ret) {
- NVT_ERR("failed, ret = %d\n", ret);
- return -EINVAL;
+ if (check_result) {
+ msleep(20);
+ ret = nvt_check_api_cmd_result(cmd_test_bit, wkg_flag == 1);
+ if (ret) {
+ NVT_ERR("DTTW conf: failed to setup, ret = %d.\n", ret);
+ return -EINVAL;
+ }
+ }
+
+ if (wkg_flag) {
+ NVT_LOG("DTTW conf: area max/min %d %d, contact max/min %d %d.\n",
+ ts->dttw_touch_area_max, ts->dttw_touch_area_min,
+ ts->dttw_contact_duration_max, ts->dttw_contact_duration_min);
+ NVT_LOG("DTTW conf: tap offset %d, gap max/min %d %d.\n",
+ ts->dttw_tap_offset,
+ ts->dttw_tap_gap_duration_max, ts->dttw_tap_gap_duration_min);
+ NVT_LOG("DTTW conf: motion %d, edge %d.\n",
+ ts->dttw_motion_tolerance, ts->dttw_detection_window_edge);
+ } else {
+ NVT_LOG("DTTW conf: off.\n");
}
NVT_LOG("--\n");
@@ -2340,4 +2345,26 @@ void nvt_extra_api_deinit(void)
rawdata_uniformity_spi_buf = NULL;
NVT_LOG("--\n");
}
+
+void nvt_get_dttw_conf(void)
+{
+ if (!ts->dttw_touch_area_max)
+ ts->dttw_touch_area_max = nvt_get_dttw_para(DTTW_TOUCH_AREA_MAX_ADDR);
+ if (!ts->dttw_touch_area_min)
+ ts->dttw_touch_area_min = nvt_get_dttw_para(DTTW_TOUCH_AREA_MIN_ADDR);
+ if (!ts->dttw_contact_duration_max)
+ ts->dttw_contact_duration_max = nvt_get_dttw_para(DTTW_CONTACT_DURATION_MAX_ADDR);
+ if (!ts->dttw_contact_duration_min)
+ ts->dttw_contact_duration_min = nvt_get_dttw_para(DTTW_CONTACT_DURATION_MIN_ADDR);
+ if (!ts->dttw_tap_offset)
+ ts->dttw_tap_offset = nvt_get_dttw_para(DTTW_TAP_OFFSET_ADDR);
+ if (!ts->dttw_tap_gap_duration_max)
+ ts->dttw_tap_gap_duration_max = nvt_get_dttw_para(DTTW_TAP_GAP_DURATION_MAX_ADDR);
+ if (!ts->dttw_tap_gap_duration_min)
+ ts->dttw_tap_gap_duration_min = nvt_get_dttw_para(DTTW_TAP_GAP_DURATION_MIN_ADDR);
+ if (!ts->dttw_motion_tolerance)
+ ts->dttw_motion_tolerance = nvt_get_dttw_para(DTTW_MOTION_TOLERANCE_ADDR);
+ if (!ts->dttw_detection_window_edge)
+ ts->dttw_detection_window_edge = nvt_get_dttw_para(DTTW_DETECTION_WINDOW_EDGE_ADDR);
+}
#endif /* #if NVT_TOUCH_EXT_API */
diff --git a/nt36xxx/nt36xxx_goog.c b/nt36xxx/nt36xxx_goog.c
index d55ecb7..5696d21 100644
--- a/nt36xxx/nt36xxx_goog.c
+++ b/nt36xxx/nt36xxx_goog.c
@@ -157,7 +157,7 @@ int nvt_callback(void *private_data,
static bool grip_enabled;
static bool palm_enabled;
static bool sensing_enabled = true;
-
+ static bool display_state_on = true;
switch (cmd_type) {
case GTI_CMD_PING:
@@ -180,6 +180,42 @@ int nvt_callback(void *private_data,
}
break;
+ case GTI_CMD_GET_CONTEXT_DRIVER:
+ cmd->context_driver_cmd.contents.screen_state = 1;
+ cmd->context_driver_cmd.screen_state =
+ ts->bTouchIsAwake ? 1 : 0;
+#ifdef DYNAMIC_REFRESH_RATE
+ cmd->context_driver_cmd.contents.display_refresh_rate = 1;
+ cmd->context_driver_cmd.display_refresh_rate =
+ ts->display_refresh_rate;
+#endif
+ /* Fixed touch report rate and no update event */
+ cmd->context_driver_cmd.contents.touch_report_rate = 1;
+ cmd->context_driver_cmd.touch_report_rate = 120;
+
+ cmd->context_driver_cmd.contents.offload_timestamp = 1;
+ cmd->context_driver_cmd.offload_timestamp =
+ ts->pen_offload_coord_timestamp;
+ ret = 0;
+ break;
+
+ case GTI_CMD_GET_CONTEXT_STYLUS:
+ cmd->context_stylus_cmd.contents.coords = 1;
+ cmd->context_stylus_cmd.pen_offload_coord =
+ ts->pen_offload_coord;
+
+ cmd->context_stylus_cmd.contents.coords_timestamp = 1;
+ cmd->context_stylus_cmd.pen_offload_coord_timestamp =
+ ts->pen_offload_coord_timestamp;
+
+ cmd->context_stylus_cmd.contents.pen_active = 1;
+ cmd->context_stylus_cmd.pen_active = ts->pen_active;
+
+ /* No useful pen-pairing information available in this driver */
+ cmd->context_stylus_cmd.contents.pen_paired = 0;
+ ret = 0;
+ break;
+
case GTI_CMD_GET_FW_VERSION: {
int buf_idx = 0;
char *buf = cmd->fw_version_cmd.buffer;
@@ -232,6 +268,14 @@ int nvt_callback(void *private_data,
}
break;
+ case GTI_CMD_GET_SENSOR_DATA_MANUAL:
+ if (cmd->manual_sensor_data_cmd.type == GTI_SENSOR_DATA_TYPE_MS_DIFF) {
+ cmd->manual_sensor_data_cmd.buffer = ts->heatmap_out_buf;
+ cmd->manual_sensor_data_cmd.size = ts->heatmap_out_buf_size;
+ ret = 0;
+ }
+ break;
+
case GTI_CMD_SET_CONTINUOUS_REPORT: {
#define CONTINUOUS_ENABLE 0x01
#define CONTINUOUS_DISABLE 0x00
@@ -325,8 +369,10 @@ int nvt_callback(void *private_data,
* Need to have post-delay for touch FW to complete before return
* to display driver after GTI scheduled the suspend workqueue.
*/
- msleep(NVT_SUSPEND_POST_MS_DELAY);
+ if (display_state_on)
+ msleep(NVT_SUSPEND_POST_MS_DELAY);
NVT_LOG("GTI_DISPLAY_STATE_OFF\n");
+ display_state_on = false;
} else if (cmd->display_state_cmd.setting == GTI_DISPLAY_STATE_ON) {
u32 locks = goog_pm_wake_get_locks(ts->gti);
@@ -341,8 +387,10 @@ int nvt_callback(void *private_data,
NVT_LOG("reenable touch for locks %#x.", locks);
nvt_ts_suspend(&ts->client->dev);
nvt_ts_resume(&ts->client->dev);
+ sensing_enabled = true;
}
NVT_LOG("GTI_DISPLAY_STATE_ON");
+ display_state_on = true;
} else {
NVT_ERR("invalid setting %d!\n", cmd->display_state_cmd.setting);
}