Lines Matching refs:drv

181 static ssize_t unbind_store(struct device_driver *drv, const char *buf,  in unbind_store()  argument
184 struct bus_type *bus = bus_get(drv->bus); in unbind_store()
189 if (dev && dev->driver == drv) { in unbind_store()
208 static ssize_t bind_store(struct device_driver *drv, const char *buf, in bind_store() argument
211 struct bus_type *bus = bus_get(drv->bus); in bind_store()
216 if (dev && dev->driver == NULL && driver_match_device(drv, dev)) { in bind_store()
220 err = driver_probe_device(drv, dev); in bind_store()
455 struct device_driver *drv; in bus_for_each_drv() local
463 while ((drv = next_driver(&i)) && !error) in bus_for_each_drv()
464 error = fn(drv, data); in bus_for_each_drv()
605 static int __must_check add_bind_files(struct device_driver *drv) in add_bind_files() argument
609 ret = driver_create_file(drv, &driver_attr_unbind); in add_bind_files()
611 ret = driver_create_file(drv, &driver_attr_bind); in add_bind_files()
613 driver_remove_file(drv, &driver_attr_unbind); in add_bind_files()
618 static void remove_bind_files(struct device_driver *drv) in remove_bind_files() argument
620 driver_remove_file(drv, &driver_attr_bind); in remove_bind_files()
621 driver_remove_file(drv, &driver_attr_unbind); in remove_bind_files()
649 static ssize_t uevent_store(struct device_driver *drv, const char *buf, in uevent_store() argument
655 kobject_uevent(&drv->p->kobj, action); in uevent_store()
662 struct device_driver *drv = _drv; in driver_attach_async() local
665 ret = driver_attach(drv); in driver_attach_async()
668 drv->bus->name, drv->name, ret); in driver_attach_async()
675 int bus_add_driver(struct device_driver *drv) in bus_add_driver() argument
681 bus = bus_get(drv->bus); in bus_add_driver()
685 pr_debug("bus: '%s': add driver %s\n", bus->name, drv->name); in bus_add_driver()
693 priv->driver = drv; in bus_add_driver()
694 drv->p = priv; in bus_add_driver()
697 "%s", drv->name); in bus_add_driver()
702 if (drv->bus->p->drivers_autoprobe) { in bus_add_driver()
703 if (driver_allows_async_probing(drv)) { in bus_add_driver()
705 drv->bus->name, drv->name); in bus_add_driver()
706 async_schedule(driver_attach_async, drv); in bus_add_driver()
708 error = driver_attach(drv); in bus_add_driver()
713 module_add_driver(drv->owner, drv); in bus_add_driver()
715 error = driver_create_file(drv, &driver_attr_uevent); in bus_add_driver()
718 __func__, drv->name); in bus_add_driver()
720 error = driver_add_groups(drv, bus->drv_groups); in bus_add_driver()
724 __func__, drv->name); in bus_add_driver()
727 if (!drv->suppress_bind_attrs) { in bus_add_driver()
728 error = add_bind_files(drv); in bus_add_driver()
732 __func__, drv->name); in bus_add_driver()
740 kfree(drv->p); in bus_add_driver()
741 drv->p = NULL; in bus_add_driver()
755 void bus_remove_driver(struct device_driver *drv) in bus_remove_driver() argument
757 if (!drv->bus) in bus_remove_driver()
760 if (!drv->suppress_bind_attrs) in bus_remove_driver()
761 remove_bind_files(drv); in bus_remove_driver()
762 driver_remove_groups(drv, drv->bus->drv_groups); in bus_remove_driver()
763 driver_remove_file(drv, &driver_attr_uevent); in bus_remove_driver()
764 klist_remove(&drv->p->knode_bus); in bus_remove_driver()
765 pr_debug("bus: '%s': remove driver %s\n", drv->bus->name, drv->name); in bus_remove_driver()
766 driver_detach(drv); in bus_remove_driver()
767 module_remove_driver(drv); in bus_remove_driver()
768 kobject_put(&drv->p->kobj); in bus_remove_driver()
769 bus_put(drv->bus); in bus_remove_driver()