static int bl86x8_ts_event_handler(struct hua_input_chip *chip, struct hua_input_device *dev) { int ret; int count; struct input_dev *input = dev->input; struct bl86x8_data_package package; struct bl86x8_touch_point *p, *p_end; struct hua_ts_device *ts = (struct hua_ts_device *)dev; ret = bl86x8_read_data_package(chip, &package); if (ret < 0) { pr_red_info("bl86x8_read_data_package"); hua_input_chip_recovery(chip, false); return ret; } count = package.td_status & 0x07; if (count == 0) { if (ts->touch_count) { hua_ts_mt_touch_release(input); ts->touch_count = 0; } return 0; } if (unlikely(count > BL86X8_POINT_COUNT)) { // pr_red_info("Too much points = %d", count); count = BL86X8_POINT_COUNT; } for (p = package.points, p_end = p + count; p < p_end; p++) { hua_ts_report_mt_data(input, BL86X8_BUILD_AXIS(p->xh, p->xl), \ BL86X8_BUILD_AXIS(p->yh, p->yl)); } input_sync(input); ts->touch_count = count; return 0; }
static void hua_ts_suspend(struct hua_ts_device *ts) { hua_input_device_set_enable_lock(&ts->dev, false); hua_ts_mt_touch_release(ts->dev.input); }