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_bee(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
234 input_dev
->keybit
[BIT_WORD(BTN_MISC
)] |= BIT_MASK(BTN_8
) | BIT_MASK(BTN_9
);
237 void input_dev_i(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
239 input_dev
->evbit
[0] |= BIT_MASK(EV_MSC
) | BIT_MASK(EV_REL
);
240 input_dev
->mscbit
[0] |= BIT_MASK(MSC_SERIAL
);
241 input_dev
->relbit
[0] |= BIT_MASK(REL_WHEEL
);
242 input_dev
->keybit
[BIT_WORD(BTN_MOUSE
)] |= BIT_MASK(BTN_LEFT
) |
243 BIT_MASK(BTN_RIGHT
) | BIT_MASK(BTN_MIDDLE
) |
244 BIT_MASK(BTN_SIDE
) | BIT_MASK(BTN_EXTRA
);
245 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_RUBBER
) |
246 BIT_MASK(BTN_TOOL_MOUSE
) | BIT_MASK(BTN_TOOL_BRUSH
) |
247 BIT_MASK(BTN_TOOL_PENCIL
) | BIT_MASK(BTN_TOOL_AIRBRUSH
) |
248 BIT_MASK(BTN_TOOL_LENS
) | BIT_MASK(BTN_STYLUS2
);
249 input_set_abs_params(input_dev
, ABS_DISTANCE
, 0, wacom_wac
->features
->distance_max
, 0, 0);
250 input_set_abs_params(input_dev
, ABS_WHEEL
, 0, 1023, 0, 0);
251 input_set_abs_params(input_dev
, ABS_TILT_X
, 0, 127, 0, 0);
252 input_set_abs_params(input_dev
, ABS_TILT_Y
, 0, 127, 0, 0);
253 input_set_abs_params(input_dev
, ABS_RZ
, -900, 899, 0, 0);
254 input_set_abs_params(input_dev
, ABS_THROTTLE
, -1023, 1023, 0, 0);
257 void input_dev_pl(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
259 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_STYLUS2
);
262 void input_dev_pt(struct input_dev
*input_dev
, struct wacom_wac
*wacom_wac
)
264 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_RUBBER
);
267 static int wacom_parse_hid(struct usb_interface
*intf
, struct hid_descriptor
*hid_desc
,
268 struct wacom_wac
*wacom_wac
)
270 struct usb_device
*dev
= interface_to_usbdev(intf
);
271 struct wacom_features
*features
= wacom_wac
->features
;
272 char limit
= 0, result
= 0;
273 int i
= 0, usage
= WCM_UNDEFINED
, finger
= 0, pen
= 0;
274 unsigned char *report
;
276 report
= kzalloc(hid_desc
->wDescriptorLength
, GFP_KERNEL
);
280 /* retrive report descriptors */
282 result
= usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0),
283 USB_REQ_GET_DESCRIPTOR
,
284 USB_RECIP_INTERFACE
| USB_DIR_IN
,
285 HID_DEVICET_REPORT
<< 8,
286 intf
->altsetting
[0].desc
.bInterfaceNumber
, /* interface */
288 hid_desc
->wDescriptorLength
,
290 } while (result
< 0 && limit
++ < 5);
292 /* No need to parse the Descriptor. It isn't an error though */
296 for (i
= 0; i
< hid_desc
->wDescriptorLength
; i
++) {
300 switch (report
[i
+ 1]) {
301 case HID_USAGE_PAGE_DIGITIZER
:
302 usage
= WCM_DIGITIZER
;
306 case HID_USAGE_PAGE_DESKTOP
:
314 switch (report
[i
+ 1]) {
316 if (usage
== WCM_DESKTOP
) {
318 features
->touch_x_max
=
319 features
->touch_y_max
=
320 wacom_le16_to_cpu(&report
[i
+ 3]);
322 wacom_le16_to_cpu(&report
[i
+ 6]);
326 wacom_le16_to_cpu(&report
[i
+ 3]);
329 } else if (usage
== WCM_DIGITIZER
) {
330 /* max pressure isn't reported
331 features->pressure_max = (unsigned short)
332 (report[i+4] << 8 | report[i + 3]);
334 features
->pressure_max
= 255;
340 if (usage
== WCM_DESKTOP
)
342 wacom_le16_to_cpu(&report
[i
+ 3]);
346 case HID_USAGE_FINGER
:
351 case HID_USAGE_STYLUS
:
356 case HID_USAGE_UNDEFINED
:
357 if (usage
== WCM_DESKTOP
&& finger
) /* capacity */
358 features
->pressure_max
=
359 wacom_le16_to_cpu(&report
[i
+ 3]);
366 /* reset UsagePage ans Finger */
378 static int wacom_probe(struct usb_interface
*intf
, const struct usb_device_id
*id
)
380 struct usb_device
*dev
= interface_to_usbdev(intf
);
381 struct usb_host_interface
*interface
= intf
->cur_altsetting
;
382 struct usb_endpoint_descriptor
*endpoint
;
384 struct wacom_wac
*wacom_wac
;
385 struct wacom_features
*features
;
386 struct input_dev
*input_dev
;
388 char rep_data
[2], limit
= 0;
389 struct hid_descriptor
*hid_desc
;
391 wacom
= kzalloc(sizeof(struct wacom
), GFP_KERNEL
);
392 wacom_wac
= kzalloc(sizeof(struct wacom_wac
), GFP_KERNEL
);
393 input_dev
= input_allocate_device();
394 if (!wacom
|| !input_dev
|| !wacom_wac
)
397 wacom_wac
->data
= usb_buffer_alloc(dev
, 10, GFP_KERNEL
, &wacom
->data_dma
);
398 if (!wacom_wac
->data
)
401 wacom
->irq
= usb_alloc_urb(0, GFP_KERNEL
);
406 wacom
->dev
= input_dev
;
408 mutex_init(&wacom
->lock
);
409 usb_make_path(dev
, wacom
->phys
, sizeof(wacom
->phys
));
410 strlcat(wacom
->phys
, "/input0", sizeof(wacom
->phys
));
412 wacom_wac
->features
= features
= get_wacom_feature(id
);
413 BUG_ON(features
->pktlen
> 10);
415 input_dev
->name
= wacom_wac
->features
->name
;
416 wacom
->wacom_wac
= wacom_wac
;
417 usb_to_input_id(dev
, &input_dev
->id
);
419 input_dev
->dev
.parent
= &intf
->dev
;
421 input_set_drvdata(input_dev
, wacom
);
423 input_dev
->open
= wacom_open
;
424 input_dev
->close
= wacom_close
;
426 endpoint
= &intf
->cur_altsetting
->endpoint
[0].desc
;
428 /* Initialize touch_x_max and touch_y_max in case it is not defined */
429 if (wacom_wac
->features
->type
== TABLETPC
) {
430 features
->touch_x_max
= 1023;
431 features
->touch_y_max
= 1023;
433 features
->touch_x_max
= 0;
434 features
->touch_y_max
= 0;
437 /* TabletPC need to retrieve the physical and logical maximum from report descriptor */
438 if (wacom_wac
->features
->type
== TABLETPC
) {
439 if (usb_get_extra_descriptor(interface
, HID_DEVICET_HID
, &hid_desc
)) {
440 if (usb_get_extra_descriptor(&interface
->endpoint
[0],
441 HID_DEVICET_REPORT
, &hid_desc
)) {
442 printk("wacom: can not retrive extra class descriptor\n");
446 error
= wacom_parse_hid(intf
, hid_desc
, wacom_wac
);
451 input_dev
->evbit
[0] |= BIT_MASK(EV_KEY
) | BIT_MASK(EV_ABS
);
452 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_PEN
) |
453 BIT_MASK(BTN_TOUCH
) | BIT_MASK(BTN_STYLUS
);
454 input_set_abs_params(input_dev
, ABS_X
, 0, features
->x_max
, 4, 0);
455 input_set_abs_params(input_dev
, ABS_Y
, 0, features
->y_max
, 4, 0);
456 input_set_abs_params(input_dev
, ABS_PRESSURE
, 0, features
->pressure_max
, 0, 0);
457 if (features
->type
== TABLETPC
) {
458 input_dev
->keybit
[BIT_WORD(BTN_DIGI
)] |= BIT_MASK(BTN_TOOL_DOUBLETAP
);
459 input_set_abs_params(input_dev
, ABS_RX
, 0, features
->touch_x_max
, 4, 0);
460 input_set_abs_params(input_dev
, ABS_RY
, 0, features
->touch_y_max
, 4, 0);
462 input_dev
->absbit
[BIT_WORD(ABS_MISC
)] |= BIT_MASK(ABS_MISC
);
464 wacom_init_input_dev(input_dev
, wacom_wac
);
466 usb_fill_int_urb(wacom
->irq
, dev
,
467 usb_rcvintpipe(dev
, endpoint
->bEndpointAddress
),
468 wacom_wac
->data
, wacom_wac
->features
->pktlen
,
469 wacom_sys_irq
, wacom
, endpoint
->bInterval
);
470 wacom
->irq
->transfer_dma
= wacom
->data_dma
;
471 wacom
->irq
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
473 error
= input_register_device(wacom
->dev
);
478 * Ask the tablet to report tablet data if it is not a Tablet PC.
479 * Repeat until it succeeds
481 if (wacom_wac
->features
->type
!= TABLETPC
) {
485 error
= usb_set_report(intf
, WAC_HID_FEATURE_REPORT
,
488 error
= usb_get_report(intf
,
489 WAC_HID_FEATURE_REPORT
, 2,
491 } while ((error
< 0 || rep_data
[1] != 2) && limit
++ < 5);
494 usb_set_intfdata(intf
, wacom
);
497 fail3
: usb_free_urb(wacom
->irq
);
498 fail2
: usb_buffer_free(dev
, 10, wacom_wac
->data
, wacom
->data_dma
);
499 fail1
: input_free_device(input_dev
);
505 static void wacom_disconnect(struct usb_interface
*intf
)
507 struct wacom
*wacom
= usb_get_intfdata(intf
);
509 usb_set_intfdata(intf
, NULL
);
511 usb_kill_urb(wacom
->irq
);
512 input_unregister_device(wacom
->dev
);
513 usb_free_urb(wacom
->irq
);
514 usb_buffer_free(interface_to_usbdev(intf
), 10,
515 wacom
->wacom_wac
->data
, wacom
->data_dma
);
516 kfree(wacom
->wacom_wac
);
520 static int wacom_suspend(struct usb_interface
*intf
, pm_message_t message
)
522 struct wacom
*wacom
= usb_get_intfdata(intf
);
524 mutex_lock(&wacom
->lock
);
525 usb_kill_urb(wacom
->irq
);
526 mutex_unlock(&wacom
->lock
);
531 static int wacom_resume(struct usb_interface
*intf
)
533 struct wacom
*wacom
= usb_get_intfdata(intf
);
536 mutex_lock(&wacom
->lock
);
538 rv
= usb_submit_urb(wacom
->irq
, GFP_NOIO
);
541 mutex_unlock(&wacom
->lock
);
546 static int wacom_reset_resume(struct usb_interface
*intf
)
548 return wacom_resume(intf
);
551 static struct usb_driver wacom_driver
= {
553 .probe
= wacom_probe
,
554 .disconnect
= wacom_disconnect
,
555 .suspend
= wacom_suspend
,
556 .resume
= wacom_resume
,
557 .reset_resume
= wacom_reset_resume
,
558 .supports_autosuspend
= 1,
561 static int __init
wacom_init(void)
564 wacom_driver
.id_table
= get_device_table();
565 result
= usb_register(&wacom_driver
);
567 printk(KERN_INFO KBUILD_MODNAME
": " DRIVER_VERSION
":"
572 static void __exit
wacom_exit(void)
574 usb_deregister(&wacom_driver
);
577 module_init(wacom_init
);
578 module_exit(wacom_exit
);