• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/input/joystick/

Lines Matching defs:gc

79 struct gc {
89 static struct gc *gc_base[3];
122 static void gc_n64_read_packet(struct gc *gc, unsigned char *data)
133 parport_write_data(gc->pd->port, GC_N64_POWER_W | ((GC_N64_REQUEST >> i) & 1 ? GC_N64_OUT : 0));
149 parport_write_data(gc->pd->port, GC_N64_POWER_R);
150 data[i] = parport_read_status(gc->pd->port);
151 parport_write_data(gc->pd->port, GC_N64_POWER_R | GC_N64_CLOCK);
161 static void gc_n64_process_packet(struct gc *gc)
168 gc_n64_read_packet(gc, data);
172 dev = gc->dev[i];
178 if (s & gc->pads[GC_N64] & ~(data[8] | data[9])) {
228 static void gc_nes_read_packet(struct gc *gc, int length, unsigned char *data)
232 parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK | GC_NES_LATCH);
234 parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK);
238 parport_write_data(gc->pd->port, GC_NES_POWER);
239 data[i] = parport_read_status(gc->pd->port) ^ 0x7f;
241 parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK);
245 static void gc_nes_process_packet(struct gc *gc)
252 len = gc->pads[GC_SNESMOUSE] ? GC_SNESMOUSE_LENGTH :
253 (gc->pads[GC_SNES] ? GC_SNES_LENGTH : GC_NES_LENGTH);
255 gc_nes_read_packet(gc, len, data);
259 dev = gc->dev[i];
265 if (s & (gc->pads[GC_NES] | gc->pads[GC_SNES])) {
270 if (s & gc->pads[GC_NES])
274 if (s & gc->pads[GC_SNES])
278 if (s & gc->pads[GC_SNESMOUSE]) {
331 static void gc_multi_read_packet(struct gc *gc, int length, unsigned char *data)
336 parport_write_data(gc->pd->port, ~(1 << i));
337 data[i] = parport_read_status(gc->pd->port) ^ 0x7f;
341 static void gc_multi_process_packet(struct gc *gc)
347 gc_multi_read_packet(gc, gc->pads[GC_MULTI2] ? GC_MULTI2_LENGTH : GC_MULTI_LENGTH, data);
351 dev = gc->dev[i];
357 if (s & (gc->pads[GC_MULTI] | gc->pads[GC_MULTI2])) {
363 if (s & gc->pads[GC_MULTI2])
412 static void gc_psx_command(struct gc *gc, int b, unsigned char data[GC_MAX_DEVICES])
421 parport_write_data(gc->pd->port, cmd | GC_PSX_POWER);
423 read = parport_read_status(gc->pd->port) ^ 0x80;
425 data[j] |= (read & gc_status_bit[j] & (gc->pads[GC_PSX] | gc->pads[GC_DDR])) ? (1 << i) : 0;
426 parport_write_data(gc->pd->port, cmd | GC_PSX_CLOCK | GC_PSX_POWER);
436 static void gc_psx_read_packet(struct gc *gc, unsigned char data[GC_MAX_DEVICES][GC_PSX_BYTES],
443 parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER); /* Select pad */
445 parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_POWER); /* Deselect, begin command */
450 gc_psx_command(gc, 0x01, data2); /* Access pad */
451 gc_psx_command(gc, 0x42, id); /* Get device ids */
452 gc_psx_command(gc, 0, data2); /* Dump status */
455 if((gc_status_bit[i] & (gc->pads[GC_PSX] | gc->pads[GC_DDR]))
461 gc_psx_command(gc, 0, data2);
468 parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER);
474 static void gc_psx_process_packet(struct gc *gc)
481 gc_psx_read_packet(gc, data, id);
485 dev = gc->dev[i];
499 if (gc->pads[GC_DDR] & gc_status_bit[i]) {
521 if (gc->pads[GC_DDR] & gc_status_bit[i]) {
559 struct gc *gc = (void *) private;
565 if (gc->pads[GC_N64])
566 gc_n64_process_packet(gc);
572 if (gc->pads[GC_NES] || gc->pads[GC_SNES] || gc->pads[GC_SNESMOUSE])
573 gc_nes_process_packet(gc);
579 if (gc->pads[GC_MULTI] || gc->pads[GC_MULTI2])
580 gc_multi_process_packet(gc);
586 if (gc->pads[GC_PSX] || gc->pads[GC_DDR])
587 gc_psx_process_packet(gc);
589 mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
594 struct gc *gc = input_get_drvdata(dev);
597 err = mutex_lock_interruptible(&gc->mutex);
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);
607 mutex_unlock(&gc->mutex);
613 struct gc *gc = input_get_drvdata(dev);
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);
621 mutex_unlock(&gc->mutex);
624 static int __init gc_setup_pad(struct gc *gc, int idx, int pad_type)
637 gc->dev[idx] = input_dev = input_allocate_device();
644 input_dev->phys = gc->phys[idx];
650 input_set_drvdata(input_dev, gc);
663 gc->pads[0] |= gc_status_bit[idx];
664 gc->pads[pad_type] |= gc_status_bit[idx];
720 static struct gc __init *gc_probe(int parport, int *pads, int n_pads)
722 struct gc *gc;
742 gc = kzalloc(sizeof(struct gc), GFP_KERNEL);
743 if (!gc) {
749 mutex_init(&gc->mutex);
750 gc->pd = pd;
751 init_timer(&gc->timer);
752 gc->timer.data = (long) gc;
753 gc->timer.function = gc_timer;
759 snprintf(gc->phys[i], sizeof(gc->phys[i]),
760 "%s/input%d", gc->pd->port->name, i);
761 err = gc_setup_pad(gc, i, pads[i]);
765 err = input_register_device(gc->dev[i]);
770 if (!gc->pads[0]) {
777 return gc;
780 input_free_device(gc->dev[i]);
783 if (gc->dev[i])
784 input_unregister_device(gc->dev[i]);
786 kfree(gc);
795 static void gc_remove(struct gc *gc)
800 if (gc->dev[i])
801 input_unregister_device(gc->dev[i]);
802 parport_unregister_device(gc->pd);
803 kfree(gc);