Thread (22 messages) flat view 22 messages, 6 authors, 2011-11-12

Re: [PATCH] input: add EETI eGalax I2C capacitive multi touch driver.

From: Jiejing.Zhang <hidden>
Date: 2011-07-29 05:28:35

Hi Gao,

2011/7/26 Wanlong Gao [off-list ref]
On 07/26/2011 05:25 PM, Zhang Jiejing wrote:
quoted
this patch adds EETI eGalax serial multi touch controller driver.

EETI eGalax serial touch screen controller is a I2C based multiple
capacitive touch screen controller, it can supports 5 touch events maximum.

Signed-off-by: Zhang Jiejing<redacted>
---
 drivers/input/touchscreen/Kconfig     |   10 +
 drivers/input/touchscreen/Makefile    |    1 +
 drivers/input/touchscreen/egalax_ts.c |  314 +++++++++++++++++++++++++++++++++
 3 files changed, 325 insertions(+), 0 deletions(-)
 create mode 100644 drivers/input/touchscreen/egalax_ts.c
quoted
+
+       if (down) {
+               /* since egalax only report one of multi touch event,
+                * so we need record pervious event with different id
+                * and report them.*/
+               events[id].valid = valid;
+               events[id].status = down;
+               events[id].x = x;
+               events[id].y = y;
+
+               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);
+               }
+       } else {
+               dev_dbg(&client->dev, "release id:%d\n", id);
+               events[id].valid = 0;
+               events[id].status = 0;
+               input_report_abs(input_dev, ABS_MT_TRACKING_ID, id);
+               input_event(input_dev, EV_ABS, ABS_MT_TOUCH_MAJOR, 0);
+               input_mt_sync(input_dev);
+       }
+
+       input_sync(input_dev);
need re-sync here ?
it's not re-sync, input_mt_sync() is different from input_sync(), the
mt_sync is used to notify a multi touch event is finish. but a
input_sync() means a input event is finished.
eg,
one input event may have many multi touch event.
[MT 1,  x, y]
[mt sync]
[MT 2, x, y]
[mt sync]
[input sync]
[MT 1,  x, y]
[mt sync]
[MT 2, x, y]
[mt sync]
[input sync]
...
quoted
+       data->client = client;
+       data->input_dev = input_dev;
+       /* controller may be in sleep, wake it up. */
+       egalax_wake_up_device(client);
+       ret = egalax_firmware_version(client);
+       if (ret<  0) {
+               dev_err(&client->dev,
+                       "egalax_ts: failed to read firmware version\n");
+               ret = -EIO;
+               goto err_free_dev;
+       }
+
+       input_dev->name = "EETI eGalax Touch Screen";
+       input_dev->phys = "I2C",
+       input_dev->id.bustype = BUS_I2C;
+       input_dev->dev.parent =&client->dev;
+
+       __set_bit(EV_ABS, input_dev->evbit);
+       __set_bit(EV_KEY, input_dev->evbit);
+       __set_bit(BTN_TOUCH, input_dev->keybit);
+       __set_bit(ABS_X, input_dev->absbit);
+       __set_bit(ABS_Y, input_dev->absbit);
+       input_set_abs_params(input_dev, ABS_X, 0, 32767, 0, 0);
+       input_set_abs_params(input_dev, ABS_Y, 0, 32767, 0, 0);
make 32767 to macro here ?
This is a constant to the controller, resolution of x, and y.
maybe you want this become a macro, but it's just style things.

you can find lots of example by grep" input_set_abs_params" under
driver/input/touchscreen.
--
Thanks
Best Regards
Wanlong Gao
Thanks.

BR,
Jiejing
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help