diff options
author | Steve Pfetsch <spfetsch@google.com> | 2022-10-21 20:58:38 +0000 |
---|---|---|
committer | Android Partner Code Review <android-gerrit-partner@google.com> | 2022-10-21 20:58:38 +0000 |
commit | 9f6a34bcedb0993e5652a678c5c01781bd66a15c (patch) | |
tree | 0742048b799e3bd5ac6b8a98f043caa521372024 | |
parent | a831e60b357ba1521a71940d75ccd43d0456b159 (diff) | |
parent | b2b12782f5cf72b3545696ae2d8a491459a974d1 (diff) | |
download | novatek_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.c | 21 | ||||
-rw-r--r-- | nt36xxx/nt36xxx.h | 7 | ||||
-rw-r--r-- | nt36xxx/nt36xxx_goog.c | 36 |
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; |