summaryrefslogtreecommitdiff
path: root/include/linux/input/mt.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-10-01 09:13:10 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2012-10-01 09:13:10 -0700
commit9fa40a1135d94cb6eed99e264c6d4fe00c0a73f9 (patch)
tree94f331c35b60e160103c2467ab5d64ff1eb3c9e3 /include/linux/input/mt.h
parent99dbb1632f1165c2726056ebfce6edde0e5a0208 (diff)
parentcdcd3ac4e945d1fcaef9907839569c2d70b2f3fa (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
Pull HID updates from Jiri Kosina: 1) Patchset from Henrik Rydberg which substantially reduces irqsoff latency for all input devices. In addition to that, Henrik reworked multitouch handling in order to reduce runtime memory consumption. This patchset touches code in Input subsystem as well. All the changes have been Acked by Dmitry, and we agreed to do it this way due to inter-dependencies between the patchset and subsequent changes in HID subsystem. 2) Rework, clenaups and a lot of fixes to picolcd driver by Bruno Prémont. 3) Core report descriptor handling fix which fixes resume issue on some devices, by Kevin Daughtridge 4) hidraw fixes by Alexey Khoroshilov and Ratan Nalumasu 5) wiimote driver now supports balance board, by David Herrmann. 6) Other smaller fixes and new device id additions all over the place. * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: (79 commits) HID: hidraw: don't deallocate memory when it is in use HID: picoLCD: optimize for inactive debugfs HID: multitouch: add support for GeneralTouch multi-touchscreen HID: Add support for Sony PS3 BD Remote Control HID: keep dev_rdesc unmodified and use it for comparisons HID: lg4ff: Minor coding style fixes in lg4ff and hid-lg HID: hid-lg4ff: Set absolute axes parametes on DFP HID: hid-lg4ff: Adjust X axis input value accordingly to selected range. HID: hid-lg4ff: Minor code cleanup to improve readability HID: ntrig: change default value of logical/physical width/height to 1 HID: picoLCD: bounds check in dump_buff_as_hex() Input: bcm5974 - Convert to MT-B Input: bcm5974 - Drop the logical dimensions Input: bcm5974 - Preparatory renames Input: bcm5974 - only setup button urb for TYPE1 devices HID: hid-multitouch: Add Flatfrog support HID: hid-multitouch: Fix contact count on 3M panels HID: hid-multitouch: Remove the redundant touch state HID: hid-multitouch: Simplify setup and frame synchronization HID: Allow more fields in the hid report ...
Diffstat (limited to 'include/linux/input/mt.h')
-rw-r--r--include/linux/input/mt.h57
1 files changed, 54 insertions, 3 deletions
diff --git a/include/linux/input/mt.h b/include/linux/input/mt.h
index f86737586e19..cc5cca774bab 100644
--- a/include/linux/input/mt.h
+++ b/include/linux/input/mt.h
@@ -15,12 +15,41 @@
#define TRKID_MAX 0xffff
+#define INPUT_MT_POINTER 0x0001 /* pointer device, e.g. trackpad */
+#define INPUT_MT_DIRECT 0x0002 /* direct device, e.g. touchscreen */
+#define INPUT_MT_DROP_UNUSED 0x0004 /* drop contacts not seen in frame */
+#define INPUT_MT_TRACK 0x0008 /* use in-kernel tracking */
+
/**
* struct input_mt_slot - represents the state of an input MT slot
* @abs: holds current values of ABS_MT axes for this slot
+ * @frame: last frame at which input_mt_report_slot_state() was called
+ * @key: optional driver designation of this slot
*/
struct input_mt_slot {
int abs[ABS_MT_LAST - ABS_MT_FIRST + 1];
+ unsigned int frame;
+ unsigned int key;
+};
+
+/**
+ * struct input_mt - state of tracked contacts
+ * @trkid: stores MT tracking ID for the next contact
+ * @num_slots: number of MT slots the device uses
+ * @slot: MT slot currently being transmitted
+ * @flags: input_mt operation flags
+ * @frame: increases every time input_mt_sync_frame() is called
+ * @red: reduced cost matrix for in-kernel tracking
+ * @slots: array of slots holding current values of tracked contacts
+ */
+struct input_mt {
+ int trkid;
+ int num_slots;
+ int slot;
+ unsigned int flags;
+ unsigned int frame;
+ int *red;
+ struct input_mt_slot slots[];
};
static inline void input_mt_set_value(struct input_mt_slot *slot,
@@ -35,12 +64,18 @@ static inline int input_mt_get_value(const struct input_mt_slot *slot,
return slot->abs[code - ABS_MT_FIRST];
}
-int input_mt_init_slots(struct input_dev *dev, unsigned int num_slots);
+static inline bool input_mt_is_active(const struct input_mt_slot *slot)
+{
+ return input_mt_get_value(slot, ABS_MT_TRACKING_ID) >= 0;
+}
+
+int input_mt_init_slots(struct input_dev *dev, unsigned int num_slots,
+ unsigned int flags);
void input_mt_destroy_slots(struct input_dev *dev);
-static inline int input_mt_new_trkid(struct input_dev *dev)
+static inline int input_mt_new_trkid(struct input_mt *mt)
{
- return dev->trkid++ & TRKID_MAX;
+ return mt->trkid++ & TRKID_MAX;
}
static inline void input_mt_slot(struct input_dev *dev, int slot)
@@ -64,4 +99,20 @@ void input_mt_report_slot_state(struct input_dev *dev,
void input_mt_report_finger_count(struct input_dev *dev, int count);
void input_mt_report_pointer_emulation(struct input_dev *dev, bool use_count);
+void input_mt_sync_frame(struct input_dev *dev);
+
+/**
+ * struct input_mt_pos - contact position
+ * @x: horizontal coordinate
+ * @y: vertical coordinate
+ */
+struct input_mt_pos {
+ s16 x, y;
+};
+
+int input_mt_assign_slots(struct input_dev *dev, int *slots,
+ const struct input_mt_pos *pos, int num_pos);
+
+int input_mt_get_slot_by_key(struct input_dev *dev, int key);
+
#endif