Skip to content

Commit e14b778

Browse files
committed
ui_touch: compatible with coolpad F1
Change-Id: I14dcaf624b4e4cbbaa59141defb998ceba85f861
1 parent d5c6061 commit e14b778

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

ui_touch.c

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ typedef struct {
117117
int saw_pos_x; // Did this sequence have an ABS_MT_POSITION_X?
118118
int saw_pos_y; // Did this sequence have an ABS_MT_POSITION_Y?
119119
int saw_mt_report; // Did this sequence have an SYN_MT_REPORT?
120+
int saw_mt_tracking_id;
120121
int slide_right;
121122
int slide_left;
122123
point touch_min;
@@ -204,6 +205,10 @@ static int calibrate_touch(input_device *dev) {
204205
dev->slot_current = 0;
205206
dev->slide_right = 0;
206207
dev->slide_left = 0;
208+
dev->saw_pos_x = 0;
209+
dev->saw_pos_y = 0;
210+
dev->saw_mt_tracking_id = 0;
211+
dev->saw_mt_report = 0;
207212

208213
memset(&info, 0, sizeof(info));
209214
if (ioctl(dev->fd, EVIOCGABS(ABS_MT_POSITION_X), &info) == 0) {
@@ -704,13 +709,15 @@ static int input_callback(int fd, short revents, void *data) {
704709

705710
if (ev.type == EV_SYN) {
706711
if (ev.code == SYN_MT_REPORT) {
707-
if (dev.saw_pos_x && dev.saw_pos_y) {
708-
dev.saw_pos_x = 0;
709-
dev.saw_pos_y = 0;
710-
} else
711-
handle_release(&dev, &ev);
712+
dev.saw_mt_report = 1;
713+
if (!dev.saw_mt_tracking_id) {
714+
if (dev.saw_pos_x && dev.saw_pos_y) {
715+
dev.saw_pos_x = 0;
716+
dev.saw_pos_y = 0;
717+
} else
718+
handle_release(&dev, &ev);
719+
}
712720
}
713-
return 0;
714721
} else if (ev.type == EV_REL) {
715722
if (ev.code == REL_Y) {
716723
// accumulate the up or down motion reported by
@@ -738,6 +745,7 @@ static int input_callback(int fd, short revents, void *data) {
738745
dev.slot_current = ev.value;
739746
break;
740747
case ABS_MT_TRACKING_ID:
748+
dev.saw_mt_tracking_id = 1;
741749
dev.tracking_id = ev.value;
742750
if (dev.tracking_id == -1 && dev.slot_current == 0)
743751
handle_release(&dev, &ev);
@@ -784,10 +792,13 @@ static int input_callback(int fd, short revents, void *data) {
784792
reset_touch(&dev);
785793
}
786794
}
787-
break;
795+
break;
788796
default:
789797
break;
790798
}
799+
} else if (ev.type == EV_KEY) {
800+
if (dev.saw_mt_report && dev.saw_mt_tracking_id && ev.code == BTN_TOUCH && ev.value == 0)
801+
handle_release(&dev, &ev);
791802
} else {
792803
rel_sum = 0;
793804
}

0 commit comments

Comments
 (0)