Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/dtor/input
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Sat, 5 May 2007 01:13:17 +0000 (18:13 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Sat, 5 May 2007 01:16:12 +0000 (18:16 -0700)
* 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/dtor/input: (65 commits)
  Input: gpio_keys - add support for switches (EV_SW)
  Input: cobalt_btns - convert to use polldev library
  Input: add skeleton for simple polled devices
  Input: update some documentation
  Input: wistron - fix typo in keymap for Acer TM610
  Input: add input_set_capability() helper
  Input: i8042 - add Fujitsu touchscreen/touchpad PNP IDs
  Input: i8042 - add Panasonic CF-29 to nomux list
  Input: lifebook - split into 2 devices
  Input: lifebook - add signature of Panasonic CF-29
  Input: lifebook - activate 6-byte protocol on select models
  Input: lifebook - work properly on Panasonic CF-18
  Input: cobalt buttons - separate device and driver registration
  Input: ati_remote - make button repeat sensitivity configurable
  Input: pxa27x - do not use deprecated SA_INTERRUPT flag
  Input: ucb1400 - make delays configurable
  Input: misc devices - switch to using input_dev->dev.parent
  Input: joysticks - switch to using input_dev->dev.parent
  Input: touchscreens - switch to using input_dev->dev.parent
  Input: mice - switch to using input_dev->dev.parent
  ...

Fixed up conflicts with core device model removal of "struct subsystem" manually.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1  2 
drivers/input/evdev.c
drivers/input/joydev.c
drivers/input/keyboard/Kconfig
drivers/input/keyboard/Makefile
drivers/input/keyboard/hilkbd.c
drivers/input/mouse/Kconfig
drivers/input/mouse/Makefile
drivers/input/mousedev.c
drivers/input/tsdev.c
include/linux/input.h

index 6e55b2c5874e55fda106f2b095d856b97164ec9b,6cff8096d56a843a10664e01f20bb7c473b330a8..1f6fcec0c6fc31491e60f543c18d5f2899d8d4a5
@@@ -645,23 -654,45 +654,45 @@@ static int evdev_connect(struct input_h
  
        evdev_table[minor] = evdev;
  
-       cdev = class_device_create(&input_class, &dev->cdev,
-                       MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + minor),
-                       dev->cdev.dev, evdev->name);
+       devt = MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + minor),
+       cdev = class_device_create(&input_class, &dev->cdev, devt,
+                                  dev->cdev.dev, evdev->name);
+       if (IS_ERR(cdev)) {
+               error = PTR_ERR(cdev);
+               goto err_free_evdev;
+       }
  
        /* temporary symlink to keep userspace happy */
-       sysfs_create_link(&input_class.subsys.kobj, &cdev->kobj,
-                         evdev->name);
 -      error = sysfs_create_link(&input_class.subsys.kset.kobj,
++      error = sysfs_create_link(&input_class.subsys.kobj,
+                                 &cdev->kobj, evdev->name);
+       if (error)
+               goto err_cdev_destroy;
+       error = input_register_handle(&evdev->handle);
+       if (error)
+               goto err_remove_link;
+       return 0;
  
-       return &evdev->handle;
+  err_remove_link:
 -      sysfs_remove_link(&input_class.subsys.kset.kobj, evdev->name);
++      sysfs_remove_link(&input_class.subsys.kobj, evdev->name);
+  err_cdev_destroy:
+       class_device_destroy(&input_class, devt);
+  err_free_evdev:
+       kfree(evdev);
+       evdev_table[minor] = NULL;
+       return error;
  }
  
  static void evdev_disconnect(struct input_handle *handle)
  {
        struct evdev *evdev = handle->private;
-       struct evdev_list *list;
+       struct evdev_client *client;
+       input_unregister_handle(handle);
  
 -      sysfs_remove_link(&input_class.subsys.kset.kobj, evdev->name);
 +      sysfs_remove_link(&input_class.subsys.kobj, evdev->name);
        class_device_destroy(&input_class,
                        MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + evdev->minor));
        evdev->exist = 0;
index d2482e4f71be52e6262d24038d59cef314c63538,4f37224d2268b9378268ff90ab2af14e9c466749..9bcc5425049be22160039e6f6ad6073d126ff4d8
@@@ -534,23 -550,46 +550,46 @@@ static int joydev_connect(struct input_
  
        joydev_table[minor] = joydev;
  
-       cdev = class_device_create(&input_class, &dev->cdev,
-                       MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + minor),
-                       dev->cdev.dev, joydev->name);
+       devt = MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + minor),
+       cdev = class_device_create(&input_class, &dev->cdev, devt,
+                                  dev->cdev.dev, joydev->name);
+       if (IS_ERR(cdev)) {
+               error = PTR_ERR(cdev);
+               goto err_free_joydev;
+       }
  
        /* temporary symlink to keep userspace happy */
-       sysfs_create_link(&input_class.subsys.kobj, &cdev->kobj,
-                         joydev->name);
 -      error = sysfs_create_link(&input_class.subsys.kset.kobj,
++      error = sysfs_create_link(&input_class.subsys.kobj,
+                                 &cdev->kobj, joydev->name);
+       if (error)
+               goto err_cdev_destroy;
+       error = input_register_handle(&joydev->handle);
+       if (error)
+               goto err_remove_link;
+       return 0;
  
-       return &joydev->handle;
+  err_remove_link:
 -      sysfs_remove_link(&input_class.subsys.kset.kobj, joydev->name);
++      sysfs_remove_link(&input_class.subsys.kobj, joydev->name);
+  err_cdev_destroy:
+       class_device_destroy(&input_class, devt);
+  err_free_joydev:
+       joydev_table[minor] = NULL;
+       kfree(joydev);
+       return error;
  }
  
  static void joydev_disconnect(struct input_handle *handle)
  {
        struct joydev *joydev = handle->private;
-       struct joydev_list *list;
+       struct joydev_client *client;
+       input_unregister_handle(handle);
  
 -      sysfs_remove_link(&input_class.subsys.kset.kobj, joydev->name);
 +      sysfs_remove_link(&input_class.subsys.kobj, joydev->name);
        class_device_destroy(&input_class, MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + joydev->minor));
        joydev->exist = 0;
  
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 074fee429d1babeb6835a0cd8540864bb03008ff,3b8011c56c869849c33b993306277eac27ade2ef..7678e987655022d7e9ab32d9e2db96ce6e16c081
@@@ -651,28 -712,53 +712,53 @@@ static int mousedev_connect(struct inpu
        mousedev->handle.private = mousedev;
        sprintf(mousedev->name, "mouse%d", minor);
  
-       if (mousedev_mix.open)
-               input_open_device(&mousedev->handle);
        mousedev_table[minor] = mousedev;
  
-       cdev = class_device_create(&input_class, &dev->cdev,
-                       MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + minor),
-                       dev->cdev.dev, mousedev->name);
+       devt = MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + minor),
+       cdev = class_device_create(&input_class, &dev->cdev, devt,
+                                  dev->cdev.dev, mousedev->name);
+       if (IS_ERR(cdev)) {
+               error = PTR_ERR(cdev);
+               goto err_free_mousedev;
+       }
  
        /* temporary symlink to keep userspace happy */
-       sysfs_create_link(&input_class.subsys.kobj, &cdev->kobj,
-                         mousedev->name);
 -      error = sysfs_create_link(&input_class.subsys.kset.kobj,
++      error = sysfs_create_link(&input_class.subsys.kobj,
+                                 &cdev->kobj, mousedev->name);
+       if (error)
+               goto err_cdev_destroy;
+       error = input_register_handle(&mousedev->handle);
+       if (error)
+               goto err_remove_link;
+       error = mixdev_add_device(mousedev);
+       if (error)
+               goto err_unregister_handle;
  
-       return &mousedev->handle;
+       return 0;
+  err_unregister_handle:
+       input_unregister_handle(&mousedev->handle);
+  err_remove_link:
 -      sysfs_remove_link(&input_class.subsys.kset.kobj, mousedev->name);
++      sysfs_remove_link(&input_class.subsys.kobj, mousedev->name);
+  err_cdev_destroy:
+       class_device_destroy(&input_class, devt);
+  err_free_mousedev:
+       mousedev_table[minor] = NULL;
+       kfree(mousedev);
+       return error;
  }
  
  static void mousedev_disconnect(struct input_handle *handle)
  {
        struct mousedev *mousedev = handle->private;
-       struct mousedev_list *list;
+       struct mousedev_client *client;
+       input_unregister_handle(handle);
  
 -      sysfs_remove_link(&input_class.subsys.kset.kobj, mousedev->name);
 +      sysfs_remove_link(&input_class.subsys.kobj, mousedev->name);
        class_device_destroy(&input_class,
                        MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + mousedev->minor));
        mousedev->exist = 0;
index 05dfc10bc0790a8cf1c33ff8264c12686a4210a3,8e2d2c924adfdbb4e065f90e848cb097a996a2f4..5e5b5c91d75b1286451ff30b84ccf6985da12ff4
@@@ -415,23 -432,45 +432,45 @@@ static int tsdev_connect(struct input_h
  
        tsdev_table[minor] = tsdev;
  
-       cdev = class_device_create(&input_class, &dev->cdev,
-                       MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),
-                       dev->cdev.dev, tsdev->name);
+       devt = MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),
+       cdev = class_device_create(&input_class, &dev->cdev, devt,
+                                  dev->cdev.dev, tsdev->name);
+       if (IS_ERR(cdev)) {
+               error = PTR_ERR(cdev);
+               goto err_free_tsdev;
+       }
  
        /* temporary symlink to keep userspace happy */
-       sysfs_create_link(&input_class.subsys.kobj, &cdev->kobj,
-                         tsdev->name);
 -      error = sysfs_create_link(&input_class.subsys.kset.kobj,
++      error = sysfs_create_link(&input_class.subsys.kobj,
+                                 &cdev->kobj, tsdev->name);
+       if (error)
+               goto err_cdev_destroy;
+       error = input_register_handle(&tsdev->handle);
+       if (error)
+               goto err_remove_link;
+       return 0;
  
-       return &tsdev->handle;
+  err_remove_link:
 -      sysfs_remove_link(&input_class.subsys.kset.kobj, tsdev->name);
++      sysfs_remove_link(&input_class.subsys.kobj, tsdev->name);
+  err_cdev_destroy:
+       class_device_destroy(&input_class, devt);
+  err_free_tsdev:
+       tsdev_table[minor] = NULL;
+       kfree(tsdev);
+       return error;
  }
  
  static void tsdev_disconnect(struct input_handle *handle)
  {
        struct tsdev *tsdev = handle->private;
-       struct tsdev_list *list;
+       struct tsdev_client *client;
+       input_unregister_handle(handle);
  
 -      sysfs_remove_link(&input_class.subsys.kset.kobj, tsdev->name);
 +      sysfs_remove_link(&input_class.subsys.kobj, tsdev->name);
        class_device_destroy(&input_class,
                        MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + tsdev->minor));
        tsdev->exist = 0;
Simple merge