linux/drivers/input/tablet/gtco.c
<<
>>
Prefs
   1/*    -*- linux-c -*-
   2
   3GTCO digitizer USB driver
   4
   5TO CHECK:  Is pressure done right on report 5?
   6
   7Copyright (C) 2006  GTCO CalComp
   8
   9This program is free software; you can redistribute it and/or
  10modify it under the terms of the GNU General Public License
  11as published by the Free Software Foundation; version 2
  12of the License.
  13
  14This program is distributed in the hope that it will be useful,
  15but WITHOUT ANY WARRANTY; without even the implied warranty of
  16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17GNU General Public License for more details.
  18
  19You should have received a copy of the GNU General Public License
  20along with this program; if not, write to the Free Software
  21Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  22
  23Permission to use, copy, modify, distribute, and sell this software and its
  24documentation for any purpose is hereby granted without fee, provided that
  25the above copyright notice appear in all copies and that both that
  26copyright notice and this permission notice appear in supporting
  27documentation, and that the name of GTCO-CalComp not be used in advertising
  28or publicity pertaining to distribution of the software without specific,
  29written prior permission. GTCO-CalComp makes no representations about the
  30suitability of this software for any purpose.  It is provided "as is"
  31without express or implied warranty.
  32
  33GTCO-CALCOMP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  34INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
  35EVENT SHALL GTCO-CALCOMP BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  36CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
  37DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  38TORTIOUS ACTIONS, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  39PERFORMANCE OF THIS SOFTWARE.
  40
  41GTCO CalComp, Inc.
  427125 Riverwood Drive
  43Columbia, MD 21046
  44
  45Jeremy Roberson jroberson@gtcocalcomp.com
  46Scott Hill shill@gtcocalcomp.com
  47*/
  48
  49
  50
  51/*#define DEBUG*/
  52
  53#include <linux/kernel.h>
  54#include <linux/module.h>
  55#include <linux/errno.h>
  56#include <linux/slab.h>
  57#include <linux/input.h>
  58#include <linux/usb.h>
  59#include <linux/uaccess.h>
  60#include <asm/unaligned.h>
  61#include <asm/byteorder.h>
  62#include <linux/bitops.h>
  63
  64#include <linux/usb/input.h>
  65
  66/* Version with a Major number of 2 is for kernel inclusion only. */
  67#define  GTCO_VERSION   "2.00.0006"
  68
  69
  70/*   MACROS  */
  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/* Max size of a single report */
  80#define REPORT_MAX_SIZE       10
  81
  82
  83/* Bitmask whether pen is in range */
  84#define MASK_INRANGE 0x20
  85#define MASK_BUTTON  0x01F
  86
  87#define  PATHLENGTH     64
  88
  89/* DATA STRUCTURES */
  90
  91/* Device table */
  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/* Structure to hold all of our device specific stuff */
 104struct gtco {
 105
 106        struct input_dev  *inputdevice; /* input device struct pointer  */
 107        struct usb_interface *intf;     /* the usb interface for this device */
 108        struct urb        *urbinfo;      /* urb for incoming reports      */
 109        dma_addr_t        buf_dma;  /* dma addr of the data buffer*/
 110        unsigned char *   buffer;   /* databuffer for reports */
 111
 112        char  usbpath[PATHLENGTH];
 113        int   openCount;
 114
 115        /* Information pulled from Report Descriptor */
 116        u32  usage;
 117        u32  min_X;
 118        u32  max_X;
 119        u32  min_Y;
 120        u32  max_Y;
 121        s8   mintilt_X;
 122        s8   maxtilt_X;
 123        s8   mintilt_Y;
 124        s8   maxtilt_Y;
 125        u32  maxpressure;
 126        u32  minpressure;
 127};
 128
 129
 130
 131/*   Code for parsing the HID REPORT DESCRIPTOR          */
 132
 133/* From HID1.11 spec */
 134struct hid_descriptor
 135{
 136        struct usb_descriptor_header header;
 137        __le16   bcdHID;
 138        u8       bCountryCode;
 139        u8       bNumDescriptors;
 140        u8       bDescriptorType;
 141        __le16   wDescriptorLength;
 142} __attribute__ ((packed));
 143
 144
 145#define HID_DESCRIPTOR_SIZE   9
 146#define HID_DEVICE_TYPE       33
 147#define REPORT_DEVICE_TYPE    34
 148
 149
 150#define PREF_TAG(x)     ((x)>>4)
 151#define PREF_TYPE(x)    ((x>>2)&0x03)
 152#define PREF_SIZE(x)    ((x)&0x03)
 153
 154#define TYPE_MAIN       0
 155#define TYPE_GLOBAL     1
 156#define TYPE_LOCAL      2
 157#define TYPE_RESERVED   3
 158
 159#define TAG_MAIN_INPUT        0x8
 160#define TAG_MAIN_OUTPUT       0x9
 161#define TAG_MAIN_FEATURE      0xB
 162#define TAG_MAIN_COL_START    0xA
 163#define TAG_MAIN_COL_END      0xC
 164
 165#define TAG_GLOB_USAGE        0
 166#define TAG_GLOB_LOG_MIN      1
 167#define TAG_GLOB_LOG_MAX      2
 168#define TAG_GLOB_PHYS_MIN     3
 169#define TAG_GLOB_PHYS_MAX     4
 170#define TAG_GLOB_UNIT_EXP     5
 171#define TAG_GLOB_UNIT         6
 172#define TAG_GLOB_REPORT_SZ    7
 173#define TAG_GLOB_REPORT_ID    8
 174#define TAG_GLOB_REPORT_CNT   9
 175#define TAG_GLOB_PUSH         10
 176#define TAG_GLOB_POP          11
 177
 178#define TAG_GLOB_MAX          12
 179
 180#define DIGITIZER_USAGE_TIP_PRESSURE   0x30
 181#define DIGITIZER_USAGE_TILT_X         0x3D
 182#define DIGITIZER_USAGE_TILT_Y         0x3E
 183
 184
 185/*
 186 *   This is an abbreviated parser for the HID Report Descriptor.  We
 187 *   know what devices we are talking to, so this is by no means meant
 188 *   to be generic.  We can make some safe assumptions:
 189 *
 190 *   - We know there are no LONG tags, all short
 191 *   - We know that we have no MAIN Feature and MAIN Output items
 192 *   - We know what the IRQ reports are supposed to look like.
 193 *
 194 *   The main purpose of this is to use the HID report desc to figure
 195 *   out the mins and maxs of the fields in the IRQ reports.  The IRQ
 196 *   reports for 400/401 change slightly if the max X is bigger than 64K.
 197 *
 198 */
 199static void parse_hid_report_descriptor(struct gtco *device, char * report,
 200                                        int length)
 201{
 202        struct device *ddev = &device->intf->dev;
 203        int   x, i = 0;
 204
 205        /* Tag primitive vars */
 206        __u8   prefix;
 207        __u8   size;
 208        __u8   tag;
 209        __u8   type;
 210        __u8   data   = 0;
 211        __u16  data16 = 0;
 212        __u32  data32 = 0;
 213
 214        /* For parsing logic */
 215        int   inputnum = 0;
 216        __u32 usage = 0;
 217
 218        /* Global Values, indexed by TAG */
 219        __u32 globalval[TAG_GLOB_MAX];
 220        __u32 oldval[TAG_GLOB_MAX];
 221
 222        /* Debug stuff */
 223        char  maintype = 'x';
 224        char  globtype[12];
 225        int   indent = 0;
 226        char  indentstr[10] = "";
 227
 228
 229        dev_dbg(ddev, "======>>>>>>PARSE<<<<<<======\n");
 230
 231        /* Walk  this report and pull out the info we need */
 232        while (i < length) {
 233                prefix = report[i++];
 234
 235                /* Determine data size and save the data in the proper variable */
 236                size = (1U << PREF_SIZE(prefix)) >> 1;
 237                if (i + size > length) {
 238                        dev_err(ddev,
 239                                "Not enough data (need %d, have %d)\n",
 240                                i + size, length);
 241                        break;
 242                }
 243
 244                switch (size) {
 245                case 1:
 246                        data = report[i];
 247                        break;
 248                case 2:
 249                        data16 = get_unaligned_le16(&report[i]);
 250                        break;
 251                case 4:
 252                        data32 = get_unaligned_le32(&report[i]);
 253                        break;
 254                }
 255
 256                /* Skip size of data */
 257                i += size;
 258
 259                /* What we do depends on the tag type */
 260                tag  = PREF_TAG(prefix);
 261                type = PREF_TYPE(prefix);
 262                switch (type) {
 263                case TYPE_MAIN:
 264                        strcpy(globtype, "");
 265                        switch (tag) {
 266
 267                        case TAG_MAIN_INPUT:
 268                                /*
 269                                 * The INPUT MAIN tag signifies this is
 270                                 * information from a report.  We need to
 271                                 * figure out what it is and store the
 272                                 * min/max values
 273                                 */
 274
 275                                maintype = 'I';
 276                                if (data == 2)
 277                                        strcpy(globtype, "Variable");
 278                                else if (data == 3)
 279                                        strcpy(globtype, "Var|Const");
 280
 281                                dev_dbg(ddev, "::::: Saving Report: %d input #%d Max: 0x%X(%d) Min:0x%X(%d) of %d bits\n",
 282                                        globalval[TAG_GLOB_REPORT_ID], inputnum,
 283                                        globalval[TAG_GLOB_LOG_MAX], globalval[TAG_GLOB_LOG_MAX],
 284                                        globalval[TAG_GLOB_LOG_MIN], globalval[TAG_GLOB_LOG_MIN],
 285                                        globalval[TAG_GLOB_REPORT_SZ] * globalval[TAG_GLOB_REPORT_CNT]);
 286
 287
 288                                /*
 289                                  We can assume that the first two input items
 290                                  are always the X and Y coordinates.  After
 291                                  that, we look for everything else by
 292                                  local usage value
 293                                 */
 294                                switch (inputnum) {
 295                                case 0:  /* X coord */
 296                                        dev_dbg(ddev, "GER: X Usage: 0x%x\n", usage);
 297                                        if (device->max_X == 0) {
 298                                                device->max_X = globalval[TAG_GLOB_LOG_MAX];
 299                                                device->min_X = globalval[TAG_GLOB_LOG_MIN];
 300                                        }
 301                                        break;
 302
 303                                case 1:  /* Y coord */
 304                                        dev_dbg(ddev, "GER: Y Usage: 0x%x\n", usage);
 305                                        if (device->max_Y == 0) {
 306                                                device->max_Y = globalval[TAG_GLOB_LOG_MAX];
 307                                                device->min_Y = globalval[TAG_GLOB_LOG_MIN];
 308                                        }
 309                                        break;
 310
 311                                default:
 312                                        /* Tilt X */
 313                                        if (usage == DIGITIZER_USAGE_TILT_X) {
 314                                                if (device->maxtilt_X == 0) {
 315                                                        device->maxtilt_X = globalval[TAG_GLOB_LOG_MAX];
 316                                                        device->mintilt_X = globalval[TAG_GLOB_LOG_MIN];
 317                                                }
 318                                        }
 319
 320                                        /* Tilt Y */
 321                                        if (usage == DIGITIZER_USAGE_TILT_Y) {
 322                                                if (device->maxtilt_Y == 0) {
 323                                                        device->maxtilt_Y = globalval[TAG_GLOB_LOG_MAX];
 324                                                        device->mintilt_Y = globalval[TAG_GLOB_LOG_MIN];
 325                                                }
 326                                        }
 327
 328                                        /* Pressure */
 329                                        if (usage == DIGITIZER_USAGE_TIP_PRESSURE) {
 330                                                if (device->maxpressure == 0) {
 331                                                        device->maxpressure = globalval[TAG_GLOB_LOG_MAX];
 332                                                        device->minpressure = globalval[TAG_GLOB_LOG_MIN];
 333                                                }
 334                                        }
 335
 336                                        break;
 337                                }
 338
 339                                inputnum++;
 340                                break;
 341
 342                        case TAG_MAIN_OUTPUT:
 343                                maintype = 'O';
 344                                break;
 345
 346                        case TAG_MAIN_FEATURE:
 347                                maintype = 'F';
 348                                break;
 349
 350                        case TAG_MAIN_COL_START:
 351                                maintype = 'S';
 352
 353                                if (data == 0) {
 354                                        dev_dbg(ddev, "======>>>>>> Physical\n");
 355                                        strcpy(globtype, "Physical");
 356                                } else
 357                                        dev_dbg(ddev, "======>>>>>>\n");
 358
 359                                /* Indent the debug output */
 360                                indent++;
 361                                for (x = 0; x < indent; x++)
 362                                        indentstr[x] = '-';
 363                                indentstr[x] = 0;
 364
 365                                /* Save global tags */
 366                                for (x = 0; x < TAG_GLOB_MAX; x++)
 367                                        oldval[x] = globalval[x];
 368
 369                                break;
 370
 371                        case TAG_MAIN_COL_END:
 372                                dev_dbg(ddev, "<<<<<<======\n");
 373                                maintype = 'E';
 374                                indent--;
 375                                for (x = 0; x < indent; x++)
 376                                        indentstr[x] = '-';
 377                                indentstr[x] = 0;
 378
 379                                /* Copy global tags back */
 380                                for (x = 0; x < TAG_GLOB_MAX; x++)
 381                                        globalval[x] = oldval[x];
 382
 383                                break;
 384                        }
 385
 386                        switch (size) {
 387                        case 1:
 388                                dev_dbg(ddev, "%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x\n",
 389                                        indentstr, tag, maintype, size, globtype, data);
 390                                break;
 391
 392                        case 2:
 393                                dev_dbg(ddev, "%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x\n",
 394                                        indentstr, tag, maintype, size, globtype, data16);
 395                                break;
 396
 397                        case 4:
 398                                dev_dbg(ddev, "%sMAINTAG:(%d) %c SIZE: %d Data: %s 0x%x\n",
 399                                        indentstr, tag, maintype, size, globtype, data32);
 400                                break;
 401                        }
 402                        break;
 403
 404                case TYPE_GLOBAL:
 405                        switch (tag) {
 406                        case TAG_GLOB_USAGE:
 407                                /*
 408                                 * First time we hit the global usage tag,
 409                                 * it should tell us the type of device
 410                                 */
 411                                if (device->usage == 0)
 412                                        device->usage = data;
 413
 414                                strcpy(globtype, "USAGE");
 415                                break;
 416
 417                        case TAG_GLOB_LOG_MIN:
 418                                strcpy(globtype, "LOG_MIN");
 419                                break;
 420
 421                        case TAG_GLOB_LOG_MAX:
 422                                strcpy(globtype, "LOG_MAX");
 423                                break;
 424
 425                        case TAG_GLOB_PHYS_MIN:
 426                                strcpy(globtype, "PHYS_MIN");
 427                                break;
 428
 429                        case TAG_GLOB_PHYS_MAX:
 430                                strcpy(globtype, "PHYS_MAX");
 431                                break;
 432
 433                        case TAG_GLOB_UNIT_EXP:
 434                                strcpy(globtype, "EXP");
 435                                break;
 436
 437                        case TAG_GLOB_UNIT:
 438                                strcpy(globtype, "UNIT");
 439                                break;
 440
 441                        case TAG_GLOB_REPORT_SZ:
 442                                strcpy(globtype, "REPORT_SZ");
 443                                break;
 444
 445                        case TAG_GLOB_REPORT_ID:
 446                                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                        case TAG_GLOB_PUSH:
 456                                strcpy(globtype, "PUSH");
 457                                break;
 458
 459                        case TAG_GLOB_POP:
 460                                strcpy(globtype, "POP");
 461                                break;
 462                        }
 463
 464                        /* Check to make sure we have a good tag number
 465                           so we don't overflow array */
 466                        if (tag < TAG_GLOB_MAX) {
 467                                switch (size) {
 468                                case 1:
 469                                        dev_dbg(ddev, "%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x\n",
 470                                                indentstr, globtype, tag, size, data);
 471                                        globalval[tag] = data;
 472                                        break;
 473
 474                                case 2:
 475                                        dev_dbg(ddev, "%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x\n",
 476                                                indentstr, globtype, tag, size, data16);
 477                                        globalval[tag] = data16;
 478                                        break;
 479
 480                                case 4:
 481                                        dev_dbg(ddev, "%sGLOBALTAG:%s(%d) SIZE: %d Data: 0x%x\n",
 482                                                indentstr, globtype, tag, size, data32);
 483                                        globalval[tag] = data32;
 484                                        break;
 485                                }
 486                        } else {
 487                                dev_dbg(ddev, "%sGLOBALTAG: ILLEGAL TAG:%d SIZE: %d\n",
 488                                        indentstr, tag, size);
 489                        }
 490                        break;
 491
 492                case TYPE_LOCAL:
 493                        switch (tag) {
 494                        case TAG_GLOB_USAGE:
 495                                strcpy(globtype, "USAGE");
 496                                /* Always 1 byte */
 497                                usage = data;
 498                                break;
 499
 500                        case TAG_GLOB_LOG_MIN:
 501                                strcpy(globtype, "MIN");
 502                                break;
 503
 504                        case TAG_GLOB_LOG_MAX:
 505                                strcpy(globtype, "MAX");
 506                                break;
 507
 508                        default:
 509                                strcpy(globtype, "UNKNOWN");
 510                                break;
 511                        }
 512
 513                        switch (size) {
 514                        case 1:
 515                                dev_dbg(ddev, "%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x\n",
 516                                        indentstr, tag, globtype, size, data);
 517                                break;
 518
 519                        case 2:
 520                                dev_dbg(ddev, "%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x\n",
 521                                        indentstr, tag, globtype, size, data16);
 522                                break;
 523
 524                        case 4:
 525                                dev_dbg(ddev, "%sLOCALTAG:(%d) %s SIZE: %d Data: 0x%x\n",
 526                                        indentstr, tag, globtype, size, data32);
 527                                break;
 528                        }
 529
 530                        break;
 531                }
 532        }
 533}
 534
 535/*   INPUT DRIVER Routines                               */
 536
 537/*
 538 * Called when opening the input device.  This will submit the URB to
 539 * the usb system so we start getting reports
 540 */
 541static int gtco_input_open(struct input_dev *inputdev)
 542{
 543        struct gtco *device = input_get_drvdata(inputdev);
 544
 545        device->urbinfo->dev = interface_to_usbdev(device->intf);
 546        if (usb_submit_urb(device->urbinfo, GFP_KERNEL))
 547                return -EIO;
 548
 549        return 0;
 550}
 551
 552/*
 553 * Called when closing the input device.  This will unlink the URB
 554 */
 555static void gtco_input_close(struct input_dev *inputdev)
 556{
 557        struct gtco *device = input_get_drvdata(inputdev);
 558
 559        usb_kill_urb(device->urbinfo);
 560}
 561
 562
 563/*
 564 *  Setup input device capabilities.  Tell the input system what this
 565 *  device is capable of generating.
 566 *
 567 *  This information is based on what is read from the HID report and
 568 *  placed in the struct gtco structure
 569 *
 570 */
 571static void gtco_setup_caps(struct input_dev *inputdev)
 572{
 573        struct gtco *device = input_get_drvdata(inputdev);
 574
 575        /* Which events */
 576        inputdev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) |
 577                BIT_MASK(EV_MSC);
 578
 579        /* Misc event menu block */
 580        inputdev->mscbit[0] = BIT_MASK(MSC_SCAN) | BIT_MASK(MSC_SERIAL) |
 581                BIT_MASK(MSC_RAW);
 582
 583        /* Absolute values based on HID report info */
 584        input_set_abs_params(inputdev, ABS_X, device->min_X, device->max_X,
 585                             0, 0);
 586        input_set_abs_params(inputdev, ABS_Y, device->min_Y, device->max_Y,
 587                             0, 0);
 588
 589        /* Proximity */
 590        input_set_abs_params(inputdev, ABS_DISTANCE, 0, 1, 0, 0);
 591
 592        /* Tilt & pressure */
 593        input_set_abs_params(inputdev, ABS_TILT_X, device->mintilt_X,
 594                             device->maxtilt_X, 0, 0);
 595        input_set_abs_params(inputdev, ABS_TILT_Y, device->mintilt_Y,
 596                             device->maxtilt_Y, 0, 0);
 597        input_set_abs_params(inputdev, ABS_PRESSURE, device->minpressure,
 598                             device->maxpressure, 0, 0);
 599
 600        /* Transducer */
 601        input_set_abs_params(inputdev, ABS_MISC, 0, 0xFF, 0, 0);
 602}
 603
 604/*   USB Routines  */
 605
 606/*
 607 * URB callback routine.  Called when we get IRQ reports from the
 608 *  digitizer.
 609 *
 610 *  This bridges the USB and input device worlds.  It generates events
 611 *  on the input device based on the USB reports.
 612 */
 613static void gtco_urb_callback(struct urb *urbinfo)
 614{
 615        struct gtco *device = urbinfo->context;
 616        struct input_dev  *inputdev;
 617        int               rc;
 618        u32               val = 0;
 619        char              le_buffer[2];
 620
 621        inputdev = device->inputdevice;
 622
 623        /* Was callback OK? */
 624        if (urbinfo->status == -ECONNRESET ||
 625            urbinfo->status == -ENOENT ||
 626            urbinfo->status == -ESHUTDOWN) {
 627
 628                /* Shutdown is occurring. Return and don't queue up any more */
 629                return;
 630        }
 631
 632        if (urbinfo->status != 0) {
 633                /*
 634                 * Some unknown error.  Hopefully temporary. Just go and
 635                 * requeue an URB
 636                 */
 637                goto resubmit;
 638        }
 639
 640        /*
 641         * Good URB, now process
 642         */
 643
 644        /* PID dependent when we interpret the report */
 645        if (inputdev->id.product == PID_1000 ||
 646            inputdev->id.product == PID_1001 ||
 647            inputdev->id.product == PID_1002) {
 648
 649                /*
 650                 * Switch on the report ID
 651                 * Conveniently, the reports have more information, the higher
 652                 * the report number.  We can just fall through the case
 653                 * statements if we start with the highest number report
 654                 */
 655                switch (device->buffer[0]) {
 656                case 5:
 657                        /* Pressure is 9 bits */
 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                        /* Mask out the Y tilt value used for pressure */
 664                        device->buffer[7] = (u8)((device->buffer[7]) & 0x7F);
 665
 666                        /* Fall thru */
 667                case 4:
 668                        /* Tilt */
 669                        input_report_abs(inputdev, ABS_TILT_X,
 670                                         sign_extend32(device->buffer[6], 6));
 671
 672                        input_report_abs(inputdev, ABS_TILT_Y,
 673                                         sign_extend32(device->buffer[7], 6));
 674
 675                        /* Fall thru */
 676                case 2:
 677                case 3:
 678                        /* Convert buttons, only 5 bits possible */
 679                        val = (device->buffer[5]) & MASK_BUTTON;
 680
 681                        /* We don't apply any meaning to the bitmask,
 682                           just report */
 683                        input_event(inputdev, EV_MSC, MSC_SERIAL, val);
 684
 685                        /*  Fall thru */
 686                case 1:
 687                        /* All reports have X and Y coords in the same place */
 688                        val = get_unaligned_le16(&device->buffer[1]);
 689                        input_report_abs(inputdev, ABS_X, val);
 690
 691                        val = get_unaligned_le16(&device->buffer[3]);
 692                        input_report_abs(inputdev, ABS_Y, val);
 693
 694                        /* Ditto for proximity bit */
 695                        val = device->buffer[5] & MASK_INRANGE ? 1 : 0;
 696                        input_report_abs(inputdev, ABS_DISTANCE, val);
 697
 698                        /* Report 1 is an exception to how we handle buttons */
 699                        /* Buttons are an index, not a bitmask */
 700                        if (device->buffer[0] == 1) {
 701
 702                                /*
 703                                 * Convert buttons, 5 bit index
 704                                 * Report value of index set as one,
 705                                 * the rest as 0
 706                                 */
 707                                val = device->buffer[5] & MASK_BUTTON;
 708                                dev_dbg(&device->intf->dev,
 709                                        "======>>>>>>REPORT 1: val 0x%X(%d)\n",
 710                                        val, val);
 711
 712                                /*
 713                                 * We don't apply any meaning to the button
 714                                 * index, just report it
 715                                 */
 716                                input_event(inputdev, EV_MSC, MSC_SERIAL, val);
 717                        }
 718                        break;
 719
 720                case 7:
 721                        /* Menu blocks */
 722                        input_event(inputdev, EV_MSC, MSC_SCAN,
 723                                    device->buffer[1]);
 724                        break;
 725                }
 726        }
 727
 728        /* Other pid class */
 729        if (inputdev->id.product == PID_400 ||
 730            inputdev->id.product == PID_401) {
 731
 732                /* Report 2 */
 733                if (device->buffer[0] == 2) {
 734                        /* Menu blocks */
 735                        input_event(inputdev, EV_MSC, MSC_SCAN, device->buffer[1]);
 736                }
 737
 738                /*  Report 1 */
 739                if (device->buffer[0] == 1) {
 740                        char buttonbyte;
 741
 742                        /*  IF X max > 64K, we still a bit from the y report */
 743                        if (device->max_X > 0x10000) {
 744
 745                                val = (u16)(((u16)(device->buffer[2] << 8)) | (u8)device->buffer[1]);
 746                                val |= (u32)(((u8)device->buffer[3] & 0x1) << 16);
 747
 748                                input_report_abs(inputdev, ABS_X, val);
 749
 750                                le_buffer[0]  = (u8)((u8)(device->buffer[3]) >> 1);
 751                                le_buffer[0] |= (u8)((device->buffer[3] & 0x1) << 7);
 752
 753                                le_buffer[1]  = (u8)(device->buffer[4] >> 1);
 754                                le_buffer[1] |= (u8)((device->buffer[5] & 0x1) << 7);
 755
 756                                val = get_unaligned_le16(le_buffer);
 757                                input_report_abs(inputdev, ABS_Y, val);
 758
 759                                /*
 760                                 * Shift the button byte right by one to
 761                                 * make it look like the standard report
 762                                 */
 763                                buttonbyte = device->buffer[5] >> 1;
 764                        } else {
 765
 766                                val = get_unaligned_le16(&device->buffer[1]);
 767                                input_report_abs(inputdev, ABS_X, val);
 768
 769                                val = get_unaligned_le16(&device->buffer[3]);
 770                                input_report_abs(inputdev, ABS_Y, val);
 771
 772                                buttonbyte = device->buffer[5];
 773                        }
 774
 775                        /* BUTTONS and PROXIMITY */
 776                        val = buttonbyte & MASK_INRANGE ? 1 : 0;
 777                        input_report_abs(inputdev, ABS_DISTANCE, val);
 778
 779                        /* Convert buttons, only 4 bits possible */
 780                        val = buttonbyte & 0x0F;
 781#ifdef USE_BUTTONS
 782                        for (i = 0; i < 5; i++)
 783                                input_report_key(inputdev, BTN_DIGI + i, val & (1 << i));
 784#else
 785                        /* We don't apply any meaning to the bitmask, just report */
 786                        input_event(inputdev, EV_MSC, MSC_SERIAL, val);
 787#endif
 788
 789                        /* TRANSDUCER */
 790                        input_report_abs(inputdev, ABS_MISC, device->buffer[6]);
 791                }
 792        }
 793
 794        /* Everybody gets report ID's */
 795        input_event(inputdev, EV_MSC, MSC_RAW,  device->buffer[0]);
 796
 797        /* Sync it up */
 798        input_sync(inputdev);
 799
 800 resubmit:
 801        rc = usb_submit_urb(urbinfo, GFP_ATOMIC);
 802        if (rc != 0)
 803                dev_err(&device->intf->dev,
 804                        "usb_submit_urb failed rc=0x%x\n", rc);
 805}
 806
 807/*
 808 *  The probe routine.  This is called when the kernel find the matching USB
 809 *   vendor/product.  We do the following:
 810 *
 811 *    - Allocate mem for a local structure to manage the device
 812 *    - Request a HID Report Descriptor from the device and parse it to
 813 *      find out the device parameters
 814 *    - Create an input device and assign it attributes
 815 *   - Allocate an URB so the device can talk to us when the input
 816 *      queue is open
 817 */
 818static int gtco_probe(struct usb_interface *usbinterface,
 819                      const struct usb_device_id *id)
 820{
 821
 822        struct gtco             *gtco;
 823        struct input_dev        *input_dev;
 824        struct hid_descriptor   *hid_desc;
 825        char                    *report;
 826        int                     result = 0, retry;
 827        int                     error;
 828        struct usb_endpoint_descriptor *endpoint;
 829        struct usb_device       *udev = interface_to_usbdev(usbinterface);
 830
 831        /* Allocate memory for device structure */
 832        gtco = kzalloc(sizeof(struct gtco), GFP_KERNEL);
 833        input_dev = input_allocate_device();
 834        if (!gtco || !input_dev) {
 835                dev_err(&usbinterface->dev, "No more memory\n");
 836                error = -ENOMEM;
 837                goto err_free_devs;
 838        }
 839
 840        /* Set pointer to the input device */
 841        gtco->inputdevice = input_dev;
 842
 843        /* Save interface information */
 844        gtco->intf = usbinterface;
 845
 846        /* Allocate some data for incoming reports */
 847        gtco->buffer = usb_alloc_coherent(udev, REPORT_MAX_SIZE,
 848                                          GFP_KERNEL, &gtco->buf_dma);
 849        if (!gtco->buffer) {
 850                dev_err(&usbinterface->dev, "No more memory for us buffers\n");
 851                error = -ENOMEM;
 852                goto err_free_devs;
 853        }
 854
 855        /* Allocate URB for reports */
 856        gtco->urbinfo = usb_alloc_urb(0, GFP_KERNEL);
 857        if (!gtco->urbinfo) {
 858                dev_err(&usbinterface->dev, "Failed to allocate URB\n");
 859                error = -ENOMEM;
 860                goto err_free_buf;
 861        }
 862
 863        /* Sanity check that a device has an endpoint */
 864        if (usbinterface->altsetting[0].desc.bNumEndpoints < 1) {
 865                dev_err(&usbinterface->dev,
 866                        "Invalid number of endpoints\n");
 867                error = -EINVAL;
 868                goto err_free_urb;
 869        }
 870
 871        /*
 872         * The endpoint is always altsetting 0, we know this since we know
 873         * this device only has one interrupt endpoint
 874         */
 875        endpoint = &usbinterface->altsetting[0].endpoint[0].desc;
 876
 877        /* Some debug */
 878        dev_dbg(&usbinterface->dev, "gtco # interfaces: %d\n", usbinterface->num_altsetting);
 879        dev_dbg(&usbinterface->dev, "num endpoints:     %d\n", usbinterface->cur_altsetting->desc.bNumEndpoints);
 880        dev_dbg(&usbinterface->dev, "interface class:   %d\n", usbinterface->cur_altsetting->desc.bInterfaceClass);
 881        dev_dbg(&usbinterface->dev, "endpoint: attribute:0x%x type:0x%x\n", endpoint->bmAttributes, endpoint->bDescriptorType);
 882        if (usb_endpoint_xfer_int(endpoint))
 883                dev_dbg(&usbinterface->dev, "endpoint: we have interrupt endpoint\n");
 884
 885        dev_dbg(&usbinterface->dev, "endpoint extra len:%d\n", usbinterface->altsetting[0].extralen);
 886
 887        /*
 888         * Find the HID descriptor so we can find out the size of the
 889         * HID report descriptor
 890         */
 891        if (usb_get_extra_descriptor(usbinterface->cur_altsetting,
 892                                     HID_DEVICE_TYPE, &hid_desc) != 0) {
 893                dev_err(&usbinterface->dev,
 894                        "Can't retrieve exta USB descriptor to get hid report descriptor length\n");
 895                error = -EIO;
 896                goto err_free_urb;
 897        }
 898
 899        dev_dbg(&usbinterface->dev,
 900                "Extra descriptor success: type:%d  len:%d\n",
 901                hid_desc->bDescriptorType,  hid_desc->wDescriptorLength);
 902
 903        report = kzalloc(le16_to_cpu(hid_desc->wDescriptorLength), GFP_KERNEL);
 904        if (!report) {
 905                dev_err(&usbinterface->dev, "No more memory for report\n");
 906                error = -ENOMEM;
 907                goto err_free_urb;
 908        }
 909
 910        /* Couple of tries to get reply */
 911        for (retry = 0; retry < 3; retry++) {
 912                result = usb_control_msg(udev,
 913                                         usb_rcvctrlpipe(udev, 0),
 914                                         USB_REQ_GET_DESCRIPTOR,
 915                                         USB_RECIP_INTERFACE | USB_DIR_IN,
 916                                         REPORT_DEVICE_TYPE << 8,
 917                                         0, /* interface */
 918                                         report,
 919                                         le16_to_cpu(hid_desc->wDescriptorLength),
 920                                         5000); /* 5 secs */
 921
 922                dev_dbg(&usbinterface->dev, "usb_control_msg result: %d\n", result);
 923                if (result == le16_to_cpu(hid_desc->wDescriptorLength)) {
 924                        parse_hid_report_descriptor(gtco, report, result);
 925                        break;
 926                }
 927        }
 928
 929        kfree(report);
 930
 931        /* If we didn't get the report, fail */
 932        if (result != le16_to_cpu(hid_desc->wDescriptorLength)) {
 933                dev_err(&usbinterface->dev,
 934                        "Failed to get HID Report Descriptor of size: %d\n",
 935                        hid_desc->wDescriptorLength);
 936                error = -EIO;
 937                goto err_free_urb;
 938        }
 939
 940        /* Create a device file node */
 941        usb_make_path(udev, gtco->usbpath, sizeof(gtco->usbpath));
 942        strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath));
 943
 944        /* Set Input device functions */
 945        input_dev->open = gtco_input_open;
 946        input_dev->close = gtco_input_close;
 947
 948        /* Set input device information */
 949        input_dev->name = "GTCO_CalComp";
 950        input_dev->phys = gtco->usbpath;
 951
 952        input_set_drvdata(input_dev, gtco);
 953
 954        /* Now set up all the input device capabilities */
 955        gtco_setup_caps(input_dev);
 956
 957        /* Set input device required ID information */
 958        usb_to_input_id(udev, &input_dev->id);
 959        input_dev->dev.parent = &usbinterface->dev;
 960
 961        /* Setup the URB, it will be posted later on open of input device */
 962        endpoint = &usbinterface->altsetting[0].endpoint[0].desc;
 963
 964        usb_fill_int_urb(gtco->urbinfo,
 965                         udev,
 966                         usb_rcvintpipe(udev,
 967                                        endpoint->bEndpointAddress),
 968                         gtco->buffer,
 969                         REPORT_MAX_SIZE,
 970                         gtco_urb_callback,
 971                         gtco,
 972                         endpoint->bInterval);
 973
 974        gtco->urbinfo->transfer_dma = gtco->buf_dma;
 975        gtco->urbinfo->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 976
 977        /* Save gtco pointer in USB interface gtco */
 978        usb_set_intfdata(usbinterface, gtco);
 979
 980        /* All done, now register the input device */
 981        error = input_register_device(input_dev);
 982        if (error)
 983                goto err_free_urb;
 984
 985        return 0;
 986
 987 err_free_urb:
 988        usb_free_urb(gtco->urbinfo);
 989 err_free_buf:
 990        usb_free_coherent(udev, REPORT_MAX_SIZE,
 991                          gtco->buffer, gtco->buf_dma);
 992 err_free_devs:
 993        input_free_device(input_dev);
 994        kfree(gtco);
 995        return error;
 996}
 997
 998/*
 999 *  This function is a standard USB function called when the USB device
1000 *  is disconnected.  We will get rid of the URV, de-register the input
1001 *  device, and free up allocated memory
1002 */
1003static void gtco_disconnect(struct usb_interface *interface)
1004{
1005        /* Grab private device ptr */
1006        struct gtco *gtco = usb_get_intfdata(interface);
1007        struct usb_device *udev = interface_to_usbdev(interface);
1008
1009        /* Now reverse all the registration stuff */
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(udev, 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/*   STANDARD MODULE LOAD ROUTINES  */
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