diff options
author | Wendly Li <wendlyli@google.com> | 2023-03-08 09:47:07 +0000 |
---|---|---|
committer | Android Partner Code Review <android-gerrit-partner@google.com> | 2023-03-08 09:47:07 +0000 |
commit | f1f49bd734cb33ed7aea62d6c71fd0e6274bbda4 (patch) | |
tree | 65b8cb2e8b2738818a998c03716207efc2c6c328 /goodix_ts_core.c | |
parent | d779bd663b3e55e0a4e6e12120a62713e8c05b1c (diff) | |
parent | 008f0d1b2a19772fb92b035b10474031e2118c26 (diff) | |
download | goodix_touch-f1f49bd734cb33ed7aea62d6c71fd0e6274bbda4.tar.gz |
Merge changes I2b155400,I3e2da8ca,I4fb79170 into android14-gs-pixel-5.15
* changes:
touch/goodix: Import v1.2.4 driver
touch/goodix: Import v1.2.3 driver
touch: goodix: Update report stylus event
Diffstat (limited to 'goodix_ts_core.c')
-rw-r--r-- | goodix_ts_core.c | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/goodix_ts_core.c b/goodix_ts_core.c index 83044a4..036200d 100644 --- a/goodix_ts_core.c +++ b/goodix_ts_core.c @@ -1582,15 +1582,25 @@ static int goodix_parse_dt( #endif static void goodix_ts_report_pen( - struct input_dev *dev, struct goodix_pen_data *pen_data) + struct goodix_ts_core *cd, struct goodix_pen_data *pen_data) { + struct input_dev *dev = cd->pen_dev; int i; static unsigned int pen_pressure; struct goodix_hid_hogp *hogp; + char trace_tag[128]; + ktime_t pen_ktime; mutex_lock(&dev->mutex); + input_set_timestamp(dev, cd->coords_timestamp); + pen_ktime = ktime_get(); if (pen_data->coords.status == TS_TOUCH) { + scnprintf(trace_tag, sizeof(trace_tag), + "stylus-active: IN_TS=%lld TS=%lld DELTA=%lld ns.\n", + ktime_to_ns(cd->coords_timestamp), ktime_to_ns(pen_ktime), + ktime_to_ns(ktime_sub(pen_ktime, cd->coords_timestamp))); + ATRACE_BEGIN(trace_tag); input_report_key(dev, BTN_TOUCH, 1); input_report_key(dev, pen_data->coords.tool_type, 1); input_report_abs(dev, ABS_X, pen_data->coords.x); @@ -1605,7 +1615,8 @@ static void goodix_ts_report_pen( goodix_ble_data.hogp_ready = 0; mutex_unlock(&goodix_ble_data.lock); - pen_data->coords.p = pen_pressure; + if (pen_data->coords.p && pen_pressure) + pen_data->coords.p = pen_pressure; input_report_abs(dev, ABS_PRESSURE, pen_data->coords.p); if (pen_data->coords.p == 0) input_report_abs(dev, ABS_DISTANCE, 1); @@ -1621,6 +1632,11 @@ static void goodix_ts_report_pen( pen_data->keys[0].status == TS_TOUCH ? 1 : 0, pen_data->keys[1].status == TS_TOUCH ? 1 : 0); } else { + scnprintf(trace_tag, sizeof(trace_tag), + "stylus-inactive: IN_TS=%lld TS=%lld DELTA=%lld ns.\n", + ktime_to_ns(cd->coords_timestamp), ktime_to_ns(pen_ktime), + ktime_to_ns(ktime_sub(pen_ktime, cd->coords_timestamp))); + ATRACE_BEGIN(trace_tag); pen_pressure = 0; input_report_key(dev, BTN_TOUCH, 0); input_report_key(dev, pen_data->coords.tool_type, 0); @@ -1632,8 +1648,8 @@ static void goodix_ts_report_pen( else input_report_key(dev, pen_data->keys[i].code, 0); } - input_sync(dev); + ATRACE_END(); mutex_unlock(&dev->mutex); } @@ -1850,10 +1866,13 @@ void goodix_ts_report_status(struct goodix_ts_core *core_data, st->grip_change, st->noise_lv_change, st->palm_change, st->soft_reset, st->base_update, st->hop_change, st->water_change); - ts_info("water_status[%d] before_factorA[%d] after_factorA[%d] base_update_type[0x%x] soft_reset_type[0x%x] palm_status[%d] noise_lv[%d] grip_type[%d] event_id[%d] clear_count[%d]", - st->water_sta, st->before_factorA, st->after_factorA, - st->base_update_type, st->soft_reset_type, st->palm_sta, - st->noise_lv, st->grip_type, st->event_id, ts_event->clear_count); + ts_info("water_status[%d] before_factorA[%d] after_factorA[%d]" \ + " base_update_type[0x%x] soft_reset_type[0x%x] palm_status[%d]" \ + " noise_lv[%d] grip_type[%d] event_id[%d] clear_count1[%d]" \ + " clear_count2[%d]", st->water_sta, st->before_factorA, + st->after_factorA, st->base_update_type, st->soft_reset_type, + st->palm_sta, st->noise_lv, st->grip_type, st->event_id, + ts_event->clear_count1, ts_event->clear_count2); #if IS_ENABLED(CONFIG_GOOG_TOUCH_INTERFACE) if (st->soft_reset) goog_notify_fw_status_changed(core_data->gti, GTI_FW_STATUS_RESET, @@ -1947,8 +1966,8 @@ static irqreturn_t goodix_ts_threadirq_func(int irq, void *data) } if (core_data->board_data.pen_enable && ts_event->event_type & EVENT_PEN) { - goodix_ts_report_pen( - core_data->pen_dev, &ts_event->pen_data); + core_data->coords_timestamp = core_data->isr_timestamp; + goodix_ts_report_pen(core_data, &ts_event->pen_data); } if (ts_event->event_type & EVENT_REQUEST) goodix_ts_request_handle(core_data, ts_event); |