]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/input/joystick/gamecon.c
Merge remote-tracking branch 'usb-chipidea-fixes/ci-for-usb-stable'
[karo-tx-linux.git] / drivers / input / joystick / gamecon.c
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
44 MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
45 MODULE_DESCRIPTION("NES, SNES, N64, MultiSystem, PSX gamepad driver");
46 MODULE_LICENSE("GPL");
47
48 #define GC_MAX_PORTS            3
49 #define GC_MAX_DEVICES          5
50
51 struct gc_config {
52         int args[GC_MAX_DEVICES + 1];
53         unsigned int nargs;
54 };
55
56 static struct gc_config gc_cfg[GC_MAX_PORTS] __initdata;
57
58 module_param_array_named(map, gc_cfg[0].args, int, &gc_cfg[0].nargs, 0);
59 MODULE_PARM_DESC(map, "Describes first set of devices (<parport#>,<pad1>,<pad2>,..<pad5>)");
60 module_param_array_named(map2, gc_cfg[1].args, int, &gc_cfg[1].nargs, 0);
61 MODULE_PARM_DESC(map2, "Describes second set of devices");
62 module_param_array_named(map3, gc_cfg[2].args, int, &gc_cfg[2].nargs, 0);
63 MODULE_PARM_DESC(map3, "Describes third set of devices");
64
65 /* see also gs_psx_delay parameter in PSX support section */
66
67 enum 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
83 struct gc_pad {
84         struct input_dev *dev;
85         enum gc_type type;
86         char phys[32];
87 };
88
89 struct 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
98 struct gc_subdev {
99         unsigned int idx;
100 };
101
102 static struct gc *gc_base[3];
103
104 static const int gc_status_bit[] = { 0x40, 0x80, 0x20, 0x10, 0x08 };
105
106 static 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
116 static const unsigned char gc_n64_bytes[] = { 0, 1, 13, 15, 14, 12, 10, 11, 2, 3 };
117 static 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 */
148 static 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 */
162 static 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
180 static 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
220 static 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
265 static 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
307 static 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
344 static const unsigned char gc_nes_bytes[] = { 0, 1, 2, 3 };
345 static const unsigned char gc_snes_bytes[] = { 8, 0, 2, 3, 9, 1, 10, 11 };
346 static 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
356 static 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
373 static 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
475 static 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
485 static 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
547 static int gc_psx_delay = GC_PSX_DELAY;
548 module_param_named(psx_delay, gc_psx_delay, uint, 0);
549 MODULE_PARM_DESC(psx_delay, "Delay when accessing Sony PSX controller (usecs)");
550
551 static const short gc_psx_abs[] = {
552         ABS_X, ABS_Y, ABS_RX, ABS_RY, ABS_HAT0X, ABS_HAT0Y
553 };
554 static 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 };
558 static 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
565 static 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
596 static 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
644 static 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
724 static 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
744 static 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
782 static 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
801 static 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
814 static 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
923 err_free_dev:
924         input_free_device(pad->dev);
925         pad->dev = NULL;
926         return err;
927 }
928
929 static 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
997 static 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
1008 static 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
1044 static 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
1053 module_init(gc_init);
1054 module_exit(gc_exit);