aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid
diff options
context:
space:
mode:
authorPrzemo Firszt <przemo@firszt.eu>2012-03-14 15:55:04 -0400
committerJiri Kosina <jkosina@suse.cz>2012-03-16 07:15:31 -0400
commit7e503a37deee55cc30d2c8643e704a98556dd367 (patch)
treeccb8ae04cc35162bc6618136e44f99050873ce93 /drivers/hid
parent9a911da8d792a2d8f9a1e07eb1c41e0d7f4ec307 (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.c24
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 @@
36struct wacom_data { 36struct 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);