Lines Matching refs:port
250 static int analog_cooked_read(struct analog_port *port) in analog_cooked_read() argument
252 struct gameport *gameport = port->gameport; in analog_cooked_read()
259 loopout = (ANALOG_LOOP_TIME * port->loop) / 1000; in analog_cooked_read()
260 timeout = ANALOG_MAX_TIME * port->speed; in analog_cooked_read()
268 this = port->mask; in analog_cooked_read()
276 this = gameport_read(gameport) & port->mask; in analog_cooked_read()
294 port->axes[j] = (delta(start, time[i]) << ANALOG_FUZZ_BITS) / port->loop; in analog_cooked_read()
297 return -(this != port->mask); in analog_cooked_read()
300 static int analog_button_read(struct analog_port *port, char saitek, char chf) in analog_button_read() argument
304 int strobe = gameport_time(port->gameport, ANALOG_SAITEK_TIME); in analog_button_read()
306 u = gameport_read(port->gameport); in analog_button_read()
309 port->buttons = (~u >> 4) & 0xf; in analog_button_read()
313 port->buttons = 0; in analog_button_read()
316 port->buttons |= 1 << analog_chf[(~u >> 4) & 0xf]; in analog_button_read()
320 gameport_trigger(port->gameport); in analog_button_read()
321 while (((u = gameport_read(port->gameport)) & port->mask) && t) t--; in analog_button_read()
334 struct analog_port *port = gameport_get_drvdata(gameport); in analog_poll() local
337 char saitek = !!(port->analog[0].mask & ANALOG_SAITEK); in analog_poll()
338 char chf = !!(port->analog[0].mask & ANALOG_ANY_CHF); in analog_poll()
340 if (port->cooked) { in analog_poll()
341 port->bads -= gameport_cooked_read(port->gameport, port->axes, &port->buttons); in analog_poll()
343 port->buttons = port->buttons ? (1 << analog_chf[port->buttons]) : 0; in analog_poll()
344 port->reads++; in analog_poll()
346 if (!port->axtime--) { in analog_poll()
347 port->bads -= analog_cooked_read(port); in analog_poll()
348 port->bads -= analog_button_read(port, saitek, chf); in analog_poll()
349 port->reads++; in analog_poll()
350 port->axtime = ANALOG_AXIS_TIME - 1; in analog_poll()
353 analog_button_read(port, saitek, chf); in analog_poll()
358 if (port->analog[i].mask) in analog_poll()
359 analog_decode(port->analog + i, port->axes, port->initial, port->buttons); in analog_poll()
368 struct analog_port *port = input_get_drvdata(dev); in analog_open() local
370 gameport_start_polling(port->gameport); in analog_open()
380 struct analog_port *port = input_get_drvdata(dev); in analog_close() local
382 gameport_stop_polling(port->gameport); in analog_close()
390 static void analog_calibrate_timer(struct analog_port *port) in analog_calibrate_timer() argument
392 struct gameport *gameport = port->gameport; in analog_calibrate_timer()
398 port->speed = 1000000; in analog_calibrate_timer()
410 port->speed = delta(t1, t2) - delta(t2, t3); in analog_calibrate_timer()
429 port->loop = tx / 50; in analog_calibrate_timer()
461 static int analog_init_device(struct analog_port *port, struct analog *analog, int index) in analog_init_device() argument
469 "%s/input%d", port->gameport->phys, index); in analog_init_device()
482 input_dev->dev.parent = &port->gameport->dev; in analog_init_device()
484 input_set_drvdata(input_dev, port); in analog_init_device()
495 x = port->axes[i]; in analog_init_device()
496 y = (port->axes[0] + port->axes[1]) >> 1; in analog_init_device()
497 z = y - port->axes[i]; in analog_init_device()
506 if (i == 2) x = port->axes[i]; in analog_init_device()
511 input_set_abs_params(input_dev, t, v, (x << 1) - v, port->fuzz, w); in analog_init_device()
538 analog_decode(analog, port->axes, port->initial, port->buttons); in analog_init_device()
553 static int analog_init_masks(struct analog_port *port) in analog_init_masks() argument
556 struct analog *analog = port->analog; in analog_init_masks()
559 if (!port->mask) in analog_init_masks()
562 if ((port->mask & 3) != 3 && port->mask != 0xc) { in analog_init_masks()
565 port->mask, port->gameport->phys); in analog_init_masks()
575 | port->mask | ((port->mask << 8) & ANALOG_HAT_FCS) in analog_init_masks()
576 | ((port->mask << 10) & ANALOG_BTNS_TLR) | ((port->mask << 12) & ANALOG_BTNS_TLR2); in analog_init_masks()
593 : (((ANALOG_BTNS_STD | port->mask) & ~analog[0].mask) | ANALOG_GAMEPAD); in analog_init_masks()
595 if (port->cooked) { in analog_init_masks()
597 for (i = 0; i < 4; i++) max[i] = port->axes[i] << 1; in analog_init_masks()
605 gameport_calibrate(port->gameport, port->axes, max); in analog_init_masks()
609 port->initial[i] = port->axes[i]; in analog_init_masks()
614 … analog_init_port(struct gameport *gameport, struct gameport_driver *drv, struct analog_port *port) in analog_init_port() argument
618 port->gameport = gameport; in analog_init_port()
620 gameport_set_drvdata(gameport, port); in analog_init_port()
624 analog_calibrate_timer(port); in analog_init_port()
629 port->mask = (gameport_read(gameport) ^ t) & t & 0xf; in analog_init_port()
630 port->fuzz = (port->speed * ANALOG_FUZZ_MAGIC) / port->loop / 1000 + ANALOG_FUZZ_BITS; in analog_init_port()
633 if (!analog_cooked_read(port)) in analog_init_port()
643 while ((gameport_read(port->gameport) & port->mask) && (u < t)) in analog_init_port()
648 while ((gameport_read(port->gameport) & port->mask) && (v < t)) in analog_init_port()
663 if (!gameport_cooked_read(gameport, port->axes, &port->buttons)) in analog_init_port()
666 if (port->axes[i] != -1) in analog_init_port()
667 port->mask |= 1 << i; in analog_init_port()
669 port->fuzz = gameport->fuzz; in analog_init_port()
670 port->cooked = 1; in analog_init_port()
679 struct analog_port *port; in analog_connect() local
683 if (!(port = kzalloc(sizeof(struct analog_port), GFP_KERNEL))) in analog_connect()
686 err = analog_init_port(gameport, drv, port); in analog_connect()
690 err = analog_init_masks(port); in analog_connect()
698 if (port->analog[i].mask) { in analog_connect()
699 err = analog_init_device(port, port->analog + i, i); in analog_connect()
707 if (port->analog[i].mask) in analog_connect()
708 input_unregister_device(port->analog[i].dev); in analog_connect()
711 kfree(port); in analog_connect()
717 struct analog_port *port = gameport_get_drvdata(gameport); in analog_disconnect() local
721 if (port->analog[i].mask) in analog_disconnect()
722 input_unregister_device(port->analog[i].dev); in analog_disconnect()
726 port->bads, port->reads, port->reads ? (port->bads * 100 / port->reads) : 0, in analog_disconnect()
727 port->gameport->phys); in analog_disconnect()
728 kfree(port); in analog_disconnect()