- klist_init(&drv->klist_devices, klist_devices_get, klist_devices_put);
- init_completion(&drv->unloaded);
- return bus_add_driver(drv);
-}
+ int ret;
+ struct device_driver *other;
+
+ BUG_ON(!drv->bus->p);
+
+ if ((drv->bus->probe && drv->probe) ||
+ (drv->bus->remove && drv->remove) ||
+ (drv->bus->shutdown && drv->shutdown))
+ printk(KERN_WARNING "Driver '%s' needs updating - please use "
+ "bus_type methods\n", drv->name);
+
+ other = driver_find(drv->name, drv->bus);
+ if (other) {
+ put_driver(other);
+ printk(KERN_ERR "Error: Driver '%s' is already registered, "
+ "aborting...\n", drv->name);
+ return -EBUSY;
+ }