Commit e5da64c4 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

[PATCH] Input: add sysfs class support for input devices

This patch adds sysfs support for all input devices.  It also provides
the "device" and "driver" symlink for all Input devices that specify it.
parent 90635a76
......@@ -92,6 +92,7 @@ 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);
}
......@@ -426,6 +427,9 @@ static struct input_handle *evdev_connect(struct input_handler *handler, struct
devfs_mk_cdev(MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + minor),
S_IFCHR|S_IRUGO|S_IWUSR, "input/event%d", minor);
class_simple_device_add(input_class,
MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + minor),
dev->dev, "event%d", minor);
return &evdev->handle;
}
......
......@@ -720,15 +720,13 @@ static int __init input_proc_init(void)
static inline int input_proc_init(void) { return 0; }
#endif
struct class input_class = {
.name = "input",
};
struct class_simple *input_class;
static int __init input_init(void)
{
int retval = -ENOMEM;
class_register(&input_class);
input_class = class_simple_create(THIS_MODULE, "input");
input_proc_init();
retval = register_chrdev(INPUT_MAJOR, "input", &input_fops);
if (retval) {
......@@ -757,7 +755,7 @@ static void __exit input_exit(void)
devfs_remove("input");
unregister_chrdev(INPUT_MAJOR, "input");
class_unregister(&input_class);
class_simple_destroy(input_class);
}
subsys_initcall(input_init);
......
......@@ -145,6 +145,7 @@ static void joydev_free(struct joydev *joydev)
{
devfs_remove("js%d", joydev->minor);
joydev_table[joydev->minor] = NULL;
class_simple_device_remove(MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + joydev->minor));
kfree(joydev);
}
......@@ -444,6 +445,9 @@ static struct input_handle *joydev_connect(struct input_handler *handler, struct
devfs_mk_cdev(MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + minor),
S_IFCHR|S_IRUGO|S_IWUSR, "js%d", minor);
class_simple_device_add(input_class,
MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + minor),
dev->dev, "js%d", minor);
return &joydev->handle;
}
......
......@@ -225,6 +225,7 @@ 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);
}
......@@ -486,6 +487,9 @@ static struct input_handle *mousedev_connect(struct input_handler *handler, stru
devfs_mk_cdev(MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + minor),
S_IFCHR|S_IRUGO|S_IWUSR, "input/mouse%d", minor);
class_simple_device_add(input_class,
MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + minor),
dev->dev, "mouse%d", minor);
return &mousedev->handle;
}
......@@ -564,7 +568,8 @@ static int __init mousedev_init(void)
devfs_mk_cdev(MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + MOUSEDEV_MIX),
S_IFCHR|S_IRUGO|S_IWUSR, "input/mice");
class_simple_device_add(input_class, MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + MOUSEDEV_MIX),
NULL, "mice");
#ifdef CONFIG_INPUT_MOUSEDEV_PSAUX
if (!(mousedev_mix.misc = !misc_register(&psaux_mouse)))
......@@ -583,6 +588,7 @@ static void __exit mousedev_exit(void)
misc_deregister(&psaux_mouse);
#endif
devfs_remove("input/mice");
class_simple_device_remove(MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + MOUSEDEV_MIX));
input_unregister_handler(&mousedev_handler);
}
......
......@@ -129,6 +129,7 @@ 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);
}
......@@ -343,6 +344,9 @@ static struct input_handle *tsdev_connect(struct input_handler *handler,
devfs_mk_cdev(MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),
S_IFCHR|S_IRUGO|S_IWUSR, "input/ts%d", minor);
class_simple_device_add(input_class,
MKDEV(INPUT_MAJOR, TSDEV_MINOR_BASE + minor),
dev->dev, "ts%d", minor);
return &tsdev->handle;
}
......
......@@ -809,6 +809,7 @@ struct input_dev {
int (*erase_effect)(struct input_dev *dev, int effect_id);
struct input_handle *grab;
struct device *dev;
struct list_head h_list;
struct list_head node;
......@@ -921,7 +922,7 @@ void input_event(struct input_dev *dev, unsigned int type, unsigned int code, in
#define input_regs(a,b) do { (a)->regs = (b); } while (0)
#define input_sync(a) do { input_event(a, EV_SYN, SYN_REPORT, 0); (a)->regs = NULL; } while (0)
extern struct class input_class;
extern struct class_simple *input_class;
#endif
#endif
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