| --- |
| drivers/hid/hid-core.c | 24 ++++++++++-------------- |
| 1 file changed, 10 insertions(+), 14 deletions(-) |
| |
| --- a/drivers/hid/hid-core.c |
| +++ b/drivers/hid/hid-core.c |
| @@ -2140,7 +2140,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); |
| @@ -2172,7 +2172,13 @@ static ssize_t store_new_id(struct devic |
| |
| 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) |
| { |
| @@ -2336,6 +2342,7 @@ static int hid_uevent(struct device *dev |
| 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, |
| @@ -2775,8 +2782,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; |
| @@ -2785,21 +2790,12 @@ int __hid_register_driver(struct hid_dri |
| 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); |
| } |