0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
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
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
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
0108 #define GC_N64_STOP_LENGTH 5
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
0116 #define GC_N64_REQUEST_DATA GC_N64_CMD_01
0117 #define GC_N64_DELAY 133
0118 #define GC_N64_DWS 3
0119
0120 #define GC_N64_POWER_W 0xe2
0121 #define GC_N64_POWER_R 0xfd
0122 #define GC_N64_OUT 0x1d
0123
0124
0125
0126 #define GC_N64_CLOCK 0x02
0127
0128
0129
0130
0131
0132
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
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
0161
0162
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
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
0181
0182
0183
0184 udelay(GC_N64_DELAY);
0185
0186
0187
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
0199
0200
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;
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
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
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
0316
0317
0318 #define GC_NES_DELAY 6
0319 #define GC_NES_LENGTH 8
0320 #define GC_SNES_LENGTH 12
0321
0322 #define GC_SNESMOUSE_LENGTH 32
0323
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
0337
0338
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
0404
0405
0406
0407
0408
0409
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
0451
0452
0453 #define GC_MULTI_LENGTH 5
0454 #define GC_MULTI2_LENGTH 6
0455
0456
0457
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
0507
0508
0509
0510
0511
0512
0513
0514 #define GC_PSX_DELAY 25
0515 #define GC_PSX_LENGTH 8
0516 #define GC_PSX_BYTES 6
0517
0518 #define GC_PSX_MOUSE 1
0519 #define GC_PSX_NEGCON 2
0520 #define GC_PSX_NORMAL 4
0521 #define GC_PSX_ANALOG 5
0522 #define GC_PSX_RUMBLE 7
0523
0524 #define GC_PSX_CLOCK 0x04
0525 #define GC_PSX_COMMAND 0x01
0526 #define GC_PSX_POWER 0xf8
0527 #define GC_PSX_SELECT 0x02
0528
0529 #define GC_PSX_ID(x) ((x) >> 4)
0530 #define GC_PSX_LEN(x) (((x) & 0xf) << 1)
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
0547
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
0578
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
0590 parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER);
0591 udelay(gc_psx_delay);
0592
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);
0599 gc_psx_command(gc, 0x42, id);
0600 gc_psx_command(gc, 0, data2);
0601
0602
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
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
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
0685
0686
0687
0688
0689
0690
0691
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:
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
0728
0729
0730 static void gc_timer(struct timer_list *t)
0731 {
0732 struct gc *gc = from_timer(gc, t, timer);
0733
0734
0735
0736
0737
0738 if (gc->pad_count[GC_N64])
0739 gc_n64_process_packet(gc);
0740
0741
0742
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
0753
0754
0755 if (gc->pad_count[GC_MULTI] || gc->pad_count[GC_MULTI2])
0756 gc_multi_process_packet(gc);
0757
0758
0759
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);