|
@@ -29,6 +29,7 @@ MODULE_DESCRIPTION("Input core");
|
|
MODULE_LICENSE("GPL");
|
|
MODULE_LICENSE("GPL");
|
|
|
|
|
|
EXPORT_SYMBOL(input_allocate_device);
|
|
EXPORT_SYMBOL(input_allocate_device);
|
|
|
|
+EXPORT_SYMBOL(input_free_device);
|
|
EXPORT_SYMBOL(input_register_device);
|
|
EXPORT_SYMBOL(input_register_device);
|
|
EXPORT_SYMBOL(input_unregister_device);
|
|
EXPORT_SYMBOL(input_unregister_device);
|
|
EXPORT_SYMBOL(input_register_handler);
|
|
EXPORT_SYMBOL(input_register_handler);
|
|
@@ -872,6 +873,7 @@ struct input_dev *input_allocate_device(void)
|
|
dev->dynalloc = 1;
|
|
dev->dynalloc = 1;
|
|
dev->cdev.class = &input_class;
|
|
dev->cdev.class = &input_class;
|
|
class_device_initialize(&dev->cdev);
|
|
class_device_initialize(&dev->cdev);
|
|
|
|
+ mutex_init(&dev->mutex);
|
|
INIT_LIST_HEAD(&dev->h_list);
|
|
INIT_LIST_HEAD(&dev->h_list);
|
|
INIT_LIST_HEAD(&dev->node);
|
|
INIT_LIST_HEAD(&dev->node);
|
|
}
|
|
}
|
|
@@ -879,6 +881,18 @@ struct input_dev *input_allocate_device(void)
|
|
return dev;
|
|
return dev;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void input_free_device(struct input_dev *dev)
|
|
|
|
+{
|
|
|
|
+ if (dev) {
|
|
|
|
+
|
|
|
|
+ mutex_lock(&dev->mutex);
|
|
|
|
+ dev->name = dev->phys = dev->uniq = NULL;
|
|
|
|
+ mutex_unlock(&dev->mutex);
|
|
|
|
+
|
|
|
|
+ input_put_device(dev);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
int input_register_device(struct input_dev *dev)
|
|
int input_register_device(struct input_dev *dev)
|
|
{
|
|
{
|
|
static atomic_t input_no = ATOMIC_INIT(0);
|
|
static atomic_t input_no = ATOMIC_INIT(0);
|
|
@@ -895,7 +909,6 @@ int input_register_device(struct input_dev *dev)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
- mutex_init(&dev->mutex);
|
|
|
|
set_bit(EV_SYN, dev->evbit);
|
|
set_bit(EV_SYN, dev->evbit);
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -979,6 +992,10 @@ void input_unregister_device(struct input_dev *dev)
|
|
sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group);
|
|
sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group);
|
|
class_device_unregister(&dev->cdev);
|
|
class_device_unregister(&dev->cdev);
|
|
|
|
|
|
|
|
+ mutex_lock(&dev->mutex);
|
|
|
|
+ dev->name = dev->phys = dev->uniq = NULL;
|
|
|
|
+ mutex_unlock(&dev->mutex);
|
|
|
|
+
|
|
input_wakeup_procfs_readers();
|
|
input_wakeup_procfs_readers();
|
|
}
|
|
}
|
|
|
|
|