gamecon.c (5a84d159061d914c8dd4aa372ac6e9529c2be453) gamecon.c (8715c1cfadf8cce24e79d254f95bd4a84c7741f0)
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

--- 577 unchanged lines hidden (view full) ---

586 if (gc->pads[GC_PSX] || gc->pads[GC_DDR])
587 gc_psx_process_packet(gc);
588
589 mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
590}
591
592static int gc_open(struct input_dev *dev)
593{
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

--- 577 unchanged lines hidden (view full) ---

586 if (gc->pads[GC_PSX] || gc->pads[GC_DDR])
587 gc_psx_process_packet(gc);
588
589 mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
590}
591
592static int gc_open(struct input_dev *dev)
593{
594 struct gc *gc = dev->private;
594 struct gc *gc = input_get_drvdata(dev);
595 int err;
596
597 err = mutex_lock_interruptible(&gc->mutex);
598 if (err)
599 return err;
600
601 if (!gc->used++) {
602 parport_claim(gc->pd);
603 parport_write_control(gc->pd->port, 0x04);
604 mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
605 }
606
607 mutex_unlock(&gc->mutex);
608 return 0;
609}
610
611static void gc_close(struct input_dev *dev)
612{
595 int err;
596
597 err = mutex_lock_interruptible(&gc->mutex);
598 if (err)
599 return err;
600
601 if (!gc->used++) {
602 parport_claim(gc->pd);
603 parport_write_control(gc->pd->port, 0x04);
604 mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
605 }
606
607 mutex_unlock(&gc->mutex);
608 return 0;
609}
610
611static void gc_close(struct input_dev *dev)
612{
613 struct gc *gc = dev->private;
613 struct gc *gc = input_get_drvdata(dev);
614
615 mutex_lock(&gc->mutex);
616 if (!--gc->used) {
617 del_timer_sync(&gc->timer);
618 parport_write_control(gc->pd->port, 0x00);
619 parport_release(gc->pd);
620 }
621 mutex_unlock(&gc->mutex);

--- 19 unchanged lines hidden (view full) ---

641 }
642
643 input_dev->name = gc_names[pad_type];
644 input_dev->phys = gc->phys[idx];
645 input_dev->id.bustype = BUS_PARPORT;
646 input_dev->id.vendor = 0x0001;
647 input_dev->id.product = pad_type;
648 input_dev->id.version = 0x0100;
614
615 mutex_lock(&gc->mutex);
616 if (!--gc->used) {
617 del_timer_sync(&gc->timer);
618 parport_write_control(gc->pd->port, 0x00);
619 parport_release(gc->pd);
620 }
621 mutex_unlock(&gc->mutex);

--- 19 unchanged lines hidden (view full) ---

641 }
642
643 input_dev->name = gc_names[pad_type];
644 input_dev->phys = gc->phys[idx];
645 input_dev->id.bustype = BUS_PARPORT;
646 input_dev->id.vendor = 0x0001;
647 input_dev->id.product = pad_type;
648 input_dev->id.version = 0x0100;
649 input_dev->private = gc;
650
649
650 input_set_drvdata(input_dev, gc);
651
651 input_dev->open = gc_open;
652 input_dev->close = gc_close;
653
654 if (pad_type != GC_SNESMOUSE) {
655 input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
656
657 for (i = 0; i < 2; i++)
658 input_set_abs_params(input_dev, ABS_X + i, -1, 1, 0, 0);

--- 192 unchanged lines hidden ---
652 input_dev->open = gc_open;
653 input_dev->close = gc_close;
654
655 if (pad_type != GC_SNESMOUSE) {
656 input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
657
658 for (i = 0; i < 2; i++)
659 input_set_abs_params(input_dev, ABS_X + i, -1, 1, 0, 0);

--- 192 unchanged lines hidden ---