ChangeSet 1.2051, 2005/03/09 12:17:18-08:00, [EMAIL PROTECTED]

[PATCH] USB: move usb core to use class_simple instead of it's own class 
functions.

This is needed if the class code is going to be made easier to use, and it 
makes the code
smaller and easier to understand.

Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>


 drivers/usb/core/file.c |   55 ++++++++++++++++--------------------------------
 1 files changed, 19 insertions(+), 36 deletions(-)


diff -Nru a/drivers/usb/core/file.c b/drivers/usb/core/file.c
--- a/drivers/usb/core/file.c   2005-03-09 16:28:31 -08:00
+++ b/drivers/usb/core/file.c   2005-03-09 16:28:31 -08:00
@@ -66,16 +66,7 @@
        .open =         usb_open,
 };
 
-static void release_usb_class_dev(struct class_device *class_dev)
-{
-       dbg("%s - %s", __FUNCTION__, class_dev->class_id);
-       kfree(class_dev);
-}
-
-static struct class usb_class = {
-       .name           = "usb",
-       .release        = &release_usb_class_dev,
-};
+static struct class_simple *usb_class;
 
 int usb_major_init(void)
 {
@@ -87,9 +78,9 @@
                goto out;
        }
 
-       error = class_register(&usb_class);
-       if (error) {
-               err("class_register failed for usb devices");
+       usb_class = class_simple_create(THIS_MODULE, "usb");
+       if (IS_ERR(usb_class)) {
+               err("class_simple_create failed for usb devices");
                unregister_chrdev(USB_MAJOR, "usb");
                goto out;
        }
@@ -102,7 +93,7 @@
 
 void usb_major_cleanup(void)
 {
-       class_unregister(&usb_class);
+       class_simple_destroy(usb_class);
        devfs_remove("usb");
        unregister_chrdev(USB_MAJOR, "usb");
 }
@@ -134,7 +125,6 @@
        int minor_base = class_driver->minor_base;
        int minor = 0;
        char name[BUS_ID_SIZE];
-       struct class_device *class_dev;
        char *temp;
 
 #ifdef CONFIG_USB_DYNAMIC_MINORS
@@ -174,22 +164,18 @@
        devfs_mk_cdev(MKDEV(USB_MAJOR, minor), class_driver->mode, name);
 
        /* create a usb class device for this usb interface */
-       class_dev = kmalloc(sizeof(*class_dev), GFP_KERNEL);
-       if (class_dev) {
-               memset(class_dev, 0x00, sizeof(struct class_device));
-               class_dev->devt = MKDEV(USB_MAJOR, minor);
-               class_dev->class = &usb_class;
-               class_dev->dev = &intf->dev;
-
-               temp = strrchr(name, '/');
-               if (temp && (temp[1] != 0x00))
-                       ++temp;
-               else
-                       temp = name;
-               snprintf(class_dev->class_id, BUS_ID_SIZE, "%s", temp);
-               class_set_devdata(class_dev, (void *)(long)intf->minor);
-               class_device_register(class_dev);
-               intf->class_dev = class_dev;
+       temp = strrchr(name, '/');
+       if (temp && (temp[1] != 0x00))
+               ++temp;
+       else
+               temp = name;
+       intf->class_dev = class_simple_device_add(usb_class, MKDEV(USB_MAJOR, 
minor), &intf->dev, "%s", temp);
+       if (IS_ERR(intf->class_dev)) {
+               spin_lock (&minor_lock);
+               usb_minors[intf->minor] = NULL;
+               spin_unlock (&minor_lock);
+               devfs_remove (name);
+               retval = PTR_ERR(intf->class_dev);
        }
 exit:
        return retval;
@@ -232,11 +218,8 @@
 
        snprintf(name, BUS_ID_SIZE, class_driver->name, intf->minor - 
minor_base);
        devfs_remove (name);
-
-       if (intf->class_dev) {
-               class_device_unregister(intf->class_dev);
-               intf->class_dev = NULL;
-       }
+       class_simple_device_remove(MKDEV(USB_MAJOR, intf->minor));
+       intf->class_dev = NULL;
        intf->minor = -1;
 }
 EXPORT_SYMBOL(usb_deregister_dev);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to