diff options
author | Wendly Li <wendlyli@google.com> | 2023-05-24 08:10:38 +0000 |
---|---|---|
committer | Wendly Li <wendlyli@google.com> | 2023-05-24 14:12:54 +0000 |
commit | 277e156e2236dffd4bfba289102e0eaf72637c59 (patch) | |
tree | 94041888dd0b1373efffb32b9705a8a3996a8ef7 | |
parent | f1c9ce28930740047916c15a5e90e9727232e7cc (diff) | |
download | goodix_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.c | 17 |
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); |