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