diff options
author | Henrik Rydberg <rydberg@euromail.se> | 2012-08-22 14:43:22 -0400 |
---|---|---|
committer | Henrik Rydberg <rydberg@euromail.se> | 2012-09-19 13:50:19 -0400 |
commit | 55e49089f4589908eb688742d2d7eff33b74ac78 (patch) | |
tree | ea080c5831e489465378a37480d87c1125143b8c /include/linux/input | |
parent | b4adbbefc2099476a4f1020041c99f52cf3cd67d (diff) |
Input: MT - Handle frame synchronization in core
Most MT drivers perform the same actions on frame synchronization.
Some actions, like dropping unseen contacts, are also unnecessarily
complex. Collect common frame synchronization tasks in a new function,
input_mt_sync_frame(). Depending on the flags set, it drops unseen
contacts and performs pointer emulation.
With init flags and frame synchronization in place, most MT drivers
can be simplified. First out are the bcm5974 and hid-multitouch
drivers, following this patch.
Reviewed-and-tested-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>
Tested-by: Ping Cheng <pingc@wacom.com>
Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'include/linux/input')
-rw-r--r-- | include/linux/input/mt.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/include/linux/input/mt.h b/include/linux/input/mt.h index 53f5bf168ff9..94989189878d 100644 --- a/include/linux/input/mt.h +++ b/include/linux/input/mt.h | |||
@@ -15,12 +15,17 @@ | |||
15 | 15 | ||
16 | #define TRKID_MAX 0xffff | 16 | #define TRKID_MAX 0xffff |
17 | 17 | ||
18 | #define INPUT_MT_POINTER 0x0001 /* pointer device, e.g. trackpad */ | ||
19 | #define INPUT_MT_DIRECT 0x0002 /* direct device, e.g. touchscreen */ | ||
20 | #define INPUT_MT_DROP_UNUSED 0x0004 /* drop contacts not seen in frame */ | ||
18 | /** | 21 | /** |
19 | * struct input_mt_slot - represents the state of an input MT slot | 22 | * struct input_mt_slot - represents the state of an input MT slot |
20 | * @abs: holds current values of ABS_MT axes for this slot | 23 | * @abs: holds current values of ABS_MT axes for this slot |
24 | * @frame: last frame at which input_mt_report_slot_state() was called | ||
21 | */ | 25 | */ |
22 | struct input_mt_slot { | 26 | struct input_mt_slot { |
23 | int abs[ABS_MT_LAST - ABS_MT_FIRST + 1]; | 27 | int abs[ABS_MT_LAST - ABS_MT_FIRST + 1]; |
28 | unsigned int frame; | ||
24 | }; | 29 | }; |
25 | 30 | ||
26 | /** | 31 | /** |
@@ -29,6 +34,7 @@ struct input_mt_slot { | |||
29 | * @num_slots: number of MT slots the device uses | 34 | * @num_slots: number of MT slots the device uses |
30 | * @slot: MT slot currently being transmitted | 35 | * @slot: MT slot currently being transmitted |
31 | * @flags: input_mt operation flags | 36 | * @flags: input_mt operation flags |
37 | * @frame: increases every time input_mt_sync_frame() is called | ||
32 | * @slots: array of slots holding current values of tracked contacts | 38 | * @slots: array of slots holding current values of tracked contacts |
33 | */ | 39 | */ |
34 | struct input_mt { | 40 | struct input_mt { |
@@ -36,6 +42,7 @@ struct input_mt { | |||
36 | int num_slots; | 42 | int num_slots; |
37 | int slot; | 43 | int slot; |
38 | unsigned int flags; | 44 | unsigned int flags; |
45 | unsigned int frame; | ||
39 | struct input_mt_slot slots[]; | 46 | struct input_mt_slot slots[]; |
40 | }; | 47 | }; |
41 | 48 | ||
@@ -81,4 +88,6 @@ void input_mt_report_slot_state(struct input_dev *dev, | |||
81 | void input_mt_report_finger_count(struct input_dev *dev, int count); | 88 | void input_mt_report_finger_count(struct input_dev *dev, int count); |
82 | void input_mt_report_pointer_emulation(struct input_dev *dev, bool use_count); | 89 | void input_mt_report_pointer_emulation(struct input_dev *dev, bool use_count); |
83 | 90 | ||
91 | void input_mt_sync_frame(struct input_dev *dev); | ||
92 | |||
84 | #endif | 93 | #endif |