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