]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/input/joydev.c
V4L/DVB (4028): Change dvb_frontend_ops to be a real field instead of a pointer field...
[linux-2.6-omap-h63xx.git] / drivers / input / joydev.c
index 9c17d1add260ca1aa1eebbbe6ac34c261bc195cd..949bdcef8c2be7f7f9365a1fa96719c986b767f7 100644 (file)
@@ -171,9 +171,8 @@ static int joydev_open(struct inode *inode, struct file *file)
        if (i >= JOYDEV_MINORS || !joydev_table[i])
                return -ENODEV;
 
-       if (!(list = kmalloc(sizeof(struct joydev_list), GFP_KERNEL)))
+       if (!(list = kzalloc(sizeof(struct joydev_list), GFP_KERNEL)))
                return -ENOMEM;
-       memset(list, 0, sizeof(struct joydev_list));
 
        list->joydev = joydev_table[i];
        list_add_tail(&list->node, &joydev_table[i]->list);
@@ -448,6 +447,7 @@ static struct file_operations joydev_fops = {
 static struct input_handle *joydev_connect(struct input_handler *handler, struct input_dev *dev, struct input_device_id *id)
 {
        struct joydev *joydev;
+       struct class_device *cdev;
        int i, j, t, minor;
 
        for (minor = 0; minor < JOYDEV_MINORS && joydev_table[minor]; minor++);
@@ -456,9 +456,8 @@ static struct input_handle *joydev_connect(struct input_handler *handler, struct
                return NULL;
        }
 
-       if (!(joydev = kmalloc(sizeof(struct joydev), GFP_KERNEL)))
+       if (!(joydev = kzalloc(sizeof(struct joydev), GFP_KERNEL)))
                return NULL;
-       memset(joydev, 0, sizeof(struct joydev));
 
        INIT_LIST_HEAD(&joydev->list);
        init_waitqueue_head(&joydev->wait);
@@ -513,9 +512,13 @@ static struct input_handle *joydev_connect(struct input_handler *handler, struct
 
        joydev_table[minor] = joydev;
 
-       class_device_create(&input_dev_class, &dev->cdev,
+       cdev = class_device_create(&input_class, &dev->cdev,
                        MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + minor),
-                       dev->cdev.dev, "js%d", minor);
+                       dev->cdev.dev, joydev->name);
+
+       /* temporary symlink to keep userspace happy */
+       sysfs_create_link(&input_class.subsys.kset.kobj, &cdev->kobj,
+                         joydev->name);
 
        return &joydev->handle;
 }
@@ -525,7 +528,8 @@ static void joydev_disconnect(struct input_handle *handle)
        struct joydev *joydev = handle->private;
        struct joydev_list *list;
 
-       class_device_destroy(&input_dev_class, MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + joydev->minor));
+       sysfs_remove_link(&input_class.subsys.kset.kobj, joydev->name);
+       class_device_destroy(&input_class, MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + joydev->minor));
        joydev->exist = 0;
 
        if (joydev->open) {