• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/input/serio/

Lines Matching defs:serio

33 #include <linux/serio.h>
47 * serio_mutex protects entire serio subsystem and is taken every time
48 * serio port or driver registrered or unregistered.
56 static void serio_add_port(struct serio *serio);
57 static int serio_reconnect_port(struct serio *serio);
58 static void serio_disconnect_port(struct serio *serio);
59 static void serio_reconnect_chain(struct serio *serio);
62 static int serio_connect_driver(struct serio *serio, struct serio_driver *drv)
66 mutex_lock(&serio->drv_mutex);
67 retval = drv->connect(serio, drv);
68 mutex_unlock(&serio->drv_mutex);
73 static int serio_reconnect_driver(struct serio *serio)
77 mutex_lock(&serio->drv_mutex);
78 if (serio->drv && serio->drv->reconnect)
79 retval = serio->drv->reconnect(serio);
80 mutex_unlock(&serio->drv_mutex);
85 static void serio_disconnect_driver(struct serio *serio)
87 mutex_lock(&serio->drv_mutex);
88 if (serio->drv)
89 serio->drv->disconnect(serio);
90 mutex_unlock(&serio->drv_mutex);
93 static int serio_match_port(const struct serio_device_id *ids, struct serio *serio)
96 if ((ids->type == SERIO_ANY || ids->type == serio->id.type) &&
97 (ids->proto == SERIO_ANY || ids->proto == serio->id.proto) &&
98 (ids->extra == SERIO_ANY || ids->extra == serio->id.extra) &&
99 (ids->id == SERIO_ANY || ids->id == serio->id.id))
107 * Basic serio -> driver core mappings
110 static int serio_bind_driver(struct serio *serio, struct serio_driver *drv)
114 if (serio_match_port(drv->id_table, serio)) {
116 serio->dev.driver = &drv->driver;
117 if (serio_connect_driver(serio, drv)) {
118 serio->dev.driver = NULL;
122 error = device_bind_driver(&serio->dev);
124 dev_warn(&serio->dev,
126 serio->phys, serio->name,
128 serio_disconnect_driver(serio);
129 serio->dev.driver = NULL;
136 static void serio_find_driver(struct serio *serio)
140 error = device_attach(&serio->dev);
142 dev_warn(&serio->dev,
144 serio->phys, serio->name, error);
182 * Scan event list for the other events for the same serio port,
313 * object, be it serio port or driver.
333 * Destroy child serio port (if any) that has not been fully registered yet.
340 static struct serio *serio_get_pending_child(struct serio *parent)
343 struct serio *serio, *child = NULL;
350 serio = event->object;
351 if (serio->parent == parent) {
352 child = serio;
380 struct serio *serio = to_serio_port(dev);
381 return sprintf(buf, "%s\n", serio->name);
386 struct serio *serio = to_serio_port(dev);
388 return sprintf(buf, "serio:ty%02Xpr%02Xid%02Xex%02X\n",
389 serio->id.type, serio->id.proto, serio->id.id, serio->id.extra);
394 struct serio *serio = to_serio_port(dev);
395 return sprintf(buf, "%02x\n", serio->id.type);
400 struct serio *serio = to_serio_port(dev);
401 return sprintf(buf, "%02x\n", serio->id.proto);
406 struct serio *serio = to_serio_port(dev);
407 return sprintf(buf, "%02x\n", serio->id.id);
412 struct serio *serio = to_serio_port(dev);
413 return sprintf(buf, "%02x\n", serio->id.extra);
441 struct serio *serio = to_serio_port(dev);
450 serio_disconnect_port(serio);
452 serio_reconnect_chain(serio);
454 serio_disconnect_port(serio);
455 serio_find_driver(serio);
457 serio_disconnect_port(serio);
458 error = serio_bind_driver(serio, to_serio_driver(drv));
471 struct serio *serio = to_serio_port(dev);
472 return sprintf(buf, "%s\n", serio->manual_bind ? "manual" : "auto");
477 struct serio *serio = to_serio_port(dev);
482 serio->manual_bind = true;
484 serio->manual_bind = false;
503 struct serio *serio = to_serio_port(dev);
505 kfree(serio);
510 * Prepare serio port for registration.
512 static void serio_init_port(struct serio *serio)
518 INIT_LIST_HEAD(&serio->node);
519 spin_lock_init(&serio->lock);
520 mutex_init(&serio->drv_mutex);
521 device_initialize(&serio->dev);
522 dev_set_name(&serio->dev, "serio%ld",
524 serio->dev.bus = &serio_bus;
525 serio->dev.release = serio_release_port;
526 serio->dev.groups = serio_device_attr_groups;
527 if (serio->parent) {
528 serio->dev.parent = &serio->parent->dev;
529 serio->depth = serio->parent->depth + 1;
531 serio->depth = 0;
532 lockdep_set_subclass(&serio->lock, serio->depth);
536 * Complete serio port registration.
539 static void serio_add_port(struct serio *serio)
543 if (serio->parent) {
544 serio_pause_rx(serio->parent);
545 serio->parent->child = serio;
546 serio_continue_rx(serio->parent);
549 list_add_tail(&serio->node, &serio_list);
551 if (serio->start)
552 serio->start(serio);
554 error = device_add(&serio->dev);
556 dev_err(&serio->dev,
558 serio->phys, serio->name, error);
565 static void serio_destroy_port(struct serio *serio)
567 struct serio *child;
569 child = serio_get_pending_child(serio);
575 if (serio->stop)
576 serio->stop(serio);
578 if (serio->parent) {
579 serio_pause_rx(serio->parent);
580 serio->parent->child = NULL;
581 serio_continue_rx(serio->parent);
582 serio->parent = NULL;
585 if (device_is_registered(&serio->dev))
586 device_del(&serio->dev);
588 list_del_init(&serio->node);
589 serio_remove_pending_events(serio);
590 put_device(&serio->dev);
594 * Reconnect serio port (re-initialize attached device).
599 static int serio_reconnect_port(struct serio *serio)
601 int error = serio_reconnect_driver(serio);
604 serio_disconnect_port(serio);
605 serio_find_driver(serio);
612 * Reconnect serio port and all its children (re-initialize attached devices)
614 static void serio_reconnect_chain(struct serio *serio)
617 if (serio_reconnect_port(serio)) {
621 serio = serio->child;
622 } while (serio);
629 static void serio_disconnect_port(struct serio *serio)
631 struct serio *s, *parent;
633 if (serio->child) {
639 for (s = serio; s->child; s = s->child)
647 } while ((s = parent) != serio);
653 device_release_driver(&serio->dev);
656 void serio_rescan(struct serio *serio)
658 serio_queue_event(serio, NULL, SERIO_RESCAN_PORT);
662 void serio_reconnect(struct serio *serio)
664 serio_queue_event(serio, NULL, SERIO_RECONNECT_CHAIN);
672 void __serio_register_port(struct serio *serio, struct module *owner)
674 serio_init_port(serio);
675 serio_queue_event(serio, owner, SERIO_REGISTER_PORT);
680 * Synchronously unregisters serio port.
682 void serio_unregister_port(struct serio *serio)
685 serio_disconnect_port(serio);
686 serio_destroy_port(serio);
694 void serio_unregister_child_port(struct serio *serio)
697 if (serio->child) {
698 serio_disconnect_port(serio->child);
699 serio_destroy_port(serio->child);
749 struct serio *serio = to_serio_port(dev);
752 return serio_connect_driver(serio, drv);
757 struct serio *serio = to_serio_port(dev);
759 serio_disconnect_driver(serio);
763 static void serio_cleanup(struct serio *serio)
765 mutex_lock(&serio->drv_mutex);
766 if (serio->drv && serio->drv->cleanup)
767 serio->drv->cleanup(serio);
768 mutex_unlock(&serio->drv_mutex);
773 struct serio *serio = to_serio_port(dev);
775 serio_cleanup(serio);
829 struct serio *serio;
837 list_for_each_entry(serio, &serio_list, node) {
838 if (serio->drv == drv) {
839 serio_disconnect_port(serio);
840 serio_find_driver(serio);
851 static void serio_set_drv(struct serio *serio, struct serio_driver *drv)
853 serio_pause_rx(serio);
854 serio->drv = drv;
855 serio_continue_rx(serio);
860 struct serio *serio = to_serio_port(dev);
863 if (serio->manual_bind || serio_drv->manual_bind)
866 return serio_match_port(serio_drv->id_table, serio);
880 struct serio *serio;
885 serio = to_serio_port(dev);
887 SERIO_ADD_UEVENT_VAR("SERIO_TYPE=%02x", serio->id.type);
888 SERIO_ADD_UEVENT_VAR("SERIO_PROTO=%02x", serio->id.proto);
889 SERIO_ADD_UEVENT_VAR("SERIO_ID=%02x", serio->id.id);
890 SERIO_ADD_UEVENT_VAR("SERIO_EXTRA=%02x", serio->id.extra);
891 SERIO_ADD_UEVENT_VAR("MODALIAS=serio:ty%02Xpr%02Xid%02Xex%02X",
892 serio->id.type, serio->id.proto, serio->id.id, serio->id.extra);
910 struct serio *serio = to_serio_port(dev);
912 serio_cleanup(serio);
919 struct serio *serio = to_serio_port(dev);
925 serio_queue_event(serio, NULL, SERIO_RECONNECT_PORT);
939 int serio_open(struct serio *serio, struct serio_driver *drv)
941 serio_set_drv(serio, drv);
943 if (serio->open && serio->open(serio)) {
944 serio_set_drv(serio, NULL);
952 void serio_close(struct serio *serio)
954 if (serio->close)
955 serio->close(serio);
957 serio_set_drv(serio, NULL);
961 irqreturn_t serio_interrupt(struct serio *serio,
967 spin_lock_irqsave(&serio->lock, flags);
969 if (likely(serio->drv)) {
970 ret = serio->drv->interrupt(serio, data, dfl);
971 } else if (!dfl && device_is_registered(&serio->dev)) {
972 serio_rescan(serio);
976 spin_unlock_irqrestore(&serio->lock, flags);
983 .name = "serio",
1002 pr_err("Failed to register serio bus, error: %d\n", error);