diff options
author | PixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com> | 2023-06-11 18:33:44 -0700 |
---|---|---|
committer | SecurityBot <android-nexus-securitybot@system.gserviceaccount.com> | 2023-06-11 18:33:44 -0700 |
commit | 44abec46467d65abff01abb23193cf00c2dd9e57 (patch) | |
tree | cf54f2fe0e1920b1f0f7da098f5d8650cb62a019 | |
parent | 76b22eda43dad43816ca19ccc35173f1ff745567 (diff) | |
parent | 9db7315f72917445a6efb5c64a3dc144ca283449 (diff) | |
download | goodix_touch-44abec46467d65abff01abb23193cf00c2dd9e57.tar.gz |
Merge android14-gs-pixel-5.15-udc-d1 into android14-gs-pixel-5.15-udc-qpr1
SBMerger: 526756187
Change-Id: I0e7dca2abc6a4ba1faabc4aa15f587d0969ce618
Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
-rw-r--r-- | goodix_brl_hw.c | 8 | ||||
-rw-r--r-- | goodix_ts_core.c | 34 |
2 files changed, 34 insertions, 8 deletions
diff --git a/goodix_brl_hw.c b/goodix_brl_hw.c index ebf5f9d..05d2c49 100644 --- a/goodix_brl_hw.c +++ b/goodix_brl_hw.c @@ -1180,6 +1180,9 @@ static int brl_event_handler(struct goodix_ts_core *cd, struct goodix_ts_event_data *event_data; int ret; + /* clean event buffer */ + memset(ts_event, 0, sizeof(*ts_event)); + if (!cd->touch_frame_package || !cd->touch_frame_size) return -ENOMEM; @@ -1204,17 +1207,12 @@ static int brl_event_handler(struct goodix_ts_core *cd, } /*~[GOOG]*/ - /* clean event buffer */ - memset(ts_event, 0, sizeof(*ts_event)); - ts_event->event_type = EVENT_INVALID; ts_event->clear_count1 = event_data->clear_count1; ts_event->clear_count2 = event_data->clear_count2; /* read status event */ if (event_data->status_changed) { ts_event->event_type |= EVENT_STATUS; - hw_ops->read(cd, 0x1021C, (u8 *)&ts_event->status_data, - sizeof(ts_event->status_data)); } /* diff --git a/goodix_ts_core.c b/goodix_ts_core.c index 78ba1f0..cc360e7 100644 --- a/goodix_ts_core.c +++ b/goodix_ts_core.c @@ -1864,16 +1864,20 @@ static irqreturn_t goodix_ts_threadirq_func(int irq, void *data) core_data->coords_timestamp = core_data->isr_timestamp; goodix_ts_report_pen(core_data, &ts_event->pen_data); } + /* [GOOG] + * Move to goodix_ts_post_threadirq_func. if (ts_event->event_type & EVENT_REQUEST) goodix_ts_request_handle(core_data, ts_event); if (ts_event->event_type & EVENT_STATUS) goodix_ts_report_status(core_data, ts_event); + */ + /* [GOOG] + * Don't need to report gesture events in our use cases. if (ts_event->event_type & EVENT_GESTURE) goodix_ts_report_gesture(core_data, ts_event); - - /* read done */ - hw_ops->after_event_handler(core_data); /* [GOOG] */ + */ } + /* [GOOG] * Remove the control to enable/disable the interrupt for bottom-half. enable_irq(core_data->irq); @@ -1882,6 +1886,29 @@ static irqreturn_t goodix_ts_threadirq_func(int irq, void *data) return IRQ_HANDLED; } +static irqreturn_t goodix_ts_post_threadirq_func(int irq, void *data) +{ + struct goodix_ts_core *core_data = data; + struct goodix_ts_hw_ops *hw_ops = core_data->hw_ops; + struct goodix_ts_event *ts_event = &core_data->ts_event; + + if (ts_event->event_type != EVENT_INVALID) { + if (ts_event->event_type & EVENT_REQUEST) + goodix_ts_request_handle(core_data, ts_event); + + if (ts_event->event_type & EVENT_STATUS) { + hw_ops->read(core_data, 0x1021C, (u8 *)&ts_event->status_data, + sizeof(ts_event->status_data)); + goodix_ts_report_status(core_data, ts_event); + } + + /* read done */ + hw_ops->after_event_handler(core_data); /* [GOOG] */ + } + + return IRQ_HANDLED; +} + /** * goodix_ts_init_irq - Request interrput line from system * @core_data: pointer to touch core data @@ -2680,6 +2707,7 @@ int goodix_ts_stage2_init(struct goodix_ts_core *cd) options->selftest = gti_selftest; options->get_context_driver = gti_get_context_driver; options->set_report_rate = gti_set_report_rate; + options->post_irq_thread_fn = goodix_ts_post_threadirq_func; cd->gti = goog_touch_interface_probe( cd, cd->bus->dev, cd->input_dev, gti_default_handler, options); |