summaryrefslogtreecommitdiff
path: root/drivers/base
diff options
context:
space:
mode:
authorPatrick Mochel <mochel@osdl.org>2002-10-16 02:35:40 -0700
committerPatrick Mochel <mochel@osdl.org>2002-10-16 02:35:40 -0700
commit5f330849a1cd4ca64c94c12ecc941f97697c6ded (patch)
treef7be9f86da14f6556276f9f4fd855f9529964757 /drivers/base
parent0447d4d59e85bb0c177fcc858a4fef8671a6cf04 (diff)
driver model: make sure device has driver when we add it to the class.
There is a chance devclass_add_device() could get passed a device with no driver, so we need to check that.
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/class.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/base/class.c b/drivers/base/class.c
index 3c7024cc3efb..21860a1380f7 100644
--- a/drivers/base/class.c
+++ b/drivers/base/class.c
@@ -53,16 +53,20 @@ static void unenum_device(struct device_class * cls, struct device * dev)
int devclass_add_device(struct device * dev)
{
- struct device_class * cls = dev->driver->devclass;
+ struct device_class * cls;
int error = 0;
- if (cls) {
- pr_debug("adding device '%s' to class '%s'\n",
- dev->name,cls->name);
- if (cls->add_device)
- error = cls->add_device(dev);
- if (!error) {
- enum_device(cls,dev);
- interface_add(cls,dev);
+
+ if (dev->driver) {
+ cls = dev->driver->devclass;
+ if (cls) {
+ pr_debug("adding device '%s' to class '%s'\n",
+ dev->name,cls->name);
+ if (cls->add_device)
+ error = cls->add_device(dev);
+ if (!error) {
+ enum_device(cls,dev);
+ interface_add(cls,dev);
+ }
}
}
return error;