static DEFINE_MUTEX(wwan_register_lock); /* WWAN device create|remove lock */
 static DEFINE_IDA(minors); /* minors for WWAN port chardevs */
 static DEFINE_IDA(wwan_dev_ids); /* for unique WWAN device IDs */
-static struct class *wwan_class;
+static const struct class wwan_class = {
+       .name = "wwan",
+};
 static int wwan_major;
 static struct dentry *wwan_debugfs_dir;
 
 {
        struct device *dev;
 
-       dev = class_find_device(wwan_class, NULL, parent, wwan_dev_parent_match);
+       dev = class_find_device(&wwan_class, NULL, parent, wwan_dev_parent_match);
        if (!dev)
                return ERR_PTR(-ENODEV);
 
 {
        struct device *dev;
 
-       dev = class_find_device(wwan_class, NULL, name, wwan_dev_name_match);
+       dev = class_find_device(&wwan_class, NULL, name, wwan_dev_name_match);
        if (!dev)
                return ERR_PTR(-ENODEV);
 
 {
        struct device *dev;
 
-       dev = class_find_device(wwan_class, NULL, dir, wwan_dev_debugfs_match);
+       dev = class_find_device(&wwan_class, NULL, dir, wwan_dev_debugfs_match);
        if (!dev)
                return ERR_PTR(-ENODEV);
 
        }
 
        wwandev->dev.parent = parent;
-       wwandev->dev.class = wwan_class;
+       wwandev->dev.class = &wwan_class;
        wwandev->dev.type = &wwan_dev_type;
        wwandev->id = id;
        dev_set_name(&wwandev->dev, "wwan%d", wwandev->id);
 
 static int is_wwan_child(struct device *dev, void *data)
 {
-       return dev->class == wwan_class;
+       return dev->class == &wwan_class;
 }
 
 static void wwan_remove_dev(struct wwan_device *wwandev)
 {
        struct device *dev;
 
-       dev = class_find_device(wwan_class, NULL, &minor, wwan_port_minor_match);
+       dev = class_find_device(&wwan_class, NULL, &minor, wwan_port_minor_match);
        if (!dev)
                return ERR_PTR(-ENODEV);
 
                return -ENOMEM;
 
        /* Collect ids of same name format ports */
-       class_dev_iter_init(&iter, wwan_class, NULL, &wwan_port_dev_type);
+       class_dev_iter_init(&iter, &wwan_class, NULL, &wwan_port_dev_type);
        while ((dev = class_dev_iter_next(&iter))) {
                if (dev->parent != &wwandev->dev)
                        continue;
        mutex_init(&port->data_lock);
 
        port->dev.parent = &wwandev->dev;
-       port->dev.class = wwan_class;
+       port->dev.class = &wwan_class;
        port->dev.type = &wwan_port_dev_type;
        port->dev.devt = MKDEV(wwan_major, minor);
        dev_set_drvdata(&port->dev, drvdata);
        if (err)
                return err;
 
-       wwan_class = class_create("wwan");
-       if (IS_ERR(wwan_class)) {
-               err = PTR_ERR(wwan_class);
+       err = class_register(&wwan_class);
+       if (err)
                goto unregister;
-       }
 
        /* chrdev used for wwan ports */
        wwan_major = __register_chrdev(0, 0, WWAN_MAX_MINORS, "wwan_port",
        return 0;
 
 destroy:
-       class_destroy(wwan_class);
+       class_unregister(&wwan_class);
 unregister:
        rtnl_link_unregister(&wwan_rtnl_link_ops);
        return err;
        debugfs_remove_recursive(wwan_debugfs_dir);
        __unregister_chrdev(wwan_major, 0, WWAN_MAX_MINORS, "wwan_port");
        rtnl_link_unregister(&wwan_rtnl_link_ops);
-       class_destroy(wwan_class);
+       class_unregister(&wwan_class);
 }
 
 module_init(wwan_init);