summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWendly Li <wendlyli@google.com>2023-05-24 08:10:38 +0000
committerWendly Li <wendlyli@google.com>2023-05-24 14:12:54 +0000
commit277e156e2236dffd4bfba289102e0eaf72637c59 (patch)
tree94041888dd0b1373efffb32b9705a8a3996a8ef7
parentf1c9ce28930740047916c15a5e90e9727232e7cc (diff)
downloadgoodix_touch-277e156e2236dffd4bfba289102e0eaf72637c59.tar.gz
touch/goodix: Fix self-sensing data
In latest FW, the mutual_struct_len is not equal to (8 + rx * tx *2). Use misc->mutual_struct_len instead of calulating it ourself. Bug: 282700150 Test: /vendor/bin/twoshay -s Change-Id: I1befcf20c3dcb76c345c6914d2556fa7b4b281c2 Signed-off-by: Wendly Li <wendlyli@google.com>
-rw-r--r--goodix_brl_hw.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/goodix_brl_hw.c b/goodix_brl_hw.c
index 7fc0d20..17bb7d7 100644
--- a/goodix_brl_hw.c
+++ b/goodix_brl_hw.c
@@ -1092,9 +1092,22 @@ static int goodix_update_heatmap(struct goodix_ts_core *cd, u8 *event_data)
struct goodix_ic_info_misc *misc = &cd->ic_info.misc;
int tx = cd->ic_info.parm.drv_num;
int rx = cd->ic_info.parm.sen_num;
- int mutual_len = sizeof(struct goodix_mutual_data) + tx * rx * 2;
+ int mutual_struct_len = misc->mutual_struct_len;
struct goodix_mutual_data *mutual_data;
struct goodix_self_sensing_data *self_sensing_data;
+
+ /*
+ * Memory map of event data
+ * ===========================================
+ * touch_data_addr -> touch_data
+ * ...
+ * frame_data_addr -> frame_data_head
+ * fw_attr
+ * fw_log
+ * mutual_data_addr -> mutual_data
+ * self_sensing_data_addr -> self_sensing_data
+ * ===========================================
+ */
uint8_t *mutual_head = event_data + misc->frame_data_addr -
misc->touch_data_addr +
misc->frame_data_head_len + misc->fw_attr_len +
@@ -1102,7 +1115,7 @@ static int goodix_update_heatmap(struct goodix_ts_core *cd, u8 *event_data)
mutual_data = (struct goodix_mutual_data *)mutual_head;
self_sensing_data =
- (struct goodix_self_sensing_data *)(mutual_head + mutual_len);
+ (struct goodix_self_sensing_data *)(mutual_head + mutual_struct_len);
goodix_rotate_abcd2cbad(tx, rx, mutual_data->data, cd->mutual_data);
memcpy(cd->self_sensing_data, self_sensing_data->data, (tx + rx) * 2);