diff options
Diffstat (limited to 'drivers/input/input-mt.c')
-rw-r--r-- | drivers/input/input-mt.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/input/input-mt.c b/drivers/input/input-mt.c index 463a4d7d54f2..f400e47092c4 100644 --- a/drivers/input/input-mt.c +++ b/drivers/input/input-mt.c | |||
@@ -12,20 +12,25 @@ | |||
12 | #include <linux/slab.h> | 12 | #include <linux/slab.h> |
13 | 13 | ||
14 | /** | 14 | /** |
15 | * input_mt_create_slots() - create MT input slots | 15 | * input_mt_init_slots() - initialize MT input slots |
16 | * @dev: input device supporting MT events and finger tracking | 16 | * @dev: input device supporting MT events and finger tracking |
17 | * @num_slots: number of slots used by the device | 17 | * @num_slots: number of slots used by the device |
18 | * | 18 | * |
19 | * This function allocates all necessary memory for MT slot handling in the | 19 | * This function allocates all necessary memory for MT slot handling |
20 | * input device, and adds ABS_MT_SLOT to the device capabilities. All slots | 20 | * in the input device, adds ABS_MT_SLOT to the device capabilities |
21 | * are initially marked as unused by setting ABS_MT_TRACKING_ID to -1. | 21 | * and sets up appropriate event buffers. All slots are initially |
22 | * marked as unused by setting ABS_MT_TRACKING_ID to -1. May be called | ||
23 | * repeatedly. Returns -EINVAL if attempting to reinitialize with a | ||
24 | * different number of slots. | ||
22 | */ | 25 | */ |
23 | int input_mt_create_slots(struct input_dev *dev, unsigned int num_slots) | 26 | int input_mt_init_slots(struct input_dev *dev, unsigned int num_slots) |
24 | { | 27 | { |
25 | int i; | 28 | int i; |
26 | 29 | ||
27 | if (!num_slots) | 30 | if (!num_slots) |
28 | return 0; | 31 | return 0; |
32 | if (dev->mt) | ||
33 | return dev->mtsize != num_slots ? -EINVAL : 0; | ||
29 | 34 | ||
30 | dev->mt = kcalloc(num_slots, sizeof(struct input_mt_slot), GFP_KERNEL); | 35 | dev->mt = kcalloc(num_slots, sizeof(struct input_mt_slot), GFP_KERNEL); |
31 | if (!dev->mt) | 36 | if (!dev->mt) |
@@ -33,6 +38,7 @@ int input_mt_create_slots(struct input_dev *dev, unsigned int num_slots) | |||
33 | 38 | ||
34 | dev->mtsize = num_slots; | 39 | dev->mtsize = num_slots; |
35 | input_set_abs_params(dev, ABS_MT_SLOT, 0, num_slots - 1, 0, 0); | 40 | input_set_abs_params(dev, ABS_MT_SLOT, 0, num_slots - 1, 0, 0); |
41 | input_set_events_per_packet(dev, 6 * num_slots); | ||
36 | 42 | ||
37 | /* Mark slots as 'unused' */ | 43 | /* Mark slots as 'unused' */ |
38 | for (i = 0; i < num_slots; i++) | 44 | for (i = 0; i < num_slots; i++) |
@@ -40,7 +46,7 @@ int input_mt_create_slots(struct input_dev *dev, unsigned int num_slots) | |||
40 | 46 | ||
41 | return 0; | 47 | return 0; |
42 | } | 48 | } |
43 | EXPORT_SYMBOL(input_mt_create_slots); | 49 | EXPORT_SYMBOL(input_mt_init_slots); |
44 | 50 | ||
45 | /** | 51 | /** |
46 | * input_mt_destroy_slots() - frees the MT slots of the input device | 52 | * input_mt_destroy_slots() - frees the MT slots of the input device |
@@ -54,5 +60,6 @@ void input_mt_destroy_slots(struct input_dev *dev) | |||
54 | kfree(dev->mt); | 60 | kfree(dev->mt); |
55 | dev->mt = NULL; | 61 | dev->mt = NULL; |
56 | dev->mtsize = 0; | 62 | dev->mtsize = 0; |
63 | dev->slot = 0; | ||
57 | } | 64 | } |
58 | EXPORT_SYMBOL(input_mt_destroy_slots); | 65 | EXPORT_SYMBOL(input_mt_destroy_slots); |