diff options
author | Przemo Firszt <przemo@firszt.eu> | 2012-03-14 15:55:04 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2012-03-16 07:15:31 -0400 |
commit | 7e503a37deee55cc30d2c8643e704a98556dd367 (patch) | |
tree | ccb8ae04cc35162bc6618136e44f99050873ce93 /drivers/hid | |
parent | 9a911da8d792a2d8f9a1e07eb1c41e0d7f4ec307 (diff) |
HID: wacom: Add reporting of wheel for Intuos4 WL
This patch adds reporting of ABS_WHEEL event. Raported walues are 0..71
and are related to absolute location of the finger on the wheel.
Signed-off-by: Przemo Firszt <przemo@firszt.eu>
Reviewed-by: Jason Gerecke <killertofu@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid')
-rw-r--r-- | drivers/hid/hid-wacom.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/hid/hid-wacom.c b/drivers/hid/hid-wacom.c index 3fc93869024e..694545d5bfea 100644 --- a/drivers/hid/hid-wacom.c +++ b/drivers/hid/hid-wacom.c | |||
@@ -36,6 +36,7 @@ | |||
36 | struct wacom_data { | 36 | struct wacom_data { |
37 | __u16 tool; | 37 | __u16 tool; |
38 | __u16 butstate; | 38 | __u16 butstate; |
39 | __u8 whlstate; | ||
39 | __u8 features; | 40 | __u8 features; |
40 | __u32 id; | 41 | __u32 id; |
41 | __u32 serial; | 42 | __u32 serial; |
@@ -322,6 +323,23 @@ static void wacom_i4_parse_button_report(struct wacom_data *wdata, | |||
322 | struct input_dev *input, unsigned char *data) | 323 | struct input_dev *input, unsigned char *data) |
323 | { | 324 | { |
324 | __u16 new_butstate; | 325 | __u16 new_butstate; |
326 | __u8 new_whlstate; | ||
327 | __u8 sync = 0; | ||
328 | |||
329 | new_whlstate = data[1]; | ||
330 | if (new_whlstate != wdata->whlstate) { | ||
331 | wdata->whlstate = new_whlstate; | ||
332 | if (new_whlstate & 0x80) { | ||
333 | input_report_key(input, BTN_TOUCH, 1); | ||
334 | input_report_abs(input, ABS_WHEEL, (new_whlstate & 0x7f)); | ||
335 | input_report_key(input, BTN_TOOL_FINGER, 1); | ||
336 | } else { | ||
337 | input_report_key(input, BTN_TOUCH, 0); | ||
338 | input_report_abs(input, ABS_WHEEL, 0); | ||
339 | input_report_key(input, BTN_TOOL_FINGER, 0); | ||
340 | } | ||
341 | sync = 1; | ||
342 | } | ||
325 | 343 | ||
326 | new_butstate = (data[3] << 1) | (data[2] & 0x01); | 344 | new_butstate = (data[3] << 1) | (data[2] & 0x01); |
327 | if (new_butstate != wdata->butstate) { | 345 | if (new_butstate != wdata->butstate) { |
@@ -336,6 +354,10 @@ static void wacom_i4_parse_button_report(struct wacom_data *wdata, | |||
336 | input_report_key(input, BTN_7, new_butstate & 0x080); | 354 | input_report_key(input, BTN_7, new_butstate & 0x080); |
337 | input_report_key(input, BTN_8, new_butstate & 0x100); | 355 | input_report_key(input, BTN_8, new_butstate & 0x100); |
338 | input_report_key(input, BTN_TOOL_FINGER, 1); | 356 | input_report_key(input, BTN_TOOL_FINGER, 1); |
357 | sync = 1; | ||
358 | } | ||
359 | |||
360 | if (sync) { | ||
339 | input_report_abs(input, ABS_MISC, PAD_DEVICE_ID); | 361 | input_report_abs(input, ABS_MISC, PAD_DEVICE_ID); |
340 | input_event(input, EV_MSC, MSC_SERIAL, 0xffffffff); | 362 | input_event(input, EV_MSC, MSC_SERIAL, 0xffffffff); |
341 | input_sync(input); | 363 | input_sync(input); |
@@ -510,6 +532,7 @@ static int wacom_input_mapped(struct hid_device *hdev, struct hid_input *hi, | |||
510 | input_set_abs_params(input, ABS_DISTANCE, 0, 32, 0, 0); | 532 | input_set_abs_params(input, ABS_DISTANCE, 0, 32, 0, 0); |
511 | break; | 533 | break; |
512 | case USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH: | 534 | case USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH: |
535 | __set_bit(ABS_WHEEL, input->absbit); | ||
513 | __set_bit(ABS_MISC, input->absbit); | 536 | __set_bit(ABS_MISC, input->absbit); |
514 | __set_bit(BTN_2, input->keybit); | 537 | __set_bit(BTN_2, input->keybit); |
515 | __set_bit(BTN_3, input->keybit); | 538 | __set_bit(BTN_3, input->keybit); |
@@ -518,6 +541,7 @@ static int wacom_input_mapped(struct hid_device *hdev, struct hid_input *hi, | |||
518 | __set_bit(BTN_6, input->keybit); | 541 | __set_bit(BTN_6, input->keybit); |
519 | __set_bit(BTN_7, input->keybit); | 542 | __set_bit(BTN_7, input->keybit); |
520 | __set_bit(BTN_8, input->keybit); | 543 | __set_bit(BTN_8, input->keybit); |
544 | input_set_abs_params(input, ABS_WHEEL, 0, 71, 0, 0); | ||
521 | input_set_abs_params(input, ABS_X, 0, 40640, 4, 0); | 545 | input_set_abs_params(input, ABS_X, 0, 40640, 4, 0); |
522 | input_set_abs_params(input, ABS_Y, 0, 25400, 4, 0); | 546 | input_set_abs_params(input, ABS_Y, 0, 25400, 4, 0); |
523 | input_set_abs_params(input, ABS_PRESSURE, 0, 2047, 0, 0); | 547 | input_set_abs_params(input, ABS_PRESSURE, 0, 2047, 0, 0); |