Hi, Since the motivation for this patch was only discussed in a separate mail thread I'll summarize here:
The previous behavior of the driver did not work properly with Qt5 QtQuick multi touch-point gestures, due to how touch-points are reported when removing a touch-point. My interpretation of the available documentation [1] was that the driver should report all touch-points between SYN_REPORTs, but it is not explicitly stated so. I've found another mail-thread [2] where the creator of the protocol states: "The protocol defines a generic way of sending a variable amount of contacts. The contact count is obtained by counting the number of non-empty finger packets between SYN_REPORT events." - Henrik Rydberg I think this verifies my assumption that all touch-points should be reported between SYN_REPORTs, otherwise it can not be used to obtain the count. [1] - https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt [2] - http://lists.x.org/archives/xorg-devel/2010-March/006466.html Cheers, Erik Botö On Wed, Jul 3, 2013 at 8:28 AM, Erik Botö <[email protected]> wrote: > --- > drivers/input/touchscreen/egalax_ts.c | 36 > +++++++++++++++++------------------ > 1 file changed, 18 insertions(+), 18 deletions(-) > > diff --git a/drivers/input/touchscreen/egalax_ts.c > b/drivers/input/touchscreen/egalax_ts.c > index 0b6cde7..271f820 100644 > --- a/drivers/input/touchscreen/egalax_ts.c > +++ b/drivers/input/touchscreen/egalax_ts.c > @@ -133,7 +133,6 @@ retry: > } > > if (down) { > - /* should also report old pointers */ > events[id].valid = valid; > events[id].status = down; > events[id].x = x; > @@ -144,23 +143,6 @@ retry: > input_report_abs(input_dev, ABS_Y, y); > input_event(data->input_dev, EV_KEY, BTN_TOUCH, 1); > input_report_abs(input_dev, ABS_PRESSURE, 1); > -#else > - for (i = 0; i < MAX_SUPPORT_POINTS; i++) { > - if (!events[i].valid) > - continue; > - dev_dbg(&client->dev, "report id:%d valid:%d x:%d > y:%d", > - i, valid, x, y); > - > - input_report_abs(input_dev, > - ABS_MT_TRACKING_ID, i); > - input_report_abs(input_dev, > - ABS_MT_TOUCH_MAJOR, 1); > - input_report_abs(input_dev, > - ABS_MT_POSITION_X, events[i].x); > - input_report_abs(input_dev, > - ABS_MT_POSITION_Y, events[i].y); > - input_mt_sync(input_dev); > - } > #endif > } else { > dev_dbg(&client->dev, "release id:%d\n", id); > @@ -176,6 +158,24 @@ retry: > #endif > } > > +#ifndef CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH > + /* report all pointers */ > + for (i = 0; i < MAX_SUPPORT_POINTS; i++) { > + if (!events[i].valid) > + continue; > + dev_dbg(&client->dev, "report id:%d valid:%d x:%d y:%d", > + i, valid, x, y); > + input_report_abs(input_dev, > + ABS_MT_TRACKING_ID, i); > + input_report_abs(input_dev, > + ABS_MT_TOUCH_MAJOR, 1); > + input_report_abs(input_dev, > + ABS_MT_POSITION_X, events[i].x); > + input_report_abs(input_dev, > + ABS_MT_POSITION_Y, events[i].y); > + input_mt_sync(input_dev); > + } > +#endif > input_sync(input_dev); > return IRQ_HANDLED; > } > -- > 1.8.1.2 > _______________________________________________ meta-freescale mailing list [email protected] https://lists.yoctoproject.org/listinfo/meta-freescale
