Commit 673fae90d5ee4ae2b6403f9d45af7ff640f06a60

Authored by Dmitry Torokhov
Committed by Greg Kroah-Hartman
1 parent e9045f9178

firmware loader: rely on driver core to create class attribute

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>

Showing 1 changed file with 24 additions and 35 deletions Side-by-side Diff

drivers/base/firmware_class.c
... ... @@ -101,10 +101,27 @@
101 101 return count;
102 102 }
103 103  
104   -static CLASS_ATTR(timeout, 0644, firmware_timeout_show, firmware_timeout_store);
  104 +static struct class_attribute firmware_class_attrs[] = {
  105 + __ATTR(timeout, S_IWUSR | S_IRUGO,
  106 + firmware_timeout_show, firmware_timeout_store),
  107 + __ATTR_NULL
  108 +};
105 109  
106   -static void fw_dev_release(struct device *dev);
  110 +static void fw_dev_release(struct device *dev)
  111 +{
  112 + struct firmware_priv *fw_priv = dev_get_drvdata(dev);
  113 + int i;
107 114  
  115 + for (i = 0; i < fw_priv->nr_pages; i++)
  116 + __free_page(fw_priv->pages[i]);
  117 + kfree(fw_priv->pages);
  118 + kfree(fw_priv->fw_id);
  119 + kfree(fw_priv);
  120 + kfree(dev);
  121 +
  122 + module_put(THIS_MODULE);
  123 +}
  124 +
108 125 static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
109 126 {
110 127 struct firmware_priv *fw_priv = dev_get_drvdata(dev);
... ... @@ -121,6 +138,7 @@
121 138  
122 139 static struct class firmware_class = {
123 140 .name = "firmware",
  141 + .class_attrs = firmware_class_attrs,
124 142 .dev_uevent = firmware_uevent,
125 143 .dev_release = fw_dev_release,
126 144 };
... ... @@ -370,21 +388,6 @@
370 388 .write = firmware_data_write,
371 389 };
372 390  
373   -static void fw_dev_release(struct device *dev)
374   -{
375   - struct firmware_priv *fw_priv = dev_get_drvdata(dev);
376   - int i;
377   -
378   - for (i = 0; i < fw_priv->nr_pages; i++)
379   - __free_page(fw_priv->pages[i]);
380   - kfree(fw_priv->pages);
381   - kfree(fw_priv->fw_id);
382   - kfree(fw_priv);
383   - kfree(dev);
384   -
385   - module_put(THIS_MODULE);
386   -}
387   -
388 391 static void
389 392 firmware_class_timeout(u_long data)
390 393 {
391 394  
392 395  
... ... @@ -689,26 +692,12 @@
689 692 return 0;
690 693 }
691 694  
692   -static int __init
693   -firmware_class_init(void)
  695 +static int __init firmware_class_init(void)
694 696 {
695   - int error;
696   - error = class_register(&firmware_class);
697   - if (error) {
698   - printk(KERN_ERR "%s: class_register failed\n", __func__);
699   - return error;
700   - }
701   - error = class_create_file(&firmware_class, &class_attr_timeout);
702   - if (error) {
703   - printk(KERN_ERR "%s: class_create_file failed\n",
704   - __func__);
705   - class_unregister(&firmware_class);
706   - }
707   - return error;
708   -
  697 + return class_register(&firmware_class);
709 698 }
710   -static void __exit
711   -firmware_class_exit(void)
  699 +
  700 +static void __exit firmware_class_exit(void)
712 701 {
713 702 class_unregister(&firmware_class);
714 703 }