]> err.no Git - linux-2.6/blobdiff - drivers/input/tsdev.c
[PATCH] i2c-i801: Remove force_addr parameter
[linux-2.6] / drivers / input / tsdev.c
index 0581edb9a560b76e245266883f4c1b1c1bb20126..d678d144bbf8652b629d23417eda0a58f94518bf 100644 (file)
@@ -157,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;
 
@@ -368,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];
@@ -378,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);
@@ -409,9 +408,13 @@ static struct input_handle *tsdev_connect(struct input_handler *handler,
 
        tsdev_table[minor] = tsdev;
 
-       class_device_create(&input_dev_class, &dev->cdev,
+       cdev = class_device_create(&input_class, &dev->cdev,
                        MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),
-                       dev->cdev.dev, "ts%d", 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;
 }
@@ -421,7 +424,8 @@ static void tsdev_disconnect(struct input_handle *handle)
        struct tsdev *tsdev = handle->private;
        struct tsdev_list *list;
 
-       class_device_destroy(&input_dev_class,
+       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;