This patch adds support for all input devices.  It also provides 
the "device" and "driver" symlink for all USB HID devices.  Other input
drivers should also provide this information if they can (but that can
be added later.)



---

 25-akpm/drivers/input/evdev.c    |    4 ++++
 25-akpm/drivers/input/input.c    |    8 +++-----
 25-akpm/drivers/input/joydev.c   |    4 ++++
 25-akpm/drivers/input/mousedev.c |    8 +++++++-
 25-akpm/drivers/input/tsdev.c    |    4 ++++
 25-akpm/include/linux/input.h    |    3 ++-
 6 files changed, 24 insertions(+), 7 deletions(-)

diff -puN drivers/input/evdev.c~sysfs-class-02-input drivers/input/evdev.c
--- 25/drivers/input/evdev.c~sysfs-class-02-input	Thu Jan 15 16:39:36 2004
+++ 25-akpm/drivers/input/evdev.c	Thu Jan 15 16:39:36 2004
@@ -92,6 +92,7 @@ static int evdev_flush(struct file * fil
 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_connec
 
 	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;
 }
diff -puN drivers/input/input.c~sysfs-class-02-input drivers/input/input.c
--- 25/drivers/input/input.c~sysfs-class-02-input	Thu Jan 15 16:39:36 2004
+++ 25-akpm/drivers/input/input.c	Thu Jan 15 16:39:36 2004
@@ -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);
diff -puN drivers/input/joydev.c~sysfs-class-02-input drivers/input/joydev.c
--- 25/drivers/input/joydev.c~sysfs-class-02-input	Thu Jan 15 16:39:36 2004
+++ 25-akpm/drivers/input/joydev.c	Thu Jan 15 16:39:36 2004
@@ -145,6 +145,7 @@ static void joydev_free(struct joydev *j
 {
 	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_conne
 	
 	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;
 }
diff -puN drivers/input/mousedev.c~sysfs-class-02-input drivers/input/mousedev.c
--- 25/drivers/input/mousedev.c~sysfs-class-02-input	Thu Jan 15 16:39:36 2004
+++ 25-akpm/drivers/input/mousedev.c	Thu Jan 15 16:39:36 2004
@@ -225,6 +225,7 @@ static int mousedev_fasync(int fd, struc
 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_con
 
 	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);
 }
 
diff -puN drivers/input/tsdev.c~sysfs-class-02-input drivers/input/tsdev.c
--- 25/drivers/input/tsdev.c~sysfs-class-02-input	Thu Jan 15 16:39:36 2004
+++ 25-akpm/drivers/input/tsdev.c	Thu Jan 15 16:39:36 2004
@@ -129,6 +129,7 @@ static int tsdev_open(struct inode *inod
 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_connec
 	
 	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;
 }
diff -puN include/linux/input.h~sysfs-class-02-input include/linux/input.h
--- 25/include/linux/input.h~sysfs-class-02-input	Thu Jan 15 16:39:36 2004
+++ 25-akpm/include/linux/input.h	Thu Jan 15 16:39:36 2004
@@ -803,6 +803,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;
@@ -915,7 +916,7 @@ void input_event(struct input_dev *dev, 
 #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

_