Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/input/joystick/gamecon.c
15109 views
1
/*
2
* NES, SNES, N64, MultiSystem, PSX gamepad driver for Linux
3
*
4
* Copyright (c) 1999-2004 Vojtech Pavlik <[email protected]>
5
* Copyright (c) 2004 Peter Nelson <[email protected]>
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 <[email protected]>, 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 <[email protected]>");
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);
1055
1056