diff options
Diffstat (limited to 'drivers/hid/hid-uclogic.c')
-rw-r--r-- | drivers/hid/hid-uclogic.c | 413 |
1 files changed, 11 insertions, 402 deletions
diff --git a/drivers/hid/hid-uclogic.c b/drivers/hid/hid-uclogic.c index e15732f1a22d..1f1128910337 100644 --- a/drivers/hid/hid-uclogic.c +++ b/drivers/hid/hid-uclogic.c | |||
@@ -18,141 +18,16 @@ | |||
18 | #include "hid-ids.h" | 18 | #include "hid-ids.h" |
19 | 19 | ||
20 | /* | 20 | /* |
21 | * The original descriptors of WPXXXXU tablets have three report IDs, of | 21 | * See WPXXXXU model descriptions, device and HID report descriptors at |
22 | * which only two are used (8 and 9), and the remaining (7) seems to have | 22 | * http://sf.net/apps/mediawiki/digimend/?title=UC-Logic_Tablet_WP4030U |
23 | * the originally intended pen description which was abandoned for some | 23 | * http://sf.net/apps/mediawiki/digimend/?title=UC-Logic_Tablet_WP5540U |
24 | * reason. From this unused description it is possible to extract the | 24 | * http://sf.net/apps/mediawiki/digimend/?title=UC-Logic_Tablet_WP8060U |
25 | * actual physical extents and resolution. All the models use the same | ||
26 | * descriptor with different extents for the unused report ID. | ||
27 | * | ||
28 | * Here it is: | ||
29 | * | ||
30 | * Usage Page (Digitizer), ; Digitizer (0Dh) | ||
31 | * Usage (Pen), ; Pen (02h, application collection) | ||
32 | * Collection (Application), | ||
33 | * Report ID (7), | ||
34 | * Usage (Stylus), ; Stylus (20h, logical collection) | ||
35 | * Collection (Physical), | ||
36 | * Usage (Tip Switch), ; Tip switch (42h, momentary control) | ||
37 | * Usage (Barrel Switch), ; Barrel switch (44h, momentary control) | ||
38 | * Usage (Eraser), ; Eraser (45h, momentary control) | ||
39 | * Logical Minimum (0), | ||
40 | * Logical Maximum (1), | ||
41 | * Report Size (1), | ||
42 | * Report Count (3), | ||
43 | * Input (Variable), | ||
44 | * Report Count (3), | ||
45 | * Input (Constant, Variable), | ||
46 | * Usage (In Range), ; In range (32h, momentary control) | ||
47 | * Report Count (1), | ||
48 | * Input (Variable), | ||
49 | * Report Count (1), | ||
50 | * Input (Constant, Variable), | ||
51 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
52 | * Usage (X), ; X (30h, dynamic value) | ||
53 | * Report Size (16), | ||
54 | * Report Count (1), | ||
55 | * Push, | ||
56 | * Unit Exponent (13), | ||
57 | * Unit (Inch^3), | ||
58 | * Physical Minimum (0), | ||
59 | * Physical Maximum (Xpm), | ||
60 | * Logical Maximum (Xlm), | ||
61 | * Input (Variable), | ||
62 | * Usage (Y), ; Y (31h, dynamic value) | ||
63 | * Physical Maximum (Ypm), | ||
64 | * Logical Maximum (Ylm), | ||
65 | * Input (Variable), | ||
66 | * Pop, | ||
67 | * Usage Page (Digitizer), ; Digitizer (0Dh) | ||
68 | * Usage (Tip Pressure), ; Tip pressure (30h, dynamic value) | ||
69 | * Logical Maximum (1023), | ||
70 | * Input (Variable), | ||
71 | * Report Size (16), | ||
72 | * End Collection, | ||
73 | * End Collection, | ||
74 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
75 | * Usage (Mouse), ; Mouse (02h, application collection) | ||
76 | * Collection (Application), | ||
77 | * Report ID (8), | ||
78 | * Usage (Pointer), ; Pointer (01h, physical collection) | ||
79 | * Collection (Physical), | ||
80 | * Usage Page (Button), ; Button (09h) | ||
81 | * Usage Minimum (01h), | ||
82 | * Usage Maximum (03h), | ||
83 | * Logical Minimum (0), | ||
84 | * Logical Maximum (1), | ||
85 | * Report Count (3), | ||
86 | * Report Size (1), | ||
87 | * Input (Variable), | ||
88 | * Report Count (5), | ||
89 | * Input (Constant), | ||
90 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
91 | * Usage (X), ; X (30h, dynamic value) | ||
92 | * Usage (Y), ; Y (31h, dynamic value) | ||
93 | * Usage (Wheel), ; Wheel (38h, dynamic value) | ||
94 | * Usage (00h), | ||
95 | * Logical Minimum (-127), | ||
96 | * Logical Maximum (127), | ||
97 | * Report Size (8), | ||
98 | * Report Count (4), | ||
99 | * Input (Variable, Relative), | ||
100 | * End Collection, | ||
101 | * End Collection, | ||
102 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
103 | * Usage (Mouse), ; Mouse (02h, application collection) | ||
104 | * Collection (Application), | ||
105 | * Report ID (9), | ||
106 | * Usage (Pointer), ; Pointer (01h, physical collection) | ||
107 | * Collection (Physical), | ||
108 | * Usage Page (Button), ; Button (09h) | ||
109 | * Usage Minimum (01h), | ||
110 | * Usage Maximum (03h), | ||
111 | * Logical Minimum (0), | ||
112 | * Logical Maximum (1), | ||
113 | * Report Count (3), | ||
114 | * Report Size (1), | ||
115 | * Input (Variable), | ||
116 | * Report Count (5), | ||
117 | * Input (Constant), | ||
118 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
119 | * Usage (X), ; X (30h, dynamic value) | ||
120 | * Usage (Y), ; Y (31h, dynamic value) | ||
121 | * Logical Minimum (0), | ||
122 | * Logical Maximum (32767), | ||
123 | * Physical Minimum (0), | ||
124 | * Physical Maximum (32767), | ||
125 | * Report Count (2), | ||
126 | * Report Size (16), | ||
127 | * Input (Variable), | ||
128 | * Usage Page (Digitizer), ; Digitizer (0Dh) | ||
129 | * Usage (Tip Pressure), ; Tip pressure (30h, dynamic value) | ||
130 | * Logical Maximum (1023), | ||
131 | * Report Count (1), | ||
132 | * Report Size (16), | ||
133 | * Input (Variable), | ||
134 | * End Collection, | ||
135 | * End Collection | ||
136 | * | ||
137 | * Here are the extents values for the WPXXXXU models: | ||
138 | * | ||
139 | * Xpm Xlm Ypm Ylm | ||
140 | * WP4030U 4000 8000 3000 6000 | ||
141 | * WP5540U 5500 11000 4000 8000 | ||
142 | * WP8060U 8000 16000 6000 12000 | ||
143 | * | ||
144 | * This suggests that all of them have 2000 LPI resolution, as advertised. | ||
145 | */ | 25 | */ |
146 | 26 | ||
147 | /* Size of the original descriptor of WPXXXXU tablets */ | 27 | /* Size of the original descriptor of WPXXXXU tablets */ |
148 | #define WPXXXXU_RDESC_ORIG_SIZE 212 | 28 | #define WPXXXXU_RDESC_ORIG_SIZE 212 |
149 | 29 | ||
150 | /* | 30 | /* Fixed WP4030U report descriptor */ |
151 | * Fixed WP4030U report descriptor. | ||
152 | * Although the hardware might actually support it, the mouse description | ||
153 | * has been removed, since there seems to be no devices having one and it | ||
154 | * wouldn't make much sense because of the working area size. | ||
155 | */ | ||
156 | static __u8 wp4030u_rdesc_fixed[] = { | 31 | static __u8 wp4030u_rdesc_fixed[] = { |
157 | 0x05, 0x0D, /* Usage Page (Digitizer), */ | 32 | 0x05, 0x0D, /* Usage Page (Digitizer), */ |
158 | 0x09, 0x02, /* Usage (Pen), */ | 33 | 0x09, 0x02, /* Usage (Pen), */ |
@@ -343,148 +218,14 @@ static __u8 wp8060u_rdesc_fixed[] = { | |||
343 | }; | 218 | }; |
344 | 219 | ||
345 | /* | 220 | /* |
346 | * Original WP1062 report descriptor. | 221 | * See WP1062 description, device and HID report descriptors at |
347 | * | 222 | * http://sf.net/apps/mediawiki/digimend/?title=UC-Logic_Tablet_WP1062 |
348 | * Only report ID 9 is actually used. | ||
349 | * | ||
350 | * Usage Page (Digitizer), ; Digitizer (0Dh) | ||
351 | * Usage (Pen), ; Pen (02h, application collection) | ||
352 | * Collection (Application), | ||
353 | * Report ID (7), | ||
354 | * Usage (Stylus), ; Stylus (20h, logical collection) | ||
355 | * Collection (Physical), | ||
356 | * Usage (Tip Switch), ; Tip switch (42h, momentary control) | ||
357 | * Usage (Barrel Switch), ; Barrel switch (44h, momentary control) | ||
358 | * Usage (Eraser), ; Eraser (45h, momentary control) | ||
359 | * Logical Minimum (0), | ||
360 | * Logical Maximum (1), | ||
361 | * Report Size (1), | ||
362 | * Report Count (3), | ||
363 | * Input (Variable), | ||
364 | * Report Count (3), | ||
365 | * Input (Constant, Variable), | ||
366 | * Usage (In Range), ; In range (32h, momentary control) | ||
367 | * Report Count (1), | ||
368 | * Input (Variable), | ||
369 | * Report Count (1), | ||
370 | * Input (Constant, Variable), | ||
371 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
372 | * Usage (X), ; X (30h, dynamic value) | ||
373 | * Report Size (16), | ||
374 | * Report Count (1), | ||
375 | * Push, | ||
376 | * Unit Exponent (13), | ||
377 | * Unit (Inch), | ||
378 | * Physical Minimum (0), | ||
379 | * Physical Maximum (10000), | ||
380 | * Logical Maximum (20000), | ||
381 | * Input (Variable), | ||
382 | * Usage (Y), ; Y (31h, dynamic value) | ||
383 | * Physical Maximum (6583), | ||
384 | * Logical Maximum (13166), | ||
385 | * Input (Variable), | ||
386 | * Pop, | ||
387 | * Usage Page (Digitizer), ; Digitizer (0Dh) | ||
388 | * Usage (Tip Pressure), ; Tip pressure (30h, dynamic value) | ||
389 | * Logical Maximum (1023), | ||
390 | * Input (Variable), | ||
391 | * Report Size (16), | ||
392 | * End Collection, | ||
393 | * End Collection, | ||
394 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
395 | * Usage (Mouse), ; Mouse (02h, application collection) | ||
396 | * Collection (Application), | ||
397 | * Report ID (8), | ||
398 | * Usage (Pointer), ; Pointer (01h, physical collection) | ||
399 | * Collection (Physical), | ||
400 | * Usage Page (Button), ; Button (09h) | ||
401 | * Usage Minimum (01h), | ||
402 | * Usage Maximum (03h), | ||
403 | * Logical Minimum (0), | ||
404 | * Logical Maximum (1), | ||
405 | * Report Count (3), | ||
406 | * Report Size (1), | ||
407 | * Input (Variable), | ||
408 | * Report Count (5), | ||
409 | * Input (Constant), | ||
410 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
411 | * Usage (X), ; X (30h, dynamic value) | ||
412 | * Usage (Y), ; Y (31h, dynamic value) | ||
413 | * Usage (Wheel), ; Wheel (38h, dynamic value) | ||
414 | * Usage (00h), | ||
415 | * Logical Minimum (-127), | ||
416 | * Logical Maximum (127), | ||
417 | * Report Size (8), | ||
418 | * Report Count (4), | ||
419 | * Input (Variable, Relative), | ||
420 | * End Collection, | ||
421 | * End Collection, | ||
422 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
423 | * Usage (Mouse), ; Mouse (02h, application collection) | ||
424 | * Collection (Application), | ||
425 | * Report ID (9), | ||
426 | * Usage (Pointer), ; Pointer (01h, physical collection) | ||
427 | * Collection (Physical), | ||
428 | * Usage Page (Button), ; Button (09h) | ||
429 | * Usage Minimum (01h), | ||
430 | * Usage Maximum (03h), | ||
431 | * Logical Minimum (0), | ||
432 | * Logical Maximum (1), | ||
433 | * Report Count (3), | ||
434 | * Report Size (1), | ||
435 | * Input (Variable), | ||
436 | * Report Count (4), | ||
437 | * Input (Constant), | ||
438 | * Usage Page (Digitizer), ; Digitizer (0Dh) | ||
439 | * Usage (In Range), ; In range (32h, momentary control) | ||
440 | * Report Count (1), | ||
441 | * Input (Variable), | ||
442 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
443 | * Usage (X), ; X (30h, dynamic value) | ||
444 | * Report Size (16), | ||
445 | * Report Count (1), | ||
446 | * Push, | ||
447 | * Unit Exponent (13), | ||
448 | * Unit (Inch), | ||
449 | * Physical Minimum (0), | ||
450 | * Physical Maximum (10000), | ||
451 | * Logical Maximum (20000), | ||
452 | * Input (Variable), | ||
453 | * Usage (Y), ; Y (31h, dynamic value) | ||
454 | * Physical Maximum (6583), | ||
455 | * Logical Maximum (13166), | ||
456 | * Input (Variable), | ||
457 | * Pop, | ||
458 | * Usage Page (Digitizer), ; Digitizer (0Dh) | ||
459 | * Usage (Tip Pressure), ; Tip pressure (30h, dynamic value) | ||
460 | * Logical Maximum (1023), | ||
461 | * Report Count (1), | ||
462 | * Report Size (16), | ||
463 | * Input (Variable), | ||
464 | * End Collection, | ||
465 | * End Collection, | ||
466 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
467 | * Usage (00h), | ||
468 | * Collection (Application), | ||
469 | * Report ID (4), | ||
470 | * Logical Minimum (0), | ||
471 | * Logical Maximum (255), | ||
472 | * Usage (00h), | ||
473 | * Report Size (8), | ||
474 | * Report Count (3), | ||
475 | * Feature (Variable), | ||
476 | * End Collection | ||
477 | */ | 223 | */ |
478 | 224 | ||
479 | /* Size of the original descriptor of WP1062 tablet */ | 225 | /* Size of the original descriptor of WP1062 tablet */ |
480 | #define WP1062_RDESC_ORIG_SIZE 254 | 226 | #define WP1062_RDESC_ORIG_SIZE 254 |
481 | 227 | ||
482 | /* | 228 | /* Fixed WP1062 report descriptor */ |
483 | * Fixed WP1062 report descriptor. | ||
484 | * | ||
485 | * Removed unused reports, corrected second barrel button usage code, physical | ||
486 | * units. | ||
487 | */ | ||
488 | static __u8 wp1062_rdesc_fixed[] = { | 229 | static __u8 wp1062_rdesc_fixed[] = { |
489 | 0x05, 0x0D, /* Usage Page (Digitizer), */ | 230 | 0x05, 0x0D, /* Usage Page (Digitizer), */ |
490 | 0x09, 0x02, /* Usage (Pen), */ | 231 | 0x09, 0x02, /* Usage (Pen), */ |
@@ -530,146 +271,14 @@ static __u8 wp1062_rdesc_fixed[] = { | |||
530 | }; | 271 | }; |
531 | 272 | ||
532 | /* | 273 | /* |
533 | * Original PF1209 report descriptor. | 274 | * See PF1209 description, device and HID report descriptors at |
534 | * | 275 | * http://sf.net/apps/mediawiki/digimend/?title=UC-Logic_Tablet_PF1209 |
535 | * The descriptor is similar to WPXXXXU descriptors, with an addition of a | ||
536 | * feature report (ID 4) of unknown purpose. | ||
537 | * | ||
538 | * Although the advertised resolution is 4000 LPI the unused report ID | ||
539 | * (taken from WPXXXXU, it seems) states 2000 LPI, but it is probably | ||
540 | * incorrect and is a result of blind copying without understanding. Anyway | ||
541 | * the real logical extents are always scaled to 0..32767, which IMHO spoils | ||
542 | * the precision. | ||
543 | * | ||
544 | * Usage Page (Digitizer), ; Digitizer (0Dh) | ||
545 | * Usage (Pen), ; Pen (02h, application collection) | ||
546 | * Collection (Application), | ||
547 | * Report ID (7), | ||
548 | * Usage (Stylus), ; Stylus (20h, logical collection) | ||
549 | * Collection (Physical), | ||
550 | * Usage (Tip Switch), ; Tip switch (42h, momentary control) | ||
551 | * Usage (Barrel Switch), ; Barrel switch (44h, momentary control) | ||
552 | * Usage (Eraser), ; Eraser (45h, momentary control) | ||
553 | * Logical Minimum (0), | ||
554 | * Logical Maximum (1), | ||
555 | * Report Size (1), | ||
556 | * Report Count (3), | ||
557 | * Input (Variable), | ||
558 | * Report Count (3), | ||
559 | * Input (Constant, Variable), | ||
560 | * Usage (In Range), ; In range (32h, momentary control) | ||
561 | * Report Count (1), | ||
562 | * Input (Variable), | ||
563 | * Report Count (1), | ||
564 | * Input (Constant, Variable), | ||
565 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
566 | * Usage (X), ; X (30h, dynamic value) | ||
567 | * Report Size (16), | ||
568 | * Report Count (1), | ||
569 | * Push, | ||
570 | * Unit Exponent (13), | ||
571 | * Unit (Inch^3), | ||
572 | * Physical Minimum (0), | ||
573 | * Physical Maximum (12000), | ||
574 | * Logical Maximum (24000), | ||
575 | * Input (Variable), | ||
576 | * Usage (Y), ; Y (31h, dynamic value) | ||
577 | * Physical Maximum (9000), | ||
578 | * Logical Maximum (18000), | ||
579 | * Input (Variable), | ||
580 | * Pop, | ||
581 | * Usage Page (Digitizer), ; Digitizer (0Dh) | ||
582 | * Usage (Tip Pressure), ; Tip pressure (30h, dynamic value) | ||
583 | * Logical Maximum (1023), | ||
584 | * Input (Variable), | ||
585 | * Report Size (16), | ||
586 | * End Collection, | ||
587 | * End Collection, | ||
588 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
589 | * Usage (Mouse), ; Mouse (02h, application collection) | ||
590 | * Collection (Application), | ||
591 | * Report ID (8), | ||
592 | * Usage (Pointer), ; Pointer (01h, physical collection) | ||
593 | * Collection (Physical), | ||
594 | * Usage Page (Button), ; Button (09h) | ||
595 | * Usage Minimum (01h), | ||
596 | * Usage Maximum (03h), | ||
597 | * Logical Minimum (0), | ||
598 | * Logical Maximum (1), | ||
599 | * Report Count (3), | ||
600 | * Report Size (1), | ||
601 | * Input (Variable), | ||
602 | * Report Count (5), | ||
603 | * Input (Constant), | ||
604 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
605 | * Usage (X), ; X (30h, dynamic value) | ||
606 | * Usage (Y), ; Y (31h, dynamic value) | ||
607 | * Usage (Wheel), ; Wheel (38h, dynamic value) | ||
608 | * Usage (00h), | ||
609 | * Logical Minimum (-127), | ||
610 | * Logical Maximum (127), | ||
611 | * Report Size (8), | ||
612 | * Report Count (4), | ||
613 | * Input (Variable, Relative), | ||
614 | * End Collection, | ||
615 | * End Collection, | ||
616 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
617 | * Usage (Mouse), ; Mouse (02h, application collection) | ||
618 | * Collection (Application), | ||
619 | * Report ID (9), | ||
620 | * Usage (Pointer), ; Pointer (01h, physical collection) | ||
621 | * Collection (Physical), | ||
622 | * Usage Page (Button), ; Button (09h) | ||
623 | * Usage Minimum (01h), | ||
624 | * Usage Maximum (03h), | ||
625 | * Logical Minimum (0), | ||
626 | * Logical Maximum (1), | ||
627 | * Report Count (3), | ||
628 | * Report Size (1), | ||
629 | * Input (Variable), | ||
630 | * Report Count (5), | ||
631 | * Input (Constant), | ||
632 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
633 | * Usage (X), ; X (30h, dynamic value) | ||
634 | * Usage (Y), ; Y (31h, dynamic value) | ||
635 | * Logical Minimum (0), | ||
636 | * Logical Maximum (32767), | ||
637 | * Physical Minimum (0), | ||
638 | * Physical Maximum (32767), | ||
639 | * Report Count (2), | ||
640 | * Report Size (16), | ||
641 | * Input (Variable), | ||
642 | * Usage Page (Digitizer), ; Digitizer (0Dh) | ||
643 | * Usage (Tip Pressure), ; Tip pressure (30h, dynamic value) | ||
644 | * Logical Maximum (1023), | ||
645 | * Report Count (1), | ||
646 | * Report Size (16), | ||
647 | * Input (Variable), | ||
648 | * End Collection, | ||
649 | * End Collection, | ||
650 | * Usage Page (Desktop), ; Generic desktop controls (01h) | ||
651 | * Usage (00h), | ||
652 | * Collection (Application), | ||
653 | * Report ID (4), | ||
654 | * Logical Minimum (0), | ||
655 | * Logical Maximum (255), | ||
656 | * Usage (00h), | ||
657 | * Report Size (8), | ||
658 | * Report Count (3), | ||
659 | * Feature (Variable), | ||
660 | * End Collection | ||
661 | */ | 276 | */ |
662 | 277 | ||
663 | /* Size of the original descriptor of PF1209 tablet */ | 278 | /* Size of the original descriptor of PF1209 tablet */ |
664 | #define PF1209_RDESC_ORIG_SIZE 234 | 279 | #define PF1209_RDESC_ORIG_SIZE 234 |
665 | 280 | ||
666 | /* | 281 | /* Fixed PF1209 report descriptor */ |
667 | * Fixed PF1209 report descriptor | ||
668 | * | ||
669 | * The descriptor is fixed similarly to WP5540U and WP8060U, plus the | ||
670 | * feature report is removed, because its purpose is unknown and it is of no | ||
671 | * use to the generic HID driver anyway for now. | ||
672 | */ | ||
673 | static __u8 pf1209_rdesc_fixed[] = { | 282 | static __u8 pf1209_rdesc_fixed[] = { |
674 | 0x05, 0x0D, /* Usage Page (Digitizer), */ | 283 | 0x05, 0x0D, /* Usage Page (Digitizer), */ |
675 | 0x09, 0x02, /* Usage (Pen), */ | 284 | 0x09, 0x02, /* Usage (Pen), */ |