Driver core: change misc class_devices to be real devices
Greg Kroah-Hartman [Thu, 27 Jul 2006 23:16:04 +0000 (16:16 -0700)]
This also ment that some of the misc drivers had to also be fixed
up as they were assuming the device was a class_device.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

drivers/char/hw_random/core.c
drivers/char/misc.c
drivers/char/tpm/tpm.c
drivers/input/serio/serio_raw.c
include/linux/miscdevice.h

index 154a81d..ebace20 100644 (file)
@@ -162,7 +162,8 @@ static struct miscdevice rng_miscdev = {
 };
 
 
-static ssize_t hwrng_attr_current_store(struct class_device *class,
+static ssize_t hwrng_attr_current_store(struct device *dev,
+                                       struct device_attribute *attr,
                                        const char *buf, size_t len)
 {
        int err;
@@ -192,7 +193,8 @@ static ssize_t hwrng_attr_current_store(struct class_device *class,
        return err ? : len;
 }
 
-static ssize_t hwrng_attr_current_show(struct class_device *class,
+static ssize_t hwrng_attr_current_show(struct device *dev,
+                                      struct device_attribute *attr,
                                       char *buf)
 {
        int err;
@@ -210,7 +212,8 @@ static ssize_t hwrng_attr_current_show(struct class_device *class,
        return ret;
 }
 
-static ssize_t hwrng_attr_available_show(struct class_device *class,
+static ssize_t hwrng_attr_available_show(struct device *dev,
+                                        struct device_attribute *attr,
                                         char *buf)
 {
        int err;
@@ -234,20 +237,18 @@ static ssize_t hwrng_attr_available_show(struct class_device *class,
        return ret;
 }
 
-static CLASS_DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR,
-                        hwrng_attr_current_show,
-                        hwrng_attr_current_store);
-static CLASS_DEVICE_ATTR(rng_available, S_IRUGO,
-                        hwrng_attr_available_show,
-                        NULL);
+static DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR,
+                  hwrng_attr_current_show,
+                  hwrng_attr_current_store);
+static DEVICE_ATTR(rng_available, S_IRUGO,
+                  hwrng_attr_available_show,
+                  NULL);
 
 
 static void unregister_miscdev(void)
 {
-       class_device_remove_file(rng_miscdev.class,
-                                &class_device_attr_rng_available);
-       class_device_remove_file(rng_miscdev.class,
-                                &class_device_attr_rng_current);
+       device_remove_file(rng_miscdev.this_device, &dev_attr_rng_available);
+       device_remove_file(rng_miscdev.this_device, &dev_attr_rng_current);
        misc_deregister(&rng_miscdev);
 }
 
@@ -258,20 +259,19 @@ static int register_miscdev(void)
        err = misc_register(&rng_miscdev);
        if (err)
                goto out;
-       err = class_device_create_file(rng_miscdev.class,
-                                      &class_device_attr_rng_current);
+       err = device_create_file(rng_miscdev.this_device,
+                                &dev_attr_rng_current);
        if (err)
                goto err_misc_dereg;
-       err = class_device_create_file(rng_miscdev.class,
-                                      &class_device_attr_rng_available);
+       err = device_create_file(rng_miscdev.this_device,
+                                &dev_attr_rng_available);
        if (err)
                goto err_remove_current;
 out:
        return err;
 
 err_remove_current:
-       class_device_remove_file(rng_miscdev.class,
-                                &class_device_attr_rng_current);
+       device_remove_file(rng_miscdev.this_device, &dev_attr_rng_current);
 err_misc_dereg:
        misc_deregister(&rng_miscdev);
        goto out;
index 62ebe09..7a484fc 100644 (file)
@@ -169,11 +169,6 @@ fail:
        return err;
 }
 
-/* 
- * TODO for 2.7:
- *  - add a struct kref to struct miscdevice and make all usages of
- *    them dynamic.
- */
 static struct class *misc_class;
 
 static const struct file_operations misc_fops = {
@@ -228,10 +223,10 @@ int misc_register(struct miscdevice * misc)
                misc_minors[misc->minor >> 3] |= 1 << (misc->minor & 7);
        dev = MKDEV(MISC_MAJOR, misc->minor);
 
-       misc->class = class_device_create(misc_class, NULL, dev, misc->dev,
+       misc->this_device = device_create(misc_class, misc->parent, dev,
                                          "%s", misc->name);
-       if (IS_ERR(misc->class)) {
-               err = PTR_ERR(misc->class);
+       if (IS_ERR(misc->this_device)) {
+               err = PTR_ERR(misc->this_device);
                goto out;
        }
 
@@ -264,7 +259,7 @@ int misc_deregister(struct miscdevice * misc)
 
        down(&misc_sem);
        list_del(&misc->list);
-       class_device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor));
+       device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor));
        if (i < DYNAMIC_MINORS && i>0) {
                misc_minors[i>>3] &= ~(1 << (misc->minor & 7));
        }
index 6ad2d3b..6e1329d 100644 (file)
@@ -1130,7 +1130,7 @@ struct tpm_chip *tpm_register_hardware(struct device *dev, const struct tpm_vend
        scnprintf(devname, DEVNAME_SIZE, "%s%d", "tpm", chip->dev_num);
        chip->vendor.miscdev.name = devname;
 
-       chip->vendor.miscdev.dev = dev;
+       chip->vendor.miscdev.parent = dev;
        chip->dev = get_device(dev);
 
        if (misc_register(&chip->vendor.miscdev)) {
index ba2a203..7c8d039 100644 (file)
@@ -297,7 +297,7 @@ static int serio_raw_connect(struct serio *serio, struct serio_driver *drv)
 
        serio_raw->dev.minor = PSMOUSE_MINOR;
        serio_raw->dev.name = serio_raw->name;
-       serio_raw->dev.dev = &serio->dev;
+       serio_raw->dev.parent = &serio->dev;
        serio_raw->dev.fops = &serio_raw_fops;
 
        err = misc_register(&serio_raw->dev);
index b03cfb9..326da7d 100644 (file)
 #define        HPET_MINOR           228
 
 struct device;
-struct class_device;
 
 struct miscdevice  {
        int minor;
        const char *name;
        const struct file_operations *fops;
        struct list_head list;
-       struct device *dev;
-       struct class_device *class;
+       struct device *parent;
+       struct device *this_device;
 };
 
 extern int misc_register(struct miscdevice * misc);