]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/s390/cio/ccwgroup.c
[S390] bus_id -> dev_name conversions
[linux-2.6-omap-h63xx.git] / drivers / s390 / cio / ccwgroup.c
index 26a930e832bdab58c7f649c866124200e1f3f8c8..e17b462ace03e7ca30ceb8201f9d85c594c69850 100644 (file)
@@ -112,8 +112,11 @@ ccwgroup_release (struct device *dev)
        gdev = to_ccwgroupdev(dev);
 
        for (i = 0; i < gdev->count; i++) {
-               dev_set_drvdata(&gdev->cdev[i]->dev, NULL);
-               put_device(&gdev->cdev[i]->dev);
+               if (gdev->cdev[i]) {
+                       if (dev_get_drvdata(&gdev->cdev[i]->dev) == gdev)
+                               dev_set_drvdata(&gdev->cdev[i]->dev, NULL);
+                       put_device(&gdev->cdev[i]->dev);
+               }
        }
        kfree(gdev);
 }
@@ -221,6 +224,13 @@ int ccwgroup_create_from_string(struct device *root, unsigned int creator_id,
        atomic_set(&gdev->onoff, 0);
        mutex_init(&gdev->reg_mutex);
        mutex_lock(&gdev->reg_mutex);
+       gdev->creator_id = creator_id;
+       gdev->count = num_devices;
+       gdev->dev.bus = &ccwgroup_bus_type;
+       gdev->dev.parent = root;
+       gdev->dev.release = ccwgroup_release;
+       device_initialize(&gdev->dev);
+
        curr_buf = buf;
        for (i = 0; i < num_devices && curr_buf; i++) {
                rc = __get_next_bus_id(&curr_buf, tmp_bus_id);
@@ -258,16 +268,11 @@ int ccwgroup_create_from_string(struct device *root, unsigned int creator_id,
                rc = -EINVAL;
                goto error;
        }
-       gdev->creator_id = creator_id;
-       gdev->count = num_devices;
-       gdev->dev.bus = &ccwgroup_bus_type;
-       gdev->dev.parent = root;
-       gdev->dev.release = ccwgroup_release;
 
        snprintf (gdev->dev.bus_id, BUS_ID_SIZE, "%s",
-                       gdev->cdev[0]->dev.bus_id);
+                       dev_name(&gdev->cdev[0]->dev));
 
-       rc = device_register(&gdev->dev);
+       rc = device_add(&gdev->dev);
        if (rc)
                goto error;
        get_device(&gdev->dev);
@@ -292,6 +297,7 @@ error:
                        if (dev_get_drvdata(&gdev->cdev[i]->dev) == gdev)
                                dev_set_drvdata(&gdev->cdev[i]->dev, NULL);
                        put_device(&gdev->cdev[i]->dev);
+                       gdev->cdev[i] = NULL;
                }
        mutex_unlock(&gdev->reg_mutex);
        put_device(&gdev->dev);