2 * drivers/input/tablet/wacom_sys.c
4 * USB Wacom Graphire and Wacom Intuos tablet support - system specific code
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
15 #include "wacom_wac.h"
17 /* defines to get HID report descriptor */
18 #define HID_DEVICET_HID (USB_TYPE_CLASS | 0x01)
19 #define HID_DEVICET_REPORT (USB_TYPE_CLASS | 0x02)
20 #define HID_USAGE_UNDEFINED 0x00
21 #define HID_USAGE_PAGE 0x05
22 #define HID_USAGE_PAGE_DIGITIZER 0x0d
23 #define HID_USAGE_PAGE_DESKTOP 0x01
24 #define HID_USAGE 0x09
25 #define HID_USAGE_X 0x30
26 #define HID_USAGE_Y 0x31
27 #define HID_USAGE_X_TILT 0x3d
28 #define HID_USAGE_Y_TILT 0x3e
29 #define HID_USAGE_FINGER 0x22
30 #define HID_USAGE_STYLUS 0x20
31 #define HID_COLLECTION 0xc0
39 struct hid_descriptor
{
40 struct usb_descriptor_header header
;
45 __le16 wDescriptorLength
;
46 } __attribute__ ((packed
));
48 /* defines to get/set USB message */
49 #define USB_REQ_GET_REPORT 0x01
50 #define USB_REQ_SET_REPORT 0x09
51 #define WAC_HID_FEATURE_REPORT 0x03
53 static int usb_get_report(struct usb_interface
*intf
, unsigned char type
,
54 unsigned char id
, void *buf
, int size
)
56 return usb_control_msg(interface_to_usbdev(intf
),
57 usb_rcvctrlpipe(interface_to_usbdev(intf
), 0),
58 USB_REQ_GET_REPORT
, USB_TYPE_CLASS
| USB_RECIP_INTERFACE
,
59 (type
<< 8) + id
, intf
->altsetting
[0].desc
.bInterfaceNumber
,
63 static int usb_set_report(struct usb_interface
*intf
, unsigned char type
,
64 unsigned char id
, void *buf
, int size
)
66 return usb_control_msg(interface_to_usbdev(intf
),
67 usb_sndctrlpipe(interface_to_usbdev(intf
), 0),
68 USB_REQ_SET_REPORT
, USB_TYPE_CLASS
| USB_RECIP_INTERFACE
,
69 (type
<< 8) + id
, intf
->altsetting
[0].desc
.bInterfaceNumber
,
73 static struct input_dev
* get_input_dev(struct wacom_combo
*wcombo
)
75 return wcombo
->wacom
->dev
;
78 static void wacom_sys_irq(struct urb
*urb
)
80 struct wacom
*wacom
= urb
->context
;
81 struct wacom_combo wcombo
;
84 switch (urb
->status
) {
91 /* this urb is terminated, clean up */
92 dbg("%s - urb shutting down with status: %d", __func__
, urb
->status
);
95 dbg("%s - nonzero urb status received: %d", __func__
, urb
->status
);
102 if (wacom_wac_irq(wacom
->wacom_wac
, (void *)&wcombo
))
103 input_sync(get_input_dev(&wcombo
));
106 usb_mark_last_busy(wacom
->usbdev
);
107 retval
= usb_submit_urb (urb
, GFP_ATOMIC
);
109 err ("%s - usb_submit_urb failed with result %d",
113 void wacom_report_key(void *wcombo
, unsigned int key_type
, int key_data
)
115 input_report_key(get_input_dev((struct wacom_combo
*)wcombo
), key_type
, key_data
);
118 void wacom_report_abs(void *wcombo
, unsigned int abs_type
, int abs_data
)
120 input_report_abs(get_input_dev((struct wacom_combo
*)wcombo
), abs_type
, abs_data
);
123 void wacom_report_rel(void *wcombo
, unsigned int rel_type
, int rel_data
)
125 input_report_rel(get_input_dev((struct wacom_combo
*)wcombo
), rel_type
, rel_data
);
128 void wacom_input_event(void *wcombo
, unsigned int type
, unsigned int code
, int value
)
130 input_event(get_input_dev((struct wacom_combo
*)wcombo
), type
, code
, value
);
133 __u16
wacom_be16_to_cpu(unsigned char *data
)
136 value
= be16_to_cpu(*(__be16
*) data
);
140 __u16
wacom_le16_to_cpu(unsigned char *data
)
143 value
= le16_to_cpu(*(__le16
*) data
);
147 void wacom_input_sync(void *wcombo
)
149 input_sync(get_input_dev((struct wacom_combo
*)wcombo
));
152 static int wacom_open(struct input_dev
*dev
)
154 struct wacom
*wacom
= input_get_drvdata(dev
);
156 mutex_lock(&wacom
->lock
);
158 wacom
->irq
->dev
= wacom
->usbdev
;
160 if (usb_autopm_get_interface(wacom
->intf
) < 0) {
161 mutex_unlock(&wacom
->lock
);
165 if (usb_submit_urb(wacom
->irq
, GFP_KERNEL
)) {
166 usb_autopm_put_interface(wacom
->intf
);
167 mutex_unlock(&wacom
->lock
);
172 wacom
->intf
->needs_remote_wakeup
= 1;
174 mutex_unlock(&wacom
->lock
);
178 static void wacom_close(struct input_dev
*dev
)
180 struct wacom
*wacom
= input_get_drvdata(dev
);
182 mutex_lock(&wacom
->lock
);
183 usb_kill_urb(wacom
->irq
);
185 wacom
->intf
->needs_remote_wakeup
= 0;
186 mutex_unlock(&wacom
->lock
);
189 void input_dev_mo(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
191 input_dev
->keybit
[BIT_WORD(BTN_MISC
)] |= BIT_MASK(BTN_1
) |
193 input_set_abs_params(input_dev
, ABS_WHEEL
, 0, 71, 0, 0);
196 void input_dev_g4(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
198 input_dev
->evbit
[0] |= BIT_MASK(EV_MSC
);
199 input_dev
->mscbit
[0] |= BIT_MASK(MSC_SERIAL
);
200 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_FINGER
);
201 input_dev
->keybit
[BIT_WORD(BTN_MISC
)] |= BIT_MASK(BTN_0
) |
205 void input_dev_g(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
207 input_dev
->evbit
[0] |= BIT_MASK(EV_REL
);
208 input_dev
->relbit
[0] |= BIT_MASK(REL_WHEEL
);
209 input_dev
->keybit
[BIT_WORD(BTN_MOUSE
)] |= BIT_MASK(BTN_LEFT
) |
210 BIT_MASK(BTN_RIGHT
) | BIT_MASK(BTN_MIDDLE
);
211 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_RUBBER
) |
212 BIT_MASK(BTN_TOOL_MOUSE
) | BIT_MASK(BTN_STYLUS2
);
213 input_set_abs_params(input_dev
, ABS_DISTANCE
, 0, wacom_wac
->features
->distance_max
, 0, 0);
216 void input_dev_i3s(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
218 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_FINGER
);
219 input_dev
->keybit
[BIT_WORD(BTN_MISC
)] |= BIT_MASK(BTN_0
) |
220 BIT_MASK(BTN_1
) | BIT_MASK(BTN_2
) | BIT_MASK(BTN_3
);
221 input_set_abs_params(input_dev
, ABS_RX
, 0, 4096, 0, 0);
222 input_set_abs_params(input_dev
, ABS_Z
, -900, 899, 0, 0);
225 void input_dev_i3(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
227 input_dev
->keybit
[BIT_WORD(BTN_MISC
)] |= BIT_MASK(BTN_4
) |
228 BIT_MASK(BTN_5
) | BIT_MASK(BTN_6
) | BIT_MASK(BTN_7
);
229 input_set_abs_params(input_dev
, ABS_RY
, 0, 4096, 0, 0);
232 void input_dev_i4s(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
234 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_FINGER
);
235 input_dev
->keybit
[BIT_WORD(BTN_MISC
)] |= BIT_MASK(BTN_0
) | BIT_MASK(BTN_1
) | BIT_MASK(BTN_2
) | BIT_MASK(BTN_3
);
236 input_dev
->keybit
[BIT_WORD(BTN_MISC
)] |= BIT_MASK(BTN_4
) | BIT_MASK(BTN_5
) | BIT_MASK(BTN_6
);
237 input_set_abs_params(input_dev
, ABS_Z
, -900, 899, 0, 0);
240 void input_dev_i4(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
242 input_dev
->keybit
[BIT_WORD(BTN_MISC
)] |= BIT_MASK(BTN_7
) | BIT_MASK(BTN_8
);
245 void input_dev_bee(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
247 input_dev
->keybit
[BIT_WORD(BTN_MISC
)] |= BIT_MASK(BTN_8
) | BIT_MASK(BTN_9
);
250 void input_dev_i(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
252 input_dev
->evbit
[0] |= BIT_MASK(EV_MSC
) | BIT_MASK(EV_REL
);
253 input_dev
->mscbit
[0] |= BIT_MASK(MSC_SERIAL
);
254 input_dev
->relbit
[0] |= BIT_MASK(REL_WHEEL
);
255 input_dev
->keybit
[BIT_WORD(BTN_MOUSE
)] |= BIT_MASK(BTN_LEFT
) |
256 BIT_MASK(BTN_RIGHT
) | BIT_MASK(BTN_MIDDLE
) |
257 BIT_MASK(BTN_SIDE
) | BIT_MASK(BTN_EXTRA
);
258 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_RUBBER
) |
259 BIT_MASK(BTN_TOOL_MOUSE
) | BIT_MASK(BTN_TOOL_BRUSH
) |
260 BIT_MASK(BTN_TOOL_PENCIL
) | BIT_MASK(BTN_TOOL_AIRBRUSH
) |
261 BIT_MASK(BTN_TOOL_LENS
) | BIT_MASK(BTN_STYLUS2
);
262 input_set_abs_params(input_dev
, ABS_DISTANCE
, 0, wacom_wac
->features
->distance_max
, 0, 0);
263 input_set_abs_params(input_dev
, ABS_WHEEL
, 0, 1023, 0, 0);
264 input_set_abs_params(input_dev
, ABS_TILT_X
, 0, 127, 0, 0);
265 input_set_abs_params(input_dev
, ABS_TILT_Y
, 0, 127, 0, 0);
266 input_set_abs_params(input_dev
, ABS_RZ
, -900, 899, 0, 0);
267 input_set_abs_params(input_dev
, ABS_THROTTLE
, -1023, 1023, 0, 0);
270 void input_dev_pl(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
272 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_STYLUS2
);
275 void input_dev_pt(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
277 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_RUBBER
);
280 static int wacom_parse_hid(struct usb_interface
*intf
, struct hid_descriptor
*hid_desc
,
281 struct wacom_wac
*wacom_wac
)
283 struct usb_device
*dev
= interface_to_usbdev(intf
);
284 struct wacom_features
*features
= wacom_wac
->features
;
285 char limit
= 0, result
= 0;
286 int i
= 0, usage
= WCM_UNDEFINED
, finger
= 0, pen
= 0;
287 unsigned char *report
;
289 report
= kzalloc(hid_desc
->wDescriptorLength
, GFP_KERNEL
);
293 /* retrive report descriptors */
295 result
= usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0),
296 USB_REQ_GET_DESCRIPTOR
,
297 USB_RECIP_INTERFACE
| USB_DIR_IN
,
298 HID_DEVICET_REPORT
<< 8,
299 intf
->altsetting
[0].desc
.bInterfaceNumber
, /* interface */
301 hid_desc
->wDescriptorLength
,
303 } while (result
< 0 && limit
++ < 5);
305 /* No need to parse the Descriptor. It isn't an error though */
309 for (i
= 0; i
< hid_desc
->wDescriptorLength
; i
++) {
313 switch (report
[i
+ 1]) {
314 case HID_USAGE_PAGE_DIGITIZER
:
315 usage
= WCM_DIGITIZER
;
319 case HID_USAGE_PAGE_DESKTOP
:
327 switch (report
[i
+ 1]) {
329 if (usage
== WCM_DESKTOP
) {
331 features
->touch_x_max
=
332 features
->touch_y_max
=
333 wacom_le16_to_cpu(&report
[i
+ 3]);
335 wacom_le16_to_cpu(&report
[i
+ 6]);
339 wacom_le16_to_cpu(&report
[i
+ 3]);
342 } else if (usage
== WCM_DIGITIZER
) {
343 /* max pressure isn't reported
344 features->pressure_max = (unsigned short)
345 (report[i+4] << 8 | report[i + 3]);
347 features
->pressure_max
= 255;
353 if (usage
== WCM_DESKTOP
)
355 wacom_le16_to_cpu(&report
[i
+ 3]);
359 case HID_USAGE_FINGER
:
364 case HID_USAGE_STYLUS
:
369 case HID_USAGE_UNDEFINED
:
370 if (usage
== WCM_DESKTOP
&& finger
) /* capacity */
371 features
->pressure_max
=
372 wacom_le16_to_cpu(&report
[i
+ 3]);
379 /* reset UsagePage ans Finger */
391 static int wacom_probe(struct usb_interface
*intf
, const struct usb_device_id
*id
)
393 struct usb_device
*dev
= interface_to_usbdev(intf
);
394 struct usb_host_interface
*interface
= intf
->cur_altsetting
;
395 struct usb_endpoint_descriptor
*endpoint
;
397 struct wacom_wac
*wacom_wac
;
398 struct wacom_features
*features
;
399 struct input_dev
*input_dev
;
401 char rep_data
[2], limit
= 0;
402 struct hid_descriptor
*hid_desc
;
404 wacom
= kzalloc(sizeof(struct wacom
), GFP_KERNEL
);
405 wacom_wac
= kzalloc(sizeof(struct wacom_wac
), GFP_KERNEL
);
406 input_dev
= input_allocate_device();
407 if (!wacom
|| !input_dev
|| !wacom_wac
)
410 wacom_wac
->data
= usb_buffer_alloc(dev
, 10, GFP_KERNEL
, &wacom
->data_dma
);
411 if (!wacom_wac
->data
)
414 wacom
->irq
= usb_alloc_urb(0, GFP_KERNEL
);
419 wacom
->dev
= input_dev
;
421 mutex_init(&wacom
->lock
);
422 usb_make_path(dev
, wacom
->phys
, sizeof(wacom
->phys
));
423 strlcat(wacom
->phys
, "/input0", sizeof(wacom
->phys
));
425 wacom_wac
->features
= features
= get_wacom_feature(id
);
426 BUG_ON(features
->pktlen
> 10);
428 input_dev
->name
= wacom_wac
->features
->name
;
429 wacom
->wacom_wac
= wacom_wac
;
430 usb_to_input_id(dev
, &input_dev
->id
);
432 input_dev
->dev
.parent
= &intf
->dev
;
434 input_set_drvdata(input_dev
, wacom
);
436 input_dev
->open
= wacom_open
;
437 input_dev
->close
= wacom_close
;
439 endpoint
= &intf
->cur_altsetting
->endpoint
[0].desc
;
441 /* Initialize touch_x_max and touch_y_max in case it is not defined */
442 if (wacom_wac
->features
->type
== TABLETPC
) {
443 features
->touch_x_max
= 1023;
444 features
->touch_y_max
= 1023;
446 features
->touch_x_max
= 0;
447 features
->touch_y_max
= 0;
450 /* TabletPC need to retrieve the physical and logical maximum from report descriptor */
451 if (wacom_wac
->features
->type
== TABLETPC
) {
452 if (usb_get_extra_descriptor(interface
, HID_DEVICET_HID
, &hid_desc
)) {
453 if (usb_get_extra_descriptor(&interface
->endpoint
[0],
454 HID_DEVICET_REPORT
, &hid_desc
)) {
455 printk("wacom: can not retrive extra class descriptor\n");
459 error
= wacom_parse_hid(intf
, hid_desc
, wacom_wac
);
464 input_dev
->evbit
[0] |= BIT_MASK(EV_KEY
) | BIT_MASK(EV_ABS
);
465 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_PEN
) |
466 BIT_MASK(BTN_TOUCH
) | BIT_MASK(BTN_STYLUS
);
467 input_set_abs_params(input_dev
, ABS_X
, 0, features
->x_max
, 4, 0);
468 input_set_abs_params(input_dev
, ABS_Y
, 0, features
->y_max
, 4, 0);
469 input_set_abs_params(input_dev
, ABS_PRESSURE
, 0, features
->pressure_max
, 0, 0);
470 if (features
->type
== TABLETPC
) {
471 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_DOUBLETAP
);
472 input_set_abs_params(input_dev
, ABS_RX
, 0, features
->touch_x_max
, 4, 0);
473 input_set_abs_params(input_dev
, ABS_RY
, 0, features
->touch_y_max
, 4, 0);
475 input_dev
->absbit
[BIT_WORD(ABS_MISC
)] |= BIT_MASK(ABS_MISC
);
477 wacom_init_input_dev(input_dev
, wacom_wac
);
479 usb_fill_int_urb(wacom
->irq
, dev
,
480 usb_rcvintpipe(dev
, endpoint
->bEndpointAddress
),
481 wacom_wac
->data
, wacom_wac
->features
->pktlen
,
482 wacom_sys_irq
, wacom
, endpoint
->bInterval
);
483 wacom
->irq
->transfer_dma
= wacom
->data_dma
;
484 wacom
->irq
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
486 error
= input_register_device(wacom
->dev
);
491 * Ask the tablet to report tablet data if it is not a Tablet PC.
492 * Repeat until it succeeds
494 if (wacom_wac
->features
->type
!= TABLETPC
) {
498 error
= usb_set_report(intf
, WAC_HID_FEATURE_REPORT
,
501 error
= usb_get_report(intf
,
502 WAC_HID_FEATURE_REPORT
, 2,
504 } while ((error
< 0 || rep_data
[1] != 2) && limit
++ < 5);
507 usb_set_intfdata(intf
, wacom
);
510 fail3
: usb_free_urb(wacom
->irq
);
511 fail2
: usb_buffer_free(dev
, 10, wacom_wac
->data
, wacom
->data_dma
);
512 fail1
: input_free_device(input_dev
);
518 static void wacom_disconnect(struct usb_interface
*intf
)
520 struct wacom
*wacom
= usb_get_intfdata(intf
);
522 usb_set_intfdata(intf
, NULL
);
524 usb_kill_urb(wacom
->irq
);
525 input_unregister_device(wacom
->dev
);
526 usb_free_urb(wacom
->irq
);
527 usb_buffer_free(interface_to_usbdev(intf
), 10,
528 wacom
->wacom_wac
->data
, wacom
->data_dma
);
529 kfree(wacom
->wacom_wac
);
533 static int wacom_suspend(struct usb_interface
*intf
, pm_message_t message
)
535 struct wacom
*wacom
= usb_get_intfdata(intf
);
537 mutex_lock(&wacom
->lock
);
538 usb_kill_urb(wacom
->irq
);
539 mutex_unlock(&wacom
->lock
);
544 static int wacom_resume(struct usb_interface
*intf
)
546 struct wacom
*wacom
= usb_get_intfdata(intf
);
549 mutex_lock(&wacom
->lock
);
551 rv
= usb_submit_urb(wacom
->irq
, GFP_NOIO
);
554 mutex_unlock(&wacom
->lock
);
559 static int wacom_reset_resume(struct usb_interface
*intf
)
561 return wacom_resume(intf
);
564 static struct usb_driver wacom_driver
= {
566 .probe
= wacom_probe
,
567 .disconnect
= wacom_disconnect
,
568 .suspend
= wacom_suspend
,
569 .resume
= wacom_resume
,
570 .reset_resume
= wacom_reset_resume
,
571 .supports_autosuspend
= 1,
574 static int __init
wacom_init(void)
577 wacom_driver
.id_table
= get_device_table();
578 result
= usb_register(&wacom_driver
);
580 printk(KERN_INFO KBUILD_MODNAME
": " DRIVER_VERSION
":"
585 static void __exit
wacom_exit(void)
587 usb_deregister(&wacom_driver
);
590 module_init(wacom_init
);
591 module_exit(wacom_exit
);