From: Greg KH <greg@kroah.com>

Adds sysfs sound class support for all OSS drivers

Note, this is based on a previous patch from Leann Ogasawara
<ogasawara@osdl.org>, but modified a lot by me.



 25-akpm/sound/oss/soundcard.c |   13 ++++++++++++-
 25-akpm/sound/sound_core.c    |   10 ++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff -puN sound/oss/soundcard.c~sysfs-add-oss-class sound/oss/soundcard.c
--- 25/sound/oss/soundcard.c~sysfs-add-oss-class	Wed Jan  7 16:11:46 2004
+++ 25-akpm/sound/oss/soundcard.c	Wed Jan  7 16:11:46 2004
@@ -73,6 +73,7 @@ static char     dma_alloc_map[MAX_DMA_CH
 
 
 unsigned long seq_time = 0;	/* Time for /dev/sequencer */
+extern struct class sound_class;
 
 /*
  * Table for configurable mixer volume handling
@@ -569,6 +570,9 @@ static int __init oss_init(void)
 		devfs_mk_cdev(MKDEV(SOUND_MAJOR, dev_list[i].minor),
 				S_IFCHR | dev_list[i].mode,
 				"sound/%s", dev_list[i].name);
+		simple_add_class_device(&sound_class,
+					MKDEV(SOUND_MAJOR, dev_list[i].minor),
+					NULL, "%s", dev_list[i].name);
 
 		if (!dev_list[i].num)
 			continue;
@@ -578,6 +582,10 @@ static int __init oss_init(void)
 						dev_list[i].minor + (j*0x10)),
 					S_IFCHR | dev_list[i].mode,
 					"sound/%s%d", dev_list[i].name, j);
+			simple_add_class_device(&sound_class,
+					MKDEV(SOUND_MAJOR, dev_list[i].minor + (j*0x10)),
+					NULL,
+					"%s%d", dev_list[i].name, j);
 		}
 	}
 
@@ -593,10 +601,13 @@ static void __exit oss_cleanup(void)
 
 	for (i = 0; i < sizeof (dev_list) / sizeof *dev_list; i++) {
 		devfs_remove("sound/%s", dev_list[i].name);
+		simple_remove_class_device(MKDEV(SOUND_MAJOR, dev_list[i].minor));
 		if (!dev_list[i].num)
 			continue;
-		for (j = 1; j < *dev_list[i].num; j++)
+		for (j = 1; j < *dev_list[i].num; j++) {
 			devfs_remove("sound/%s%d", dev_list[i].name, j);
+			simple_remove_class_device(MKDEV(SOUND_MAJOR, dev_list[i].minor + (j*0x10)));
+		}
 	}
 	
 	unregister_sound_special(1);
diff -puN sound/sound_core.c~sysfs-add-oss-class sound/sound_core.c
--- 25/sound/sound_core.c~sysfs-add-oss-class	Wed Jan  7 16:11:46 2004
+++ 25-akpm/sound/sound_core.c	Wed Jan  7 16:11:46 2004
@@ -65,6 +65,11 @@ extern int msnd_classic_init(void);
 extern int msnd_pinnacle_init(void);
 #endif
 
+struct class sound_class = {
+	.name = "sound",
+};
+EXPORT_SYMBOL(sound_class);
+
 /*
  *	Low level list operator. Scan the ordered list, find a hole and
  *	join into it. Called with the lock asserted
@@ -171,6 +176,8 @@ static int sound_insert_unit(struct soun
 
 	devfs_mk_cdev(MKDEV(SOUND_MAJOR, s->unit_minor),
 			S_IFCHR | mode, s->name);
+	simple_add_class_device(&sound_class, MKDEV(SOUND_MAJOR, s->unit_minor),
+				NULL, s->name+6);
 	return r;
 
  fail:
@@ -193,6 +200,7 @@ static void sound_remove_unit(struct sou
 	spin_unlock(&sound_loader_lock);
 	if (p) {
 		devfs_remove(p->name);
+		simple_remove_class_device(MKDEV(SOUND_MAJOR, p->unit_minor));
 		kfree(p);
 	}
 }
@@ -556,6 +564,7 @@ static void __exit cleanup_soundcore(voi
 	   empty */
 	unregister_chrdev(SOUND_MAJOR, "sound");
 	devfs_remove("sound");
+	class_unregister(&sound_class);
 }
 
 static int __init init_soundcore(void)
@@ -565,6 +574,7 @@ static int __init init_soundcore(void)
 		return -EBUSY;
 	}
 	devfs_mk_dir ("sound");
+	class_register(&sound_class);
 
 	return 0;
 }

_