aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/input.c')
-rw-r--r--drivers/input/input.c29
1 files changed, 8 insertions, 21 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c
index 9b3bfceff72c..4486402fbf5d 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -754,6 +754,13 @@ static struct attribute_group input_dev_caps_attr_group = {
754 .attrs = input_dev_caps_attrs, 754 .attrs = input_dev_caps_attrs,
755}; 755};
756 756
757static struct attribute_group *input_dev_attr_groups[] = {
758 &input_dev_attr_group,
759 &input_dev_id_attr_group,
760 &input_dev_caps_attr_group,
761 NULL
762};
763
757static void input_dev_release(struct class_device *class_dev) 764static void input_dev_release(struct class_device *class_dev)
758{ 765{
759 struct input_dev *dev = to_input_dev(class_dev); 766 struct input_dev *dev = to_input_dev(class_dev);
@@ -907,6 +914,7 @@ struct input_dev *input_allocate_device(void)
907 dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL); 914 dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL);
908 if (dev) { 915 if (dev) {
909 dev->cdev.class = &input_class; 916 dev->cdev.class = &input_class;
917 dev->cdev.groups = input_dev_attr_groups;
910 class_device_initialize(&dev->cdev); 918 class_device_initialize(&dev->cdev);
911 mutex_init(&dev->mutex); 919 mutex_init(&dev->mutex);
912 INIT_LIST_HEAD(&dev->h_list); 920 INIT_LIST_HEAD(&dev->h_list);
@@ -979,18 +987,6 @@ int input_register_device(struct input_dev *dev)
979 if (error) 987 if (error)
980 return error; 988 return error;
981 989
982 error = sysfs_create_group(&dev->cdev.kobj, &input_dev_attr_group);
983 if (error)
984 goto fail1;
985
986 error = sysfs_create_group(&dev->cdev.kobj, &input_dev_id_attr_group);
987 if (error)
988 goto fail2;
989
990 error = sysfs_create_group(&dev->cdev.kobj, &input_dev_caps_attr_group);
991 if (error)
992 goto fail3;
993
994 path = kobject_get_path(&dev->cdev.kobj, GFP_KERNEL); 990 path = kobject_get_path(&dev->cdev.kobj, GFP_KERNEL);
995 printk(KERN_INFO "input: %s as %s\n", 991 printk(KERN_INFO "input: %s as %s\n",
996 dev->name ? dev->name : "Unspecified device", path ? path : "N/A"); 992 dev->name ? dev->name : "Unspecified device", path ? path : "N/A");
@@ -1008,11 +1004,6 @@ int input_register_device(struct input_dev *dev)
1008 input_wakeup_procfs_readers(); 1004 input_wakeup_procfs_readers();
1009 1005
1010 return 0; 1006 return 0;
1011
1012 fail3: sysfs_remove_group(&dev->cdev.kobj, &input_dev_id_attr_group);
1013 fail2: sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group);
1014 fail1: class_device_del(&dev->cdev);
1015 return error;
1016} 1007}
1017EXPORT_SYMBOL(input_register_device); 1008EXPORT_SYMBOL(input_register_device);
1018 1009
@@ -1037,10 +1028,6 @@ void input_unregister_device(struct input_dev *dev)
1037 1028
1038 list_del_init(&dev->node); 1029 list_del_init(&dev->node);
1039 1030
1040 sysfs_remove_group(&dev->cdev.kobj, &input_dev_caps_attr_group);
1041 sysfs_remove_group(&dev->cdev.kobj, &input_dev_id_attr_group);
1042 sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group);
1043
1044 class_device_unregister(&dev->cdev); 1031 class_device_unregister(&dev->cdev);
1045 1032
1046 input_wakeup_procfs_readers(); 1033 input_wakeup_procfs_readers();