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