Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  * NES, SNES, N64, MultiSystem, PSX gamepad driver for Linux
0004  *
0005  *  Copyright (c) 1999-2004 Vojtech Pavlik <vojtech@suse.cz>
0006  *  Copyright (c) 2004      Peter Nelson <rufus-kernel@hackish.org>
0007  *
0008  *  Based on the work of:
0009  *  Andree Borrmann     John Dahlstrom
0010  *  David Kuder     Nathan Hand
0011  *  Raphael Assenat
0012  */
0013 
0014 /*
0015  */
0016 
0017 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0018 
0019 #include <linux/kernel.h>
0020 #include <linux/delay.h>
0021 #include <linux/module.h>
0022 #include <linux/init.h>
0023 #include <linux/parport.h>
0024 #include <linux/input.h>
0025 #include <linux/mutex.h>
0026 #include <linux/slab.h>
0027 
0028 MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
0029 MODULE_DESCRIPTION("NES, SNES, N64, MultiSystem, PSX gamepad driver");
0030 MODULE_LICENSE("GPL");
0031 
0032 #define GC_MAX_PORTS        3
0033 #define GC_MAX_DEVICES      5
0034 
0035 struct gc_config {
0036     int args[GC_MAX_DEVICES + 1];
0037     unsigned int nargs;
0038 };
0039 
0040 static struct gc_config gc_cfg[GC_MAX_PORTS];
0041 
0042 module_param_array_named(map, gc_cfg[0].args, int, &gc_cfg[0].nargs, 0);
0043 MODULE_PARM_DESC(map, "Describes first set of devices (<parport#>,<pad1>,<pad2>,..<pad5>)");
0044 module_param_array_named(map2, gc_cfg[1].args, int, &gc_cfg[1].nargs, 0);
0045 MODULE_PARM_DESC(map2, "Describes second set of devices");
0046 module_param_array_named(map3, gc_cfg[2].args, int, &gc_cfg[2].nargs, 0);
0047 MODULE_PARM_DESC(map3, "Describes third set of devices");
0048 
0049 /* see also gs_psx_delay parameter in PSX support section */
0050 
0051 enum gc_type {
0052     GC_NONE = 0,
0053     GC_SNES,
0054     GC_NES,
0055     GC_NES4,
0056     GC_MULTI,
0057     GC_MULTI2,
0058     GC_N64,
0059     GC_PSX,
0060     GC_DDR,
0061     GC_SNESMOUSE,
0062     GC_MAX
0063 };
0064 
0065 #define GC_REFRESH_TIME HZ/100
0066 
0067 struct gc_pad {
0068     struct input_dev *dev;
0069     enum gc_type type;
0070     char phys[32];
0071 };
0072 
0073 struct gc {
0074     struct pardevice *pd;
0075     struct gc_pad pads[GC_MAX_DEVICES];
0076     struct timer_list timer;
0077     int pad_count[GC_MAX];
0078     int used;
0079     int parportno;
0080     struct mutex mutex;
0081 };
0082 
0083 struct gc_subdev {
0084     unsigned int idx;
0085 };
0086 
0087 static struct gc *gc_base[3];
0088 
0089 static const int gc_status_bit[] = { 0x40, 0x80, 0x20, 0x10, 0x08 };
0090 
0091 static const char *gc_names[] = {
0092     NULL, "SNES pad", "NES pad", "NES FourPort", "Multisystem joystick",
0093     "Multisystem 2-button joystick", "N64 controller", "PSX controller",
0094     "PSX DDR controller", "SNES mouse"
0095 };
0096 
0097 /*
0098  * N64 support.
0099  */
0100 
0101 static const unsigned char gc_n64_bytes[] = { 0, 1, 13, 15, 14, 12, 10, 11, 2, 3 };
0102 static const short gc_n64_btn[] = {
0103     BTN_A, BTN_B, BTN_C, BTN_X, BTN_Y, BTN_Z,
0104     BTN_TL, BTN_TR, BTN_TRIGGER, BTN_START
0105 };
0106 
0107 #define GC_N64_LENGTH       32      /* N64 bit length, not including stop bit */
0108 #define GC_N64_STOP_LENGTH  5       /* Length of encoded stop bit */
0109 #define GC_N64_CMD_00       0x11111111UL
0110 #define GC_N64_CMD_01       0xd1111111UL
0111 #define GC_N64_CMD_03       0xdd111111UL
0112 #define GC_N64_CMD_1b       0xdd1dd111UL
0113 #define GC_N64_CMD_c0       0x111111ddUL
0114 #define GC_N64_CMD_80       0x1111111dUL
0115 #define GC_N64_STOP_BIT     0x1d        /* Encoded stop bit */
0116 #define GC_N64_REQUEST_DATA GC_N64_CMD_01   /* the request data command */
0117 #define GC_N64_DELAY        133     /* delay between transmit request, and response ready (us) */
0118 #define GC_N64_DWS      3       /* delay between write segments (required for sound playback because of ISA DMA) */
0119                         /* GC_N64_DWS > 24 is known to fail */
0120 #define GC_N64_POWER_W      0xe2        /* power during write (transmit request) */
0121 #define GC_N64_POWER_R      0xfd        /* power during read */
0122 #define GC_N64_OUT      0x1d        /* output bits to the 4 pads */
0123                         /* Reading the main axes of any N64 pad is known to fail if the corresponding bit */
0124                         /* in GC_N64_OUT is pulled low on the output port (by any routine) for more */
0125                         /* than 123 us */
0126 #define GC_N64_CLOCK        0x02        /* clock bits for read */
0127 
0128 /*
0129  * Used for rumble code.
0130  */
0131 
0132 /* Send encoded command */
0133 static void gc_n64_send_command(struct gc *gc, unsigned long cmd,
0134                 unsigned char target)
0135 {
0136     struct parport *port = gc->pd->port;
0137     int i;
0138 
0139     for (i = 0; i < GC_N64_LENGTH; i++) {
0140         unsigned char data = (cmd >> i) & 1 ? target : 0;
0141         parport_write_data(port, GC_N64_POWER_W | data);
0142         udelay(GC_N64_DWS);
0143     }
0144 }
0145 
0146 /* Send stop bit */
0147 static void gc_n64_send_stop_bit(struct gc *gc, unsigned char target)
0148 {
0149     struct parport *port = gc->pd->port;
0150     int i;
0151 
0152     for (i = 0; i < GC_N64_STOP_LENGTH; i++) {
0153         unsigned char data = (GC_N64_STOP_BIT >> i) & 1 ? target : 0;
0154         parport_write_data(port, GC_N64_POWER_W | data);
0155         udelay(GC_N64_DWS);
0156     }
0157 }
0158 
0159 /*
0160  * gc_n64_read_packet() reads an N64 packet.
0161  * Each pad uses one bit per byte. So all pads connected to this port
0162  * are read in parallel.
0163  */
0164 
0165 static void gc_n64_read_packet(struct gc *gc, unsigned char *data)
0166 {
0167     int i;
0168     unsigned long flags;
0169 
0170 /*
0171  * Request the pad to transmit data
0172  */
0173 
0174     local_irq_save(flags);
0175     gc_n64_send_command(gc, GC_N64_REQUEST_DATA, GC_N64_OUT);
0176     gc_n64_send_stop_bit(gc, GC_N64_OUT);
0177     local_irq_restore(flags);
0178 
0179 /*
0180  * Wait for the pad response to be loaded into the 33-bit register
0181  * of the adapter.
0182  */
0183 
0184     udelay(GC_N64_DELAY);
0185 
0186 /*
0187  * Grab data (ignoring the last bit, which is a stop bit)
0188  */
0189 
0190     for (i = 0; i < GC_N64_LENGTH; i++) {
0191         parport_write_data(gc->pd->port, GC_N64_POWER_R);
0192         udelay(2);
0193         data[i] = parport_read_status(gc->pd->port);
0194         parport_write_data(gc->pd->port, GC_N64_POWER_R | GC_N64_CLOCK);
0195      }
0196 
0197 /*
0198  * We must wait 200 ms here for the controller to reinitialize before
0199  * the next read request. No worries as long as gc_read is polled less
0200  * frequently than this.
0201  */
0202 
0203 }
0204 
0205 static void gc_n64_process_packet(struct gc *gc)
0206 {
0207     unsigned char data[GC_N64_LENGTH];
0208     struct input_dev *dev;
0209     int i, j, s;
0210     signed char x, y;
0211 
0212     gc_n64_read_packet(gc, data);
0213 
0214     for (i = 0; i < GC_MAX_DEVICES; i++) {
0215 
0216         if (gc->pads[i].type != GC_N64)
0217             continue;
0218 
0219         dev = gc->pads[i].dev;
0220         s = gc_status_bit[i];
0221 
0222         if (s & ~(data[8] | data[9])) {
0223 
0224             x = y = 0;
0225 
0226             for (j = 0; j < 8; j++) {
0227                 if (data[23 - j] & s)
0228                     x |= 1 << j;
0229                 if (data[31 - j] & s)
0230                     y |= 1 << j;
0231             }
0232 
0233             input_report_abs(dev, ABS_X,  x);
0234             input_report_abs(dev, ABS_Y, -y);
0235 
0236             input_report_abs(dev, ABS_HAT0X,
0237                      !(s & data[6]) - !(s & data[7]));
0238             input_report_abs(dev, ABS_HAT0Y,
0239                      !(s & data[4]) - !(s & data[5]));
0240 
0241             for (j = 0; j < 10; j++)
0242                 input_report_key(dev, gc_n64_btn[j],
0243                          s & data[gc_n64_bytes[j]]);
0244 
0245             input_sync(dev);
0246         }
0247     }
0248 }
0249 
0250 static int gc_n64_play_effect(struct input_dev *dev, void *data,
0251                   struct ff_effect *effect)
0252 {
0253     int i;
0254     unsigned long flags;
0255     struct gc *gc = input_get_drvdata(dev);
0256     struct gc_subdev *sdev = data;
0257     unsigned char target = 1 << sdev->idx; /* select desired pin */
0258 
0259     if (effect->type == FF_RUMBLE) {
0260         struct ff_rumble_effect *rumble = &effect->u.rumble;
0261         unsigned int cmd =
0262             rumble->strong_magnitude || rumble->weak_magnitude ?
0263             GC_N64_CMD_01 : GC_N64_CMD_00;
0264 
0265         local_irq_save(flags);
0266 
0267         /* Init Rumble - 0x03, 0x80, 0x01, (34)0x80 */
0268         gc_n64_send_command(gc, GC_N64_CMD_03, target);
0269         gc_n64_send_command(gc, GC_N64_CMD_80, target);
0270         gc_n64_send_command(gc, GC_N64_CMD_01, target);
0271         for (i = 0; i < 32; i++)
0272             gc_n64_send_command(gc, GC_N64_CMD_80, target);
0273         gc_n64_send_stop_bit(gc, target);
0274 
0275         udelay(GC_N64_DELAY);
0276 
0277         /* Now start or stop it - 0x03, 0xc0, 0zx1b, (32)0x01/0x00 */
0278         gc_n64_send_command(gc, GC_N64_CMD_03, target);
0279         gc_n64_send_command(gc, GC_N64_CMD_c0, target);
0280         gc_n64_send_command(gc, GC_N64_CMD_1b, target);
0281         for (i = 0; i < 32; i++)
0282             gc_n64_send_command(gc, cmd, target);
0283         gc_n64_send_stop_bit(gc, target);
0284 
0285         local_irq_restore(flags);
0286 
0287     }
0288 
0289     return 0;
0290 }
0291 
0292 static int gc_n64_init_ff(struct input_dev *dev, int i)
0293 {
0294     struct gc_subdev *sdev;
0295     int err;
0296 
0297     sdev = kmalloc(sizeof(*sdev), GFP_KERNEL);
0298     if (!sdev)
0299         return -ENOMEM;
0300 
0301     sdev->idx = i;
0302 
0303     input_set_capability(dev, EV_FF, FF_RUMBLE);
0304 
0305     err = input_ff_create_memless(dev, sdev, gc_n64_play_effect);
0306     if (err) {
0307         kfree(sdev);
0308         return err;
0309     }
0310 
0311     return 0;
0312 }
0313 
0314 /*
0315  * NES/SNES support.
0316  */
0317 
0318 #define GC_NES_DELAY        6   /* Delay between bits - 6us */
0319 #define GC_NES_LENGTH       8   /* The NES pads use 8 bits of data */
0320 #define GC_SNES_LENGTH      12  /* The SNES true length is 16, but the
0321                        last 4 bits are unused */
0322 #define GC_SNESMOUSE_LENGTH 32  /* The SNES mouse uses 32 bits, the first
0323                        16 bits are equivalent to a gamepad */
0324 
0325 #define GC_NES_POWER    0xfc
0326 #define GC_NES_CLOCK    0x01
0327 #define GC_NES_LATCH    0x02
0328 
0329 static const unsigned char gc_nes_bytes[] = { 0, 1, 2, 3 };
0330 static const unsigned char gc_snes_bytes[] = { 8, 0, 2, 3, 9, 1, 10, 11 };
0331 static const short gc_snes_btn[] = {
0332     BTN_A, BTN_B, BTN_SELECT, BTN_START, BTN_X, BTN_Y, BTN_TL, BTN_TR
0333 };
0334 
0335 /*
0336  * gc_nes_read_packet() reads a NES/SNES packet.
0337  * Each pad uses one bit per byte. So all pads connected to
0338  * this port are read in parallel.
0339  */
0340 
0341 static void gc_nes_read_packet(struct gc *gc, int length, unsigned char *data)
0342 {
0343     int i;
0344 
0345     parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK | GC_NES_LATCH);
0346     udelay(GC_NES_DELAY * 2);
0347     parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK);
0348 
0349     for (i = 0; i < length; i++) {
0350         udelay(GC_NES_DELAY);
0351         parport_write_data(gc->pd->port, GC_NES_POWER);
0352         data[i] = parport_read_status(gc->pd->port) ^ 0x7f;
0353         udelay(GC_NES_DELAY);
0354         parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK);
0355     }
0356 }
0357 
0358 static void gc_nes_process_packet(struct gc *gc)
0359 {
0360     unsigned char data[GC_SNESMOUSE_LENGTH];
0361     struct gc_pad *pad;
0362     struct input_dev *dev;
0363     int i, j, s, len;
0364     char x_rel, y_rel;
0365 
0366     len = gc->pad_count[GC_SNESMOUSE] ? GC_SNESMOUSE_LENGTH :
0367             (gc->pad_count[GC_SNES] ? GC_SNES_LENGTH : GC_NES_LENGTH);
0368 
0369     gc_nes_read_packet(gc, len, data);
0370 
0371     for (i = 0; i < GC_MAX_DEVICES; i++) {
0372 
0373         pad = &gc->pads[i];
0374         dev = pad->dev;
0375         s = gc_status_bit[i];
0376 
0377         switch (pad->type) {
0378 
0379         case GC_NES:
0380 
0381             input_report_abs(dev, ABS_X, !(s & data[6]) - !(s & data[7]));
0382             input_report_abs(dev, ABS_Y, !(s & data[4]) - !(s & data[5]));
0383 
0384             for (j = 0; j < 4; j++)
0385                 input_report_key(dev, gc_snes_btn[j],
0386                          s & data[gc_nes_bytes[j]]);
0387             input_sync(dev);
0388             break;
0389 
0390         case GC_SNES:
0391 
0392             input_report_abs(dev, ABS_X, !(s & data[6]) - !(s & data[7]));
0393             input_report_abs(dev, ABS_Y, !(s & data[4]) - !(s & data[5]));
0394 
0395             for (j = 0; j < 8; j++)
0396                 input_report_key(dev, gc_snes_btn[j],
0397                          s & data[gc_snes_bytes[j]]);
0398             input_sync(dev);
0399             break;
0400 
0401         case GC_SNESMOUSE:
0402             /*
0403              * The 4 unused bits from SNES controllers appear
0404              * to be ID bits so use them to make sure we are
0405              * dealing with a mouse.
0406              * gamepad is connected. This is important since
0407              * my SNES gamepad sends 1's for bits 16-31, which
0408              * cause the mouse pointer to quickly move to the
0409              * upper left corner of the screen.
0410              */
0411             if (!(s & data[12]) && !(s & data[13]) &&
0412                 !(s & data[14]) && (s & data[15])) {
0413                 input_report_key(dev, BTN_LEFT, s & data[9]);
0414                 input_report_key(dev, BTN_RIGHT, s & data[8]);
0415 
0416                 x_rel = y_rel = 0;
0417                 for (j = 0; j < 7; j++) {
0418                     x_rel <<= 1;
0419                     if (data[25 + j] & s)
0420                         x_rel |= 1;
0421 
0422                     y_rel <<= 1;
0423                     if (data[17 + j] & s)
0424                         y_rel |= 1;
0425                 }
0426 
0427                 if (x_rel) {
0428                     if (data[24] & s)
0429                         x_rel = -x_rel;
0430                     input_report_rel(dev, REL_X, x_rel);
0431                 }
0432 
0433                 if (y_rel) {
0434                     if (data[16] & s)
0435                         y_rel = -y_rel;
0436                     input_report_rel(dev, REL_Y, y_rel);
0437                 }
0438 
0439                 input_sync(dev);
0440             }
0441             break;
0442 
0443         default:
0444             break;
0445         }
0446     }
0447 }
0448 
0449 /*
0450  * Multisystem joystick support
0451  */
0452 
0453 #define GC_MULTI_LENGTH     5   /* Multi system joystick packet length is 5 */
0454 #define GC_MULTI2_LENGTH    6   /* One more bit for one more button */
0455 
0456 /*
0457  * gc_multi_read_packet() reads a Multisystem joystick packet.
0458  */
0459 
0460 static void gc_multi_read_packet(struct gc *gc, int length, unsigned char *data)
0461 {
0462     int i;
0463 
0464     for (i = 0; i < length; i++) {
0465         parport_write_data(gc->pd->port, ~(1 << i));
0466         data[i] = parport_read_status(gc->pd->port) ^ 0x7f;
0467     }
0468 }
0469 
0470 static void gc_multi_process_packet(struct gc *gc)
0471 {
0472     unsigned char data[GC_MULTI2_LENGTH];
0473     int data_len = gc->pad_count[GC_MULTI2] ? GC_MULTI2_LENGTH : GC_MULTI_LENGTH;
0474     struct gc_pad *pad;
0475     struct input_dev *dev;
0476     int i, s;
0477 
0478     gc_multi_read_packet(gc, data_len, data);
0479 
0480     for (i = 0; i < GC_MAX_DEVICES; i++) {
0481         pad = &gc->pads[i];
0482         dev = pad->dev;
0483         s = gc_status_bit[i];
0484 
0485         switch (pad->type) {
0486         case GC_MULTI2:
0487             input_report_key(dev, BTN_THUMB, s & data[5]);
0488             fallthrough;
0489 
0490         case GC_MULTI:
0491             input_report_abs(dev, ABS_X,
0492                      !(s & data[2]) - !(s & data[3]));
0493             input_report_abs(dev, ABS_Y,
0494                      !(s & data[0]) - !(s & data[1]));
0495             input_report_key(dev, BTN_TRIGGER, s & data[4]);
0496             input_sync(dev);
0497             break;
0498 
0499         default:
0500             break;
0501         }
0502     }
0503 }
0504 
0505 /*
0506  * PSX support
0507  *
0508  * See documentation at:
0509  *  http://www.geocities.co.jp/Playtown/2004/psx/ps_eng.txt 
0510  *  http://www.gamesx.com/controldata/psxcont/psxcont.htm
0511  *
0512  */
0513 
0514 #define GC_PSX_DELAY    25      /* 25 usec */
0515 #define GC_PSX_LENGTH   8       /* talk to the controller in bits */
0516 #define GC_PSX_BYTES    6       /* the maximum number of bytes to read off the controller */
0517 
0518 #define GC_PSX_MOUSE    1       /* Mouse */
0519 #define GC_PSX_NEGCON   2       /* NegCon */
0520 #define GC_PSX_NORMAL   4       /* Digital / Analog or Rumble in Digital mode  */
0521 #define GC_PSX_ANALOG   5       /* Analog in Analog mode / Rumble in Green mode */
0522 #define GC_PSX_RUMBLE   7       /* Rumble in Red mode */
0523 
0524 #define GC_PSX_CLOCK    0x04        /* Pin 4 */
0525 #define GC_PSX_COMMAND  0x01        /* Pin 2 */
0526 #define GC_PSX_POWER    0xf8        /* Pins 5-9 */
0527 #define GC_PSX_SELECT   0x02        /* Pin 3 */
0528 
0529 #define GC_PSX_ID(x)    ((x) >> 4)  /* High nibble is device type */
0530 #define GC_PSX_LEN(x)   (((x) & 0xf) << 1)  /* Low nibble is length in bytes/2 */
0531 
0532 static int gc_psx_delay = GC_PSX_DELAY;
0533 module_param_named(psx_delay, gc_psx_delay, uint, 0);
0534 MODULE_PARM_DESC(psx_delay, "Delay when accessing Sony PSX controller (usecs)");
0535 
0536 static const short gc_psx_abs[] = {
0537     ABS_X, ABS_Y, ABS_RX, ABS_RY, ABS_HAT0X, ABS_HAT0Y
0538 };
0539 static const short gc_psx_btn[] = {
0540     BTN_TL, BTN_TR, BTN_TL2, BTN_TR2, BTN_A, BTN_B, BTN_X, BTN_Y,
0541     BTN_START, BTN_SELECT, BTN_THUMBL, BTN_THUMBR
0542 };
0543 static const short gc_psx_ddr_btn[] = { BTN_0, BTN_1, BTN_2, BTN_3 };
0544 
0545 /*
0546  * gc_psx_command() writes 8bit command and reads 8bit data from
0547  * the psx pad.
0548  */
0549 
0550 static void gc_psx_command(struct gc *gc, int b, unsigned char *data)
0551 {
0552     struct parport *port = gc->pd->port;
0553     int i, j, cmd, read;
0554 
0555     memset(data, 0, GC_MAX_DEVICES);
0556 
0557     for (i = 0; i < GC_PSX_LENGTH; i++, b >>= 1) {
0558         cmd = (b & 1) ? GC_PSX_COMMAND : 0;
0559         parport_write_data(port, cmd | GC_PSX_POWER);
0560         udelay(gc_psx_delay);
0561 
0562         read = parport_read_status(port) ^ 0x80;
0563 
0564         for (j = 0; j < GC_MAX_DEVICES; j++) {
0565             struct gc_pad *pad = &gc->pads[j];
0566 
0567             if (pad->type == GC_PSX || pad->type == GC_DDR)
0568                 data[j] |= (read & gc_status_bit[j]) ? (1 << i) : 0;
0569         }
0570 
0571         parport_write_data(gc->pd->port, cmd | GC_PSX_CLOCK | GC_PSX_POWER);
0572         udelay(gc_psx_delay);
0573     }
0574 }
0575 
0576 /*
0577  * gc_psx_read_packet() reads a whole psx packet and returns
0578  * device identifier code.
0579  */
0580 
0581 static void gc_psx_read_packet(struct gc *gc,
0582                    unsigned char data[GC_MAX_DEVICES][GC_PSX_BYTES],
0583                    unsigned char id[GC_MAX_DEVICES])
0584 {
0585     int i, j, max_len = 0;
0586     unsigned long flags;
0587     unsigned char data2[GC_MAX_DEVICES];
0588 
0589     /* Select pad */
0590     parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER);
0591     udelay(gc_psx_delay);
0592     /* Deselect, begin command */
0593     parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_POWER);
0594     udelay(gc_psx_delay);
0595 
0596     local_irq_save(flags);
0597 
0598     gc_psx_command(gc, 0x01, data2);    /* Access pad */
0599     gc_psx_command(gc, 0x42, id);       /* Get device ids */
0600     gc_psx_command(gc, 0, data2);       /* Dump status */
0601 
0602     /* Find the longest pad */
0603     for (i = 0; i < GC_MAX_DEVICES; i++) {
0604         struct gc_pad *pad = &gc->pads[i];
0605 
0606         if ((pad->type == GC_PSX || pad->type == GC_DDR) &&
0607             GC_PSX_LEN(id[i]) > max_len &&
0608             GC_PSX_LEN(id[i]) <= GC_PSX_BYTES) {
0609             max_len = GC_PSX_LEN(id[i]);
0610         }
0611     }
0612 
0613     /* Read in all the data */
0614     for (i = 0; i < max_len; i++) {
0615         gc_psx_command(gc, 0, data2);
0616         for (j = 0; j < GC_MAX_DEVICES; j++)
0617             data[j][i] = data2[j];
0618     }
0619 
0620     local_irq_restore(flags);
0621 
0622     parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER);
0623 
0624     /* Set id's to the real value */
0625     for (i = 0; i < GC_MAX_DEVICES; i++)
0626         id[i] = GC_PSX_ID(id[i]);
0627 }
0628 
0629 static void gc_psx_report_one(struct gc_pad *pad, unsigned char psx_type,
0630                   unsigned char *data)
0631 {
0632     struct input_dev *dev = pad->dev;
0633     int i;
0634 
0635     switch (psx_type) {
0636 
0637     case GC_PSX_RUMBLE:
0638 
0639         input_report_key(dev, BTN_THUMBL, ~data[0] & 0x04);
0640         input_report_key(dev, BTN_THUMBR, ~data[0] & 0x02);
0641         fallthrough;
0642 
0643     case GC_PSX_NEGCON:
0644     case GC_PSX_ANALOG:
0645 
0646         if (pad->type == GC_DDR) {
0647             for (i = 0; i < 4; i++)
0648                 input_report_key(dev, gc_psx_ddr_btn[i],
0649                          ~data[0] & (0x10 << i));
0650         } else {
0651             for (i = 0; i < 4; i++)
0652                 input_report_abs(dev, gc_psx_abs[i + 2],
0653                          data[i + 2]);
0654 
0655             input_report_abs(dev, ABS_X,
0656                 !!(data[0] & 0x80) * 128 + !(data[0] & 0x20) * 127);
0657             input_report_abs(dev, ABS_Y,
0658                 !!(data[0] & 0x10) * 128 + !(data[0] & 0x40) * 127);
0659         }
0660 
0661         for (i = 0; i < 8; i++)
0662             input_report_key(dev, gc_psx_btn[i], ~data[1] & (1 << i));
0663 
0664         input_report_key(dev, BTN_START,  ~data[0] & 0x08);
0665         input_report_key(dev, BTN_SELECT, ~data[0] & 0x01);
0666 
0667         input_sync(dev);
0668 
0669         break;
0670 
0671     case GC_PSX_NORMAL:
0672 
0673         if (pad->type == GC_DDR) {
0674             for (i = 0; i < 4; i++)
0675                 input_report_key(dev, gc_psx_ddr_btn[i],
0676                          ~data[0] & (0x10 << i));
0677         } else {
0678             input_report_abs(dev, ABS_X,
0679                 !!(data[0] & 0x80) * 128 + !(data[0] & 0x20) * 127);
0680             input_report_abs(dev, ABS_Y,
0681                 !!(data[0] & 0x10) * 128 + !(data[0] & 0x40) * 127);
0682 
0683             /*
0684              * For some reason if the extra axes are left unset
0685              * they drift.
0686              * for (i = 0; i < 4; i++)
0687                 input_report_abs(dev, gc_psx_abs[i + 2], 128);
0688              * This needs to be debugged properly,
0689              * maybe fuzz processing needs to be done
0690              * in input_sync()
0691              *               --vojtech
0692              */
0693         }
0694 
0695         for (i = 0; i < 8; i++)
0696             input_report_key(dev, gc_psx_btn[i], ~data[1] & (1 << i));
0697 
0698         input_report_key(dev, BTN_START,  ~data[0] & 0x08);
0699         input_report_key(dev, BTN_SELECT, ~data[0] & 0x01);
0700 
0701         input_sync(dev);
0702 
0703         break;
0704 
0705     default: /* not a pad, ignore */
0706         break;
0707     }
0708 }
0709 
0710 static void gc_psx_process_packet(struct gc *gc)
0711 {
0712     unsigned char data[GC_MAX_DEVICES][GC_PSX_BYTES];
0713     unsigned char id[GC_MAX_DEVICES];
0714     struct gc_pad *pad;
0715     int i;
0716 
0717     gc_psx_read_packet(gc, data, id);
0718 
0719     for (i = 0; i < GC_MAX_DEVICES; i++) {
0720         pad = &gc->pads[i];
0721         if (pad->type == GC_PSX || pad->type == GC_DDR)
0722             gc_psx_report_one(pad, id[i], data[i]);
0723     }
0724 }
0725 
0726 /*
0727  * gc_timer() initiates reads of console pads data.
0728  */
0729 
0730 static void gc_timer(struct timer_list *t)
0731 {
0732     struct gc *gc = from_timer(gc, t, timer);
0733 
0734 /*
0735  * N64 pads - must be read first, any read confuses them for 200 us
0736  */
0737 
0738     if (gc->pad_count[GC_N64])
0739         gc_n64_process_packet(gc);
0740 
0741 /*
0742  * NES and SNES pads or mouse
0743  */
0744 
0745     if (gc->pad_count[GC_NES] ||
0746         gc->pad_count[GC_SNES] ||
0747         gc->pad_count[GC_SNESMOUSE]) {
0748         gc_nes_process_packet(gc);
0749     }
0750 
0751 /*
0752  * Multi and Multi2 joysticks
0753  */
0754 
0755     if (gc->pad_count[GC_MULTI] || gc->pad_count[GC_MULTI2])
0756         gc_multi_process_packet(gc);
0757 
0758 /*
0759  * PSX controllers
0760  */
0761 
0762     if (gc->pad_count[GC_PSX] || gc->pad_count[GC_DDR])
0763         gc_psx_process_packet(gc);
0764 
0765     mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
0766 }
0767 
0768 static int gc_open(struct input_dev *dev)
0769 {
0770     struct gc *gc = input_get_drvdata(dev);
0771     int err;
0772 
0773     err = mutex_lock_interruptible(&gc->mutex);
0774     if (err)
0775         return err;
0776 
0777     if (!gc->used++) {
0778         parport_claim(gc->pd);
0779         parport_write_control(gc->pd->port, 0x04);
0780         mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
0781     }
0782 
0783     mutex_unlock(&gc->mutex);
0784     return 0;
0785 }
0786 
0787 static void gc_close(struct input_dev *dev)
0788 {
0789     struct gc *gc = input_get_drvdata(dev);
0790 
0791     mutex_lock(&gc->mutex);
0792     if (!--gc->used) {
0793         del_timer_sync(&gc->timer);
0794         parport_write_control(gc->pd->port, 0x00);
0795         parport_release(gc->pd);
0796     }
0797     mutex_unlock(&gc->mutex);
0798 }
0799 
0800 static int gc_setup_pad(struct gc *gc, int idx, int pad_type)
0801 {
0802     struct gc_pad *pad = &gc->pads[idx];
0803     struct input_dev *input_dev;
0804     int i;
0805     int err;
0806 
0807     if (pad_type < 1 || pad_type >= GC_MAX) {
0808         pr_err("Pad type %d unknown\n", pad_type);
0809         return -EINVAL;
0810     }
0811 
0812     pad->dev = input_dev = input_allocate_device();
0813     if (!input_dev) {
0814         pr_err("Not enough memory for input device\n");
0815         return -ENOMEM;
0816     }
0817 
0818     pad->type = pad_type;
0819 
0820     snprintf(pad->phys, sizeof(pad->phys),
0821          "%s/input%d", gc->pd->port->name, idx);
0822 
0823     input_dev->name = gc_names[pad_type];
0824     input_dev->phys = pad->phys;
0825     input_dev->id.bustype = BUS_PARPORT;
0826     input_dev->id.vendor = 0x0001;
0827     input_dev->id.product = pad_type;
0828     input_dev->id.version = 0x0100;
0829 
0830     input_set_drvdata(input_dev, gc);
0831 
0832     input_dev->open = gc_open;
0833     input_dev->close = gc_close;
0834 
0835     if (pad_type != GC_SNESMOUSE) {
0836         input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
0837 
0838         for (i = 0; i < 2; i++)
0839             input_set_abs_params(input_dev, ABS_X + i, -1, 1, 0, 0);
0840     } else
0841         input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
0842 
0843     gc->pad_count[pad_type]++;
0844 
0845     switch (pad_type) {
0846 
0847     case GC_N64:
0848         for (i = 0; i < 10; i++)
0849             input_set_capability(input_dev, EV_KEY, gc_n64_btn[i]);
0850 
0851         for (i = 0; i < 2; i++) {
0852             input_set_abs_params(input_dev, ABS_X + i, -127, 126, 0, 2);
0853             input_set_abs_params(input_dev, ABS_HAT0X + i, -1, 1, 0, 0);
0854         }
0855 
0856         err = gc_n64_init_ff(input_dev, idx);
0857         if (err) {
0858             pr_warn("Failed to initiate rumble for N64 device %d\n",
0859                 idx);
0860             goto err_free_dev;
0861         }
0862 
0863         break;
0864 
0865     case GC_SNESMOUSE:
0866         input_set_capability(input_dev, EV_KEY, BTN_LEFT);
0867         input_set_capability(input_dev, EV_KEY, BTN_RIGHT);
0868         input_set_capability(input_dev, EV_REL, REL_X);
0869         input_set_capability(input_dev, EV_REL, REL_Y);
0870         break;
0871 
0872     case GC_SNES:
0873         for (i = 4; i < 8; i++)
0874             input_set_capability(input_dev, EV_KEY, gc_snes_btn[i]);
0875         fallthrough;
0876 
0877     case GC_NES:
0878         for (i = 0; i < 4; i++)
0879             input_set_capability(input_dev, EV_KEY, gc_snes_btn[i]);
0880         break;
0881 
0882     case GC_MULTI2:
0883         input_set_capability(input_dev, EV_KEY, BTN_THUMB);
0884         fallthrough;
0885 
0886     case GC_MULTI:
0887         input_set_capability(input_dev, EV_KEY, BTN_TRIGGER);
0888         break;
0889 
0890     case GC_PSX:
0891         for (i = 0; i < 6; i++)
0892             input_set_abs_params(input_dev,
0893                          gc_psx_abs[i], 4, 252, 0, 2);
0894         for (i = 0; i < 12; i++)
0895             input_set_capability(input_dev, EV_KEY, gc_psx_btn[i]);
0896         break;
0897 
0898         break;
0899 
0900     case GC_DDR:
0901         for (i = 0; i < 4; i++)
0902             input_set_capability(input_dev, EV_KEY,
0903                          gc_psx_ddr_btn[i]);
0904         for (i = 0; i < 12; i++)
0905             input_set_capability(input_dev, EV_KEY, gc_psx_btn[i]);
0906 
0907         break;
0908     }
0909 
0910     err = input_register_device(pad->dev);
0911     if (err)
0912         goto err_free_dev;
0913 
0914     return 0;
0915 
0916 err_free_dev:
0917     input_free_device(pad->dev);
0918     pad->dev = NULL;
0919     return err;
0920 }
0921 
0922 static void gc_attach(struct parport *pp)
0923 {
0924     struct gc *gc;
0925     struct pardevice *pd;
0926     int i, port_idx;
0927     int count = 0;
0928     int *pads, n_pads;
0929     struct pardev_cb gc_parport_cb;
0930 
0931     for (port_idx = 0; port_idx < GC_MAX_PORTS; port_idx++) {
0932         if (gc_cfg[port_idx].nargs == 0 || gc_cfg[port_idx].args[0] < 0)
0933             continue;
0934 
0935         if (gc_cfg[port_idx].args[0] == pp->number)
0936             break;
0937     }
0938 
0939     if (port_idx == GC_MAX_PORTS) {
0940         pr_debug("Not using parport%d.\n", pp->number);
0941         return;
0942     }
0943     pads = gc_cfg[port_idx].args + 1;
0944     n_pads = gc_cfg[port_idx].nargs - 1;
0945 
0946     memset(&gc_parport_cb, 0, sizeof(gc_parport_cb));
0947     gc_parport_cb.flags = PARPORT_FLAG_EXCL;
0948 
0949     pd = parport_register_dev_model(pp, "gamecon", &gc_parport_cb,
0950                     port_idx);
0951     if (!pd) {
0952         pr_err("parport busy already - lp.o loaded?\n");
0953         return;
0954     }
0955 
0956     gc = kzalloc(sizeof(struct gc), GFP_KERNEL);
0957     if (!gc) {
0958         pr_err("Not enough memory\n");
0959         goto err_unreg_pardev;
0960     }
0961 
0962     mutex_init(&gc->mutex);
0963     gc->pd = pd;
0964     gc->parportno = pp->number;
0965     timer_setup(&gc->timer, gc_timer, 0);
0966 
0967     for (i = 0; i < n_pads && i < GC_MAX_DEVICES; i++) {
0968         if (!pads[i])
0969             continue;
0970 
0971         if (gc_setup_pad(gc, i, pads[i]))
0972             goto err_unreg_devs;
0973 
0974         count++;
0975     }
0976 
0977     if (count == 0) {
0978         pr_err("No valid devices specified\n");
0979         goto err_free_gc;
0980     }
0981 
0982     gc_base[port_idx] = gc;
0983     return;
0984 
0985  err_unreg_devs:
0986     while (--i >= 0)
0987         if (gc->pads[i].dev)
0988             input_unregister_device(gc->pads[i].dev);
0989  err_free_gc:
0990     kfree(gc);
0991  err_unreg_pardev:
0992     parport_unregister_device(pd);
0993 }
0994 
0995 static void gc_detach(struct parport *port)
0996 {
0997     int i;
0998     struct gc *gc;
0999 
1000     for (i = 0; i < GC_MAX_PORTS; i++) {
1001         if (gc_base[i] && gc_base[i]->parportno == port->number)
1002             break;
1003     }
1004 
1005     if (i == GC_MAX_PORTS)
1006         return;
1007 
1008     gc = gc_base[i];
1009     gc_base[i] = NULL;
1010 
1011     for (i = 0; i < GC_MAX_DEVICES; i++)
1012         if (gc->pads[i].dev)
1013             input_unregister_device(gc->pads[i].dev);
1014     parport_unregister_device(gc->pd);
1015     kfree(gc);
1016 }
1017 
1018 static struct parport_driver gc_parport_driver = {
1019     .name = "gamecon",
1020     .match_port = gc_attach,
1021     .detach = gc_detach,
1022     .devmodel = true,
1023 };
1024 
1025 static int __init gc_init(void)
1026 {
1027     int i;
1028     int have_dev = 0;
1029 
1030     for (i = 0; i < GC_MAX_PORTS; i++) {
1031         if (gc_cfg[i].nargs == 0 || gc_cfg[i].args[0] < 0)
1032             continue;
1033 
1034         if (gc_cfg[i].nargs < 2) {
1035             pr_err("at least one device must be specified\n");
1036             return -EINVAL;
1037         }
1038 
1039         have_dev = 1;
1040     }
1041 
1042     if (!have_dev)
1043         return -ENODEV;
1044 
1045     return parport_register_driver(&gc_parport_driver);
1046 }
1047 
1048 static void __exit gc_exit(void)
1049 {
1050     parport_unregister_driver(&gc_parport_driver);
1051 }
1052 
1053 module_init(gc_init);
1054 module_exit(gc_exit);