firmware loader: rely on driver core to create class attribute
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Sun, 14 Mar 2010 07:49:13 +0000 (23:49 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 21 May 2010 16:37:30 +0000 (09:37 -0700)
Do not create 'timeout' attribute manually, let driver core do it for us.
This also ensures that attribute is cleaned up properly.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/base/firmware_class.c

index d45d1e1..d351e77 100644 (file)
@@ -101,9 +101,26 @@ firmware_timeout_store(struct class *class,
        return count;
 }
 
-static CLASS_ATTR(timeout, 0644, firmware_timeout_show, firmware_timeout_store);
+static struct class_attribute firmware_class_attrs[] = {
+       __ATTR(timeout, S_IWUSR | S_IRUGO,
+               firmware_timeout_show, firmware_timeout_store),
+       __ATTR_NULL
+};
 
-static void fw_dev_release(struct device *dev);
+static void fw_dev_release(struct device *dev)
+{
+       struct firmware_priv *fw_priv = dev_get_drvdata(dev);
+       int i;
+
+       for (i = 0; i < fw_priv->nr_pages; i++)
+               __free_page(fw_priv->pages[i]);
+       kfree(fw_priv->pages);
+       kfree(fw_priv->fw_id);
+       kfree(fw_priv);
+       kfree(dev);
+
+       module_put(THIS_MODULE);
+}
 
 static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
 {
@@ -121,6 +138,7 @@ static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
 
 static struct class firmware_class = {
        .name           = "firmware",
+       .class_attrs    = firmware_class_attrs,
        .dev_uevent     = firmware_uevent,
        .dev_release    = fw_dev_release,
 };
@@ -370,21 +388,6 @@ static struct bin_attribute firmware_attr_data_tmpl = {
        .write = firmware_data_write,
 };
 
-static void fw_dev_release(struct device *dev)
-{
-       struct firmware_priv *fw_priv = dev_get_drvdata(dev);
-       int i;
-
-       for (i = 0; i < fw_priv->nr_pages; i++)
-               __free_page(fw_priv->pages[i]);
-       kfree(fw_priv->pages);
-       kfree(fw_priv->fw_id);
-       kfree(fw_priv);
-       kfree(dev);
-
-       module_put(THIS_MODULE);
-}
-
 static void
 firmware_class_timeout(u_long data)
 {
@@ -689,26 +692,12 @@ request_firmware_nowait(
        return 0;
 }
 
-static int __init
-firmware_class_init(void)
+static int __init firmware_class_init(void)
 {
-       int error;
-       error = class_register(&firmware_class);
-       if (error) {
-               printk(KERN_ERR "%s: class_register failed\n", __func__);
-               return error;
-       }
-       error = class_create_file(&firmware_class, &class_attr_timeout);
-       if (error) {
-               printk(KERN_ERR "%s: class_create_file failed\n",
-                      __func__);
-               class_unregister(&firmware_class);
-       }
-       return error;
-
+       return class_register(&firmware_class);
 }
-static void __exit
-firmware_class_exit(void)
+
+static void __exit firmware_class_exit(void)
 {
        class_unregister(&firmware_class);
 }