Commit 369dc5ef authored by Dmitry Torokhov's avatar Dmitry Torokhov Committed by Vojtech Pavlik

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: default avatarDmitry Torokhov <dtor@mail.ru>
parent 5e733a37
...@@ -91,8 +91,6 @@ static int evdev_flush(struct file * file) ...@@ -91,8 +91,6 @@ static int evdev_flush(struct file * file)
static void evdev_free(struct evdev *evdev) 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; evdev_table[evdev->minor] = NULL;
kfree(evdev); kfree(evdev);
} }
...@@ -441,6 +439,8 @@ static void evdev_disconnect(struct input_handle *handle) ...@@ -441,6 +439,8 @@ static void evdev_disconnect(struct input_handle *handle)
{ {
struct evdev *evdev = handle->private; 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; evdev->exist = 0;
if (evdev->open) { if (evdev->open) {
......
...@@ -143,9 +143,7 @@ static int joydev_fasync(int fd, struct file *file, int on) ...@@ -143,9 +143,7 @@ static int joydev_fasync(int fd, struct file *file, int on)
static void joydev_free(struct joydev *joydev) static void joydev_free(struct joydev *joydev)
{ {
devfs_remove("input/js%d", joydev->minor);
joydev_table[joydev->minor] = NULL; joydev_table[joydev->minor] = NULL;
class_simple_device_remove(MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + joydev->minor));
kfree(joydev); kfree(joydev);
} }
...@@ -466,6 +464,8 @@ static void joydev_disconnect(struct input_handle *handle) ...@@ -466,6 +464,8 @@ static void joydev_disconnect(struct input_handle *handle)
{ {
struct joydev *joydev = handle->private; 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; joydev->exist = 0;
if (joydev->open) if (joydev->open)
......
...@@ -335,8 +335,6 @@ static int mousedev_fasync(int fd, struct file *file, int on) ...@@ -335,8 +335,6 @@ static int mousedev_fasync(int fd, struct file *file, int on)
static void mousedev_free(struct mousedev *mousedev) 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; mousedev_table[mousedev->minor] = NULL;
kfree(mousedev); kfree(mousedev);
} }
...@@ -646,6 +644,8 @@ static void mousedev_disconnect(struct input_handle *handle) ...@@ -646,6 +644,8 @@ static void mousedev_disconnect(struct input_handle *handle)
{ {
struct mousedev *mousedev = handle->private; 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; mousedev->exist = 0;
if (mousedev->open) { if (mousedev->open) {
......
/* /*
* $Id: tsdev.c,v 1.15 2002/04/10 16:50:19 jsimmons Exp $ * $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 * Compaq touchscreen protocol driver. The protocol emulated by this driver
* is obsolete; for new programs use the tslib library which can read directly * 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) ...@@ -177,8 +177,6 @@ static int tsdev_open(struct inode *inode, struct file *file)
static void tsdev_free(struct tsdev *tsdev) 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; tsdev_table[tsdev->minor] = NULL;
kfree(tsdev); kfree(tsdev);
} }
...@@ -418,7 +416,7 @@ static struct input_handle *tsdev_connect(struct input_handler *handler, ...@@ -418,7 +416,7 @@ static struct input_handle *tsdev_connect(struct input_handler *handler,
S_IFCHR|S_IRUGO|S_IWUSR, "input/ts%d", minor); S_IFCHR|S_IRUGO|S_IWUSR, "input/ts%d", minor);
devfs_mk_cdev(MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor + TSDEV_MINORS/2), devfs_mk_cdev(MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor + TSDEV_MINORS/2),
S_IFCHR|S_IRUGO|S_IWUSR, "input/tsraw%d", minor); 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), MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),
dev->dev, "ts%d", minor); dev->dev, "ts%d", minor);
...@@ -429,6 +427,9 @@ static void tsdev_disconnect(struct input_handle *handle) ...@@ -429,6 +427,9 @@ static void tsdev_disconnect(struct input_handle *handle)
{ {
struct tsdev *tsdev = handle->private; 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; tsdev->exist = 0;
if (tsdev->open) { if (tsdev->open) {
...@@ -436,7 +437,6 @@ static void tsdev_disconnect(struct input_handle *handle) ...@@ -436,7 +437,6 @@ static void tsdev_disconnect(struct input_handle *handle)
wake_up_interruptible(&tsdev->wait); wake_up_interruptible(&tsdev->wait);
} else } else
tsdev_free(tsdev); tsdev_free(tsdev);
devfs_remove("input/tsraw%d", tsdev->minor);
} }
static struct input_device_id tsdev_ids[] = { static struct input_device_id tsdev_ids[] = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment