aboutsummaryrefslogtreecommitdiff
path: root/drivers/base/driver.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-04-30 17:05:21 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-30 17:05:21 -0700
commit6de3d58dcfbab516dbe9aff36ea9542f40cd1bf2 (patch)
treefc5b83ef3a34b40c71e397ee7b1e6c423628e786 /drivers/base/driver.c
parente0066c4ea9ffa420cb79814411ff74fdc7b7d98e (diff)
parentc3bb7fadaf52de3637b834002dac27f6250b4b49 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6: klist: fix coding style errors in klist.h and klist.c driver core: remove no longer used "struct class_device" pcmcia: remove pccard_sysfs_interface warnings devres: support addresses greater than an unsigned long via dev_ioremap kobject: do not copy vargs, just pass them around sysfs: sysfs_update_group stub for CONFIG_SYSFS=n DEBUGFS: Correct location of debugfs API documentation. driver core: warn about duplicate driver names on the same bus klist: implement klist_add_{after|before}() klist: implement KLIST_INIT() and DEFINE_KLIST() sysfs: Disallow truncation of files in sysfs
Diffstat (limited to 'drivers/base/driver.c')
-rw-r--r--drivers/base/driver.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/base/driver.c b/drivers/base/driver.c
index 9a6537f1440..2ef5acf4368 100644
--- a/drivers/base/driver.c
+++ b/drivers/base/driver.c
@@ -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;