aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/input.c
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2012-09-01 10:15:43 -0400
committerHenrik Rydberg <rydberg@euromail.se>2012-09-19 13:50:17 -0400
commit7c75bf99271139ca7cb2d0cca3be11f1f7c59efd (patch)
treed1a30a1f4211f614d72cab7e1b164bebb45a9292 /drivers/input/input.c
parent8d18fba282120a4a8e4416d1202522ffae8cad58 (diff)
Input: Improve the events-per-packet estimate
The events-per-packet estimate has so far been used by MT devices only. This patch adjusts the packet buffer size to also accomodate the KEY and MSC events. Keyboards normally send one or two keys at a time. MT devices normally send a number of button keys along with the MT information. The buffer size chosen here covers those cases, and matches the default buffer size in evdev. Since the input estimate is now preferred, remove the special input-mt estimate. Reviewed-and-tested-by: Ping Cheng <pingc@wacom.com> Tested-by: Benjamin Tissoires <benjamin.tissoires@enac.fr> Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'drivers/input/input.c')
-rw-r--r--drivers/input/input.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c
index 79a4a2ad74de..fb3a2c112deb 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -1778,6 +1778,9 @@ static unsigned int input_estimate_events_per_packet(struct input_dev *dev)
1778 if (test_bit(i, dev->relbit)) 1778 if (test_bit(i, dev->relbit))
1779 events++; 1779 events++;
1780 1780
1781 /* Make room for KEY and MSC events */
1782 events += 7;
1783
1781 return events; 1784 return events;
1782} 1785}
1783 1786
@@ -1816,6 +1819,7 @@ int input_register_device(struct input_dev *dev)
1816{ 1819{
1817 static atomic_t input_no = ATOMIC_INIT(0); 1820 static atomic_t input_no = ATOMIC_INIT(0);
1818 struct input_handler *handler; 1821 struct input_handler *handler;
1822 unsigned int packet_size;
1819 const char *path; 1823 const char *path;
1820 int error; 1824 int error;
1821 1825
@@ -1828,9 +1832,9 @@ int input_register_device(struct input_dev *dev)
1828 /* Make sure that bitmasks not mentioned in dev->evbit are clean. */ 1832 /* Make sure that bitmasks not mentioned in dev->evbit are clean. */
1829 input_cleanse_bitmasks(dev); 1833 input_cleanse_bitmasks(dev);
1830 1834
1831 if (!dev->hint_events_per_packet) 1835 packet_size = input_estimate_events_per_packet(dev);
1832 dev->hint_events_per_packet = 1836 if (dev->hint_events_per_packet < packet_size)
1833 input_estimate_events_per_packet(dev); 1837 dev->hint_events_per_packet = packet_size;
1834 1838
1835 /* 1839 /*
1836 * If delay and period are pre-set by the driver, then autorepeating 1840 * If delay and period are pre-set by the driver, then autorepeating