Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
[muen/linux.git] / drivers / hid / hid-core.c
index 539d1dd888deda938f59dc76a26e8e2ad988e323..6fd01a692197af4e70c9e1bb4bfd0bd8ffb4f348 100644 (file)
@@ -2402,7 +2402,7 @@ struct hid_dynid {
  * Adds a new dynamic hid device ID to this driver,
  * and causes the driver to probe for all devices again.
  */
-static ssize_t store_new_id(struct device_driver *drv, const char *buf,
+static ssize_t new_id_store(struct device_driver *drv, const char *buf,
                size_t count)
 {
        struct hid_driver *hdrv = to_hid_driver(drv);
@@ -2434,7 +2434,13 @@ static ssize_t store_new_id(struct device_driver *drv, const char *buf,
 
        return ret ? : count;
 }
-static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id);
+static DRIVER_ATTR_WO(new_id);
+
+static struct attribute *hid_drv_attrs[] = {
+       &driver_attr_new_id.attr,
+       NULL,
+};
+ATTRIBUTE_GROUPS(hid_drv);
 
 static void hid_free_dynids(struct hid_driver *hdrv)
 {
@@ -2598,6 +2604,7 @@ static int hid_uevent(struct device *dev, struct kobj_uevent_env *env)
 static struct bus_type hid_bus_type = {
        .name           = "hid",
        .dev_groups     = hid_dev_groups,
+       .drv_groups     = hid_drv_groups,
        .match          = hid_bus_match,
        .probe          = hid_device_probe,
        .remove         = hid_device_remove,
@@ -3038,8 +3045,6 @@ EXPORT_SYMBOL_GPL(hid_destroy_device);
 int __hid_register_driver(struct hid_driver *hdrv, struct module *owner,
                const char *mod_name)
 {
-       int ret;
-
        hdrv->driver.name = hdrv->name;
        hdrv->driver.bus = &hid_bus_type;
        hdrv->driver.owner = owner;
@@ -3048,21 +3053,12 @@ int __hid_register_driver(struct hid_driver *hdrv, struct module *owner,
        INIT_LIST_HEAD(&hdrv->dyn_list);
        spin_lock_init(&hdrv->dyn_lock);
 
-       ret = driver_register(&hdrv->driver);
-       if (ret)
-               return ret;
-
-       ret = driver_create_file(&hdrv->driver, &driver_attr_new_id);
-       if (ret)
-               driver_unregister(&hdrv->driver);
-
-       return ret;
+       return driver_register(&hdrv->driver);
 }
 EXPORT_SYMBOL_GPL(__hid_register_driver);
 
 void hid_unregister_driver(struct hid_driver *hdrv)
 {
-       driver_remove_file(&hdrv->driver, &driver_attr_new_id);
        driver_unregister(&hdrv->driver);
        hid_free_dynids(hdrv);
 }