]> err.no Git - linux-2.6/blobdiff - drivers/base/bus.c
Driver core: change sysdev classes to use dynamic kobject names
[linux-2.6] / drivers / base / bus.c
index 937fc100b64a87d5549c3e5afcd90a3c9dae6cca..a377b65ba328066091d2171e12ed81b60b61f13f 100644 (file)
@@ -643,15 +643,12 @@ int bus_add_driver(struct device_driver *drv)
        if (!priv)
                return -ENOMEM;
 
-       error = kobject_set_name(&priv->kobj, "%s", drv->name);
-       if (error)
-               goto out_put_bus;
-       priv->kobj.kset = bus->p->drivers_kset;
-       priv->kobj.ktype = &driver_ktype;
        klist_init(&priv->klist_devices, NULL, NULL);
        priv->driver = drv;
        drv->p = priv;
-       error = kobject_register(&priv->kobj);
+       priv->kobj.kset = bus->p->drivers_kset;
+       error = kobject_init_and_add(&priv->kobj, &driver_ktype, NULL,
+                                    "%s", drv->name);
        if (error)
                goto out_put_bus;
 
@@ -681,9 +678,10 @@ int bus_add_driver(struct device_driver *drv)
                        __FUNCTION__, drv->name);
        }
 
+       kobject_uevent(&priv->kobj, KOBJ_ADD);
        return error;
 out_unregister:
-       kobject_unregister(&priv->kobj);
+       kobject_put(&priv->kobj);
 out_put_bus:
        bus_put(bus);
        return error;
@@ -710,7 +708,7 @@ void bus_remove_driver(struct device_driver * drv)
        pr_debug("bus: '%s': remove driver %s\n", drv->bus->name, drv->name);
        driver_detach(drv);
        module_remove_driver(drv);
-       kobject_unregister(&drv->p->kobj);
+       kobject_put(&drv->p->kobj);
        bus_put(drv->bus);
 }