Lines Matching refs:gc
73 struct gc {
87 static struct gc *gc_base[3];
133 static void gc_n64_send_command(struct gc *gc, unsigned long cmd,
136 struct parport *port = gc->pd->port;
147 static void gc_n64_send_stop_bit(struct gc *gc, unsigned char target)
149 struct parport *port = gc->pd->port;
165 static void gc_n64_read_packet(struct gc *gc, unsigned char *data)
175 gc_n64_send_command(gc, GC_N64_REQUEST_DATA, GC_N64_OUT);
176 gc_n64_send_stop_bit(gc, GC_N64_OUT);
191 parport_write_data(gc->pd->port, GC_N64_POWER_R);
193 data[i] = parport_read_status(gc->pd->port);
194 parport_write_data(gc->pd->port, GC_N64_POWER_R | GC_N64_CLOCK);
205 static void gc_n64_process_packet(struct gc *gc)
212 gc_n64_read_packet(gc, data);
216 if (gc->pads[i].type != GC_N64)
219 dev = gc->pads[i].dev;
255 struct gc *gc = input_get_drvdata(dev);
268 gc_n64_send_command(gc, GC_N64_CMD_03, target);
269 gc_n64_send_command(gc, GC_N64_CMD_80, target);
270 gc_n64_send_command(gc, GC_N64_CMD_01, target);
272 gc_n64_send_command(gc, GC_N64_CMD_80, target);
273 gc_n64_send_stop_bit(gc, target);
278 gc_n64_send_command(gc, GC_N64_CMD_03, target);
279 gc_n64_send_command(gc, GC_N64_CMD_c0, target);
280 gc_n64_send_command(gc, GC_N64_CMD_1b, target);
282 gc_n64_send_command(gc, cmd, target);
283 gc_n64_send_stop_bit(gc, target);
341 static void gc_nes_read_packet(struct gc *gc, int length, unsigned char *data)
345 parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK | GC_NES_LATCH);
347 parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK);
351 parport_write_data(gc->pd->port, GC_NES_POWER);
352 data[i] = parport_read_status(gc->pd->port) ^ 0x7f;
354 parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK);
358 static void gc_nes_process_packet(struct gc *gc)
366 len = gc->pad_count[GC_SNESMOUSE] ? GC_SNESMOUSE_LENGTH :
367 (gc->pad_count[GC_SNES] ? GC_SNES_LENGTH : GC_NES_LENGTH);
369 gc_nes_read_packet(gc, len, data);
373 pad = &gc->pads[i];
460 static void gc_multi_read_packet(struct gc *gc, int length, unsigned char *data)
465 parport_write_data(gc->pd->port, ~(1 << i));
466 data[i] = parport_read_status(gc->pd->port) ^ 0x7f;
470 static void gc_multi_process_packet(struct gc *gc)
473 int data_len = gc->pad_count[GC_MULTI2] ? GC_MULTI2_LENGTH : GC_MULTI_LENGTH;
478 gc_multi_read_packet(gc, data_len, data);
481 pad = &gc->pads[i];
550 static void gc_psx_command(struct gc *gc, int b, unsigned char *data)
552 struct parport *port = gc->pd->port;
565 struct gc_pad *pad = &gc->pads[j];
571 parport_write_data(gc->pd->port, cmd | GC_PSX_CLOCK | GC_PSX_POWER);
581 static void gc_psx_read_packet(struct gc *gc,
590 parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER);
593 parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_POWER);
598 gc_psx_command(gc, 0x01, data2); /* Access pad */
599 gc_psx_command(gc, 0x42, id); /* Get device ids */
600 gc_psx_command(gc, 0, data2); /* Dump status */
604 struct gc_pad *pad = &gc->pads[i];
615 gc_psx_command(gc, 0, data2);
622 parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER);
710 static void gc_psx_process_packet(struct gc *gc)
717 gc_psx_read_packet(gc, data, id);
720 pad = &gc->pads[i];
732 struct gc *gc = from_timer(gc, t, timer);
738 if (gc->pad_count[GC_N64])
739 gc_n64_process_packet(gc);
745 if (gc->pad_count[GC_NES] ||
746 gc->pad_count[GC_SNES] ||
747 gc->pad_count[GC_SNESMOUSE]) {
748 gc_nes_process_packet(gc);
755 if (gc->pad_count[GC_MULTI] || gc->pad_count[GC_MULTI2])
756 gc_multi_process_packet(gc);
762 if (gc->pad_count[GC_PSX] || gc->pad_count[GC_DDR])
763 gc_psx_process_packet(gc);
765 mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
770 struct gc *gc = input_get_drvdata(dev);
773 err = mutex_lock_interruptible(&gc->mutex);
777 if (!gc->used++) {
778 parport_claim(gc->pd);
779 parport_write_control(gc->pd->port, 0x04);
780 mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
783 mutex_unlock(&gc->mutex);
789 struct gc *gc = input_get_drvdata(dev);
791 mutex_lock(&gc->mutex);
792 if (!--gc->used) {
793 del_timer_sync(&gc->timer);
794 parport_write_control(gc->pd->port, 0x00);
795 parport_release(gc->pd);
797 mutex_unlock(&gc->mutex);
800 static int gc_setup_pad(struct gc *gc, int idx, int pad_type)
802 struct gc_pad *pad = &gc->pads[idx];
821 "%s/input%d", gc->pd->port->name, idx);
830 input_set_drvdata(input_dev, gc);
843 gc->pad_count[pad_type]++;
924 struct gc *gc;
956 gc = kzalloc(sizeof(struct gc), GFP_KERNEL);
957 if (!gc) {
962 mutex_init(&gc->mutex);
963 gc->pd = pd;
964 gc->parportno = pp->number;
965 timer_setup(&gc->timer, gc_timer, 0);
971 if (gc_setup_pad(gc, i, pads[i]))
982 gc_base[port_idx] = gc;
987 if (gc->pads[i].dev)
988 input_unregister_device(gc->pads[i].dev);
990 kfree(gc);
998 struct gc *gc;
1008 gc = gc_base[i];
1012 if (gc->pads[i].dev)
1013 input_unregister_device(gc->pads[i].dev);
1014 parport_unregister_device(gc->pd);
1015 kfree(gc);