Lines Matching refs:drv
38 static void serio_attach_driver(struct serio_driver *drv);
40 static int serio_connect_driver(struct serio *serio, struct serio_driver *drv) in serio_connect_driver() argument
44 return drv->connect(serio, drv); in serio_connect_driver()
51 if (serio->drv && serio->drv->reconnect) in serio_reconnect_driver()
52 return serio->drv->reconnect(serio); in serio_reconnect_driver()
61 if (serio->drv) in serio_disconnect_driver()
62 serio->drv->disconnect(serio); in serio_disconnect_driver()
82 static int serio_bind_driver(struct serio *serio, struct serio_driver *drv) in serio_bind_driver() argument
86 if (serio_match_port(drv->id_table, serio)) { in serio_bind_driver()
88 serio->dev.driver = &drv->driver; in serio_bind_driver()
89 if (serio_connect_driver(serio, drv)) { in serio_bind_driver()
99 drv->description, error); in serio_bind_driver()
357 struct device_driver *drv; in drvctl_store() local
369 } else if ((drv = driver_find(buf, &serio_bus)) != NULL) { in drvctl_store()
371 error = serio_bind_driver(serio, to_serio_driver(drv)); in drvctl_store()
705 static ssize_t description_show(struct device_driver *drv, char *buf) in description_show() argument
707 struct serio_driver *driver = to_serio_driver(drv); in description_show()
712 static ssize_t bind_mode_show(struct device_driver *drv, char *buf) in bind_mode_show() argument
714 struct serio_driver *serio_drv = to_serio_driver(drv); in bind_mode_show()
718 static ssize_t bind_mode_store(struct device_driver *drv, const char *buf, size_t count) in bind_mode_store() argument
720 struct serio_driver *serio_drv = to_serio_driver(drv); in bind_mode_store()
746 struct serio_driver *drv = to_serio_driver(dev->driver); in serio_driver_probe() local
748 return serio_connect_driver(serio, drv); in serio_driver_probe()
762 if (serio->drv && serio->drv->cleanup) in serio_cleanup()
763 serio->drv->cleanup(serio); in serio_cleanup()
773 static void serio_attach_driver(struct serio_driver *drv) in serio_attach_driver() argument
777 error = driver_attach(&drv->driver); in serio_attach_driver()
780 drv->driver.name, error); in serio_attach_driver()
783 int __serio_register_driver(struct serio_driver *drv, struct module *owner, const char *mod_name) in __serio_register_driver() argument
785 bool manual_bind = drv->manual_bind; in __serio_register_driver()
788 drv->driver.bus = &serio_bus; in __serio_register_driver()
789 drv->driver.owner = owner; in __serio_register_driver()
790 drv->driver.mod_name = mod_name; in __serio_register_driver()
796 drv->manual_bind = true; in __serio_register_driver()
798 error = driver_register(&drv->driver); in __serio_register_driver()
801 drv->driver.name, error); in __serio_register_driver()
810 drv->manual_bind = false; in __serio_register_driver()
811 error = serio_queue_event(drv, NULL, SERIO_ATTACH_DRIVER); in __serio_register_driver()
813 driver_unregister(&drv->driver); in __serio_register_driver()
822 void serio_unregister_driver(struct serio_driver *drv) in serio_unregister_driver() argument
828 drv->manual_bind = true; /* so serio_find_driver ignores it */ in serio_unregister_driver()
829 serio_remove_pending_events(drv); in serio_unregister_driver()
833 if (serio->drv == drv) { in serio_unregister_driver()
841 driver_unregister(&drv->driver); in serio_unregister_driver()
845 static void serio_set_drv(struct serio *serio, struct serio_driver *drv) in serio_set_drv() argument
849 serio->drv = drv; in serio_set_drv()
852 static int serio_bus_match(struct device *dev, const struct device_driver *drv) in serio_bus_match() argument
855 const struct serio_driver *serio_drv = to_serio_driver(drv); in serio_bus_match()
911 if (serio->drv && serio->drv->fast_reconnect) { in serio_resume()
912 error = serio->drv->fast_reconnect(serio); in serio_resume()
939 int serio_open(struct serio *serio, struct serio_driver *drv) in serio_open() argument
941 serio_set_drv(serio, drv); in serio_open()
966 if (likely(serio->drv)) in serio_interrupt()
967 return serio->drv->interrupt(serio, data, dfl); in serio_interrupt()