Lines Matching refs:gameport

3  * Generic gameport layer
17 #include <linux/gameport.h>
26 MODULE_DESCRIPTION("Generic gameport layer");
34 * gameport_mutex protects entire gameport subsystem and is taken
35 * every time gameport port or driver registrered or unregistered.
43 static void gameport_add_port(struct gameport *gameport);
45 static void gameport_reconnect_port(struct gameport *gameport);
46 static void gameport_disconnect_port(struct gameport *gameport);
74 * gameport_measure_speed() measures the gameport i/o speed.
77 static int gameport_measure_speed(struct gameport *gameport)
83 if (gameport_open(gameport, NULL, GAMEPORT_MODE_RAW))
92 gameport_read(gameport);
102 gameport_close(gameport);
109 static int old_gameport_measure_speed(struct gameport *gameport)
116 if (gameport_open(gameport, NULL, GAMEPORT_MODE_RAW))
124 for (t = 0; t < 50; t++) gameport_read(gameport);
132 gameport_close(gameport);
140 if (gameport_open(gameport, NULL, GAMEPORT_MODE_RAW))
148 for (t = 0; t < 50; t++) gameport_read(gameport);
155 gameport_close(gameport);
163 if (gameport_open(gameport, NULL, GAMEPORT_MODE_RAW))
167 j = jiffies; while (j == jiffies) { t++; gameport_read(gameport); }
169 gameport_close(gameport);
175 void gameport_start_polling(struct gameport *gameport)
177 spin_lock(&gameport->timer_lock);
179 if (!gameport->poll_cnt++) {
180 BUG_ON(!gameport->poll_handler);
181 BUG_ON(!gameport->poll_interval);
182 mod_timer(&gameport->poll_timer, jiffies + msecs_to_jiffies(gameport->poll_interval));
185 spin_unlock(&gameport->timer_lock);
189 void gameport_stop_polling(struct gameport *gameport)
191 spin_lock(&gameport->timer_lock);
193 if (!--gameport->poll_cnt)
194 del_timer(&gameport->poll_timer);
196 spin_unlock(&gameport->timer_lock);
202 struct gameport *gameport = from_timer(gameport, t, poll_timer);
204 gameport->poll_handler(gameport);
205 if (gameport->poll_cnt)
206 mod_timer(&gameport->poll_timer, jiffies + msecs_to_jiffies(gameport->poll_interval));
210 * Basic gameport -> driver core mappings
213 static int gameport_bind_driver(struct gameport *gameport, struct gameport_driver *drv)
217 gameport->dev.driver = &drv->driver;
218 if (drv->connect(gameport, drv)) {
219 gameport->dev.driver = NULL;
223 error = device_bind_driver(&gameport->dev);
225 dev_warn(&gameport->dev,
227 gameport->phys, gameport->name,
229 drv->disconnect(gameport);
230 gameport->dev.driver = NULL;
237 static void gameport_find_driver(struct gameport *gameport)
241 error = device_attach(&gameport->dev);
243 dev_warn(&gameport->dev,
245 gameport->phys, gameport->name, error);
361 * Scan event list for the other events for the same gameport port,
404 * be it a gameport port or a driver.
424 * Destroy child gameport port (if any) that has not been fully registered yet.
431 static struct gameport *gameport_get_pending_child(struct gameport *parent)
434 struct gameport *gameport, *child = NULL;
441 gameport = event->object;
442 if (gameport->parent == parent) {
443 child = gameport;
459 struct gameport *gameport = to_gameport_port(dev);
461 return sprintf(buf, "%s\n", gameport->name);
467 struct gameport *gameport = to_gameport_port(dev);
476 gameport_disconnect_port(gameport);
478 gameport_reconnect_port(gameport);
480 gameport_disconnect_port(gameport);
481 gameport_find_driver(gameport);
483 gameport_disconnect_port(gameport);
484 error = gameport_bind_driver(gameport, to_gameport_driver(drv));
504 struct gameport *gameport = to_gameport_port(dev);
506 kfree(gameport);
510 void gameport_set_phys(struct gameport *gameport, const char *fmt, ...)
515 vsnprintf(gameport->phys, sizeof(gameport->phys), fmt, args);
520 static void gameport_default_trigger(struct gameport *gameport)
523 outb(0xff, gameport->io);
527 static unsigned char gameport_default_read(struct gameport *gameport)
530 return inb(gameport->io);
536 static void gameport_setup_default_handlers(struct gameport *gameport)
538 if ((!gameport->trigger || !gameport->read) &&
540 dev_err(&gameport->dev,
542 gameport->phys, gameport->name);
544 if (!gameport->trigger)
545 gameport->trigger = gameport_default_trigger;
546 if (!gameport->read)
547 gameport->read = gameport_default_read;
551 * Prepare gameport port for registration.
553 static void gameport_init_port(struct gameport *gameport)
559 mutex_init(&gameport->drv_mutex);
560 device_initialize(&gameport->dev);
561 dev_set_name(&gameport->dev, "gameport%lu",
563 gameport->dev.bus = &gameport_bus;
564 gameport->dev.release = gameport_release_port;
565 if (gameport->parent)
566 gameport->dev.parent = &gameport->parent->dev;
568 gameport_setup_default_handlers(gameport);
569 INIT_LIST_HEAD(&gameport->node);
570 spin_lock_init(&gameport->timer_lock);
571 timer_setup(&gameport->poll_timer, gameport_run_poll_handler, 0);
575 * Complete gameport port registration.
578 static void gameport_add_port(struct gameport *gameport)
582 if (gameport->parent)
583 gameport->parent->child = gameport;
585 gameport->speed = use_ktime ?
586 gameport_measure_speed(gameport) :
587 old_gameport_measure_speed(gameport);
589 list_add_tail(&gameport->node, &gameport_list);
591 if (gameport->io)
592 dev_info(&gameport->dev, "%s is %s, io %#x, speed %dkHz\n",
593 gameport->name, gameport->phys, gameport->io, gameport->speed);
595 dev_info(&gameport->dev, "%s is %s, speed %dkHz\n",
596 gameport->name, gameport->phys, gameport->speed);
598 error = device_add(&gameport->dev);
600 dev_err(&gameport->dev,
602 gameport->phys, gameport->name, error);
609 static void gameport_destroy_port(struct gameport *gameport)
611 struct gameport *child;
613 child = gameport_get_pending_child(gameport);
619 if (gameport->parent) {
620 gameport->parent->child = NULL;
621 gameport->parent = NULL;
624 if (device_is_registered(&gameport->dev))
625 device_del(&gameport->dev);
627 list_del_init(&gameport->node);
629 gameport_remove_pending_events(gameport);
630 put_device(&gameport->dev);
634 * Reconnect gameport port and all its children (re-initialize attached devices)
636 static void gameport_reconnect_port(struct gameport *gameport)
639 if (!gameport->drv || !gameport->drv->reconnect || gameport->drv->reconnect(gameport)) {
640 gameport_disconnect_port(gameport);
641 gameport_find_driver(gameport);
645 gameport = gameport->child;
646 } while (gameport);
653 static void gameport_disconnect_port(struct gameport *gameport)
655 struct gameport *s, *parent;
657 if (gameport->child) {
663 for (s = gameport; s->child; s = s->child)
671 } while ((s = parent) != gameport);
677 device_release_driver(&gameport->dev);
684 void __gameport_register_port(struct gameport *gameport, struct module *owner)
686 gameport_init_port(gameport);
687 gameport_queue_event(gameport, owner, GAMEPORT_REGISTER_PORT);
692 * Synchronously unregisters gameport port.
694 void gameport_unregister_port(struct gameport *gameport)
697 gameport_disconnect_port(gameport);
698 gameport_destroy_port(gameport);
723 struct gameport *gameport = to_gameport_port(dev);
726 drv->connect(gameport, drv);
727 return gameport->drv ? 0 : -ENODEV;
732 struct gameport *gameport = to_gameport_port(dev);
735 drv->disconnect(gameport);
786 struct gameport *gameport;
794 list_for_each_entry(gameport, &gameport_list, node) {
795 if (gameport->drv == drv) {
796 gameport_disconnect_port(gameport);
797 gameport_find_driver(gameport);
817 .name = "gameport",
825 static void gameport_set_drv(struct gameport *gameport, struct gameport_driver *drv)
827 mutex_lock(&gameport->drv_mutex);
828 gameport->drv = drv;
829 mutex_unlock(&gameport->drv_mutex);
832 int gameport_open(struct gameport *gameport, struct gameport_driver *drv, int mode)
834 if (gameport->open) {
835 if (gameport->open(gameport, mode)) {
843 gameport_set_drv(gameport, drv);
848 void gameport_close(struct gameport *gameport)
850 del_timer_sync(&gameport->poll_timer);
851 gameport->poll_handler = NULL;
852 gameport->poll_interval = 0;
853 gameport_set_drv(gameport, NULL);
854 if (gameport->close)
855 gameport->close(gameport);
865 pr_err("failed to register gameport bus, error: %d\n", error);