|
@@ -217,12 +217,22 @@ static void driver_remove_groups(struct device_driver *drv,
|
|
|
int driver_register(struct device_driver *drv)
|
|
|
{
|
|
|
int ret;
|
|
|
+ struct device_driver *other;
|
|
|
|
|
|
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 -EEXIST;
|
|
|
+ }
|
|
|
+
|
|
|
ret = bus_add_driver(drv);
|
|
|
if (ret)
|
|
|
return ret;
|