diff options
author | Wendly Li <wendlyli@google.com> | 2022-06-20 05:30:14 +0000 |
---|---|---|
committer | Wendly Li <wendlyli@google.com> | 2022-06-21 07:02:48 +0000 |
commit | e8af885da60c9ab545ab41589db3400a5351a4b3 (patch) | |
tree | f8f7f8b4e1a45c03a323b19fa74fbe3ee616fd3c /goodix_brl_hw.c | |
parent | 967c1a070556b92b166401a10b07d2ac965e8dcd (diff) | |
download | goodix_touch-e8af885da60c9ab545ab41589db3400a5351a4b3.tar.gz |
goodix: Import v1.0.12 driver
Bug: 214118830
Bug: 214118809
Bug: 214118815
Bug: 214118947
Bug: 235776127
Test: Check fw palm and grip works fine and can be switched
Test: Check the resolution of pressure is correct
Test: Check noise reporting works
Test: Check get_package_id works
Change-Id: I8e30f09806adb65aaaad2c042c8752d42e4bb23b
Signed-off-by: Wendly Li <wendlyli@google.com>
Diffstat (limited to 'goodix_brl_hw.c')
-rw-r--r-- | goodix_brl_hw.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/goodix_brl_hw.c b/goodix_brl_hw.c index f9c3e1e..a64046e 100644 --- a/goodix_brl_hw.c +++ b/goodix_brl_hw.c @@ -389,6 +389,7 @@ static int brl_send_cmd(struct goodix_ts_core *cd, struct goodix_ts_cmd *cmd) struct goodix_ic_info_misc *misc = &cd->ic_info.misc; struct goodix_ts_hw_ops *hw_ops = cd->hw_ops; + mutex_lock(&cd->cmd_lock); cmd->state = 0; cmd->ack = 0; goodix_append_checksum( @@ -400,7 +401,7 @@ static int brl_send_cmd(struct goodix_ts_core *cd, struct goodix_ts_cmd *cmd) ret = hw_ops->write(cd, misc->cmd_addr, cmd->buf, sizeof(*cmd)); if (ret < 0) { ts_err("failed write command"); - return ret; + goto exit; } for (i = 0; i < GOODIX_CMD_RETRY; i++) { /* check command result */ @@ -408,12 +409,13 @@ static int brl_send_cmd(struct goodix_ts_core *cd, struct goodix_ts_cmd *cmd) sizeof(cmd_ack)); if (ret < 0) { ts_err("failed read command ack, %d", ret); - return ret; + goto exit; } ts_debug("cmd ack data %*ph", (int)sizeof(cmd_ack), cmd_ack.buf); if (cmd_ack.ack == CMD_ACK_OK) { - return 0; + ret = 0; + goto exit; } if (cmd_ack.ack == CMD_ACK_BUSY || cmd_ack.ack == 0x00) { @@ -426,8 +428,11 @@ static int brl_send_cmd(struct goodix_ts_core *cd, struct goodix_ts_cmd *cmd) break; } } + ret = -EINVAL; ts_err("failed get valid cmd ack"); - return -EINVAL; +exit: + mutex_unlock(&cd->cmd_lock); + return ret; } #pragma pack(1) @@ -1111,9 +1116,6 @@ static int goodix_touch_handler(struct goodix_ts_core *cd, static u8 pre_finger_num; static u8 pre_pen_num; - /* clean event buffer */ - memset(ts_event, 0, sizeof(*ts_event)); - if (event_data->touches > GOODIX_MAX_TOUCH) { ts_debug("invalid touch num %d", event_data->touches); return -EINVAL; @@ -1218,13 +1220,15 @@ static int brl_event_handler( return -EINVAL; } + /* clean event buffer */ + memset(ts_event, 0, sizeof(*ts_event)); + ts_event->event_type = EVENT_INVALID; /* read status event */ if (event_data->status_changed) hw_ops->read(cd, 0x1021C, (u8 *)&ts_event->status_data, sizeof(ts_event->status_data)); - if (event_data->type & (GOODIX_TOUCH_EVENT >> 4)) return goodix_touch_handler(cd, ts_event, (struct goodix_ts_touch_event_data *)event_data); |