From: Andrew Zabolotny <zap@homelink.ru>

ac97_unregister_driver() is nulling out the ->driver field for all codecs. 
It should only null the codecs which are using this driver.



---

 25-akpm/sound/oss/ac97_codec.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff -puN sound/oss/ac97_codec.c~ac97-remove-fix sound/oss/ac97_codec.c
--- 25/sound/oss/ac97_codec.c~ac97-remove-fix	Tue Jan 27 16:15:24 2004
+++ 25-akpm/sound/oss/ac97_codec.c	Tue Jan 27 16:17:18 2004
@@ -1428,9 +1428,8 @@ EXPORT_SYMBOL_GPL(ac97_register_driver);
  *	ac97_unregister_driver	-	unregister a codec helper
  *	@driver: Driver handler
  *
- *	Register a handler for codecs matching the codec id. The handler
- *	attach function is called for all present codecs and will be 
- *	called when new codecs are discovered.
+ *	Unregister a handler for codecs matching the codec id. The handler
+ *	remove function is called for all matching codecs.
  */
  
 void ac97_unregister_driver(struct ac97_driver *driver)
@@ -1440,13 +1439,14 @@ void ac97_unregister_driver(struct ac97_
 	
 	down(&codec_sem);
 	list_del_init(&driver->list);
-	
+
 	list_for_each(l, &codecs)
 	{
 		c = list_entry(l, struct ac97_codec, list);
-		if(c->driver == driver)
+		if (c->driver == driver) {
 			driver->remove(c, driver);
-		c->driver = NULL;
+			c->driver = NULL;
+		}
 	}
 	
 	up(&codec_sem);

_