summaryrefslogtreecommitdiffstats
path: root/drivers/input/input.c
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2012-09-15 09:15:58 -0400
committerHenrik Rydberg <rydberg@euromail.se>2012-09-19 13:50:17 -0400
commit8d18fba282120a4a8e4416d1202522ffae8cad58 (patch)
tree22e3ddabba314c9ad544b9fefe004194205c2940 /drivers/input/input.c
parent4cbe5a555fa58a79b6ecbb6c531b8bab0650778d (diff)
Input: Break out MT data
Move all MT-related things to a separate place. This saves some bytes for non-mt input devices, and prepares for new MT features. Reviewed-and-tested-by: Benjamin Tissoires <benjamin.tissoires@enac.fr> Tested-by: Ping Cheng <pingc@wacom.com> 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.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c
index 8921c6180c51..79a4a2ad74de 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -166,6 +166,7 @@ static void input_stop_autorepeat(struct input_dev *dev)
166static int input_handle_abs_event(struct input_dev *dev, 166static int input_handle_abs_event(struct input_dev *dev,
167 unsigned int code, int *pval) 167 unsigned int code, int *pval)
168{ 168{
169 struct input_mt *mt = dev->mt;
169 bool is_mt_event; 170 bool is_mt_event;
170 int *pold; 171 int *pold;
171 172
@@ -174,8 +175,8 @@ static int input_handle_abs_event(struct input_dev *dev,
174 * "Stage" the event; we'll flush it later, when we 175 * "Stage" the event; we'll flush it later, when we
175 * get actual touch data. 176 * get actual touch data.
176 */ 177 */
177 if (*pval >= 0 && *pval < dev->mtsize) 178 if (mt && *pval >= 0 && *pval < mt->num_slots)
178 dev->slot = *pval; 179 mt->slot = *pval;
179 180
180 return INPUT_IGNORE_EVENT; 181 return INPUT_IGNORE_EVENT;
181 } 182 }
@@ -184,9 +185,8 @@ static int input_handle_abs_event(struct input_dev *dev,
184 185
185 if (!is_mt_event) { 186 if (!is_mt_event) {
186 pold = &dev->absinfo[code].value; 187 pold = &dev->absinfo[code].value;
187 } else if (dev->mt) { 188 } else if (mt) {
188 struct input_mt_slot *mtslot = &dev->mt[dev->slot]; 189 pold = &mt->slots[mt->slot].abs[code - ABS_MT_FIRST];
189 pold = &mtslot->abs[code - ABS_MT_FIRST];
190 } else { 190 } else {
191 /* 191 /*
192 * Bypass filtering for multi-touch events when 192 * Bypass filtering for multi-touch events when
@@ -205,9 +205,9 @@ static int input_handle_abs_event(struct input_dev *dev,
205 } 205 }
206 206
207 /* Flush pending "slot" event */ 207 /* Flush pending "slot" event */
208 if (is_mt_event && dev->slot != input_abs_get_val(dev, ABS_MT_SLOT)) { 208 if (is_mt_event && mt && mt->slot != input_abs_get_val(dev, ABS_MT_SLOT)) {
209 input_abs_set_val(dev, ABS_MT_SLOT, dev->slot); 209 input_abs_set_val(dev, ABS_MT_SLOT, mt->slot);
210 input_pass_event(dev, EV_ABS, ABS_MT_SLOT, dev->slot); 210 input_pass_event(dev, EV_ABS, ABS_MT_SLOT, mt->slot);
211 } 211 }
212 212
213 return INPUT_PASS_TO_HANDLERS; 213 return INPUT_PASS_TO_HANDLERS;
@@ -1751,8 +1751,8 @@ static unsigned int input_estimate_events_per_packet(struct input_dev *dev)
1751 int i; 1751 int i;
1752 unsigned int events; 1752 unsigned int events;
1753 1753
1754 if (dev->mtsize) { 1754 if (dev->mt) {
1755 mt_slots = dev->mtsize; 1755 mt_slots = dev->mt->num_slots;
1756 } else if (test_bit(ABS_MT_TRACKING_ID, dev->absbit)) { 1756 } else if (test_bit(ABS_MT_TRACKING_ID, dev->absbit)) {
1757 mt_slots = dev->absinfo[ABS_MT_TRACKING_ID].maximum - 1757 mt_slots = dev->absinfo[ABS_MT_TRACKING_ID].maximum -
1758 dev->absinfo[ABS_MT_TRACKING_ID].minimum + 1, 1758 dev->absinfo[ABS_MT_TRACKING_ID].minimum + 1,