• Home
  • Raw
  • Download

Lines Matching +full:event +full:- +full:touch

23 #include "hid-ids.h"
29 static int middle_button_start = -350;
41 return -EINVAL; in param_set_scroll_speed()
54 …ARM_DESC(report_undeciphered, "Report undeciphered multi-touch state field using a MSC_RAW event");
60 * 0x03 seem to indicate the aspect ratio of the touch, bits 0x70 seem
61 * to be some kind of bit mask -- 0x20 may be a near-field reading,
72 /* Touch surface information. Dimension is in hundredths of a mm, min and max
75 #define MOUSE_MIN_X -1100
77 #define MOUSE_RES_X ((MOUSE_MAX_X - MOUSE_MIN_X) / (MOUSE_DIMENSION_X / 100))
79 #define MOUSE_MIN_Y -1589
81 #define MOUSE_RES_Y ((MOUSE_MAX_Y - MOUSE_MIN_Y) / (MOUSE_DIMENSION_Y / 100))
84 #define TRACKPAD_MIN_X -2909
87 ((TRACKPAD_MAX_X - TRACKPAD_MIN_X) / (TRACKPAD_DIMENSION_X / 100))
89 #define TRACKPAD_MIN_Y -2456
92 ((TRACKPAD_MAX_Y - TRACKPAD_MIN_Y) / (TRACKPAD_DIMENSION_Y / 100))
95 * struct magicmouse_sc - Tracks Magic Mouse-specific data.
98 * @ntouches: Number of touches in most recent touch report.
101 * @touches: Most recent data for a touch, indexed by tracking ID.
102 * @tracking_ids: Mapping of current touch input data to @touches.
124 int touch = -1; in magicmouse_firm_touch() local
127 /* If there is only one "firm" touch, set touch to its in magicmouse_firm_touch()
130 for (ii = 0; ii < msc->ntouches; ii++) { in magicmouse_firm_touch()
131 int idx = msc->tracking_ids[ii]; in magicmouse_firm_touch()
132 if (msc->touches[idx].size < 8) { in magicmouse_firm_touch()
133 /* Ignore this touch. */ in magicmouse_firm_touch()
134 } else if (touch >= 0) { in magicmouse_firm_touch()
135 touch = -1; in magicmouse_firm_touch()
138 touch = idx; in magicmouse_firm_touch()
142 return touch; in magicmouse_firm_touch()
147 int last_state = test_bit(BTN_LEFT, msc->input->key) << 0 | in magicmouse_emit_buttons()
148 test_bit(BTN_RIGHT, msc->input->key) << 1 | in magicmouse_emit_buttons()
149 test_bit(BTN_MIDDLE, msc->input->key) << 2; in magicmouse_emit_buttons()
156 * touch, use that to override the mouse's guess. in magicmouse_emit_buttons()
163 int x = msc->touches[id].x; in magicmouse_emit_buttons()
172 input_report_key(msc->input, BTN_MIDDLE, state & 4); in magicmouse_emit_buttons()
175 input_report_key(msc->input, BTN_LEFT, state & 1); in magicmouse_emit_buttons()
176 input_report_key(msc->input, BTN_RIGHT, state & 2); in magicmouse_emit_buttons()
179 msc->scroll_accel = SCROLL_ACCEL_DEFAULT; in magicmouse_emit_buttons()
184 struct input_dev *input = msc->input; in magicmouse_emit_touch()
187 if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE) { in magicmouse_emit_touch()
190 y = -((tdata[2] << 24 | tdata[1] << 16) >> 20); in magicmouse_emit_touch()
192 orientation = (tdata[6] >> 2) - 32; in magicmouse_emit_touch()
200 y = -((tdata[3] << 30 | tdata[2] << 22 | tdata[1] << 14) >> 19); in magicmouse_emit_touch()
202 orientation = (tdata[7] >> 2) - 32; in magicmouse_emit_touch()
210 msc->tracking_ids[raw_id] = id; in magicmouse_emit_touch()
211 msc->touches[id].x = x; in magicmouse_emit_touch()
212 msc->touches[id].y = y; in magicmouse_emit_touch()
213 msc->touches[id].size = size; in magicmouse_emit_touch()
216 * vertical touch motions. in magicmouse_emit_touch()
220 int step_x = msc->touches[id].scroll_x - x; in magicmouse_emit_touch()
221 int step_y = msc->touches[id].scroll_y - y; in magicmouse_emit_touch()
226 msc->touches[id].scroll_x = x; in magicmouse_emit_touch()
227 msc->touches[id].scroll_y = y; in magicmouse_emit_touch()
231 msc->scroll_jiffies + HZ / 2)) in magicmouse_emit_touch()
232 msc->scroll_accel = max_t(int, in magicmouse_emit_touch()
233 msc->scroll_accel - 1, 1); in magicmouse_emit_touch()
235 msc->scroll_accel = SCROLL_ACCEL_DEFAULT; in magicmouse_emit_touch()
239 step_x /= (64 - (int)scroll_speed) * msc->scroll_accel; in magicmouse_emit_touch()
241 msc->touches[id].scroll_x -= step_x * in magicmouse_emit_touch()
242 (64 - scroll_speed) * msc->scroll_accel; in magicmouse_emit_touch()
243 msc->scroll_jiffies = now; in magicmouse_emit_touch()
244 input_report_rel(input, REL_HWHEEL, -step_x); in magicmouse_emit_touch()
247 step_y /= (64 - (int)scroll_speed) * msc->scroll_accel; in magicmouse_emit_touch()
249 msc->touches[id].scroll_y -= step_y * in magicmouse_emit_touch()
250 (64 - scroll_speed) * msc->scroll_accel; in magicmouse_emit_touch()
251 msc->scroll_jiffies = now; in magicmouse_emit_touch()
259 msc->ntouches++; in magicmouse_emit_touch()
264 /* Generate the input events for this touch. */ in magicmouse_emit_touch()
268 input_report_abs(input, ABS_MT_ORIENTATION, -orientation); in magicmouse_emit_touch()
273 if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE) in magicmouse_emit_touch()
285 struct input_dev *input = msc->input; in magicmouse_raw_event()
290 /* Expect four bytes of prefix, and N*9 bytes of touch data. */ in magicmouse_raw_event()
291 if (size < 4 || ((size - 4) % 9) != 0) in magicmouse_raw_event()
293 npoints = (size - 4) / 9; in magicmouse_raw_event()
299 msc->ntouches = 0; in magicmouse_raw_event()
312 /* Expect six bytes of prefix, and N*8 bytes of touch data. */ in magicmouse_raw_event()
313 if (size < 6 || ((size - 6) % 8) != 0) in magicmouse_raw_event()
315 npoints = (size - 6) / 8; in magicmouse_raw_event()
321 msc->ntouches = 0; in magicmouse_raw_event()
325 /* When emulating three-button mode, it is important in magicmouse_raw_event()
326 * to have the current touch information before in magicmouse_raw_event()
327 * generating a click event. in magicmouse_raw_event()
340 /* Sometimes the trackpad sends two touch reports in one in magicmouse_raw_event()
345 size - 2 - data[1]); in magicmouse_raw_event()
351 if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE) { in magicmouse_raw_event()
368 __set_bit(EV_KEY, input->evbit); in magicmouse_setup_input()
370 if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE) { in magicmouse_setup_input()
371 __set_bit(BTN_LEFT, input->keybit); in magicmouse_setup_input()
372 __set_bit(BTN_RIGHT, input->keybit); in magicmouse_setup_input()
374 __set_bit(BTN_MIDDLE, input->keybit); in magicmouse_setup_input()
376 __set_bit(EV_REL, input->evbit); in magicmouse_setup_input()
377 __set_bit(REL_X, input->relbit); in magicmouse_setup_input()
378 __set_bit(REL_Y, input->relbit); in magicmouse_setup_input()
380 __set_bit(REL_WHEEL, input->relbit); in magicmouse_setup_input()
381 __set_bit(REL_HWHEEL, input->relbit); in magicmouse_setup_input()
384 /* input->keybit is initialized with incorrect button info in magicmouse_setup_input()
389 __clear_bit(BTN_RIGHT, input->keybit); in magicmouse_setup_input()
390 __clear_bit(BTN_MIDDLE, input->keybit); in magicmouse_setup_input()
391 __set_bit(BTN_MOUSE, input->keybit); in magicmouse_setup_input()
392 __set_bit(BTN_TOOL_FINGER, input->keybit); in magicmouse_setup_input()
393 __set_bit(BTN_TOOL_DOUBLETAP, input->keybit); in magicmouse_setup_input()
394 __set_bit(BTN_TOOL_TRIPLETAP, input->keybit); in magicmouse_setup_input()
395 __set_bit(BTN_TOOL_QUADTAP, input->keybit); in magicmouse_setup_input()
396 __set_bit(BTN_TOOL_QUINTTAP, input->keybit); in magicmouse_setup_input()
397 __set_bit(BTN_TOUCH, input->keybit); in magicmouse_setup_input()
398 __set_bit(INPUT_PROP_POINTER, input->propbit); in magicmouse_setup_input()
399 __set_bit(INPUT_PROP_BUTTONPAD, input->propbit); in magicmouse_setup_input()
403 __set_bit(EV_ABS, input->evbit); in magicmouse_setup_input()
412 input_set_abs_params(input, ABS_MT_ORIENTATION, -31, 32, 1, 0); in magicmouse_setup_input()
414 /* Note: Touch Y position from the device is inverted relative in magicmouse_setup_input()
420 if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE) { in magicmouse_setup_input()
451 __set_bit(EV_MSC, input->evbit); in magicmouse_setup_input()
452 __set_bit(MSC_RAW, input->mscbit); in magicmouse_setup_input()
456 * hid-input may mark device as using autorepeat, but neither in magicmouse_setup_input()
459 __clear_bit(EV_REP, input->evbit); in magicmouse_setup_input()
470 if (!msc->input) in magicmouse_input_mapping()
471 msc->input = hi->input; in magicmouse_input_mapping()
474 if (hi->input->id.product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD && in magicmouse_input_mapping()
475 field->flags & HID_MAIN_ITEM_RELATIVE) in magicmouse_input_mapping()
476 return -1; in magicmouse_input_mapping()
488 ret = magicmouse_setup_input(msc->input, hdev); in magicmouse_input_configured()
491 /* clean msc->input to notify probe() of the failure */ in magicmouse_input_configured()
492 msc->input = NULL; in magicmouse_input_configured()
509 msc = devm_kzalloc(&hdev->dev, sizeof(*msc), GFP_KERNEL); in magicmouse_probe()
512 return -ENOMEM; in magicmouse_probe()
515 msc->scroll_accel = SCROLL_ACCEL_DEFAULT; in magicmouse_probe()
517 msc->quirks = id->driver_data; in magicmouse_probe()
532 if (!msc->input) { in magicmouse_probe()
534 ret = -ENOMEM; in magicmouse_probe()
538 if (id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE) in magicmouse_probe()
549 hid_err(hdev, "unable to register touch report\n"); in magicmouse_probe()
550 ret = -ENOMEM; in magicmouse_probe()
553 report->size = 6; in magicmouse_probe()
557 ret = -ENOMEM; in magicmouse_probe()
565 * This results in -EIO from the _raw low-level transport callback, in magicmouse_probe()
567 * Thus the super-ugly hacky success check below. in magicmouse_probe()
572 if (ret != -EIO && ret != sizeof(feature)) { in magicmouse_probe()
573 hid_err(hdev, "unable to request touch data (%d)\n", ret); in magicmouse_probe()