summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor_core@ameritech.net>2004-10-21 13:50:25 -0500
committerVojtech Pavlik <vojtech@suse.cz>2004-10-21 13:50:25 -0500
commit369dc5effad22d4fa9263b82d991f2ab19a1b24f (patch)
tree89af490f609aec2cde1bf76b160aaeee59c7d23c
parent5e733a371adf693160ebe50e8e147c69cc6b3e57 (diff)
Input: evdev, joydev, mousedev, tsdev - remove class device and devfs
entry when hardware driver disconnects instead of waiting for the last user to drop off. This way hardware drivers can be unloaded at any time. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
-rw-r--r--drivers/input/evdev.c4
-rw-r--r--drivers/input/joydev.c4
-rw-r--r--drivers/input/mousedev.c4
-rw-r--r--drivers/input/tsdev.c10
4 files changed, 11 insertions, 11 deletions
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index 3737e5abc286..39c497e5fafa 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -91,8 +91,6 @@ static int evdev_flush(struct file * file)
static void evdev_free(struct evdev *evdev)
{
- devfs_remove("input/event%d", evdev->minor);
- class_simple_device_remove(MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + evdev->minor));
evdev_table[evdev->minor] = NULL;
kfree(evdev);
}
@@ -441,6 +439,8 @@ static void evdev_disconnect(struct input_handle *handle)
{
struct evdev *evdev = handle->private;
+ class_simple_device_remove(MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + evdev->minor));
+ devfs_remove("input/event%d", evdev->minor);
evdev->exist = 0;
if (evdev->open) {
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c
index 3e47218e0d6a..4fe982d63bed 100644
--- a/drivers/input/joydev.c
+++ b/drivers/input/joydev.c
@@ -143,9 +143,7 @@ static int joydev_fasync(int fd, struct file *file, int on)
static void joydev_free(struct joydev *joydev)
{
- devfs_remove("input/js%d", joydev->minor);
joydev_table[joydev->minor] = NULL;
- class_simple_device_remove(MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + joydev->minor));
kfree(joydev);
}
@@ -466,6 +464,8 @@ static void joydev_disconnect(struct input_handle *handle)
{
struct joydev *joydev = handle->private;
+ class_simple_device_remove(MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + joydev->minor));
+ devfs_remove("input/js%d", joydev->minor);
joydev->exist = 0;
if (joydev->open)
diff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c
index 79a867daa5fe..7cdd109102af 100644
--- a/drivers/input/mousedev.c
+++ b/drivers/input/mousedev.c
@@ -335,8 +335,6 @@ static int mousedev_fasync(int fd, struct file *file, int on)
static void mousedev_free(struct mousedev *mousedev)
{
- devfs_remove("input/mouse%d", mousedev->minor);
- class_simple_device_remove(MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + mousedev->minor));
mousedev_table[mousedev->minor] = NULL;
kfree(mousedev);
}
@@ -646,6 +644,8 @@ static void mousedev_disconnect(struct input_handle *handle)
{
struct mousedev *mousedev = handle->private;
+ class_simple_device_remove(MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + mousedev->minor));
+ devfs_remove("input/mouse%d", mousedev->minor);
mousedev->exist = 0;
if (mousedev->open) {
diff --git a/drivers/input/tsdev.c b/drivers/input/tsdev.c
index 18c37d8ac5d6..9c00dbd39c6f 100644
--- a/drivers/input/tsdev.c
+++ b/drivers/input/tsdev.c
@@ -1,7 +1,7 @@
/*
* $Id: tsdev.c,v 1.15 2002/04/10 16:50:19 jsimmons Exp $
*
- * Copyright (c) 2001 "Crazy" james Simmons
+ * Copyright (c) 2001 "Crazy" james Simmons
*
* Compaq touchscreen protocol driver. The protocol emulated by this driver
* is obsolete; for new programs use the tslib library which can read directly
@@ -177,8 +177,6 @@ static int tsdev_open(struct inode *inode, struct file *file)
static void tsdev_free(struct tsdev *tsdev)
{
- devfs_remove("input/ts%d", tsdev->minor);
- class_simple_device_remove(MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + tsdev->minor));
tsdev_table[tsdev->minor] = NULL;
kfree(tsdev);
}
@@ -418,7 +416,7 @@ static struct input_handle *tsdev_connect(struct input_handler *handler,
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,
+ class_simple_device_add(input_class,
MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),
dev->dev, "ts%d", minor);
@@ -429,6 +427,9 @@ static void tsdev_disconnect(struct input_handle *handle)
{
struct tsdev *tsdev = handle->private;
+ 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);
tsdev->exist = 0;
if (tsdev->open) {
@@ -436,7 +437,6 @@ static void tsdev_disconnect(struct input_handle *handle)
wake_up_interruptible(&tsdev->wait);
} else
tsdev_free(tsdev);
- devfs_remove("input/tsraw%d", tsdev->minor);
}
static struct input_device_id tsdev_ids[] = {