linux/drivers/input/joystick/gamecon.c
<<
>>
Prefs
   1/*
   2 * NES, SNES, N64, MultiSystem, PSX gamepad driver for Linux
   3 *
   4 *  Copyright (c) 1999-2004     Vojtech Pavlik <vojtech@suse.cz>
   5 *  Copyright (c) 2004          Peter Nelson <rufus-kernel@hackish.org>
   6 *
   7 *  Based on the work of:
   8 *      Andree Borrmann         John Dahlstrom
   9 *      David Kuder             Nathan Hand
  10 *      Raphael Assenat
  11 */
  12
  13/*
  14 * This program is free software; you can redistribute it and/or modify
  15 * it under the terms of the GNU General Public License as published by
  16 * the Free Software Foundation; either version 2 of the License, or
  17 * (at your option) any later version.
  18 *
  19 * This program is distributed in the hope that it will be useful,
  20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  22 * GNU General Public License for more details.
  23 *
  24 * You should have received a copy of the GNU General Public License
  25 * along with this program; if not, write to the Free Software
  26 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  27 *
  28 * Should you need to contact me, the author, you can do so either by
  29 * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
  30 * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
  31 */
  32
  33#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  34
  35#include <linux/kernel.h>
  36#include <linux/delay.h>
  37#include <linux/module.h>
  38#include <linux/init.h>
  39#include <linux/parport.h>
  40#include <linux/input.h>
  41#include <linux/mutex.h>
  42#include <linux/slab.h>
  43
  44MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
  45MODULE_DESCRIPTION("NES, SNES, N64, MultiSystem, PSX gamepad driver");
  46MODULE_LICENSE("GPL");
  47
  48#define GC_MAX_PORTS            3
  49#define GC_MAX_DEVICES          5
  50
  51struct gc_config {
  52        int args[GC_MAX_DEVICES + 1];
  53        unsigned int nargs;
  54};
  55
  56static struct gc_config gc_cfg[GC_MAX_PORTS] __initdata;
  57
  58module_param_array_named(map, gc_cfg[0].args, int, &gc_cfg[0].nargs, 0);
  59MODULE_PARM_DESC(map, "Describes first set of devices (<parport#>,<pad1>,<pad2>,..<pad5>)");
  60module_param_array_named(map2, gc_cfg[1].args, int, &gc_cfg[1].nargs, 0);
  61MODULE_PARM_DESC(map2, "Describes second set of devices");
  62module_param_array_named(map3, gc_cfg[2].args, int, &gc_cfg[2].nargs, 0);
  63MODULE_PARM_DESC(map3, "Describes third set of devices");
  64
  65/* see also gs_psx_delay parameter in PSX support section */
  66
  67enum gc_type {
  68        GC_NONE = 0,
  69        GC_SNES,
  70        GC_NES,
  71        GC_NES4,
  72        GC_MULTI,
  73        GC_MULTI2,
  74        GC_N64,
  75        GC_PSX,
  76        GC_DDR,
  77        GC_SNESMOUSE,
  78        GC_MAX
  79};
  80
  81#define GC_REFRESH_TIME HZ/100
  82
  83struct gc_pad {
  84        struct input_dev *dev;
  85        enum gc_type type;
  86        char phys[32];
  87};
  88
  89struct gc {
  90        struct pardevice *pd;
  91        struct gc_pad pads[GC_MAX_DEVICES];
  92        struct timer_list timer;
  93        int pad_count[GC_MAX];
  94        int used;
  95        struct mutex mutex;
  96};
  97
  98struct gc_subdev {
  99        unsigned int idx;
 100};
 101
 102static struct gc *gc_base[3];
 103
 104static const int gc_status_bit[] = { 0x40, 0x80, 0x20, 0x10, 0x08 };
 105
 106static const char *gc_names[] = {
 107        NULL, "SNES pad", "NES pad", "NES FourPort", "Multisystem joystick",
 108        "Multisystem 2-button joystick", "N64 controller", "PSX controller",
 109        "PSX DDR controller", "SNES mouse"
 110};
 111
 112/*
 113 * N64 support.
 114 */
 115
 116static const unsigned char gc_n64_bytes[] = { 0, 1, 13, 15, 14, 12, 10, 11, 2, 3 };
 117static const short gc_n64_btn[] = {
 118        BTN_A, BTN_B, BTN_C, BTN_X, BTN_Y, BTN_Z,
 119        BTN_TL, BTN_TR, BTN_TRIGGER, BTN_START
 120};
 121
 122#define GC_N64_LENGTH           32              /* N64 bit length, not including stop bit */
 123#define GC_N64_STOP_LENGTH      5               /* Length of encoded stop bit */
 124#define GC_N64_CMD_00           0x11111111UL
 125#define GC_N64_CMD_01           0xd1111111UL
 126#define GC_N64_CMD_03           0xdd111111UL
 127#define GC_N64_CMD_1b           0xdd1dd111UL
 128#define GC_N64_CMD_c0           0x111111ddUL
 129#define GC_N64_CMD_80           0x1111111dUL
 130#define GC_N64_STOP_BIT         0x1d            /* Encoded stop bit */
 131#define GC_N64_REQUEST_DATA     GC_N64_CMD_01   /* the request data command */
 132#define GC_N64_DELAY            133             /* delay between transmit request, and response ready (us) */
 133#define GC_N64_DWS              3               /* delay between write segments (required for sound playback because of ISA DMA) */
 134                                                /* GC_N64_DWS > 24 is known to fail */
 135#define GC_N64_POWER_W          0xe2            /* power during write (transmit request) */
 136#define GC_N64_POWER_R          0xfd            /* power during read */
 137#define GC_N64_OUT              0x1d            /* output bits to the 4 pads */
 138                                                /* Reading the main axes of any N64 pad is known to fail if the corresponding bit */
 139                                                /* in GC_N64_OUT is pulled low on the output port (by any routine) for more */
 140                                                /* than 123 us */
 141#define GC_N64_CLOCK            0x02            /* clock bits for read */
 142
 143/*
 144 * Used for rumble code.
 145 */
 146
 147/* Send encoded command */
 148static void gc_n64_send_command(struct gc *gc, unsigned long cmd,
 149                                unsigned char target)
 150{
 151        struct parport *port = gc->pd->port;
 152        int i;
 153
 154        for (i = 0; i < GC_N64_LENGTH; i++) {
 155                unsigned char data = (cmd >> i) & 1 ? target : 0;
 156                parport_write_data(port, GC_N64_POWER_W | data);
 157                udelay(GC_N64_DWS);
 158        }
 159}
 160
 161/* Send stop bit */
 162static void gc_n64_send_stop_bit(struct gc *gc, unsigned char target)
 163{
 164        struct parport *port = gc->pd->port;
 165        int i;
 166
 167        for (i = 0; i < GC_N64_STOP_LENGTH; i++) {
 168                unsigned char data = (GC_N64_STOP_BIT >> i) & 1 ? target : 0;
 169                parport_write_data(port, GC_N64_POWER_W | data);
 170                udelay(GC_N64_DWS);
 171        }
 172}
 173
 174/*
 175 * gc_n64_read_packet() reads an N64 packet.
 176 * Each pad uses one bit per byte. So all pads connected to this port
 177 * are read in parallel.
 178 */
 179
 180static void gc_n64_read_packet(struct gc *gc, unsigned char *data)
 181{
 182        int i;
 183        unsigned long flags;
 184
 185/*
 186 * Request the pad to transmit data
 187 */
 188
 189        local_irq_save(flags);
 190        gc_n64_send_command(gc, GC_N64_REQUEST_DATA, GC_N64_OUT);
 191        gc_n64_send_stop_bit(gc, GC_N64_OUT);
 192        local_irq_restore(flags);
 193
 194/*
 195 * Wait for the pad response to be loaded into the 33-bit register
 196 * of the adapter.
 197 */
 198
 199        udelay(GC_N64_DELAY);
 200
 201/*
 202 * Grab data (ignoring the last bit, which is a stop bit)
 203 */
 204
 205        for (i = 0; i < GC_N64_LENGTH; i++) {
 206                parport_write_data(gc->pd->port, GC_N64_POWER_R);
 207                udelay(2);
 208                data[i] = parport_read_status(gc->pd->port);
 209                parport_write_data(gc->pd->port, GC_N64_POWER_R | GC_N64_CLOCK);
 210         }
 211
 212/*
 213 * We must wait 200 ms here for the controller to reinitialize before
 214 * the next read request. No worries as long as gc_read is polled less
 215 * frequently than this.
 216 */
 217
 218}
 219
 220static void gc_n64_process_packet(struct gc *gc)
 221{
 222        unsigned char data[GC_N64_LENGTH];
 223        struct input_dev *dev;
 224        int i, j, s;
 225        signed char x, y;
 226
 227        gc_n64_read_packet(gc, data);
 228
 229        for (i = 0; i < GC_MAX_DEVICES; i++) {
 230
 231                if (gc->pads[i].type != GC_N64)
 232                        continue;
 233
 234                dev = gc->pads[i].dev;
 235                s = gc_status_bit[i];
 236
 237                if (s & ~(data[8] | data[9])) {
 238
 239                        x = y = 0;
 240
 241                        for (j = 0; j < 8; j++) {
 242                                if (data[23 - j] & s)
 243                                        x |= 1 << j;
 244                                if (data[31 - j] & s)
 245                                        y |= 1 << j;
 246                        }
 247
 248                        input_report_abs(dev, ABS_X,  x);
 249                        input_report_abs(dev, ABS_Y, -y);
 250
 251                        input_report_abs(dev, ABS_HAT0X,
 252                                         !(s & data[6]) - !(s & data[7]));
 253                        input_report_abs(dev, ABS_HAT0Y,
 254                                         !(s & data[4]) - !(s & data[5]));
 255
 256                        for (j = 0; j < 10; j++)
 257                                input_report_key(dev, gc_n64_btn[j],
 258                                                 s & data[gc_n64_bytes[j]]);
 259
 260                        input_sync(dev);
 261                }
 262        }
 263}
 264
 265static int gc_n64_play_effect(struct input_dev *dev, void *data,
 266                              struct ff_effect *effect)
 267{
 268        int i;
 269        unsigned long flags;
 270        struct gc *gc = input_get_drvdata(dev);
 271        struct gc_subdev *sdev = data;
 272        unsigned char target = 1 << sdev->idx; /* select desired pin */
 273
 274        if (effect->type == FF_RUMBLE) {
 275                struct ff_rumble_effect *rumble = &effect->u.rumble;
 276                unsigned int cmd =
 277                        rumble->strong_magnitude || rumble->weak_magnitude ?
 278                        GC_N64_CMD_01 : GC_N64_CMD_00;
 279
 280                local_irq_save(flags);
 281
 282                /* Init Rumble - 0x03, 0x80, 0x01, (34)0x80 */
 283                gc_n64_send_command(gc, GC_N64_CMD_03, target);
 284                gc_n64_send_command(gc, GC_N64_CMD_80, target);
 285                gc_n64_send_command(gc, GC_N64_CMD_01, target);
 286                for (i = 0; i < 32; i++)
 287                        gc_n64_send_command(gc, GC_N64_CMD_80, target);
 288                gc_n64_send_stop_bit(gc, target);
 289
 290                udelay(GC_N64_DELAY);
 291
 292                /* Now start or stop it - 0x03, 0xc0, 0zx1b, (32)0x01/0x00 */
 293                gc_n64_send_command(gc, GC_N64_CMD_03, target);
 294                gc_n64_send_command(gc, GC_N64_CMD_c0, target);
 295                gc_n64_send_command(gc, GC_N64_CMD_1b, target);
 296                for (i = 0; i < 32; i++)
 297                        gc_n64_send_command(gc, cmd, target);
 298                gc_n64_send_stop_bit(gc, target);
 299
 300                local_irq_restore(flags);
 301
 302        }
 303
 304        return 0;
 305}
 306
 307static int __init gc_n64_init_ff(struct input_dev *dev, int i)
 308{
 309        struct gc_subdev *sdev;
 310        int err;
 311
 312        sdev = kmalloc(sizeof(*sdev), GFP_KERNEL);
 313        if (!sdev)
 314                return -ENOMEM;
 315
 316        sdev->idx = i;
 317
 318        input_set_capability(dev, EV_FF, FF_RUMBLE);
 319
 320        err = input_ff_create_memless(dev, sdev, gc_n64_play_effect);
 321        if (err) {
 322                kfree(sdev);
 323                return err;
 324        }
 325
 326        return 0;
 327}
 328
 329/*
 330 * NES/SNES support.
 331 */
 332
 333#define GC_NES_DELAY            6       /* Delay between bits - 6us */
 334#define GC_NES_LENGTH           8       /* The NES pads use 8 bits of data */
 335#define GC_SNES_LENGTH          12      /* The SNES true length is 16, but the
 336                                           last 4 bits are unused */
 337#define GC_SNESMOUSE_LENGTH     32      /* The SNES mouse uses 32 bits, the first
 338                                           16 bits are equivalent to a gamepad */
 339
 340#define GC_NES_POWER    0xfc
 341#define GC_NES_CLOCK    0x01
 342#define GC_NES_LATCH    0x02
 343
 344static const unsigned char gc_nes_bytes[] = { 0, 1, 2, 3 };
 345static const unsigned char gc_snes_bytes[] = { 8, 0, 2, 3, 9, 1, 10, 11 };
 346static const short gc_snes_btn[] = {
 347        BTN_A, BTN_B, BTN_SELECT, BTN_START, BTN_X, BTN_Y, BTN_TL, BTN_TR
 348};
 349
 350/*
 351 * gc_nes_read_packet() reads a NES/SNES packet.
 352 * Each pad uses one bit per byte. So all pads connected to
 353 * this port are read in parallel.
 354 */
 355
 356static void gc_nes_read_packet(struct gc *gc, int length, unsigned char *data)
 357{
 358        int i;
 359
 360        parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK | GC_NES_LATCH);
 361        udelay(GC_NES_DELAY * 2);
 362        parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK);
 363
 364        for (i = 0; i < length; i++) {
 365                udelay(GC_NES_DELAY);
 366                parport_write_data(gc->pd->port, GC_NES_POWER);
 367                data[i] = parport_read_status(gc->pd->port) ^ 0x7f;
 368                udelay(GC_NES_DELAY);
 369                parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK);
 370        }
 371}
 372
 373static void gc_nes_process_packet(struct gc *gc)
 374{
 375        unsigned char data[GC_SNESMOUSE_LENGTH];
 376        struct gc_pad *pad;
 377        struct input_dev *dev;
 378        int i, j, s, len;
 379        char x_rel, y_rel;
 380
 381        len = gc->pad_count[GC_SNESMOUSE] ? GC_SNESMOUSE_LENGTH :
 382                        (gc->pad_count[GC_SNES] ? GC_SNES_LENGTH : GC_NES_LENGTH);
 383
 384        gc_nes_read_packet(gc, len, data);
 385
 386        for (i = 0; i < GC_MAX_DEVICES; i++) {
 387
 388                pad = &gc->pads[i];
 389                dev = pad->dev;
 390                s = gc_status_bit[i];
 391
 392                switch (pad->type) {
 393
 394                case GC_NES:
 395
 396                        input_report_abs(dev, ABS_X, !(s & data[6]) - !(s & data[7]));
 397                        input_report_abs(dev, ABS_Y, !(s & data[4]) - !(s & data[5]));
 398
 399                        for (j = 0; j < 4; j++)
 400                                input_report_key(dev, gc_snes_btn[j],
 401                                                 s & data[gc_nes_bytes[j]]);
 402                        input_sync(dev);
 403                        break;
 404
 405                case GC_SNES:
 406
 407                        input_report_abs(dev, ABS_X, !(s & data[6]) - !(s & data[7]));
 408                        input_report_abs(dev, ABS_Y, !(s & data[4]) - !(s & data[5]));
 409
 410                        for (j = 0; j < 8; j++)
 411                                input_report_key(dev, gc_snes_btn[j],
 412                                                 s & data[gc_snes_bytes[j]]);
 413                        input_sync(dev);
 414                        break;
 415
 416                case GC_SNESMOUSE:
 417                        /*
 418                         * The 4 unused bits from SNES controllers appear
 419                         * to be ID bits so use them to make sure we are
 420                         * dealing with a mouse.
 421                         * gamepad is connected. This is important since
 422                         * my SNES gamepad sends 1's for bits 16-31, which
 423                         * cause the mouse pointer to quickly move to the
 424                         * upper left corner of the screen.
 425                         */
 426                        if (!(s & data[12]) && !(s & data[13]) &&
 427                            !(s & data[14]) && (s & data[15])) {
 428                                input_report_key(dev, BTN_LEFT, s & data[9]);
 429                                input_report_key(dev, BTN_RIGHT, s & data[8]);
 430
 431                                x_rel = y_rel = 0;
 432                                for (j = 0; j < 7; j++) {
 433                                        x_rel <<= 1;
 434                                        if (data[25 + j] & s)
 435                                                x_rel |= 1;
 436
 437                                        y_rel <<= 1;
 438                                        if (data[17 + j] & s)
 439                                                y_rel |= 1;
 440                                }
 441
 442                                if (x_rel) {
 443                                        if (data[24] & s)
 444                                                x_rel = -x_rel;
 445                                        input_report_rel(dev, REL_X, x_rel);
 446                                }
 447
 448                                if (y_rel) {
 449                                        if (data[16] & s)
 450                                                y_rel = -y_rel;
 451                                        input_report_rel(dev, REL_Y, y_rel);
 452                                }
 453
 454                                input_sync(dev);
 455                        }
 456                        break;
 457
 458                default:
 459                        break;
 460                }
 461        }
 462}
 463
 464/*
 465 * Multisystem joystick support
 466 */
 467
 468#define GC_MULTI_LENGTH         5       /* Multi system joystick packet length is 5 */
 469#define GC_MULTI2_LENGTH        6       /* One more bit for one more button */
 470
 471/*
 472 * gc_multi_read_packet() reads a Multisystem joystick packet.
 473 */
 474
 475static void gc_multi_read_packet(struct gc *gc, int length, unsigned char *data)
 476{
 477        int i;
 478
 479        for (i = 0; i < length; i++) {
 480                parport_write_data(gc->pd->port, ~(1 << i));
 481                data[i] = parport_read_status(gc->pd->port) ^ 0x7f;
 482        }
 483}
 484
 485static void gc_multi_process_packet(struct gc *gc)
 486{
 487        unsigned char data[GC_MULTI2_LENGTH];
 488        int data_len = gc->pad_count[GC_MULTI2] ? GC_MULTI2_LENGTH : GC_MULTI_LENGTH;
 489        struct gc_pad *pad;
 490        struct input_dev *dev;
 491        int i, s;
 492
 493        gc_multi_read_packet(gc, data_len, data);
 494
 495        for (i = 0; i < GC_MAX_DEVICES; i++) {
 496                pad = &gc->pads[i];
 497                dev = pad->dev;
 498                s = gc_status_bit[i];
 499
 500                switch (pad->type) {
 501                case GC_MULTI2:
 502                        input_report_key(dev, BTN_THUMB, s & data[5]);
 503                        /* fall through */
 504
 505                case GC_MULTI:
 506                        input_report_abs(dev, ABS_X,
 507                                         !(s & data[2]) - !(s & data[3]));
 508                        input_report_abs(dev, ABS_Y,
 509                                         !(s & data[0]) - !(s & data[1]));
 510                        input_report_key(dev, BTN_TRIGGER, s & data[4]);
 511                        input_sync(dev);
 512                        break;
 513
 514                default:
 515                        break;
 516                }
 517        }
 518}
 519
 520/*
 521 * PSX support
 522 *
 523 * See documentation at:
 524 *      http://www.geocities.co.jp/Playtown/2004/psx/ps_eng.txt 
 525 *      http://www.gamesx.com/controldata/psxcont/psxcont.htm
 526 *
 527 */
 528
 529#define GC_PSX_DELAY    25              /* 25 usec */
 530#define GC_PSX_LENGTH   8               /* talk to the controller in bits */
 531#define GC_PSX_BYTES    6               /* the maximum number of bytes to read off the controller */
 532
 533#define GC_PSX_MOUSE    1               /* Mouse */
 534#define GC_PSX_NEGCON   2               /* NegCon */
 535#define GC_PSX_NORMAL   4               /* Digital / Analog or Rumble in Digital mode  */
 536#define GC_PSX_ANALOG   5               /* Analog in Analog mode / Rumble in Green mode */
 537#define GC_PSX_RUMBLE   7               /* Rumble in Red mode */
 538
 539#define GC_PSX_CLOCK    0x04            /* Pin 4 */
 540#define GC_PSX_COMMAND  0x01            /* Pin 2 */
 541#define GC_PSX_POWER    0xf8            /* Pins 5-9 */
 542#define GC_PSX_SELECT   0x02            /* Pin 3 */
 543
 544#define GC_PSX_ID(x)    ((x) >> 4)      /* High nibble is device type */
 545#define GC_PSX_LEN(x)   (((x) & 0xf) << 1)      /* Low nibble is length in bytes/2 */
 546
 547static int gc_psx_delay = GC_PSX_DELAY;
 548module_param_named(psx_delay, gc_psx_delay, uint, 0);
 549MODULE_PARM_DESC(psx_delay, "Delay when accessing Sony PSX controller (usecs)");
 550
 551static const short gc_psx_abs[] = {
 552        ABS_X, ABS_Y, ABS_RX, ABS_RY, ABS_HAT0X, ABS_HAT0Y
 553};
 554static const short gc_psx_btn[] = {
 555        BTN_TL, BTN_TR, BTN_TL2, BTN_TR2, BTN_A, BTN_B, BTN_X, BTN_Y,
 556        BTN_START, BTN_SELECT, BTN_THUMBL, BTN_THUMBR
 557};
 558static const short gc_psx_ddr_btn[] = { BTN_0, BTN_1, BTN_2, BTN_3 };
 559
 560/*
 561 * gc_psx_command() writes 8bit command and reads 8bit data from
 562 * the psx pad.
 563 */
 564
 565static void gc_psx_command(struct gc *gc, int b, unsigned char *data)
 566{
 567        struct parport *port = gc->pd->port;
 568        int i, j, cmd, read;
 569
 570        memset(data, 0, GC_MAX_DEVICES);
 571
 572        for (i = 0; i < GC_PSX_LENGTH; i++, b >>= 1) {
 573                cmd = (b & 1) ? GC_PSX_COMMAND : 0;
 574                parport_write_data(port, cmd | GC_PSX_POWER);
 575                udelay(gc_psx_delay);
 576
 577                read = parport_read_status(port) ^ 0x80;
 578
 579                for (j = 0; j < GC_MAX_DEVICES; j++) {
 580                        struct gc_pad *pad = &gc->pads[j];
 581
 582                        if (pad->type == GC_PSX || pad->type == GC_DDR)
 583                                data[j] |= (read & gc_status_bit[j]) ? (1 << i) : 0;
 584                }
 585
 586                parport_write_data(gc->pd->port, cmd | GC_PSX_CLOCK | GC_PSX_POWER);
 587                udelay(gc_psx_delay);
 588        }
 589}
 590
 591/*
 592 * gc_psx_read_packet() reads a whole psx packet and returns
 593 * device identifier code.
 594 */
 595
 596static void gc_psx_read_packet(struct gc *gc,
 597                               unsigned char data[GC_MAX_DEVICES][GC_PSX_BYTES],
 598                               unsigned char id[GC_MAX_DEVICES])
 599{
 600        int i, j, max_len = 0;
 601        unsigned long flags;
 602        unsigned char data2[GC_MAX_DEVICES];
 603
 604        /* Select pad */
 605        parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER);
 606        udelay(gc_psx_delay);
 607        /* Deselect, begin command */
 608        parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_POWER);
 609        udelay(gc_psx_delay);
 610
 611        local_irq_save(flags);
 612
 613        gc_psx_command(gc, 0x01, data2);        /* Access pad */
 614        gc_psx_command(gc, 0x42, id);           /* Get device ids */
 615        gc_psx_command(gc, 0, data2);           /* Dump status */
 616
 617        /* Find the longest pad */
 618        for (i = 0; i < GC_MAX_DEVICES; i++) {
 619                struct gc_pad *pad = &gc->pads[i];
 620
 621                if ((pad->type == GC_PSX || pad->type == GC_DDR) &&
 622                    GC_PSX_LEN(id[i]) > max_len &&
 623                    GC_PSX_LEN(id[i]) <= GC_PSX_BYTES) {
 624                        max_len = GC_PSX_LEN(id[i]);
 625                }
 626        }
 627
 628        /* Read in all the data */
 629        for (i = 0; i < max_len; i++) {
 630                gc_psx_command(gc, 0, data2);
 631                for (j = 0; j < GC_MAX_DEVICES; j++)
 632                        data[j][i] = data2[j];
 633        }
 634
 635        local_irq_restore(flags);
 636
 637        parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER);
 638
 639        /* Set id's to the real value */
 640        for (i = 0; i < GC_MAX_DEVICES; i++)
 641                id[i] = GC_PSX_ID(id[i]);
 642}
 643
 644static void gc_psx_report_one(struct gc_pad *pad, unsigned char psx_type,
 645                              unsigned char *data)
 646{
 647        struct input_dev *dev = pad->dev;
 648        int i;
 649
 650        switch (psx_type) {
 651
 652        case GC_PSX_RUMBLE:
 653
 654                input_report_key(dev, BTN_THUMBL, ~data[0] & 0x04);
 655                input_report_key(dev, BTN_THUMBR, ~data[0] & 0x02);
 656
 657        case GC_PSX_NEGCON:
 658        case GC_PSX_ANALOG:
 659
 660                if (pad->type == GC_DDR) {
 661                        for (i = 0; i < 4; i++)
 662                                input_report_key(dev, gc_psx_ddr_btn[i],
 663                                                 ~data[0] & (0x10 << i));
 664                } else {
 665                        for (i = 0; i < 4; i++)
 666                                input_report_abs(dev, gc_psx_abs[i + 2],
 667                                                 data[i + 2]);
 668
 669                        input_report_abs(dev, ABS_X,
 670                                !!(data[0] & 0x80) * 128 + !(data[0] & 0x20) * 127);
 671                        input_report_abs(dev, ABS_Y,
 672                                !!(data[0] & 0x10) * 128 + !(data[0] & 0x40) * 127);
 673                }
 674
 675                for (i = 0; i < 8; i++)
 676                        input_report_key(dev, gc_psx_btn[i], ~data[1] & (1 << i));
 677
 678                input_report_key(dev, BTN_START,  ~data[0] & 0x08);
 679                input_report_key(dev, BTN_SELECT, ~data[0] & 0x01);
 680
 681                input_sync(dev);
 682
 683                break;
 684
 685        case GC_PSX_NORMAL:
 686
 687                if (pad->type == GC_DDR) {
 688                        for (i = 0; i < 4; i++)
 689                                input_report_key(dev, gc_psx_ddr_btn[i],
 690                                                 ~data[0] & (0x10 << i));
 691                } else {
 692                        input_report_abs(dev, ABS_X,
 693                                !!(data[0] & 0x80) * 128 + !(data[0] & 0x20) * 127);
 694                        input_report_abs(dev, ABS_Y,
 695                                !!(data[0] & 0x10) * 128 + !(data[0] & 0x40) * 127);
 696
 697                        /*
 698                         * For some reason if the extra axes are left unset
 699                         * they drift.
 700                         * for (i = 0; i < 4; i++)
 701                                input_report_abs(dev, gc_psx_abs[i + 2], 128);
 702                         * This needs to be debugged properly,
 703                         * maybe fuzz processing needs to be done
 704                         * in input_sync()
 705                         *                               --vojtech
 706                         */
 707                }
 708
 709                for (i = 0; i < 8; i++)
 710                        input_report_key(dev, gc_psx_btn[i], ~data[1] & (1 << i));
 711
 712                input_report_key(dev, BTN_START,  ~data[0] & 0x08);
 713                input_report_key(dev, BTN_SELECT, ~data[0] & 0x01);
 714
 715                input_sync(dev);
 716
 717                break;
 718
 719        default: /* not a pad, ignore */
 720                break;
 721        }
 722}
 723
 724static void gc_psx_process_packet(struct gc *gc)
 725{
 726        unsigned char data[GC_MAX_DEVICES][GC_PSX_BYTES];
 727        unsigned char id[GC_MAX_DEVICES];
 728        struct gc_pad *pad;
 729        int i;
 730
 731        gc_psx_read_packet(gc, data, id);
 732
 733        for (i = 0; i < GC_MAX_DEVICES; i++) {
 734                pad = &gc->pads[i];
 735                if (pad->type == GC_PSX || pad->type == GC_DDR)
 736                        gc_psx_report_one(pad, id[i], data[i]);
 737        }
 738}
 739
 740/*
 741 * gc_timer() initiates reads of console pads data.
 742 */
 743
 744static void gc_timer(unsigned long private)
 745{
 746        struct gc *gc = (void *) private;
 747
 748/*
 749 * N64 pads - must be read first, any read confuses them for 200 us
 750 */
 751
 752        if (gc->pad_count[GC_N64])
 753                gc_n64_process_packet(gc);
 754
 755/*
 756 * NES and SNES pads or mouse
 757 */
 758
 759        if (gc->pad_count[GC_NES] ||
 760            gc->pad_count[GC_SNES] ||
 761            gc->pad_count[GC_SNESMOUSE]) {
 762                gc_nes_process_packet(gc);
 763        }
 764
 765/*
 766 * Multi and Multi2 joysticks
 767 */
 768
 769        if (gc->pad_count[GC_MULTI] || gc->pad_count[GC_MULTI2])
 770                gc_multi_process_packet(gc);
 771
 772/*
 773 * PSX controllers
 774 */
 775
 776        if (gc->pad_count[GC_PSX] || gc->pad_count[GC_DDR])
 777                gc_psx_process_packet(gc);
 778
 779        mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
 780}
 781
 782static int gc_open(struct input_dev *dev)
 783{
 784        struct gc *gc = input_get_drvdata(dev);
 785        int err;
 786
 787        err = mutex_lock_interruptible(&gc->mutex);
 788        if (err)
 789                return err;
 790
 791        if (!gc->used++) {
 792                parport_claim(gc->pd);
 793                parport_write_control(gc->pd->port, 0x04);
 794                mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
 795        }
 796
 797        mutex_unlock(&gc->mutex);
 798        return 0;
 799}
 800
 801static void gc_close(struct input_dev *dev)
 802{
 803        struct gc *gc = input_get_drvdata(dev);
 804
 805        mutex_lock(&gc->mutex);
 806        if (!--gc->used) {
 807                del_timer_sync(&gc->timer);
 808                parport_write_control(gc->pd->port, 0x00);
 809                parport_release(gc->pd);
 810        }
 811        mutex_unlock(&gc->mutex);
 812}
 813
 814static int __init gc_setup_pad(struct gc *gc, int idx, int pad_type)
 815{
 816        struct gc_pad *pad = &gc->pads[idx];
 817        struct input_dev *input_dev;
 818        int i;
 819        int err;
 820
 821        if (pad_type < 1 || pad_type >= GC_MAX) {
 822                pr_err("Pad type %d unknown\n", pad_type);
 823                return -EINVAL;
 824        }
 825
 826        pad->dev = input_dev = input_allocate_device();
 827        if (!input_dev) {
 828                pr_err("Not enough memory for input device\n");
 829                return -ENOMEM;
 830        }
 831
 832        pad->type = pad_type;
 833
 834        snprintf(pad->phys, sizeof(pad->phys),
 835                 "%s/input%d", gc->pd->port->name, idx);
 836
 837        input_dev->name = gc_names[pad_type];
 838        input_dev->phys = pad->phys;
 839        input_dev->id.bustype = BUS_PARPORT;
 840        input_dev->id.vendor = 0x0001;
 841        input_dev->id.product = pad_type;
 842        input_dev->id.version = 0x0100;
 843
 844        input_set_drvdata(input_dev, gc);
 845
 846        input_dev->open = gc_open;
 847        input_dev->close = gc_close;
 848
 849        if (pad_type != GC_SNESMOUSE) {
 850                input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
 851
 852                for (i = 0; i < 2; i++)
 853                        input_set_abs_params(input_dev, ABS_X + i, -1, 1, 0, 0);
 854        } else
 855                input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
 856
 857        gc->pad_count[pad_type]++;
 858
 859        switch (pad_type) {
 860
 861        case GC_N64:
 862                for (i = 0; i < 10; i++)
 863                        __set_bit(gc_n64_btn[i], input_dev->keybit);
 864
 865                for (i = 0; i < 2; i++) {
 866                        input_set_abs_params(input_dev, ABS_X + i, -127, 126, 0, 2);
 867                        input_set_abs_params(input_dev, ABS_HAT0X + i, -1, 1, 0, 0);
 868                }
 869
 870                err = gc_n64_init_ff(input_dev, idx);
 871                if (err) {
 872                        pr_warning("Failed to initiate rumble for N64 device %d\n", idx);
 873                        goto err_free_dev;
 874                }
 875
 876                break;
 877
 878        case GC_SNESMOUSE:
 879                __set_bit(BTN_LEFT, input_dev->keybit);
 880                __set_bit(BTN_RIGHT, input_dev->keybit);
 881                __set_bit(REL_X, input_dev->relbit);
 882                __set_bit(REL_Y, input_dev->relbit);
 883                break;
 884
 885        case GC_SNES:
 886                for (i = 4; i < 8; i++)
 887                        __set_bit(gc_snes_btn[i], input_dev->keybit);
 888        case GC_NES:
 889                for (i = 0; i < 4; i++)
 890                        __set_bit(gc_snes_btn[i], input_dev->keybit);
 891                break;
 892
 893        case GC_MULTI2:
 894                __set_bit(BTN_THUMB, input_dev->keybit);
 895        case GC_MULTI:
 896                __set_bit(BTN_TRIGGER, input_dev->keybit);
 897                break;
 898
 899        case GC_PSX:
 900                for (i = 0; i < 6; i++)
 901                        input_set_abs_params(input_dev,
 902                                             gc_psx_abs[i], 4, 252, 0, 2);
 903                for (i = 0; i < 12; i++)
 904                        __set_bit(gc_psx_btn[i], input_dev->keybit);
 905
 906                break;
 907
 908        case GC_DDR:
 909                for (i = 0; i < 4; i++)
 910                        __set_bit(gc_psx_ddr_btn[i], input_dev->keybit);
 911                for (i = 0; i < 12; i++)
 912                        __set_bit(gc_psx_btn[i], input_dev->keybit);
 913
 914                break;
 915        }
 916
 917        err = input_register_device(pad->dev);
 918        if (err)
 919                goto err_free_dev;
 920
 921        return 0;
 922
 923err_free_dev:
 924        input_free_device(pad->dev);
 925        pad->dev = NULL;
 926        return err;
 927}
 928
 929static struct gc __init *gc_probe(int parport, int *pads, int n_pads)
 930{
 931        struct gc *gc;
 932        struct parport *pp;
 933        struct pardevice *pd;
 934        int i;
 935        int count = 0;
 936        int err;
 937
 938        pp = parport_find_number(parport);
 939        if (!pp) {
 940                pr_err("no such parport %d\n", parport);
 941                err = -EINVAL;
 942                goto err_out;
 943        }
 944
 945        pd = parport_register_device(pp, "gamecon", NULL, NULL, NULL, PARPORT_DEV_EXCL, NULL);
 946        if (!pd) {
 947                pr_err("parport busy already - lp.o loaded?\n");
 948                err = -EBUSY;
 949                goto err_put_pp;
 950        }
 951
 952        gc = kzalloc(sizeof(struct gc), GFP_KERNEL);
 953        if (!gc) {
 954                pr_err("Not enough memory\n");
 955                err = -ENOMEM;
 956                goto err_unreg_pardev;
 957        }
 958
 959        mutex_init(&gc->mutex);
 960        gc->pd = pd;
 961        setup_timer(&gc->timer, gc_timer, (long) gc);
 962
 963        for (i = 0; i < n_pads && i < GC_MAX_DEVICES; i++) {
 964                if (!pads[i])
 965                        continue;
 966
 967                err = gc_setup_pad(gc, i, pads[i]);
 968                if (err)
 969                        goto err_unreg_devs;
 970
 971                count++;
 972        }
 973
 974        if (count == 0) {
 975                pr_err("No valid devices specified\n");
 976                err = -EINVAL;
 977                goto err_free_gc;
 978        }
 979
 980        parport_put_port(pp);
 981        return gc;
 982
 983 err_unreg_devs:
 984        while (--i >= 0)
 985                if (gc->pads[i].dev)
 986                        input_unregister_device(gc->pads[i].dev);
 987 err_free_gc:
 988        kfree(gc);
 989 err_unreg_pardev:
 990        parport_unregister_device(pd);
 991 err_put_pp:
 992        parport_put_port(pp);
 993 err_out:
 994        return ERR_PTR(err);
 995}
 996
 997static void gc_remove(struct gc *gc)
 998{
 999        int i;
1000
1001        for (i = 0; i < GC_MAX_DEVICES; i++)
1002                if (gc->pads[i].dev)
1003                        input_unregister_device(gc->pads[i].dev);
1004        parport_unregister_device(gc->pd);
1005        kfree(gc);
1006}
1007
1008static int __init gc_init(void)
1009{
1010        int i;
1011        int have_dev = 0;
1012        int err = 0;
1013
1014        for (i = 0; i < GC_MAX_PORTS; i++) {
1015                if (gc_cfg[i].nargs == 0 || gc_cfg[i].args[0] < 0)
1016                        continue;
1017
1018                if (gc_cfg[i].nargs < 2) {
1019                        pr_err("at least one device must be specified\n");
1020                        err = -EINVAL;
1021                        break;
1022                }
1023
1024                gc_base[i] = gc_probe(gc_cfg[i].args[0],
1025                                      gc_cfg[i].args + 1, gc_cfg[i].nargs - 1);
1026                if (IS_ERR(gc_base[i])) {
1027                        err = PTR_ERR(gc_base[i]);
1028                        break;
1029                }
1030
1031                have_dev = 1;
1032        }
1033
1034        if (err) {
1035                while (--i >= 0)
1036                        if (gc_base[i])
1037                                gc_remove(gc_base[i]);
1038                return err;
1039        }
1040
1041        return have_dev ? 0 : -ENODEV;
1042}
1043
1044static void __exit gc_exit(void)
1045{
1046        int i;
1047
1048        for (i = 0; i < GC_MAX_PORTS; i++)
1049                if (gc_base[i])
1050                        gc_remove(gc_base[i]);
1051}
1052
1053module_init(gc_init);
1054module_exit(gc_exit);
1055