From: Jeff Brown Date: Thu, 17 Mar 2011 06:17:05 +0000 (-0700) Subject: input: Set default events per packet for MT devices. X-Git-Tag: firefly_0821_release~9834^2~41 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e5761351965ee8ef94f4fcdae923dd5aee52bf69;p=firefly-linux-kernel-4.4.55.git 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 --- 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);