From: Greg KH <greg@kroah.com>

Add sysfs misc class support, and fix bug where misc_init() was being
called to late in the boot process.



 25-akpm/drivers/char/misc.c        |   17 +++++++++++++++--
 25-akpm/include/linux/miscdevice.h |    3 +++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff -puN drivers/char/misc.c~sysfs-add-misc-class drivers/char/misc.c
--- 25/drivers/char/misc.c~sysfs-add-misc-class	Tue Dec 23 13:43:53 2003
+++ 25-akpm/drivers/char/misc.c	Tue Dec 23 13:43:53 2003
@@ -47,7 +47,7 @@
 #include <linux/devfs_fs_kernel.h>
 #include <linux/stat.h>
 #include <linux/init.h>
-
+#include <linux/device.h>
 #include <linux/tty.h>
 #include <linux/kmod.h>
 
@@ -180,6 +180,15 @@ fail:
 	return err;
 }
 
+/*
+ * TODO for 2.7:
+ *  - add a struct class_device to struct miscdevice and make all usages of
+ *    them dynamic.
+ */
+static struct class misc_class = {
+	.name	= "misc",
+};
+
 static struct file_operations misc_fops = {
 	.owner		= THIS_MODULE,
 	.open		= misc_open,
@@ -234,6 +243,8 @@ int misc_register(struct miscdevice * mi
 				"misc/%s", misc->name);
 	}
 
+	simple_add_class_device(&misc_class, MKDEV(MISC_MAJOR, misc->minor),
+				misc->dev, misc->name);
 	devfs_mk_cdev(MKDEV(MISC_MAJOR, misc->minor),
 			S_IFCHR|S_IRUSR|S_IWUSR|S_IRGRP, misc->devfs_name);
 
@@ -265,6 +276,7 @@ int misc_deregister(struct miscdevice * 
 
 	down(&misc_sem);
 	list_del(&misc->list);
+	simple_remove_class_device(MKDEV(MISC_MAJOR, misc->minor));
 	devfs_remove(misc->devfs_name);
 	if (i < DYNAMIC_MINORS && i>0) {
 		misc_minors[i>>3] &= ~(1 << (misc->minor & 7));
@@ -285,6 +297,7 @@ static int __init misc_init(void)
 	if (ent)
 		ent->proc_fops = &misc_proc_fops;
 #endif
+	class_register(&misc_class);
 #ifdef CONFIG_MVME16x
 	rtc_MK48T08_init();
 #endif
@@ -319,4 +332,4 @@ static int __init misc_init(void)
 	}
 	return 0;
 }
-module_init(misc_init);
+subsys_initcall(misc_init);
diff -puN include/linux/miscdevice.h~sysfs-add-misc-class include/linux/miscdevice.h
--- 25/include/linux/miscdevice.h~sysfs-add-misc-class	Tue Dec 23 13:43:53 2003
+++ 25-akpm/include/linux/miscdevice.h	Tue Dec 23 13:43:53 2003
@@ -36,12 +36,15 @@
 
 #define TUN_MINOR	     200
 
+struct device;
+
 struct miscdevice 
 {
 	int minor;
 	const char *name;
 	struct file_operations *fops;
 	struct list_head list;
+	struct device *dev;
 	char devfs_name[64];
 };
 

_