Lines Matching +full:- +full:i

4  *  Copyright (c) 1999-2004	Vojtech Pavlik <vojtech@suse.cz>
5 * Copyright (c) 2004 Peter Nelson <rufus-kernel@hackish.org>
26 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
108 "Multisystem 2-button joystick", "N64 controller", "PSX controller",
151 struct parport *port = gc->pd->port; in gc_n64_send_command()
152 int i; in gc_n64_send_command() local
154 for (i = 0; i < GC_N64_LENGTH; i++) { in gc_n64_send_command()
155 unsigned char data = (cmd >> i) & 1 ? target : 0; in gc_n64_send_command()
164 struct parport *port = gc->pd->port; in gc_n64_send_stop_bit()
165 int i; in gc_n64_send_stop_bit() local
167 for (i = 0; i < GC_N64_STOP_LENGTH; i++) { in gc_n64_send_stop_bit()
168 unsigned char data = (GC_N64_STOP_BIT >> i) & 1 ? target : 0; in gc_n64_send_stop_bit()
182 int i; in gc_n64_read_packet() local
195 * Wait for the pad response to be loaded into the 33-bit register in gc_n64_read_packet()
205 for (i = 0; i < GC_N64_LENGTH; i++) { in gc_n64_read_packet()
206 parport_write_data(gc->pd->port, GC_N64_POWER_R); in gc_n64_read_packet()
208 data[i] = parport_read_status(gc->pd->port); in gc_n64_read_packet()
209 parport_write_data(gc->pd->port, GC_N64_POWER_R | GC_N64_CLOCK); in gc_n64_read_packet()
224 int i, j, s; in gc_n64_process_packet() local
229 for (i = 0; i < GC_MAX_DEVICES; i++) { in gc_n64_process_packet()
231 if (gc->pads[i].type != GC_N64) in gc_n64_process_packet()
234 dev = gc->pads[i].dev; in gc_n64_process_packet()
235 s = gc_status_bit[i]; in gc_n64_process_packet()
242 if (data[23 - j] & s) in gc_n64_process_packet()
244 if (data[31 - j] & s) in gc_n64_process_packet()
249 input_report_abs(dev, ABS_Y, -y); in gc_n64_process_packet()
252 !(s & data[6]) - !(s & data[7])); in gc_n64_process_packet()
254 !(s & data[4]) - !(s & data[5])); in gc_n64_process_packet()
268 int i; in gc_n64_play_effect() local
272 unsigned char target = 1 << sdev->idx; /* select desired pin */ in gc_n64_play_effect()
274 if (effect->type == FF_RUMBLE) { in gc_n64_play_effect()
275 struct ff_rumble_effect *rumble = &effect->u.rumble; in gc_n64_play_effect()
277 rumble->strong_magnitude || rumble->weak_magnitude ? in gc_n64_play_effect()
282 /* Init Rumble - 0x03, 0x80, 0x01, (34)0x80 */ in gc_n64_play_effect()
286 for (i = 0; i < 32; i++) in gc_n64_play_effect()
292 /* Now start or stop it - 0x03, 0xc0, 0zx1b, (32)0x01/0x00 */ in gc_n64_play_effect()
296 for (i = 0; i < 32; i++) in gc_n64_play_effect()
307 static int __init gc_n64_init_ff(struct input_dev *dev, int i) in gc_n64_init_ff() argument
314 return -ENOMEM; in gc_n64_init_ff()
316 sdev->idx = i; in gc_n64_init_ff()
333 #define GC_NES_DELAY 6 /* Delay between bits - 6us */
358 int i; in gc_nes_read_packet() local
360 parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK | GC_NES_LATCH); in gc_nes_read_packet()
362 parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK); in gc_nes_read_packet()
364 for (i = 0; i < length; i++) { in gc_nes_read_packet()
366 parport_write_data(gc->pd->port, GC_NES_POWER); in gc_nes_read_packet()
367 data[i] = parport_read_status(gc->pd->port) ^ 0x7f; in gc_nes_read_packet()
369 parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK); in gc_nes_read_packet()
378 int i, j, s, len; in gc_nes_process_packet() local
381 len = gc->pad_count[GC_SNESMOUSE] ? GC_SNESMOUSE_LENGTH : in gc_nes_process_packet()
382 (gc->pad_count[GC_SNES] ? GC_SNES_LENGTH : GC_NES_LENGTH); in gc_nes_process_packet()
386 for (i = 0; i < GC_MAX_DEVICES; i++) { in gc_nes_process_packet()
388 pad = &gc->pads[i]; in gc_nes_process_packet()
389 dev = pad->dev; in gc_nes_process_packet()
390 s = gc_status_bit[i]; in gc_nes_process_packet()
392 switch (pad->type) { in gc_nes_process_packet()
396 input_report_abs(dev, ABS_X, !(s & data[6]) - !(s & data[7])); in gc_nes_process_packet()
397 input_report_abs(dev, ABS_Y, !(s & data[4]) - !(s & data[5])); in gc_nes_process_packet()
407 input_report_abs(dev, ABS_X, !(s & data[6]) - !(s & data[7])); in gc_nes_process_packet()
408 input_report_abs(dev, ABS_Y, !(s & data[4]) - !(s & data[5])); in gc_nes_process_packet()
422 * my SNES gamepad sends 1's for bits 16-31, which in gc_nes_process_packet()
444 x_rel = -x_rel; in gc_nes_process_packet()
450 y_rel = -y_rel; in gc_nes_process_packet()
477 int i; in gc_multi_read_packet() local
479 for (i = 0; i < length; i++) { in gc_multi_read_packet()
480 parport_write_data(gc->pd->port, ~(1 << i)); in gc_multi_read_packet()
481 data[i] = parport_read_status(gc->pd->port) ^ 0x7f; in gc_multi_read_packet()
488 int data_len = gc->pad_count[GC_MULTI2] ? GC_MULTI2_LENGTH : GC_MULTI_LENGTH; in gc_multi_process_packet()
491 int i, s; in gc_multi_process_packet() local
495 for (i = 0; i < GC_MAX_DEVICES; i++) { in gc_multi_process_packet()
496 pad = &gc->pads[i]; in gc_multi_process_packet()
497 dev = pad->dev; in gc_multi_process_packet()
498 s = gc_status_bit[i]; in gc_multi_process_packet()
500 switch (pad->type) { in gc_multi_process_packet()
507 !(s & data[2]) - !(s & data[3])); in gc_multi_process_packet()
509 !(s & data[0]) - !(s & data[1])); in gc_multi_process_packet()
541 #define GC_PSX_POWER 0xf8 /* Pins 5-9 */
567 struct parport *port = gc->pd->port; in gc_psx_command()
568 int i, j, cmd, read; in gc_psx_command() local
572 for (i = 0; i < GC_PSX_LENGTH; i++, b >>= 1) { in gc_psx_command()
580 struct gc_pad *pad = &gc->pads[j]; in gc_psx_command()
582 if (pad->type == GC_PSX || pad->type == GC_DDR) in gc_psx_command()
583 data[j] |= (read & gc_status_bit[j]) ? (1 << i) : 0; in gc_psx_command()
586 parport_write_data(gc->pd->port, cmd | GC_PSX_CLOCK | GC_PSX_POWER); in gc_psx_command()
600 int i, j, max_len = 0; in gc_psx_read_packet() local
605 parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER); in gc_psx_read_packet()
608 parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_POWER); in gc_psx_read_packet()
618 for (i = 0; i < GC_MAX_DEVICES; i++) { in gc_psx_read_packet()
619 struct gc_pad *pad = &gc->pads[i]; in gc_psx_read_packet()
621 if ((pad->type == GC_PSX || pad->type == GC_DDR) && in gc_psx_read_packet()
622 GC_PSX_LEN(id[i]) > max_len && in gc_psx_read_packet()
623 GC_PSX_LEN(id[i]) <= GC_PSX_BYTES) { in gc_psx_read_packet()
624 max_len = GC_PSX_LEN(id[i]); in gc_psx_read_packet()
629 for (i = 0; i < max_len; i++) { in gc_psx_read_packet()
632 data[j][i] = data2[j]; in gc_psx_read_packet()
637 parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER); in gc_psx_read_packet()
640 for (i = 0; i < GC_MAX_DEVICES; i++) in gc_psx_read_packet()
641 id[i] = GC_PSX_ID(id[i]); in gc_psx_read_packet()
647 struct input_dev *dev = pad->dev; in gc_psx_report_one()
648 int i; in gc_psx_report_one() local
660 if (pad->type == GC_DDR) { in gc_psx_report_one()
661 for (i = 0; i < 4; i++) in gc_psx_report_one()
662 input_report_key(dev, gc_psx_ddr_btn[i], in gc_psx_report_one()
663 ~data[0] & (0x10 << i)); in gc_psx_report_one()
665 for (i = 0; i < 4; i++) in gc_psx_report_one()
666 input_report_abs(dev, gc_psx_abs[i + 2], in gc_psx_report_one()
667 data[i + 2]); in gc_psx_report_one()
675 for (i = 0; i < 8; i++) in gc_psx_report_one()
676 input_report_key(dev, gc_psx_btn[i], ~data[1] & (1 << i)); in gc_psx_report_one()
687 if (pad->type == GC_DDR) { in gc_psx_report_one()
688 for (i = 0; i < 4; i++) in gc_psx_report_one()
689 input_report_key(dev, gc_psx_ddr_btn[i], in gc_psx_report_one()
690 ~data[0] & (0x10 << i)); in gc_psx_report_one()
700 * for (i = 0; i < 4; i++) in gc_psx_report_one()
701 input_report_abs(dev, gc_psx_abs[i + 2], 128); in gc_psx_report_one()
705 * --vojtech in gc_psx_report_one()
709 for (i = 0; i < 8; i++) in gc_psx_report_one()
710 input_report_key(dev, gc_psx_btn[i], ~data[1] & (1 << i)); in gc_psx_report_one()
729 int i; in gc_psx_process_packet() local
733 for (i = 0; i < GC_MAX_DEVICES; i++) { in gc_psx_process_packet()
734 pad = &gc->pads[i]; in gc_psx_process_packet()
735 if (pad->type == GC_PSX || pad->type == GC_DDR) in gc_psx_process_packet()
736 gc_psx_report_one(pad, id[i], data[i]); in gc_psx_process_packet()
749 * N64 pads - must be read first, any read confuses them for 200 us in gc_timer()
752 if (gc->pad_count[GC_N64]) in gc_timer()
759 if (gc->pad_count[GC_NES] || in gc_timer()
760 gc->pad_count[GC_SNES] || in gc_timer()
761 gc->pad_count[GC_SNESMOUSE]) { in gc_timer()
769 if (gc->pad_count[GC_MULTI] || gc->pad_count[GC_MULTI2]) in gc_timer()
776 if (gc->pad_count[GC_PSX] || gc->pad_count[GC_DDR]) in gc_timer()
779 mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME); in gc_timer()
787 err = mutex_lock_interruptible(&gc->mutex); in gc_open()
791 if (!gc->used++) { in gc_open()
792 parport_claim(gc->pd); in gc_open()
793 parport_write_control(gc->pd->port, 0x04); in gc_open()
794 mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME); in gc_open()
797 mutex_unlock(&gc->mutex); in gc_open()
805 mutex_lock(&gc->mutex); in gc_close()
806 if (!--gc->used) { in gc_close()
807 del_timer_sync(&gc->timer); in gc_close()
808 parport_write_control(gc->pd->port, 0x00); in gc_close()
809 parport_release(gc->pd); in gc_close()
811 mutex_unlock(&gc->mutex); in gc_close()
816 struct gc_pad *pad = &gc->pads[idx]; in gc_setup_pad()
818 int i; in gc_setup_pad() local
823 return -EINVAL; in gc_setup_pad()
826 pad->dev = input_dev = input_allocate_device(); in gc_setup_pad()
829 return -ENOMEM; in gc_setup_pad()
832 pad->type = pad_type; in gc_setup_pad()
834 snprintf(pad->phys, sizeof(pad->phys), in gc_setup_pad()
835 "%s/input%d", gc->pd->port->name, idx); in gc_setup_pad()
837 input_dev->name = gc_names[pad_type]; in gc_setup_pad()
838 input_dev->phys = pad->phys; in gc_setup_pad()
839 input_dev->id.bustype = BUS_PARPORT; in gc_setup_pad()
840 input_dev->id.vendor = 0x0001; in gc_setup_pad()
841 input_dev->id.product = pad_type; in gc_setup_pad()
842 input_dev->id.version = 0x0100; in gc_setup_pad()
846 input_dev->open = gc_open; in gc_setup_pad()
847 input_dev->close = gc_close; in gc_setup_pad()
850 input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); in gc_setup_pad()
852 for (i = 0; i < 2; i++) in gc_setup_pad()
853 input_set_abs_params(input_dev, ABS_X + i, -1, 1, 0, 0); in gc_setup_pad()
855 input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); in gc_setup_pad()
857 gc->pad_count[pad_type]++; in gc_setup_pad()
862 for (i = 0; i < 10; i++) in gc_setup_pad()
863 __set_bit(gc_n64_btn[i], input_dev->keybit); in gc_setup_pad()
865 for (i = 0; i < 2; i++) { in gc_setup_pad()
866 input_set_abs_params(input_dev, ABS_X + i, -127, 126, 0, 2); in gc_setup_pad()
867 input_set_abs_params(input_dev, ABS_HAT0X + i, -1, 1, 0, 0); in gc_setup_pad()
879 __set_bit(BTN_LEFT, input_dev->keybit); in gc_setup_pad()
880 __set_bit(BTN_RIGHT, input_dev->keybit); in gc_setup_pad()
881 __set_bit(REL_X, input_dev->relbit); in gc_setup_pad()
882 __set_bit(REL_Y, input_dev->relbit); in gc_setup_pad()
886 for (i = 4; i < 8; i++) in gc_setup_pad()
887 __set_bit(gc_snes_btn[i], input_dev->keybit); in gc_setup_pad()
889 for (i = 0; i < 4; i++) in gc_setup_pad()
890 __set_bit(gc_snes_btn[i], input_dev->keybit); in gc_setup_pad()
894 __set_bit(BTN_THUMB, input_dev->keybit); in gc_setup_pad()
896 __set_bit(BTN_TRIGGER, input_dev->keybit); in gc_setup_pad()
900 for (i = 0; i < 6; i++) in gc_setup_pad()
902 gc_psx_abs[i], 4, 252, 0, 2); in gc_setup_pad()
903 for (i = 0; i < 12; i++) in gc_setup_pad()
904 __set_bit(gc_psx_btn[i], input_dev->keybit); in gc_setup_pad()
909 for (i = 0; i < 4; i++) in gc_setup_pad()
910 __set_bit(gc_psx_ddr_btn[i], input_dev->keybit); in gc_setup_pad()
911 for (i = 0; i < 12; i++) in gc_setup_pad()
912 __set_bit(gc_psx_btn[i], input_dev->keybit); in gc_setup_pad()
917 err = input_register_device(pad->dev); in gc_setup_pad()
924 input_free_device(pad->dev); in gc_setup_pad()
925 pad->dev = NULL; in gc_setup_pad()
934 int i; in gc_probe() local
941 err = -EINVAL; in gc_probe()
947 pr_err("parport busy already - lp.o loaded?\n"); in gc_probe()
948 err = -EBUSY; in gc_probe()
955 err = -ENOMEM; in gc_probe()
959 mutex_init(&gc->mutex); in gc_probe()
960 gc->pd = pd; in gc_probe()
961 setup_timer(&gc->timer, gc_timer, (long) gc); in gc_probe()
963 for (i = 0; i < n_pads && i < GC_MAX_DEVICES; i++) { in gc_probe()
964 if (!pads[i]) in gc_probe()
967 err = gc_setup_pad(gc, i, pads[i]); in gc_probe()
976 err = -EINVAL; in gc_probe()
984 while (--i >= 0) in gc_probe()
985 if (gc->pads[i].dev) in gc_probe()
986 input_unregister_device(gc->pads[i].dev); in gc_probe()
999 int i; in gc_remove() local
1001 for (i = 0; i < GC_MAX_DEVICES; i++) in gc_remove()
1002 if (gc->pads[i].dev) in gc_remove()
1003 input_unregister_device(gc->pads[i].dev); in gc_remove()
1004 parport_unregister_device(gc->pd); in gc_remove()
1010 int i; in gc_init() local
1014 for (i = 0; i < GC_MAX_PORTS; i++) { in gc_init()
1015 if (gc_cfg[i].nargs == 0 || gc_cfg[i].args[0] < 0) in gc_init()
1018 if (gc_cfg[i].nargs < 2) { in gc_init()
1020 err = -EINVAL; in gc_init()
1024 gc_base[i] = gc_probe(gc_cfg[i].args[0], in gc_init()
1025 gc_cfg[i].args + 1, gc_cfg[i].nargs - 1); in gc_init()
1026 if (IS_ERR(gc_base[i])) { in gc_init()
1027 err = PTR_ERR(gc_base[i]); in gc_init()
1035 while (--i >= 0) in gc_init()
1036 if (gc_base[i]) in gc_init()
1037 gc_remove(gc_base[i]); in gc_init()
1041 return have_dev ? 0 : -ENODEV; in gc_init()
1046 int i; in gc_exit() local
1048 for (i = 0; i < GC_MAX_PORTS; i++) in gc_exit()
1049 if (gc_base[i]) in gc_exit()
1050 gc_remove(gc_base[i]); in gc_exit()