summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Pfetsch <spfetsch@google.com>2022-10-21 20:58:38 +0000
committerAndroid Partner Code Review <android-gerrit-partner@google.com>2022-10-21 20:58:38 +0000
commit9f6a34bcedb0993e5652a678c5c01781bd66a15c (patch)
tree0742048b799e3bd5ac6b8a98f043caa521372024
parenta831e60b357ba1521a71940d75ccd43d0456b159 (diff)
parentb2b12782f5cf72b3545696ae2d8a491459a974d1 (diff)
downloadnovatek_touch-9f6a34bcedb0993e5652a678c5c01781bd66a15c.tar.gz
Merge "nt36xxx: Report driver status and stylus context to touch_offload" into android13-gs-pixel-5.10-tm-qpr2
-rw-r--r--nt36xxx/nt36xxx.c21
-rw-r--r--nt36xxx/nt36xxx.h7
-rw-r--r--nt36xxx/nt36xxx_goog.c36
3 files changed, 62 insertions, 2 deletions
diff --git a/nt36xxx/nt36xxx.c b/nt36xxx/nt36xxx.c
index 4d7b301..2c9a706 100644
--- a/nt36xxx/nt36xxx.c
+++ b/nt36xxx/nt36xxx.c
@@ -1875,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);
@@ -1895,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);
@@ -2406,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
@@ -2956,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 0f460b1..b70d650 100644
--- a/nt36xxx/nt36xxx.h
+++ b/nt36xxx/nt36xxx.h
@@ -316,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
diff --git a/nt36xxx/nt36xxx_goog.c b/nt36xxx/nt36xxx_goog.c
index 2f74051..5696d21 100644
--- a/nt36xxx/nt36xxx_goog.c
+++ b/nt36xxx/nt36xxx_goog.c
@@ -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;