Commit 9ddbb23b authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

[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: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent dc01d003
...@@ -66,16 +66,7 @@ static struct file_operations usb_fops = { ...@@ -66,16 +66,7 @@ static struct file_operations usb_fops = {
.open = usb_open, .open = usb_open,
}; };
static void release_usb_class_dev(struct class_device *class_dev) static struct class_simple *usb_class;
{
dbg("%s - %s", __FUNCTION__, class_dev->class_id);
kfree(class_dev);
}
static struct class usb_class = {
.name = "usb",
.release = &release_usb_class_dev,
};
int usb_major_init(void) int usb_major_init(void)
{ {
...@@ -87,9 +78,9 @@ int usb_major_init(void) ...@@ -87,9 +78,9 @@ int usb_major_init(void)
goto out; goto out;
} }
error = class_register(&usb_class); usb_class = class_simple_create(THIS_MODULE, "usb");
if (error) { if (IS_ERR(usb_class)) {
err("class_register failed for usb devices"); err("class_simple_create failed for usb devices");
unregister_chrdev(USB_MAJOR, "usb"); unregister_chrdev(USB_MAJOR, "usb");
goto out; goto out;
} }
...@@ -102,7 +93,7 @@ int usb_major_init(void) ...@@ -102,7 +93,7 @@ int usb_major_init(void)
void usb_major_cleanup(void) void usb_major_cleanup(void)
{ {
class_unregister(&usb_class); class_simple_destroy(usb_class);
devfs_remove("usb"); devfs_remove("usb");
unregister_chrdev(USB_MAJOR, "usb"); unregister_chrdev(USB_MAJOR, "usb");
} }
...@@ -134,7 +125,6 @@ int usb_register_dev(struct usb_interface *intf, ...@@ -134,7 +125,6 @@ int usb_register_dev(struct usb_interface *intf,
int minor_base = class_driver->minor_base; int minor_base = class_driver->minor_base;
int minor = 0; int minor = 0;
char name[BUS_ID_SIZE]; char name[BUS_ID_SIZE];
struct class_device *class_dev;
char *temp; char *temp;
#ifdef CONFIG_USB_DYNAMIC_MINORS #ifdef CONFIG_USB_DYNAMIC_MINORS
...@@ -174,22 +164,18 @@ int usb_register_dev(struct usb_interface *intf, ...@@ -174,22 +164,18 @@ int usb_register_dev(struct usb_interface *intf,
devfs_mk_cdev(MKDEV(USB_MAJOR, minor), class_driver->mode, name); devfs_mk_cdev(MKDEV(USB_MAJOR, minor), class_driver->mode, name);
/* create a usb class device for this usb interface */ /* create a usb class device for this usb interface */
class_dev = kmalloc(sizeof(*class_dev), GFP_KERNEL); temp = strrchr(name, '/');
if (class_dev) { if (temp && (temp[1] != 0x00))
memset(class_dev, 0x00, sizeof(struct class_device)); ++temp;
class_dev->devt = MKDEV(USB_MAJOR, minor); else
class_dev->class = &usb_class; temp = name;
class_dev->dev = &intf->dev; intf->class_dev = class_simple_device_add(usb_class, MKDEV(USB_MAJOR, minor), &intf->dev, "%s", temp);
if (IS_ERR(intf->class_dev)) {
temp = strrchr(name, '/'); spin_lock (&minor_lock);
if (temp && (temp[1] != 0x00)) usb_minors[intf->minor] = NULL;
++temp; spin_unlock (&minor_lock);
else devfs_remove (name);
temp = name; retval = PTR_ERR(intf->class_dev);
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;
} }
exit: exit:
return retval; return retval;
...@@ -232,11 +218,8 @@ void usb_deregister_dev(struct usb_interface *intf, ...@@ -232,11 +218,8 @@ void usb_deregister_dev(struct usb_interface *intf,
snprintf(name, BUS_ID_SIZE, class_driver->name, intf->minor - minor_base); snprintf(name, BUS_ID_SIZE, class_driver->name, intf->minor - minor_base);
devfs_remove (name); devfs_remove (name);
class_simple_device_remove(MKDEV(USB_MAJOR, intf->minor));
if (intf->class_dev) { intf->class_dev = NULL;
class_device_unregister(intf->class_dev);
intf->class_dev = NULL;
}
intf->minor = -1; intf->minor = -1;
} }
EXPORT_SYMBOL(usb_deregister_dev); EXPORT_SYMBOL(usb_deregister_dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment