1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53#include <linux/kernel.h>
54#include <linux/module.h>
55#include <linux/errno.h>
56#include <linux/slab.h>
57#include <linux/input.h>
58#include <linux/usb.h>
59#include <linux/uaccess.h>
60#include <asm/unaligned.h>
61#include <asm/byteorder.h>
62#include <linux/bitops.h>
63
64#include <linux/usb/input.h>
65
66
67#define GTCO_VERSION "2.00.0006"
68
69
70
71
72#define VENDOR_ID_GTCO 0x078C
73#define PID_400 0x400
74#define PID_401 0x401
75#define PID_1000 0x1000
76#define PID_1001 0x1001
77#define PID_1002 0x1002
78
79
80#define REPORT_MAX_SIZE 10
81#define MAX_COLLECTION_LEVELS 10
82
83
84
85#define MASK_INRANGE 0x20
86#define MASK_BUTTON 0x01F
87
88#define PATHLENGTH 64
89
90
91
92
93static const struct usb_device_id gtco_usbid_table[] = {
94 { USB_DEVICE(VENDOR_ID_GTCO, PID_400) },
95 { USB_DEVICE(VENDOR_ID_GTCO, PID_401) },
96 { USB_DEVICE(VENDOR_ID_GTCO, PID_1000) },
97 { USB_DEVICE(VENDOR_ID_GTCO, PID_1001) },
98 { USB_DEVICE(VENDOR_ID_GTCO, PID_1002) },
99 { }
100};
101MODULE_DEVICE_TABLE (usb, gtco_usbid_table);
102
103
104
105struct gtco {
106
107 struct input_dev *inputdevice;
108 struct usb_interface *intf;
109 struct urb *urbinfo;
110 dma_addr_t buf_dma;
111 unsigned char * buffer;
112
113 char usbpath[PATHLENGTH];
114 int openCount;
115
116
117 u32 usage;
118 u32 min_X;
119 u32 max_X;
120 u32 min_Y;
121 u32 max_Y;
122 s8 mintilt_X;
123 s8 maxtilt_X;
124 s8 mintilt_Y;
125 s8 maxtilt_Y;
126 u32 maxpressure;
127 u32 minpressure;
128};
129
130
131
132
133
134
135struct hid_descriptor
136{
137 struct usb_descriptor_header header;
138 __le16 bcdHID;
139 u8 bCountryCode;
140 u8 bNumDescriptors;
141 u8 bDescriptorType;
142 __le16 wDescriptorLength;
143} __attribute__ ((packed));
144
145
146#define HID_DESCRIPTOR_SIZE 9
147#define HID_DEVICE_TYPE 33
148#define REPORT_DEVICE_TYPE 34
149
150
151#define PREF_TAG(x) ((x)>>4)
152#define PREF_TYPE(x) ((x>>2)&0x03)
153#define PREF_SIZE(x) ((x)&0x03)
154
155#define TYPE_MAIN 0
156#define TYPE_GLOBAL 1
157#define TYPE_LOCAL 2
158#define TYPE_RESERVED 3
159
160#define TAG_MAIN_INPUT 0x8
161#define TAG_MAIN_OUTPUT 0x9
162#define TAG_MAIN_FEATURE 0xB
163#define TAG_MAIN_COL_START 0xA
164#define TAG_MAIN_COL_END 0xC
165
166#define TAG_GLOB_USAGE 0
167#define TAG_GLOB_LOG_MIN 1
168#define TAG_GLOB_LOG_MAX 2
169#define TAG_GLOB_PHYS_MIN 3
170#define TAG_GLOB_PHYS_MAX 4
171#define TAG_GLOB_UNIT_EXP 5
172#define TAG_GLOB_UNIT 6
173#define TAG_GLOB_REPORT_SZ 7
174#define TAG_GLOB_REPORT_ID 8
175#define TAG_GLOB_REPORT_CNT 9
176#define TAG_GLOB_PUSH 10
177#define TAG_GLOB_POP 11
178
179#define TAG_GLOB_MAX 12
180
181#define DIGITIZER_USAGE_TIP_PRESSURE 0x30
182#define DIGITIZER_USAGE_TILT_X 0x3D
183#define DIGITIZER_USAGE_TILT_Y 0x3E
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200static void parse_hid_report_descriptor(struct gtco *device, char * report,
201 int length)
202{
203 struct device *ddev = &device->intf->dev;
204 int x, i = 0;
205
206
207 __u8 prefix;
208 __u8 size;
209 __u8 tag;
210 __u8 type;
211 __u8 data = 0;
212 __u16 data16 = 0;
213 __u32 data32 = 0;
214
215
216 int inputnum = 0;
217 __u32 usage = 0;
218
219
220 __u32 globalval[TAG_GLOB_MAX];
221 __u32 oldval[TAG_GLOB_MAX];
222
223
224 char maintype = 'x';
225 char globtype[12];
226 int indent = 0;
227 char indentstr[MAX_COLLECTION_LEVELS + 1] = { 0 };
228
229 dev_dbg(ddev, "======>>>>>>PARSE<<<<<<======\n");
230
231
232 while (i < length) {
233 prefix = report[i++];
234
235
236 size = (1U << PREF_SIZE(prefix)) >> 1;
237 if (i + size > length) {
238 dev_err(ddev,
239 "Not enough data (need %d, have %d)\n",
240 i + size, length);
241 break;
242 }
243
244 switch (size) {
245 case 1:
246 data = report[i];
247 break;
248 case 2:
249 data16 = get_unaligned_le16(&report[i]);
250 break;
251 case 4:
252 data32 = get_unaligned_le32(&report[i]);
253 break;
254 }
255
256
257 i += size;
258
259
260 tag = PREF_TAG(prefix);
261 type = PREF_TYPE(prefix);
262 switch (type) {
263 case TYPE_MAIN:
264 strcpy(globtype, "");
265 switch (tag) {
266
267 case TAG_MAIN_INPUT:
268
269
270
271
272
273
274
275 maintype = 'I';
276 if (data == 2)
277 strcpy(globtype, "Variable");
278 else if (data == 3)
279 strcpy(globtype, "Var|Const");
280
281 dev_dbg(ddev, "::::: Saving Report: %d input #%d Max: 0x%X(%d) Min:0x%X(%d) of %d bits\n",
282 globalval[TAG_GLOB_REPORT_ID], inputnum,
283 globalval[TAG_GLOB_LOG_MAX], globalval[TAG_GLOB_LOG_MAX],
284 globalval[TAG_GLOB_LOG_MIN], globalval[TAG_GLOB_LOG_MIN],
285 globalval[TAG_GLOB_REPORT_SZ] * globalval[TAG_GLOB_REPORT_CNT]);
286
287
288
289
290
291
292
293
294 switch (inputnum) {
295 case 0:
296 dev_dbg(ddev, "GER: X Usage: 0x%x\n", usage);
297 if (device->max_X == 0) {
298 device->max_X = globalval[TAG_GLOB_LOG_MAX];
299 device->min_X = globalval[TAG_GLOB_LOG_MIN];
300 }
301 break;
302
303 case 1:
304 dev_dbg(ddev, "GER: Y Usage: 0x%x\n", usage);
305 if (device->max_Y == 0) {
306 device->max_Y = globalval[TAG_GLOB_LOG_MAX];
307 device->min_Y = globalval[TAG_GLOB_LOG_MIN];
308 }
309 break;
310
311 default:
312
313 if (usage == DIGITIZER_USAGE_TILT_X) {
314 if (device->maxtilt_X == 0) {
315 device->maxtilt_X = globalval[TAG_GLOB_LOG_MAX];
316 device->mintilt_X = globalval[TAG_GLOB_LOG_MIN];
317 }
318 }
319
320
321 if (usage == DIGITIZER_USAGE_TILT_Y) {
322 if (device->maxtilt_Y == 0) {
323 device->maxtilt_Y = globalval[TAG_GLOB_LOG_MAX];
324 device->mintilt_Y = globalval[TAG_GLOB_LOG_MIN];
325 }
326 }
327
328
329 if (usage == DIGITIZER_USAGE_TIP_PRESSURE) {
330 if (device->maxpressure == 0) {
331 device->maxpressure = globalval[TAG_GLOB_LOG_MAX];
332 device->minpressure = globalval[TAG_GLOB_LOG_MIN];
333 }
334 }
335
336 break;
337 }
338
339 inputnum++;
340 break;
341
342 case TAG_MAIN_OUTPUT:
343 maintype = 'O';
344 break;
345
346 case TAG_MAIN_FEATURE:
347 maintype = 'F';
348 break;
349
350 case TAG_MAIN_COL_START:
351 maintype = 'S';
352
353 if (indent == MAX_COLLECTION_LEVELS) {
354 dev_err(ddev, "Collection level %d would exceed limit of %d\n",
355 indent + 1,
356 MAX_COLLECTION_LEVELS);
357 break;
358 }
359
360 if (data == 0) {
361 dev_dbg(ddev, "======>>>>>> Physical\n");
362 strcpy(globtype, "Physical");
363 } else
364 dev_dbg(ddev, "======>>>>>>\n");
365
366
367 indent++;
368 for (x = 0; x < indent; x++)
369 indentstr[x] = '-';
370 indentstr[x] = 0;
371
372
373 for (x = 0; x < TAG_GLOB_MAX; x++)
374 oldval[x] = globalval[x];
375
376 break;
377
378 case TAG_MAIN_COL_END:
379 maintype = 'E';
380
381 if (indent == 0) {
382 dev_err(ddev, "Collection level already at zero\n");
383 break;
384 }
385
386 dev_dbg(ddev, "<<<<<<======\n");
387
388 indent--;
389 for (x = 0; x < indent; x++)
390 indentstr[x] = '-';
391 indentstr[x] = 0;
392
393
394 for (x = 0; x < TAG_GLOB_MAX; x++)
395 globalval[x] = oldval[x];
396
397 break;
398 }
399
400 switch (size) {
401 case 1:
402 dev_dbg(ddev, "%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x\n",
403 indentstr, tag, maintype, size, globtype, data);
404 break;
405
406 case 2:
407 dev_dbg(ddev, "%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x\n",
408 indentstr, tag, maintype, size, globtype, data16);
409 break;
410
411 case 4:
412 dev_dbg(ddev, "%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x\n",
413 indentstr, tag, maintype, size, globtype, data32);
414 break;
415 }
416 break;
417
418 case TYPE_GLOBAL:
419 switch (tag) {
420 case TAG_GLOB_USAGE:
421
422
423
424
425 if (device->usage == 0)
426 device->usage = data;
427
428 strcpy(globtype, "USAGE");
429 break;
430
431 case TAG_GLOB_LOG_MIN:
432 strcpy(globtype, "LOG_MIN");
433 break;
434
435 case TAG_GLOB_LOG_MAX:
436 strcpy(globtype, "LOG_MAX");
437 break;
438
439 case TAG_GLOB_PHYS_MIN:
440 strcpy(globtype, "PHYS_MIN");
441 break;
442
443 case TAG_GLOB_PHYS_MAX:
444 strcpy(globtype, "PHYS_MAX");
445 break;
446
447 case TAG_GLOB_UNIT_EXP:
448 strcpy(globtype, "EXP");
449 break;
450
451 case TAG_GLOB_UNIT:
452 strcpy(globtype, "UNIT");
453 break;
454
455 case TAG_GLOB_REPORT_SZ:
456 strcpy(globtype, "REPORT_SZ");
457 break;
458
459 case TAG_GLOB_REPORT_ID:
460 strcpy(globtype, "REPORT_ID");
461
462 inputnum = 0;
463 break;
464
465 case TAG_GLOB_REPORT_CNT:
466 strcpy(globtype, "REPORT_CNT");
467 break;
468
469 case TAG_GLOB_PUSH:
470 strcpy(globtype, "PUSH");
471 break;
472
473 case TAG_GLOB_POP:
474 strcpy(globtype, "POP");
475 break;
476 }
477
478
479
480 if (tag < TAG_GLOB_MAX) {
481 switch (size) {
482 case 1:
483 dev_dbg(ddev, "%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x\n",
484 indentstr, globtype, tag, size, data);
485 globalval[tag] = data;
486 break;
487
488 case 2:
489 dev_dbg(ddev, "%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x\n",
490 indentstr, globtype, tag, size, data16);
491 globalval[tag] = data16;
492 break;
493
494 case 4:
495 dev_dbg(ddev, "%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x\n",
496 indentstr, globtype, tag, size, data32);
497 globalval[tag] = data32;
498 break;
499 }
500 } else {
501 dev_dbg(ddev, "%sGLOBALTAG: ILLEGAL TAG:%d SIZE: %d\n",
502 indentstr, tag, size);
503 }
504 break;
505
506 case TYPE_LOCAL:
507 switch (tag) {
508 case TAG_GLOB_USAGE:
509 strcpy(globtype, "USAGE");
510
511 usage = data;
512 break;
513
514 case TAG_GLOB_LOG_MIN:
515 strcpy(globtype, "MIN");
516 break;
517
518 case TAG_GLOB_LOG_MAX:
519 strcpy(globtype, "MAX");
520 break;
521
522 default:
523 strcpy(globtype, "UNKNOWN");
524 break;
525 }
526
527 switch (size) {
528 case 1:
529 dev_dbg(ddev, "%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x\n",
530 indentstr, tag, globtype, size, data);
531 break;
532
533 case 2:
534 dev_dbg(ddev, "%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x\n",
535 indentstr, tag, globtype, size, data16);
536 break;
537
538 case 4:
539 dev_dbg(ddev, "%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x\n",
540 indentstr, tag, globtype, size, data32);
541 break;
542 }
543
544 break;
545 }
546 }
547}
548
549
550
551
552
553
554
555static int gtco_input_open(struct input_dev *inputdev)
556{
557 struct gtco *device = input_get_drvdata(inputdev);
558
559 device->urbinfo->dev = interface_to_usbdev(device->intf);
560 if (usb_submit_urb(device->urbinfo, GFP_KERNEL))
561 return -EIO;
562
563 return 0;
564}
565
566
567
568
569static void gtco_input_close(struct input_dev *inputdev)
570{
571 struct gtco *device = input_get_drvdata(inputdev);
572
573 usb_kill_urb(device->urbinfo);
574}
575
576
577
578
579
580
581
582
583
584
585static void gtco_setup_caps(struct input_dev *inputdev)
586{
587 struct gtco *device = input_get_drvdata(inputdev);
588
589
590 inputdev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) |
591 BIT_MASK(EV_MSC);
592
593
594 inputdev->mscbit[0] = BIT_MASK(MSC_SCAN) | BIT_MASK(MSC_SERIAL) |
595 BIT_MASK(MSC_RAW);
596
597
598 input_set_abs_params(inputdev, ABS_X, device->min_X, device->max_X,
599 0, 0);
600 input_set_abs_params(inputdev, ABS_Y, device->min_Y, device->max_Y,
601 0, 0);
602
603
604 input_set_abs_params(inputdev, ABS_DISTANCE, 0, 1, 0, 0);
605
606
607 input_set_abs_params(inputdev, ABS_TILT_X, device->mintilt_X,
608 device->maxtilt_X, 0, 0);
609 input_set_abs_params(inputdev, ABS_TILT_Y, device->mintilt_Y,
610 device->maxtilt_Y, 0, 0);
611 input_set_abs_params(inputdev, ABS_PRESSURE, device->minpressure,
612 device->maxpressure, 0, 0);
613
614
615 input_set_abs_params(inputdev, ABS_MISC, 0, 0xFF, 0, 0);
616}
617
618
619
620
621
622
623
624
625
626
627static void gtco_urb_callback(struct urb *urbinfo)
628{
629 struct gtco *device = urbinfo->context;
630 struct input_dev *inputdev;
631 int rc;
632 u32 val = 0;
633 char le_buffer[2];
634
635 inputdev = device->inputdevice;
636
637
638 if (urbinfo->status == -ECONNRESET ||
639 urbinfo->status == -ENOENT ||
640 urbinfo->status == -ESHUTDOWN) {
641
642
643 return;
644 }
645
646 if (urbinfo->status != 0) {
647
648
649
650
651 goto resubmit;
652 }
653
654
655
656
657
658
659 if (inputdev->id.product == PID_1000 ||
660 inputdev->id.product == PID_1001 ||
661 inputdev->id.product == PID_1002) {
662
663
664
665
666
667
668
669 switch (device->buffer[0]) {
670 case 5:
671
672 val = ((u16)(device->buffer[8]) << 1);
673 val |= (u16)(device->buffer[7] >> 7);
674 input_report_abs(inputdev, ABS_PRESSURE,
675 device->buffer[8]);
676
677
678 device->buffer[7] = (u8)((device->buffer[7]) & 0x7F);
679
680
681 case 4:
682
683 input_report_abs(inputdev, ABS_TILT_X,
684 sign_extend32(device->buffer[6], 6));
685
686 input_report_abs(inputdev, ABS_TILT_Y,
687 sign_extend32(device->buffer[7], 6));
688
689
690 case 2:
691 case 3:
692
693 val = (device->buffer[5]) & MASK_BUTTON;
694
695
696
697 input_event(inputdev, EV_MSC, MSC_SERIAL, val);
698
699
700 case 1:
701
702 val = get_unaligned_le16(&device->buffer[1]);
703 input_report_abs(inputdev, ABS_X, val);
704
705 val = get_unaligned_le16(&device->buffer[3]);
706 input_report_abs(inputdev, ABS_Y, val);
707
708
709 val = device->buffer[5] & MASK_INRANGE ? 1 : 0;
710 input_report_abs(inputdev, ABS_DISTANCE, val);
711
712
713
714 if (device->buffer[0] == 1) {
715
716
717
718
719
720
721 val = device->buffer[5] & MASK_BUTTON;
722 dev_dbg(&device->intf->dev,
723 "======>>>>>>REPORT 1: val 0x%X(%d)\n",
724 val, val);
725
726
727
728
729
730 input_event(inputdev, EV_MSC, MSC_SERIAL, val);
731 }
732 break;
733
734 case 7:
735
736 input_event(inputdev, EV_MSC, MSC_SCAN,
737 device->buffer[1]);
738 break;
739 }
740 }
741
742
743 if (inputdev->id.product == PID_400 ||
744 inputdev->id.product == PID_401) {
745
746
747 if (device->buffer[0] == 2) {
748
749 input_event(inputdev, EV_MSC, MSC_SCAN, device->buffer[1]);
750 }
751
752
753 if (device->buffer[0] == 1) {
754 char buttonbyte;
755
756
757 if (device->max_X > 0x10000) {
758
759 val = (u16)(((u16)(device->buffer[2] << 8)) | (u8)device->buffer[1]);
760 val |= (u32)(((u8)device->buffer[3] & 0x1) << 16);
761
762 input_report_abs(inputdev, ABS_X, val);
763
764 le_buffer[0] = (u8)((u8)(device->buffer[3]) >> 1);
765 le_buffer[0] |= (u8)((device->buffer[3] & 0x1) << 7);
766
767 le_buffer[1] = (u8)(device->buffer[4] >> 1);
768 le_buffer[1] |= (u8)((device->buffer[5] & 0x1) << 7);
769
770 val = get_unaligned_le16(le_buffer);
771 input_report_abs(inputdev, ABS_Y, val);
772
773
774
775
776
777 buttonbyte = device->buffer[5] >> 1;
778 } else {
779
780 val = get_unaligned_le16(&device->buffer[1]);
781 input_report_abs(inputdev, ABS_X, val);
782
783 val = get_unaligned_le16(&device->buffer[3]);
784 input_report_abs(inputdev, ABS_Y, val);
785
786 buttonbyte = device->buffer[5];
787 }
788
789
790 val = buttonbyte & MASK_INRANGE ? 1 : 0;
791 input_report_abs(inputdev, ABS_DISTANCE, val);
792
793
794 val = buttonbyte & 0x0F;
795#ifdef USE_BUTTONS
796 for (i = 0; i < 5; i++)
797 input_report_key(inputdev, BTN_DIGI + i, val & (1 << i));
798#else
799
800 input_event(inputdev, EV_MSC, MSC_SERIAL, val);
801#endif
802
803
804 input_report_abs(inputdev, ABS_MISC, device->buffer[6]);
805 }
806 }
807
808
809 input_event(inputdev, EV_MSC, MSC_RAW, device->buffer[0]);
810
811
812 input_sync(inputdev);
813
814 resubmit:
815 rc = usb_submit_urb(urbinfo, GFP_ATOMIC);
816 if (rc != 0)
817 dev_err(&device->intf->dev,
818 "usb_submit_urb failed rc=0x%x\n", rc);
819}
820
821
822
823
824
825
826
827
828
829
830
831
832static int gtco_probe(struct usb_interface *usbinterface,
833 const struct usb_device_id *id)
834{
835
836 struct gtco *gtco;
837 struct input_dev *input_dev;
838 struct hid_descriptor *hid_desc;
839 char *report;
840 int result = 0, retry;
841 int error;
842 struct usb_endpoint_descriptor *endpoint;
843 struct usb_device *udev = interface_to_usbdev(usbinterface);
844
845
846 gtco = kzalloc(sizeof(struct gtco), GFP_KERNEL);
847 input_dev = input_allocate_device();
848 if (!gtco || !input_dev) {
849 dev_err(&usbinterface->dev, "No more memory\n");
850 error = -ENOMEM;
851 goto err_free_devs;
852 }
853
854
855 gtco->inputdevice = input_dev;
856
857
858 gtco->intf = usbinterface;
859
860
861 gtco->buffer = usb_alloc_coherent(udev, REPORT_MAX_SIZE,
862 GFP_KERNEL, >co->buf_dma);
863 if (!gtco->buffer) {
864 dev_err(&usbinterface->dev, "No more memory for us buffers\n");
865 error = -ENOMEM;
866 goto err_free_devs;
867 }
868
869
870 gtco->urbinfo = usb_alloc_urb(0, GFP_KERNEL);
871 if (!gtco->urbinfo) {
872 dev_err(&usbinterface->dev, "Failed to allocate URB\n");
873 error = -ENOMEM;
874 goto err_free_buf;
875 }
876
877
878 if (usbinterface->altsetting[0].desc.bNumEndpoints < 1) {
879 dev_err(&usbinterface->dev,
880 "Invalid number of endpoints\n");
881 error = -EINVAL;
882 goto err_free_urb;
883 }
884
885
886
887
888
889 endpoint = &usbinterface->altsetting[0].endpoint[0].desc;
890
891
892 dev_dbg(&usbinterface->dev, "gtco # interfaces: %d\n", usbinterface->num_altsetting);
893 dev_dbg(&usbinterface->dev, "num endpoints: %d\n", usbinterface->cur_altsetting->desc.bNumEndpoints);
894 dev_dbg(&usbinterface->dev, "interface class: %d\n", usbinterface->cur_altsetting->desc.bInterfaceClass);
895 dev_dbg(&usbinterface->dev, "endpoint: attribute:0x%x type:0x%x\n", endpoint->bmAttributes, endpoint->bDescriptorType);
896 if (usb_endpoint_xfer_int(endpoint))
897 dev_dbg(&usbinterface->dev, "endpoint: we have interrupt endpoint\n");
898
899 dev_dbg(&usbinterface->dev, "endpoint extra len:%d\n", usbinterface->altsetting[0].extralen);
900
901
902
903
904
905 if (usb_get_extra_descriptor(usbinterface->cur_altsetting,
906 HID_DEVICE_TYPE, &hid_desc) != 0) {
907 dev_err(&usbinterface->dev,
908 "Can't retrieve exta USB descriptor to get hid report descriptor length\n");
909 error = -EIO;
910 goto err_free_urb;
911 }
912
913 dev_dbg(&usbinterface->dev,
914 "Extra descriptor success: type:%d len:%d\n",
915 hid_desc->bDescriptorType, hid_desc->wDescriptorLength);
916
917 report = kzalloc(le16_to_cpu(hid_desc->wDescriptorLength), GFP_KERNEL);
918 if (!report) {
919 dev_err(&usbinterface->dev, "No more memory for report\n");
920 error = -ENOMEM;
921 goto err_free_urb;
922 }
923
924
925 for (retry = 0; retry < 3; retry++) {
926 result = usb_control_msg(udev,
927 usb_rcvctrlpipe(udev, 0),
928 USB_REQ_GET_DESCRIPTOR,
929 USB_RECIP_INTERFACE | USB_DIR_IN,
930 REPORT_DEVICE_TYPE << 8,
931 0,
932 report,
933 le16_to_cpu(hid_desc->wDescriptorLength),
934 5000);
935
936 dev_dbg(&usbinterface->dev, "usb_control_msg result: %d\n", result);
937 if (result == le16_to_cpu(hid_desc->wDescriptorLength)) {
938 parse_hid_report_descriptor(gtco, report, result);
939 break;
940 }
941 }
942
943 kfree(report);
944
945
946 if (result != le16_to_cpu(hid_desc->wDescriptorLength)) {
947 dev_err(&usbinterface->dev,
948 "Failed to get HID Report Descriptor of size: %d\n",
949 hid_desc->wDescriptorLength);
950 error = -EIO;
951 goto err_free_urb;
952 }
953
954
955 usb_make_path(udev, gtco->usbpath, sizeof(gtco->usbpath));
956 strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath));
957
958
959 input_dev->open = gtco_input_open;
960 input_dev->close = gtco_input_close;
961
962
963 input_dev->name = "GTCO_CalComp";
964 input_dev->phys = gtco->usbpath;
965
966 input_set_drvdata(input_dev, gtco);
967
968
969 gtco_setup_caps(input_dev);
970
971
972 usb_to_input_id(udev, &input_dev->id);
973 input_dev->dev.parent = &usbinterface->dev;
974
975
976 endpoint = &usbinterface->altsetting[0].endpoint[0].desc;
977
978 usb_fill_int_urb(gtco->urbinfo,
979 udev,
980 usb_rcvintpipe(udev,
981 endpoint->bEndpointAddress),
982 gtco->buffer,
983 REPORT_MAX_SIZE,
984 gtco_urb_callback,
985 gtco,
986 endpoint->bInterval);
987
988 gtco->urbinfo->transfer_dma = gtco->buf_dma;
989 gtco->urbinfo->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
990
991
992 usb_set_intfdata(usbinterface, gtco);
993
994
995 error = input_register_device(input_dev);
996 if (error)
997 goto err_free_urb;
998
999 return 0;
1000
1001 err_free_urb:
1002 usb_free_urb(gtco->urbinfo);
1003 err_free_buf:
1004 usb_free_coherent(udev, REPORT_MAX_SIZE,
1005 gtco->buffer, gtco->buf_dma);
1006 err_free_devs:
1007 input_free_device(input_dev);
1008 kfree(gtco);
1009 return error;
1010}
1011
1012
1013
1014
1015
1016
1017static void gtco_disconnect(struct usb_interface *interface)
1018{
1019
1020 struct gtco *gtco = usb_get_intfdata(interface);
1021 struct usb_device *udev = interface_to_usbdev(interface);
1022
1023
1024 if (gtco) {
1025 input_unregister_device(gtco->inputdevice);
1026 usb_kill_urb(gtco->urbinfo);
1027 usb_free_urb(gtco->urbinfo);
1028 usb_free_coherent(udev, REPORT_MAX_SIZE,
1029 gtco->buffer, gtco->buf_dma);
1030 kfree(gtco);
1031 }
1032
1033 dev_info(&interface->dev, "gtco driver disconnected\n");
1034}
1035
1036
1037
1038static struct usb_driver gtco_driverinfo_table = {
1039 .name = "gtco",
1040 .id_table = gtco_usbid_table,
1041 .probe = gtco_probe,
1042 .disconnect = gtco_disconnect,
1043};
1044
1045module_usb_driver(gtco_driverinfo_table);
1046
1047MODULE_DESCRIPTION("GTCO digitizer USB driver");
1048MODULE_LICENSE("GPL");
1049