<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">Subject: [PATCH] add sysfs class support for vc devices [10/10]

This patch add sysfs support for vc char devices.

Note, Andrew Morton has reported some very strange oopses with this
patch, that I can not reproduce at all.  If anyone else also has
problems with this patch, please let me know.



diff -Nru a/drivers/char/vc_screen.c b/drivers/char/vc_screen.c
--- a/drivers/char/vc_screen.c	Thu Jan 15 11:05:48 2004
+++ b/drivers/char/vc_screen.c	Thu Jan 15 11:05:48 2004
@@ -36,6 +36,7 @@
 #include &lt;linux/kbd_kern.h&gt;
 #include &lt;linux/console.h&gt;
 #include &lt;linux/smp_lock.h&gt;
+#include &lt;linux/device.h&gt;
 #include &lt;asm/uaccess.h&gt;
 #include &lt;asm/byteorder.h&gt;
 #include &lt;asm/unaligned.h&gt;
@@ -469,6 +470,8 @@
 	.open		= vcs_open,
 };
 
+static struct class_simple *vc_class;
+
 void vcs_make_devfs(struct tty_struct *tty)
 {
 	devfs_mk_cdev(MKDEV(VCS_MAJOR, tty-&gt;index + 1),
@@ -477,19 +480,26 @@
 	devfs_mk_cdev(MKDEV(VCS_MAJOR, tty-&gt;index + 129),
 			S_IFCHR|S_IRUSR|S_IWUSR,
 			"vcc/a%u", tty-&gt;index + 1);
+	class_simple_device_add(vc_class, MKDEV(VCS_MAJOR, tty-&gt;index + 1), NULL, "vcs%u", tty-&gt;index + 1);
+	class_simple_device_add(vc_class, MKDEV(VCS_MAJOR, tty-&gt;index + 129), NULL, "vcsa%u", tty-&gt;index + 1);
 }
 void vcs_remove_devfs(struct tty_struct *tty)
 {
 	devfs_remove("vcc/%u", tty-&gt;index + 1);
 	devfs_remove("vcc/a%u", tty-&gt;index + 1);
+	class_simple_device_remove(MKDEV(VCS_MAJOR, tty-&gt;index + 1));
+	class_simple_device_remove(MKDEV(VCS_MAJOR, tty-&gt;index + 129));
 }
 
 int __init vcs_init(void)
 {
 	if (register_chrdev(VCS_MAJOR, "vcs", &amp;vcs_fops))
 		panic("unable to get major %d for vcs device", VCS_MAJOR);
+	vc_class = class_simple_create(THIS_MODULE, "vc");
 
 	devfs_mk_cdev(MKDEV(VCS_MAJOR, 0), S_IFCHR|S_IRUSR|S_IWUSR, "vcc/0");
 	devfs_mk_cdev(MKDEV(VCS_MAJOR, 128), S_IFCHR|S_IRUSR|S_IWUSR, "vcc/a0");
+	class_simple_device_add(vc_class, MKDEV(VCS_MAJOR, 0), NULL, "vcs");
+	class_simple_device_add(vc_class, MKDEV(VCS_MAJOR, 128), NULL, "vcsa");
 	return 0;
 }
diff -Nru a/drivers/char/vt.c b/drivers/char/vt.c
--- a/drivers/char/vt.c	Thu Jan 15 11:05:50 2004
+++ b/drivers/char/vt.c	Thu Jan 15 11:05:50 2004
@@ -2539,6 +2539,8 @@
 
 int __init vty_init(void)
 {
+	vcs_init();
+
 	console_driver = alloc_tty_driver(MAX_NR_CONSOLES);
 	if (!console_driver)
 		panic("Couldn't allocate console driver\n");
@@ -2566,7 +2568,6 @@
 #ifdef CONFIG_FRAMEBUFFER_CONSOLE
 	fb_console_init();
 #endif	
-	vcs_init();
 	return 0;
 }
 
</pre></body></html>