gtco.c 26.4 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 205
/*    -*- 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/version.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)
{
206
	int   x, i = 0;
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

	/* 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 */
226
	char  maintype = 'x';
227
	char  globtype[12];
228 229
	int   indent = 0;
	char  indentstr[10] = "";
230 231 232 233 234


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

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

		/* Skip over prefix */
		i++;

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

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

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

			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
				 */

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

				dbg("::::: Saving Report: %d input #%d Max: 0x%X(%d) Min:0x%X(%d) of %d bits",
282 283 284 285
				    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]);
286 287 288 289 290 291 292 293


				/*
				  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
				 */
294
				switch (inputnum) {
295
				case 0:  /* X coord */
296 297
					dbg("GER: X Usage: 0x%x", usage);
					if (device->max_X == 0) {
298 299 300 301
						device->max_X = globalval[TAG_GLOB_LOG_MAX];
						device->min_X = globalval[TAG_GLOB_LOG_MIN];
					}
					break;
302

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

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

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

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

					break;
				}

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

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

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

				break;
370

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

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

				break;
			}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

			break;
		}
	}
}

/*   INPUT DRIVER Routines                               */

/*
538 539
 * Called when opening the input device.  This will submit the URB to
 * the usb system so we start getting reports
540 541 542
 */
static int gtco_input_open(struct input_dev *inputdev)
{
543
	struct gtco *device = input_get_drvdata(inputdev);
544 545

	device->urbinfo->dev = device->usbdev;
546
	if (usb_submit_urb(device->urbinfo, GFP_KERNEL))
547
		return -EIO;
548

549 550 551
	return 0;
}

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

	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
 *
 */
571
static void gtco_setup_caps(struct input_dev *inputdev)
572
{
573
	struct gtco *device = input_get_drvdata(inputdev);
574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598

	/* Which events */
	inputdev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_MSC);

	/* Misc event menu block */
	inputdev->mscbit[0] = BIT(MSC_SCAN)|BIT(MSC_SERIAL)|BIT(MSC_RAW) ;

	/* 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 */
599
	input_set_abs_params(inputdev, ABS_MISC, 0, 0xFF, 0, 0);
600 601 602 603 604 605 606 607 608 609 610 611 612
}

/*   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)
{
613
	struct gtco *device = urbinfo->context;
614 615 616 617 618 619 620 621 622
	struct input_dev  *inputdev;
	int               rc;
	u32               val = 0;
	s8                valsigned = 0;
	char              le_buffer[2];

	inputdev = device->inputdevice;

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

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

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

	/*
	 * Good URB, now process
	 */

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

		/*
		 * 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
		 */
654
		switch (device->buffer[0]) {
655 656
		case 5:
			/* Pressure is 9 bits */
657
			val = ((u16)(device->buffer[8]) << 1);
658 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
			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 */
687
			val = (device->buffer[5]) & MASK_BUTTON;
688 689 690 691 692 693 694 695

			/* 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 */
696
			val = le16_to_cpu(get_unaligned((__le16 *)&device->buffer[1]));
697 698
			input_report_abs(inputdev, ABS_X, val);

699
			val = le16_to_cpu(get_unaligned((__le16 *)&device->buffer[3]));
700 701 702
			input_report_abs(inputdev, ABS_Y, val);

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

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

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

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

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

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

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

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

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

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

				input_report_abs(inputdev, ABS_X, val);

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

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

763
				val = le16_to_cpu(get_unaligned((__le16 *)le_buffer));
764 765 766 767 768 769
				input_report_abs(inputdev, ABS_Y, val);

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

773
				val = le16_to_cpu(get_unaligned((__le16 *)&device->buffer[1]));
774 775
				input_report_abs(inputdev, ABS_X, val);

776
				val = le16_to_cpu(get_unaligned((__le16 *)&device->buffer[3]));
777 778 779 780 781 782
				input_report_abs(inputdev, ABS_Y, val);

				buttonbyte = device->buffer[5];
			}

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

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

796 797 798 799 800 801 802 803 804 805 806 807 808
			/* 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);
809 810
	if (rc != 0)
		err("usb_submit_urb failed rc=0x%x", rc);
811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827
}

/*
 *  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)
{

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

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

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

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

	/* Allocate some data for incoming reports */
852 853 854 855 856 857
	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;
858 859 860
	}

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

	/*
	 * 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 */
875 876 877 878
	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);
879 880 881
	if ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)
		dbg("endpoint: we have interrupt endpoint\n");

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

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

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

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

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

		if (result == hid_desc->wDescriptorLength)
			break;
	}

	/* If we didn't get the report, fail */
	dbg("usb_control_msg result: :%d", result);
923
	if (result != hid_desc->wDescriptorLength) {
924 925
		err("Failed to get HID Report Descriptor of size: %d",
		    hid_desc->wDescriptorLength);
926 927
		error = -EIO;
		goto err_free_urb;
928 929 930
	}

	/* Now we parse the report */
931
	parse_hid_report_descriptor(gtco, report, result);
932 933 934 935 936

	/* Now we delete it */
	kfree(report);

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

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

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

	input_set_drvdata(input_dev, gtco);
949 950

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

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

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

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

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

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

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

	return 0;

983 984 985 986 987 988 989 990 991 992
 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:
	kfree(report);
	input_free_device(input_dev);
	kfree(gtco);
	return error;
993 994 995 996 997 998 999 1000 1001 1002
}

/*
 *  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 */
1003
	struct gtco *gtco = usb_get_intfdata(interface);
1004 1005

	/* Now reverse all the registration stuff */
1006 1007 1008 1009 1010 1011 1012
	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);
1013 1014 1015 1016 1017 1018 1019 1020
	}

	info("gtco driver disconnected");
}

/*   STANDARD MODULE LOAD ROUTINES  */

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

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

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

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

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

1052 1053
module_init(gtco_init);
module_exit(gtco_exit);
1054 1055

MODULE_LICENSE("GPL");