diff options
| author | Dmitry Torokhov <dtor_core@ameritech.net> | 2004-10-21 13:50:25 -0500 |
|---|---|---|
| committer | Vojtech Pavlik <vojtech@suse.cz> | 2004-10-21 13:50:25 -0500 |
| commit | 369dc5effad22d4fa9263b82d991f2ab19a1b24f (patch) | |
| tree | 89af490f609aec2cde1bf76b160aaeee59c7d23c /drivers | |
| parent | 5e733a371adf693160ebe50e8e147c69cc6b3e57 (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>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/input/evdev.c | 4 | ||||
| -rw-r--r-- | drivers/input/joydev.c | 4 | ||||
| -rw-r--r-- | drivers/input/mousedev.c | 4 | ||||
| -rw-r--r-- | drivers/input/tsdev.c | 10 |
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[] = { |
