summaryrefslogtreecommitdiff
path: root/goodix_brl_hw.c
diff options
context:
space:
mode:
Diffstat (limited to 'goodix_brl_hw.c')
-rw-r--r--goodix_brl_hw.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/goodix_brl_hw.c b/goodix_brl_hw.c
index be127d4..46018dc 100644
--- a/goodix_brl_hw.c
+++ b/goodix_brl_hw.c
@@ -830,8 +830,6 @@ static int convert_ic_info(struct goodix_ic_info *info, const u8 *data)
LE32_TO_CPU(misc->esd_addr);
LE32_TO_CPU(misc->auto_scan_cmd_addr);
LE32_TO_CPU(misc->auto_scan_info_addr);
- LE32_TO_CPU(misc->self_tx_cfg_addr);
- LE32_TO_CPU(misc->self_rx_cfg_addr);
return 0;
}
@@ -900,10 +898,6 @@ static void print_ic_info(struct goodix_ic_info *ic_info)
misc->stylus_rawdata_addr, misc->stylus_rawdata_len);
ts_info("esd_addr: 0x%04X", misc->esd_addr);
ts_info("frame_data_addr: 0x%04X", misc->frame_data_addr);
- ts_info("self_tx_cfg_addr: 0x%04x",
- misc->self_tx_cfg_addr);
- ts_info("self_rx_cfg_addr: 0x%04x",
- misc->self_rx_cfg_addr);
}
static int brl_get_ic_info(
@@ -1232,6 +1226,7 @@ static int brl_event_handler(
memset(ts_event, 0, sizeof(*ts_event));
ts_event->event_type = EVENT_INVALID;
+ ts_event->clear_count = event_data->clear_count;
/* read status event */
if (event_data->status_changed)
hw_ops->read(cd, 0x1021C, (u8 *)&ts_event->status_data,
@@ -1290,16 +1285,20 @@ static int brld_get_framedata(
unsigned char val;
int retry = 20;
struct frame_head *frame_head;
- unsigned char frame_buf[GOODIX_MAX_FRAMEDATA_LEN];
+ u8 *frame_buf;
unsigned char *cur_ptr;
unsigned int flag_addr = cd->ic_info.misc.frame_data_addr;
+ frame_buf = kzalloc(GOODIX_MAX_FRAMEDATA_LEN, GFP_KERNEL);
+ if (frame_buf == NULL)
+ return -ENOMEM;
+
/* clean touch event flag */
val = 0;
ret = brl_write(cd, flag_addr, &val, 1);
if (ret < 0) {
ts_err("clean touch event failed, exit!");
- return ret;
+ goto exit;
}
while (retry--) {
@@ -1310,26 +1309,29 @@ static int brld_get_framedata(
}
if (retry < 0) {
ts_err("framedata is not ready val:0x%02x, exit!", val);
- return -EINVAL;
+ ret = -EINVAL;
+ goto exit;
}
ret = brl_read(cd, flag_addr, frame_buf, GOODIX_MAX_FRAMEDATA_LEN);
if (ret < 0) {
ts_err("read frame data failed");
- return ret;
+ goto exit;
}
if (checksum_cmp(frame_buf, cd->ic_info.misc.frame_data_head_len,
CHECKSUM_MODE_U8_LE)) {
ts_err("frame head checksum error");
- return -EINVAL;
+ ret = -EINVAL;
+ goto exit;
}
frame_head = (struct frame_head *)frame_buf;
if (checksum_cmp(frame_buf, frame_head->cur_frame_len,
CHECKSUM_MODE_U16_LE)) {
ts_err("frame body checksum error");
- return -EINVAL;
+ ret = -EINVAL;
+ goto exit;
}
cur_ptr = frame_buf;
cur_ptr += cd->ic_info.misc.frame_data_head_len;
@@ -1338,7 +1340,9 @@ static int brld_get_framedata(
memcpy((u8 *)(info->buff + info->used_size), cur_ptr + 8,
cd->ic_info.misc.mutual_struct_len - 8);
- return 0;
+exit:
+ kfree(frame_buf);
+ return ret;
}
static int brld_get_cap_data(