gtco.c 26.3 KB
Newer Older
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
/*    -*- linux-c -*-

GTCO digitizer USB driver

Use the err(), dbg() and info() macros from usb.h for system logging

TO CHECK:  Is pressure done right on report 5?

Copyright (C) 2006  GTCO CalComp

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2
of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of GTCO-CalComp not be used in advertising
or publicity pertaining to distribution of the software without specific,
written prior permission. GTCO-CalComp makes no representations about the
suitability of this software for any purpose.  It is provided "as is"
without express or implied warranty.

GTCO-CALCOMP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
EVENT SHALL GTCO-CALCOMP BE LIABLE FOR ANY SPECIAL, INDIRECT OR
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTIONS, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.

GTCO CalComp, Inc.
7125 Riverwood Drive
Columbia, MD 21046

Jeremy Roberson jroberson@gtcocalcomp.com
Scott Hill shill@gtcocalcomp.com
*/



/*#define DEBUG*/

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/input.h>
#include <linux/usb.h>
#include <asm/uaccess.h>
#include <asm/unaligned.h>
#include <asm/byteorder.h>


#include <linux/usb/input.h>

/* Version with a Major number of 2 is for kernel inclusion only. */
#define  GTCO_VERSION   "2.00.0006"


/*   MACROS  */

#define VENDOR_ID_GTCO	      0x078C
#define PID_400               0x400
#define PID_401               0x401
#define PID_1000              0x1000
#define PID_1001              0x1001
#define PID_1002              0x1002

/* Max size of a single report */
#define REPORT_MAX_SIZE       10


/* Bitmask whether pen is in range */
#define MASK_INRANGE 0x20
#define MASK_BUTTON  0x01F

#define  PATHLENGTH     64

/* DATA STRUCTURES */

/* Device table */
static struct usb_device_id gtco_usbid_table [] = {
	{ USB_DEVICE(VENDOR_ID_GTCO, PID_400) },
	{ USB_DEVICE(VENDOR_ID_GTCO, PID_401) },
	{ USB_DEVICE(VENDOR_ID_GTCO, PID_1000) },
	{ USB_DEVICE(VENDOR_ID_GTCO, PID_1001) },
	{ USB_DEVICE(VENDOR_ID_GTCO, PID_1002) },
	{ }
};
MODULE_DEVICE_TABLE (usb, gtco_usbid_table);


/* Structure to hold all of our device specific stuff */
struct gtco {

	struct input_dev  *inputdevice; /* input device struct pointer  */
	struct usb_device *usbdev; /* the usb device for this device */
	struct urb        *urbinfo;	 /* urb for incoming reports      */
	dma_addr_t        buf_dma;  /* dma addr of the data buffer*/
	unsigned char *   buffer;   /* databuffer for reports */

	char  usbpath[PATHLENGTH];
	int   openCount;

	/* Information pulled from Report Descriptor */
	u32  usage;
	u32  min_X;
	u32  max_X;
	u32  min_Y;
	u32  max_Y;
	s8   mintilt_X;
	s8   maxtilt_X;
	s8   mintilt_Y;
	s8   maxtilt_Y;
	u32  maxpressure;
	u32  minpressure;
};



/*   Code for parsing the HID REPORT DESCRIPTOR          */

/* From HID1.11 spec */
struct hid_descriptor
{
	struct usb_descriptor_header header;
	__le16   bcdHID;
	u8       bCountryCode;
	u8       bNumDescriptors;
	u8       bDescriptorType;
	__le16   wDescriptorLength;
} __attribute__ ((packed));


#define HID_DESCRIPTOR_SIZE   9
#define HID_DEVICE_TYPE       33
#define REPORT_DEVICE_TYPE    34


#define PREF_TAG(x)     ((x)>>4)
#define PREF_TYPE(x)    ((x>>2)&0x03)
#define PREF_SIZE(x)    ((x)&0x03)

#define TYPE_MAIN       0
#define TYPE_GLOBAL     1
#define TYPE_LOCAL      2
#define TYPE_RESERVED   3

#define TAG_MAIN_INPUT        0x8
#define TAG_MAIN_OUTPUT       0x9
#define TAG_MAIN_FEATURE      0xB
#define TAG_MAIN_COL_START    0xA
#define TAG_MAIN_COL_END      0xC

#define TAG_GLOB_USAGE        0
#define TAG_GLOB_LOG_MIN      1
#define TAG_GLOB_LOG_MAX      2
#define TAG_GLOB_PHYS_MIN     3
#define TAG_GLOB_PHYS_MAX     4
#define TAG_GLOB_UNIT_EXP     5
#define TAG_GLOB_UNIT         6
#define TAG_GLOB_REPORT_SZ    7
#define TAG_GLOB_REPORT_ID    8
#define TAG_GLOB_REPORT_CNT   9
#define TAG_GLOB_PUSH         10
#define TAG_GLOB_POP          11

#define TAG_GLOB_MAX          12

#define DIGITIZER_USAGE_TIP_PRESSURE   0x30
#define DIGITIZER_USAGE_TILT_X         0x3D
#define DIGITIZER_USAGE_TILT_Y         0x3E


/*
 *   This is an abbreviated parser for the HID Report Descriptor.  We
 *   know what devices we are talking to, so this is by no means meant
 *   to be generic.  We can make some safe assumptions:
 *
 *   - We know there are no LONG tags, all short
 *   - We know that we have no MAIN Feature and MAIN Output items
 *   - We know what the IRQ reports are supposed to look like.
 *
 *   The main purpose of this is to use the HID report desc to figure
 *   out the mins and maxs of the fields in the IRQ reports.  The IRQ
 *   reports for 400/401 change slightly if the max X is bigger than 64K.
 *
 */
static void parse_hid_report_descriptor(struct gtco *device, char * report,
					int length)
{
205
	int   x, i = 0;
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224

	/* Tag primitive vars */
	__u8   prefix;
	__u8   size;
	__u8   tag;
	__u8   type;
	__u8   data   = 0;
	__u16  data16 = 0;
	__u32  data32 = 0;

	/* For parsing logic */
	int   inputnum = 0;
	__u32 usage = 0;

	/* Global Values, indexed by TAG */
	__u32 globalval[TAG_GLOB_MAX];
	__u32 oldval[TAG_GLOB_MAX];

	/* Debug stuff */
225
	char  maintype = 'x';
226
	char  globtype[12];
227 228
	int   indent = 0;
	char  indentstr[10] = "";
229 230 231 232 233


	dbg("======>>>>>>PARSE<<<<<<======");

	/* Walk  this report and pull out the info we need */
234 235
	while (i < length) {
		prefix = report[i];
236 237 238 239 240 241

		/* Skip over prefix */
		i++;

		/* Determine data size and save the data in the proper variable */
		size = PREF_SIZE(prefix);
242
		switch (size) {
243 244 245 246
		case 1:
			data = report[i];
			break;
		case 2:
247
			data16 = get_unaligned_le16(&report[i]);
248 249 250
			break;
		case 3:
			size = 4;
251
			data32 = get_unaligned_le32(&report[i]);
252
			break;
253 254 255
		}

		/* Skip size of data */
256
		i += size;
257 258 259 260

		/* What we do depends on the tag type */
		tag  = PREF_TAG(prefix);
		type = PREF_TYPE(prefix);
261
		switch (type) {
262
		case TYPE_MAIN:
263 264
			strcpy(globtype, "");
			switch (tag) {
265 266 267 268 269 270 271 272 273

			case TAG_MAIN_INPUT:
				/*
				 * The INPUT MAIN tag signifies this is
				 * information from a report.  We need to
				 * figure out what it is and store the
				 * min/max values
				 */

274 275 276 277 278
				maintype = 'I';
				if (data == 2)
					strcpy(globtype, "Variable");
				else if (data == 3)
					strcpy(globtype, "Var|Const");
279 280

				dbg("::::: Saving Report: %d input #%d Max: 0x%X(%d) Min:0x%X(%d) of %d bits",
281 282 283 284
				    globalval[TAG_GLOB_REPORT_ID], inputnum,
				    globalval[TAG_GLOB_LOG_MAX], globalval[TAG_GLOB_LOG_MAX],
				    globalval[TAG_GLOB_LOG_MIN], globalval[TAG_GLOB_LOG_MIN],
				    globalval[TAG_GLOB_REPORT_SZ] * globalval[TAG_GLOB_REPORT_CNT]);
285 286 287 288 289 290 291 292


				/*
				  We can assume that the first two input items
				  are always the X and Y coordinates.  After
				  that, we look for everything else by
				  local usage value
				 */
293
				switch (inputnum) {
294
				case 0:  /* X coord */
295 296
					dbg("GER: X Usage: 0x%x", usage);
					if (device->max_X == 0) {
297 298 299 300
						device->max_X = globalval[TAG_GLOB_LOG_MAX];
						device->min_X = globalval[TAG_GLOB_LOG_MIN];
					}
					break;
301

302
				case 1:  /* Y coord */
303 304
					dbg("GER: Y Usage: 0x%x", usage);
					if (device->max_Y == 0) {
305 306 307 308
						device->max_Y = globalval[TAG_GLOB_LOG_MAX];
						device->min_Y = globalval[TAG_GLOB_LOG_MIN];
					}
					break;
309

310 311
				default:
					/* Tilt X */
312 313
					if (usage == DIGITIZER_USAGE_TILT_X) {
						if (device->maxtilt_X == 0) {
314 315 316 317 318 319
							device->maxtilt_X = globalval[TAG_GLOB_LOG_MAX];
							device->mintilt_X = globalval[TAG_GLOB_LOG_MIN];
						}
					}

					/* Tilt Y */
320 321
					if (usage == DIGITIZER_USAGE_TILT_Y) {
						if (device->maxtilt_Y == 0) {
322 323 324 325 326 327
							device->maxtilt_Y = globalval[TAG_GLOB_LOG_MAX];
							device->mintilt_Y = globalval[TAG_GLOB_LOG_MIN];
						}
					}

					/* Pressure */
328 329
					if (usage == DIGITIZER_USAGE_TIP_PRESSURE) {
						if (device->maxpressure == 0) {
330 331 332 333 334 335 336 337 338 339
							device->maxpressure = globalval[TAG_GLOB_LOG_MAX];
							device->minpressure = globalval[TAG_GLOB_LOG_MIN];
						}
					}

					break;
				}

				inputnum++;
				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
					dbg("======>>>>>> Physical");
354 355
					strcpy(globtype, "Physical");
				} else
356 357 358 359
					dbg("======>>>>>>");

				/* Indent the debug output */
				indent++;
360 361 362
				for (x = 0; x < indent; x++)
					indentstr[x] = '-';
				indentstr[x] = 0;
363 364

				/* Save global tags */
365
				for (x = 0; x < TAG_GLOB_MAX; x++)
366 367 368
					oldval[x] = globalval[x];

				break;
369

370 371
			case TAG_MAIN_COL_END:
				dbg("<<<<<<======");
372
				maintype = 'E';
373
				indent--;
374 375 376
				for (x = 0; x < indent; x++)
					indentstr[x] = '-';
				indentstr[x] = 0;
377 378

				/* Copy global tags back */
379
				for (x = 0; x < TAG_GLOB_MAX; x++)
380 381 382 383 384
					globalval[x] = oldval[x];

				break;
			}

385
			switch (size) {
386 387
			case 1:
				dbg("%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x",
388
				    indentstr, tag, maintype, size, globtype, data);
389
				break;
390

391 392
			case 2:
				dbg("%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x",
393
				    indentstr, tag, maintype, size, globtype, data16);
394
				break;
395

396 397
			case 4:
				dbg("%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x",
398
				    indentstr, tag, maintype, size, globtype, data32);
399 400 401
				break;
			}
			break;
402

403
		case TYPE_GLOBAL:
404
			switch (tag) {
405 406 407 408 409
			case TAG_GLOB_USAGE:
				/*
				 * First time we hit the global usage tag,
				 * it should tell us the type of device
				 */
410
				if (device->usage == 0)
411
					device->usage = data;
412 413

				strcpy(globtype, "USAGE");
414
				break;
415 416 417

			case TAG_GLOB_LOG_MIN:
				strcpy(globtype, "LOG_MIN");
418
				break;
419 420 421

			case TAG_GLOB_LOG_MAX:
				strcpy(globtype, "LOG_MAX");
422
				break;
423 424 425

			case TAG_GLOB_PHYS_MIN:
				strcpy(globtype, "PHYS_MIN");
426
				break;
427 428 429

			case TAG_GLOB_PHYS_MAX:
				strcpy(globtype, "PHYS_MAX");
430
				break;
431 432 433

			case TAG_GLOB_UNIT_EXP:
				strcpy(globtype, "EXP");
434
				break;
435 436 437

			case TAG_GLOB_UNIT:
				strcpy(globtype, "UNIT");
438
				break;
439 440 441

			case TAG_GLOB_REPORT_SZ:
				strcpy(globtype, "REPORT_SZ");
442
				break;
443 444 445

			case TAG_GLOB_REPORT_ID:
				strcpy(globtype, "REPORT_ID");
446
				/* New report, restart numbering */
447
				inputnum = 0;
448
				break;
449

450
			case TAG_GLOB_REPORT_CNT:
451
				strcpy(globtype, "REPORT_CNT");
452
				break;
453 454 455

			case TAG_GLOB_PUSH:
				strcpy(globtype, "PUSH");
456
				break;
457

458
			case TAG_GLOB_POP:
459
				strcpy(globtype, "POP");
460 461 462 463 464
				break;
			}

			/* Check to make sure we have a good tag number
			   so we don't overflow array */
465 466
			if (tag < TAG_GLOB_MAX) {
				switch (size) {
467
				case 1:
468 469 470
					dbg("%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x",
					    indentstr, globtype, tag, size, data);
					globalval[tag] = data;
471
					break;
472

473
				case 2:
474 475 476
					dbg("%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x",
					    indentstr, globtype, tag, size, data16);
					globalval[tag] = data16;
477
					break;
478

479
				case 4:
480 481 482
					dbg("%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x",
					    indentstr, globtype, tag, size, data32);
					globalval[tag] = data32;
483 484
					break;
				}
485
			} else {
486
				dbg("%sGLOBALTAG: ILLEGAL TAG:%d SIZE: %d ",
487
				    indentstr, tag, size);
488 489 490 491
			}
			break;

		case TYPE_LOCAL:
492
			switch (tag) {
493
			case TAG_GLOB_USAGE:
494
				strcpy(globtype, "USAGE");
495 496 497
				/* Always 1 byte */
				usage = data;
				break;
498 499 500

			case TAG_GLOB_LOG_MIN:
				strcpy(globtype, "MIN");
501
				break;
502 503 504

			case TAG_GLOB_LOG_MAX:
				strcpy(globtype, "MAX");
505
				break;
506

507
			default:
508 509
				strcpy(globtype, "UNKNOWN");
				break;
510 511
			}

512
			switch (size) {
513 514
			case 1:
				dbg("%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x",
515
				    indentstr, tag, globtype, size, data);
516
				break;
517

518 519
			case 2:
				dbg("%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x",
520
				    indentstr, tag, globtype, size, data16);
521
				break;
522

523 524
			case 4:
				dbg("%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x",
525
				    indentstr, tag, globtype, size, data32);
526 527 528 529 530 531 532 533 534 535 536
				break;
			}

			break;
		}
	}
}

/*   INPUT DRIVER Routines                               */

/*
537 538
 * Called when opening the input device.  This will submit the URB to
 * the usb system so we start getting reports
539 540 541
 */
static int gtco_input_open(struct input_dev *inputdev)
{
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 549 550
	return 0;
}

551 552 553
/*
 * Called when closing the input device.  This will unlink the URB
 */
554 555
static void gtco_input_close(struct input_dev *inputdev)
{
556
	struct gtco *device = input_get_drvdata(inputdev);
557 558 559 560 561 562 563 564 565 566 567 568 569

	usb_kill_urb(device->urbinfo);
}


/*
 *  Setup input device capabilities.  Tell the input system what this
 *  device is capable of generating.
 *
 *  This information is based on what is read from the HID report and
 *  placed in the struct gtco structure
 *
 */
570
static void gtco_setup_caps(struct input_dev *inputdev)
571
{
572
	struct gtco *device = input_get_drvdata(inputdev);
573 574

	/* Which events */
575 576
	inputdev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) |
		BIT_MASK(EV_MSC);
577 578

	/* Misc event menu block */
579 580
	inputdev->mscbit[0] = BIT_MASK(MSC_SCAN) | BIT_MASK(MSC_SERIAL) |
		BIT_MASK(MSC_RAW);
581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599

	/* Absolute values based on HID report info */
	input_set_abs_params(inputdev, ABS_X, device->min_X, device->max_X,
			     0, 0);
	input_set_abs_params(inputdev, ABS_Y, device->min_Y, device->max_Y,
			     0, 0);

	/* Proximity */
	input_set_abs_params(inputdev, ABS_DISTANCE, 0, 1, 0, 0);

	/* Tilt & pressure */
	input_set_abs_params(inputdev, ABS_TILT_X, device->mintilt_X,
			     device->maxtilt_X, 0, 0);
	input_set_abs_params(inputdev, ABS_TILT_Y, device->mintilt_Y,
			     device->maxtilt_Y, 0, 0);
	input_set_abs_params(inputdev, ABS_PRESSURE, device->minpressure,
			     device->maxpressure, 0, 0);

	/* Transducer */
600
	input_set_abs_params(inputdev, ABS_MISC, 0, 0xFF, 0, 0);
601 602 603 604 605 606 607 608 609 610 611 612 613
}

/*   USB Routines  */

/*
 * URB callback routine.  Called when we get IRQ reports from the
 *  digitizer.
 *
 *  This bridges the USB and input device worlds.  It generates events
 *  on the input device based on the USB reports.
 */
static void gtco_urb_callback(struct urb *urbinfo)
{
614
	struct gtco *device = urbinfo->context;
615 616 617 618 619 620 621 622 623
	struct input_dev  *inputdev;
	int               rc;
	u32               val = 0;
	s8                valsigned = 0;
	char              le_buffer[2];

	inputdev = device->inputdevice;

	/* Was callback OK? */
624 625 626
	if (urbinfo->status == -ECONNRESET ||
	    urbinfo->status == -ENOENT ||
	    urbinfo->status == -ESHUTDOWN) {
627 628 629 630 631

		/* Shutdown is occurring. Return and don't queue up any more */
		return;
	}

632 633 634 635 636
	if (urbinfo->status != 0) {
		/*
		 * Some unknown error.  Hopefully temporary. Just go and
		 * requeue an URB
		 */
637 638 639 640 641 642 643 644
		goto resubmit;
	}

	/*
	 * Good URB, now process
	 */

	/* PID dependent when we interpret the report */
645 646 647
	if (inputdev->id.product == PID_1000 ||
	    inputdev->id.product == PID_1001 ||
	    inputdev->id.product == PID_1002) {
648 649 650 651 652 653 654

		/*
		 * Switch on the report ID
		 * Conveniently, the reports have more information, the higher
		 * the report number.  We can just fall through the case
		 * statements if we start with the highest number report
		 */
655
		switch (device->buffer[0]) {
656 657
		case 5:
			/* Pressure is 9 bits */
658
			val = ((u16)(device->buffer[8]) << 1);
659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687
			val |= (u16)(device->buffer[7] >> 7);
			input_report_abs(inputdev, ABS_PRESSURE,
					 device->buffer[8]);

			/* Mask out the Y tilt value used for pressure */
			device->buffer[7] = (u8)((device->buffer[7]) & 0x7F);

			/* Fall thru */
		case 4:
			/* Tilt */

			/* Sign extend these 7 bit numbers.  */
			if (device->buffer[6] & 0x40)
				device->buffer[6] |= 0x80;

			if (device->buffer[7] & 0x40)
				device->buffer[7] |= 0x80;


			valsigned = (device->buffer[6]);
			input_report_abs(inputdev, ABS_TILT_X, (s32)valsigned);

			valsigned = (device->buffer[7]);
			input_report_abs(inputdev, ABS_TILT_Y, (s32)valsigned);

			/* Fall thru */
		case 2:
		case 3:
			/* Convert buttons, only 5 bits possible */
688
			val = (device->buffer[5]) & MASK_BUTTON;
689 690 691 692 693 694 695 696

			/* We don't apply any meaning to the bitmask,
			   just report */
			input_event(inputdev, EV_MSC, MSC_SERIAL, val);

			/*  Fall thru */
		case 1:
			/* All reports have X and Y coords in the same place */
697
			val = get_unaligned_le16(&device->buffer[1]);
698 699
			input_report_abs(inputdev, ABS_X, val);

700
			val = get_unaligned_le16(&device->buffer[3]);
701 702 703
			input_report_abs(inputdev, ABS_Y, val);

			/* Ditto for proximity bit */
704
			val = device->buffer[5] & MASK_INRANGE ? 1 : 0;
705 706 707 708
			input_report_abs(inputdev, ABS_DISTANCE, val);

			/* Report 1 is an exception to how we handle buttons */
			/* Buttons are an index, not a bitmask */
709
			if (device->buffer[0] == 1) {
710

711 712 713 714 715 716
				/*
				 * Convert buttons, 5 bit index
				 * Report value of index set as one,
				 * the rest as 0
				 */
				val = device->buffer[5] & MASK_BUTTON;
717
				dbg("======>>>>>>REPORT 1: val 0x%X(%d)",
718
				    val, val);
719 720 721 722 723 724 725 726

				/*
				 * We don't apply any meaning to the button
				 * index, just report it
				 */
				input_event(inputdev, EV_MSC, MSC_SERIAL, val);
			}
			break;
727

728 729 730 731 732 733 734
		case 7:
			/* Menu blocks */
			input_event(inputdev, EV_MSC, MSC_SCAN,
				    device->buffer[1]);
			break;
		}
	}
735

736
	/* Other pid class */
737 738
	if (inputdev->id.product == PID_400 ||
	    inputdev->id.product == PID_401) {
739 740

		/* Report 2 */
741
		if (device->buffer[0] == 2) {
742
			/* Menu blocks */
743
			input_event(inputdev, EV_MSC, MSC_SCAN, device->buffer[1]);
744 745 746
		}

		/*  Report 1 */
747
		if (device->buffer[0] == 1) {
748 749 750
			char buttonbyte;

			/*  IF X max > 64K, we still a bit from the y report */
751
			if (device->max_X > 0x10000) {
752

753 754
				val = (u16)(((u16)(device->buffer[2] << 8)) | (u8)device->buffer[1]);
				val |= (u32)(((u8)device->buffer[3] & 0x1) << 16);
755 756 757

				input_report_abs(inputdev, ABS_X, val);

758 759
				le_buffer[0]  = (u8)((u8)(device->buffer[3]) >> 1);
				le_buffer[0] |= (u8)((device->buffer[3] & 0x1) << 7);
760

761 762
				le_buffer[1]  = (u8)(device->buffer[4] >> 1);
				le_buffer[1] |= (u8)((device->buffer[5] & 0x1) << 7);
763

764
				val = get_unaligned_le16(le_buffer);
765 766 767 768 769 770
				input_report_abs(inputdev, ABS_Y, val);

				/*
				 * Shift the button byte right by one to
				 * make it look like the standard report
				 */
771 772
				buttonbyte = device->buffer[5] >> 1;
			} else {
773

774
				val = get_unaligned_le16(&device->buffer[1]);
775 776
				input_report_abs(inputdev, ABS_X, val);

777
				val = get_unaligned_le16(&device->buffer[3]);
778 779 780 781 782 783
				input_report_abs(inputdev, ABS_Y, val);

				buttonbyte = device->buffer[5];
			}

			/* BUTTONS and PROXIMITY */
784
			val = buttonbyte & MASK_INRANGE ? 1 : 0;
785 786 787
			input_report_abs(inputdev, ABS_DISTANCE, val);

			/* Convert buttons, only 4 bits possible */
788
			val = buttonbyte & 0x0F;
789
#ifdef USE_BUTTONS
790 791
			for (i = 0; i < 5; i++)
				input_report_key(inputdev, BTN_DIGI + i, val & (1 << i));
792 793 794 795
#else
			/* We don't apply any meaning to the bitmask, just report */
			input_event(inputdev, EV_MSC, MSC_SERIAL, val);
#endif
796

797 798 799 800 801 802 803 804 805 806 807 808 809
			/* TRANSDUCER */
			input_report_abs(inputdev, ABS_MISC, device->buffer[6]);
		}
	}

	/* Everybody gets report ID's */
	input_event(inputdev, EV_MSC, MSC_RAW,  device->buffer[0]);

	/* Sync it up */
	input_sync(inputdev);

 resubmit:
	rc = usb_submit_urb(urbinfo, GFP_ATOMIC);
810 811
	if (rc != 0)
		err("usb_submit_urb failed rc=0x%x", rc);
812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828
}

/*
 *  The probe routine.  This is called when the kernel find the matching USB
 *   vendor/product.  We do the following:
 *
 *    - Allocate mem for a local structure to manage the device
 *    - Request a HID Report Descriptor from the device and parse it to
 *      find out the device parameters
 *    - Create an input device and assign it attributes
 *   - Allocate an URB so the device can talk to us when the input
 *      queue is open
 */
static int gtco_probe(struct usb_interface *usbinterface,
		      const struct usb_device_id *id)
{

829 830
	struct gtco             *gtco;
	struct input_dev        *input_dev;
831
	struct hid_descriptor   *hid_desc;
832
	char                    *report;
833 834
	int                     result = 0, retry;
	int			error;
835 836 837
	struct usb_endpoint_descriptor *endpoint;

	/* Allocate memory for device structure */
838 839 840
	gtco = kzalloc(sizeof(struct gtco), GFP_KERNEL);
	input_dev = input_allocate_device();
	if (!gtco || !input_dev) {
841
		err("No more memory");
842 843
		error = -ENOMEM;
		goto err_free_devs;
844 845
	}

846 847
	/* Set pointer to the input device */
	gtco->inputdevice = input_dev;
848 849

	/* Save interface information */
850
	gtco->usbdev = usb_get_dev(interface_to_usbdev(usbinterface));
851 852

	/* Allocate some data for incoming reports */
853 854 855 856 857 858
	gtco->buffer = usb_buffer_alloc(gtco->usbdev, REPORT_MAX_SIZE,
					GFP_KERNEL, &gtco->buf_dma);
	if (!gtco->buffer) {
		err("No more memory for us buffers");
		error = -ENOMEM;
		goto err_free_devs;
859 860 861
	}

	/* Allocate URB for reports */
862 863 864
	gtco->urbinfo = usb_alloc_urb(0, GFP_KERNEL);
	if (!gtco->urbinfo) {
		err("Failed to allocate URB");
865
		error = -ENOMEM;
866
		goto err_free_buf;
867 868 869 870 871 872 873 874 875
	}

	/*
	 * The endpoint is always altsetting 0, we know this since we know
	 * this device only has one interrupt endpoint
	 */
	endpoint = &usbinterface->altsetting[0].endpoint[0].desc;

	/* Some debug */
876 877 878 879
	dbg("gtco # interfaces: %d", usbinterface->num_altsetting);
	dbg("num endpoints:     %d", usbinterface->cur_altsetting->desc.bNumEndpoints);
	dbg("interface class:   %d", usbinterface->cur_altsetting->desc.bInterfaceClass);
	dbg("endpoint: attribute:0x%x type:0x%x", endpoint->bmAttributes, endpoint->bDescriptorType);
880 881 882
	if ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)
		dbg("endpoint: we have interrupt endpoint\n");

883
	dbg("endpoint extra len:%d ", usbinterface->altsetting[0].extralen);
884 885 886 887 888 889

	/*
	 * Find the HID descriptor so we can find out the size of the
	 * HID report descriptor
	 */
	if (usb_get_extra_descriptor(usbinterface->cur_altsetting,
890
				     HID_DEVICE_TYPE, &hid_desc) != 0){
891
		err("Can't retrieve exta USB descriptor to get hid report descriptor length");
892 893
		error = -EIO;
		goto err_free_urb;
894 895 896 897 898
	}

	dbg("Extra descriptor success: type:%d  len:%d",
	    hid_desc->bDescriptorType,  hid_desc->wDescriptorLength);

899
	report = kzalloc(le16_to_cpu(hid_desc->wDescriptorLength), GFP_KERNEL);
900 901 902 903
	if (!report) {
		err("No more memory for report");
		error = -ENOMEM;
		goto err_free_urb;
904 905 906
	}

	/* Couple of tries to get reply */
907 908 909
	for (retry = 0; retry < 3; retry++) {
		result = usb_control_msg(gtco->usbdev,
					 usb_rcvctrlpipe(gtco->usbdev, 0),
910 911
					 USB_REQ_GET_DESCRIPTOR,
					 USB_RECIP_INTERFACE | USB_DIR_IN,
912
					 REPORT_DEVICE_TYPE << 8,
913 914
					 0, /* interface */
					 report,
915
					 le16_to_cpu(hid_desc->wDescriptorLength),
916 917
					 5000); /* 5 secs */

918 919 920
		dbg("usb_control_msg result: %d", result);
		if (result == le16_to_cpu(hid_desc->wDescriptorLength)) {
			parse_hid_report_descriptor(gtco, report, result);
921
			break;
922
		}
923 924
	}

925 926
	kfree(report);

927
	/* If we didn't get the report, fail */
928
	if (result != le16_to_cpu(hid_desc->wDescriptorLength)) {
929 930
		err("Failed to get HID Report Descriptor of size: %d",
		    hid_desc->wDescriptorLength);
931 932
		error = -EIO;
		goto err_free_urb;
933 934 935
	}

	/* Create a device file node */
936 937
	usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath));
	strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath));
938 939

	/* Set Input device functions */
940 941
	input_dev->open = gtco_input_open;
	input_dev->close = gtco_input_close;
942 943

	/* Set input device information */
944 945
	input_dev->name = "GTCO_CalComp";
	input_dev->phys = gtco->usbpath;
946 947

	input_set_drvdata(input_dev, gtco);
948 949

	/* Now set up all the input device capabilities */
950
	gtco_setup_caps(input_dev);
951 952

	/* Set input device required ID information */
953
	usb_to_input_id(gtco->usbdev, &input_dev->id);
954
	input_dev->dev.parent = &usbinterface->dev;
955 956 957 958

	/* Setup the URB, it will be posted later on open of input device */
	endpoint = &usbinterface->altsetting[0].endpoint[0].desc;

959 960 961
	usb_fill_int_urb(gtco->urbinfo,
			 gtco->usbdev,
			 usb_rcvintpipe(gtco->usbdev,
962
					endpoint->bEndpointAddress),
963
			 gtco->buffer,
964 965
			 REPORT_MAX_SIZE,
			 gtco_urb_callback,
966
			 gtco,
967 968
			 endpoint->bInterval);

969 970
	gtco->urbinfo->transfer_dma = gtco->buf_dma;
	gtco->urbinfo->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
971

972 973
	/* Save gtco pointer in USB interface gtco */
	usb_set_intfdata(usbinterface, gtco);
974 975

	/* All done, now register the input device */
976 977 978
	error = input_register_device(input_dev);
	if (error)
		goto err_free_urb;
979 980 981

	return 0;

982 983 984 985 986 987 988 989 990
 err_free_urb:
	usb_free_urb(gtco->urbinfo);
 err_free_buf:
	usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE,
			gtco->buffer, gtco->buf_dma);
 err_free_devs:
	input_free_device(input_dev);
	kfree(gtco);
	return error;
991 992 993 994 995 996 997 998 999 1000
}

/*
 *  This function is a standard USB function called when the USB device
 *  is disconnected.  We will get rid of the URV, de-register the input
 *  device, and free up allocated memory
 */
static void gtco_disconnect(struct usb_interface *interface)
{
	/* Grab private device ptr */
1001
	struct gtco *gtco = usb_get_intfdata(interface);
1002 1003

	/* Now reverse all the registration stuff */
1004 1005 1006 1007 1008 1009 1010
	if (gtco) {
		input_unregister_device(gtco->inputdevice);
		usb_kill_urb(gtco->urbinfo);
		usb_free_urb(gtco->urbinfo);
		usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE,
				gtco->buffer, gtco->buf_dma);
		kfree(gtco);
1011 1012 1013 1014 1015 1016 1017 1018
	}

	info("gtco driver disconnected");
}

/*   STANDARD MODULE LOAD ROUTINES  */

static struct usb_driver gtco_driverinfo_table = {
1019 1020 1021 1022
	.name		= "gtco",
	.id_table	= gtco_usbid_table,
	.probe		= gtco_probe,
	.disconnect	= gtco_disconnect,
1023
};
1024

1025 1026 1027 1028 1029
/*
 *  Register this module with the USB subsystem
 */
static int __init gtco_init(void)
{
1030 1031 1032 1033 1034 1035
	int error;

	error = usb_register(&gtco_driverinfo_table);
	if (error) {
		err("usb_register() failed rc=0x%x", error);
		return error;
1036
	}
1037 1038 1039

	printk("GTCO usb driver version: %s", GTCO_VERSION);
	return 0;
1040 1041 1042 1043 1044 1045 1046 1047 1048 1049
}

/*
 *   Deregister this module with the USB subsystem
 */
static void __exit gtco_exit(void)
{
	usb_deregister(&gtco_driverinfo_table);
}

1050 1051
module_init(gtco_init);
module_exit(gtco_exit);
1052 1053

MODULE_LICENSE("GPL");