misc: c2port: core: make c2port_class a static const structure Now that the driver core allows for struct class to be in read-only memory, move the c2port_class structure to be declared at build time placing it into read-only memory, instead of having to be dynamically allocated at boot time. Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
diff --git a/drivers/misc/c2port/core.c b/drivers/misc/c2port/core.c index 54742e8..d26e122 100644 --- a/drivers/misc/c2port/core.c +++ b/drivers/misc/c2port/core.c
@@ -27,12 +27,6 @@ static DEFINE_SPINLOCK(c2port_idr_lock); static DEFINE_IDR(c2port_idr); /* - * Local variables - */ - -static struct class *c2port_class; - -/* * C2 registers & commands defines */ @@ -897,6 +891,11 @@ static const struct attribute_group *c2port_groups[] = { NULL, }; +static const struct class c2port_class = { + .name = "c2port", + .dev_groups = c2port_groups, +}; + /* * Exported functions */ @@ -927,7 +926,7 @@ struct c2port_device *c2port_device_register(char *name, c2dev->id = ret; c2dev->ops = ops; - c2dev->dev = device_create(c2port_class, NULL, 0, c2dev, + c2dev->dev = device_create(&c2port_class, NULL, 0, c2dev, "c2port%d", c2dev->id); if (IS_ERR(c2dev->dev)) { ret = PTR_ERR(c2dev->dev); @@ -973,7 +972,7 @@ void c2port_device_unregister(struct c2port_device *c2dev) idr_remove(&c2port_idr, c2dev->id); spin_unlock_irq(&c2port_idr_lock); - device_destroy(c2port_class, c2dev->id); + device_destroy(&c2port_class, c2dev->id); kfree(c2dev); } @@ -985,22 +984,23 @@ EXPORT_SYMBOL(c2port_device_unregister); static int __init c2port_init(void) { + int err; + printk(KERN_INFO "Silicon Labs C2 port support v. " DRIVER_VERSION " - (C) 2007 Rodolfo Giometti\n"); - c2port_class = class_create("c2port"); - if (IS_ERR(c2port_class)) { + err = class_register(&c2port_class); + if (err) { printk(KERN_ERR "c2port: failed to allocate class\n"); - return PTR_ERR(c2port_class); + return err; } - c2port_class->dev_groups = c2port_groups; return 0; } static void __exit c2port_exit(void) { - class_destroy(c2port_class); + class_unregister(&c2port_class); } module_init(c2port_init);