diff options
author | Daniel Kurtz <djkurtz@chromium.org> | 2012-06-28 09:08:23 -0400 |
---|---|---|
committer | Henrik Rydberg <rydberg@euromail.se> | 2012-06-29 09:58:06 -0400 |
commit | 64464ae8e1d64fc9f63d9686d5e40b56ffa77203 (patch) | |
tree | 0d9f88b88f3ffecade9437252c9cd2d1d7686755 /drivers | |
parent | cb15911509164f052f103e85a935f513f82e6b54 (diff) |
Input: atmel_mxt_ts - send all MT-B slots in one input report
Each interrupt contains information for all contacts with changing
properties. Process all of this information at once, and send it all in a
a single input report (ie input events ending in EV_SYN/SYN_REPORT).
This patch was tested using an MXT224E.
Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/input/touchscreen/atmel_mxt_ts.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index 2746b0dc7f36..4c9a06c7eae3 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c | |||
@@ -547,9 +547,6 @@ static void mxt_input_touchevent(struct mxt_data *data, | |||
547 | input_report_abs(input_dev, ABS_MT_PRESSURE, pressure); | 547 | input_report_abs(input_dev, ABS_MT_PRESSURE, pressure); |
548 | input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area); | 548 | input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area); |
549 | } | 549 | } |
550 | |||
551 | input_mt_report_pointer_emulation(input_dev, false); | ||
552 | input_sync(input_dev); | ||
553 | } | 550 | } |
554 | 551 | ||
555 | static bool mxt_is_T9_message(struct mxt_data *data, struct mxt_message *msg) | 552 | static bool mxt_is_T9_message(struct mxt_data *data, struct mxt_message *msg) |
@@ -565,6 +562,7 @@ static irqreturn_t mxt_interrupt(int irq, void *dev_id) | |||
565 | struct device *dev = &data->client->dev; | 562 | struct device *dev = &data->client->dev; |
566 | int id; | 563 | int id; |
567 | u8 reportid; | 564 | u8 reportid; |
565 | bool update_input = false; | ||
568 | 566 | ||
569 | do { | 567 | do { |
570 | if (mxt_read_message(data, &message)) { | 568 | if (mxt_read_message(data, &message)) { |
@@ -576,12 +574,19 @@ static irqreturn_t mxt_interrupt(int irq, void *dev_id) | |||
576 | 574 | ||
577 | id = reportid - data->T9_reportid_min; | 575 | id = reportid - data->T9_reportid_min; |
578 | 576 | ||
579 | if (mxt_is_T9_message(data, &message)) | 577 | if (mxt_is_T9_message(data, &message)) { |
580 | mxt_input_touchevent(data, &message, id); | 578 | mxt_input_touchevent(data, &message, id); |
581 | else | 579 | update_input = true; |
580 | } else { | ||
582 | mxt_dump_message(dev, &message); | 581 | mxt_dump_message(dev, &message); |
582 | } | ||
583 | } while (reportid != 0xff); | 583 | } while (reportid != 0xff); |
584 | 584 | ||
585 | if (update_input) { | ||
586 | input_mt_report_pointer_emulation(data->input_dev, false); | ||
587 | input_sync(data->input_dev); | ||
588 | } | ||
589 | |||
585 | end: | 590 | end: |
586 | return IRQ_HANDLED; | 591 | return IRQ_HANDLED; |
587 | } | 592 | } |