From e5761351965ee8ef94f4fcdae923dd5aee52bf69 Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Wed, 16 Mar 2011 23:17:05 -0700 Subject: [PATCH] input: Set default events per packet for MT devices. Use the number of ABS_MT_SLOTs or ABS_MT_TRACKING_IDs to choose a default number of events per packet. Signed-off-by: jeffbrown@android.com --- drivers/input/input.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/input/input.c b/drivers/input/input.c index ab6982056518..5dc12e173ad3 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -1700,6 +1700,27 @@ void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int } EXPORT_SYMBOL(input_set_capability); +static void input_set_default_events_per_packet(struct input_dev *dev) +{ + int slots; + + if (dev->hint_events_per_packet) + return; + + if (dev->mtsize) + slots = dev->mtsize; + else if (test_bit(ABS_MT_TRACKING_ID, dev->absbit)) + slots = min(20, dev->absinfo[ABS_MT_TRACKING_ID].maximum - + dev->absinfo[ABS_MT_TRACKING_ID].minimum + 1); + else if (test_bit(ABS_MT_POSITION_X, dev->absbit)) + slots = 2; + else + slots = 0; + + if (slots) + input_set_events_per_packet(dev, slots * 10); +} + #define INPUT_CLEANSE_BITMASK(dev, type, bits) \ do { \ if (!test_bit(EV_##type, dev->evbit)) \ @@ -1738,6 +1759,9 @@ int input_register_device(struct input_dev *dev) const char *path; int error; + /* Use a larger default input buffer for MT devices */ + input_set_default_events_per_packet(dev); + /* Every input device generates EV_SYN/SYN_REPORT events. */ __set_bit(EV_SYN, dev->evbit); -- 2.34.1