Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / input / tsdev.c
index d0afba8..d678d14 100644 (file)
@@ -53,7 +53,6 @@
 #include <linux/random.h>
 #include <linux/time.h>
 #include <linux/device.h>
-#include <linux/devfs_fs_kernel.h>
 
 #ifndef CONFIG_INPUT_TSDEV_SCREEN_X
 #define CONFIG_INPUT_TSDEV_SCREEN_X    240
@@ -158,9 +157,8 @@ static int tsdev_open(struct inode *inode, struct file *file)
        if (i >= TSDEV_MINORS || !tsdev_table[i & TSDEV_MINOR_MASK])
                return -ENODEV;
 
-       if (!(list = kmalloc(sizeof(struct tsdev_list), GFP_KERNEL)))
+       if (!(list = kzalloc(sizeof(struct tsdev_list), GFP_KERNEL)))
                return -ENOMEM;
-       memset(list, 0, sizeof(struct tsdev_list));
 
        list->raw = (i >= TSDEV_MINORS/2) ? 1 : 0;
 
@@ -369,6 +367,7 @@ static struct input_handle *tsdev_connect(struct input_handler *handler,
                                          struct input_device_id *id)
 {
        struct tsdev *tsdev;
+       struct class_device *cdev;
        int minor, delta;
 
        for (minor = 0; minor < TSDEV_MINORS/2 && tsdev_table[minor];
@@ -379,9 +378,8 @@ static struct input_handle *tsdev_connect(struct input_handler *handler,
                return NULL;
        }
 
-       if (!(tsdev = kmalloc(sizeof(struct tsdev), GFP_KERNEL)))
+       if (!(tsdev = kzalloc(sizeof(struct tsdev), GFP_KERNEL)))
                return NULL;
-       memset(tsdev, 0, sizeof(struct tsdev));
 
        INIT_LIST_HEAD(&tsdev->list);
        init_waitqueue_head(&tsdev->wait);
@@ -410,13 +408,13 @@ static struct input_handle *tsdev_connect(struct input_handler *handler,
 
        tsdev_table[minor] = tsdev;
 
-       devfs_mk_cdev(MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),
-                       S_IFCHR|S_IRUGO|S_IWUSR, "input/ts%d", minor);
-       devfs_mk_cdev(MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor + TSDEV_MINORS/2),
-                       S_IFCHR|S_IRUGO|S_IWUSR, "input/tsraw%d", minor);
-       class_simple_device_add(input_class,
-                               MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),
-                               dev->dev, "ts%d", minor);
+       cdev = class_device_create(&input_class, &dev->cdev,
+                       MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),
+                       dev->cdev.dev, tsdev->name);
+
+       /* temporary symlink to keep userspace happy */
+       sysfs_create_link(&input_class.subsys.kset.kobj, &cdev->kobj,
+                         tsdev->name);
 
        return &tsdev->handle;
 }
@@ -426,9 +424,9 @@ static void tsdev_disconnect(struct input_handle *handle)
        struct tsdev *tsdev = handle->private;
        struct tsdev_list *list;
 
-       class_simple_device_remove(MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + tsdev->minor));
-       devfs_remove("input/ts%d", tsdev->minor);
-       devfs_remove("input/tsraw%d", tsdev->minor);
+       sysfs_remove_link(&input_class.subsys.kset.kobj, tsdev->name);
+       class_device_destroy(&input_class,
+                       MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + tsdev->minor));
        tsdev->exist = 0;
 
        if (tsdev->open) {