linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / sound / oss / ac97_codec.c
index 972327c..fd25aca 100644 (file)
@@ -55,7 +55,7 @@
 #include <linux/pci.h>
 #include <linux/ac97_codec.h>
 #include <asm/uaccess.h>
-#include <linux/mutex.h>
+#include <asm/semaphore.h>
 
 #define CODEC_ID_BUFSZ 14
 
@@ -304,7 +304,7 @@ static const unsigned int ac97_oss_rm[] = {
 
 static LIST_HEAD(codecs);
 static LIST_HEAD(codec_drivers);
-static DEFINE_MUTEX(codec_mutex);
+static DECLARE_MUTEX(codec_sem);
 
 /* reads the given OSS mixer from the ac97 the caller must have insured that the ac97 knows
    about that given mixer, and should be holding a spinlock for the card */
@@ -769,9 +769,9 @@ void ac97_release_codec(struct ac97_codec *codec)
 {
        /* Remove from the list first, we don't want to be
           "rediscovered" */
-       mutex_lock(&codec_mutex);
+       down(&codec_sem);
        list_del(&codec->list);
-       mutex_unlock(&codec_mutex);
+       up(&codec_sem);
        /*
         *      The driver needs to deal with internal
         *      locking to avoid accidents here. 
@@ -889,7 +889,7 @@ int ac97_probe_codec(struct ac97_codec *codec)
         *      callbacks.
         */
         
-       mutex_lock(&codec_mutex);
+       down(&codec_sem);
        list_add(&codec->list, &codecs);
 
        list_for_each(l, &codec_drivers) {
@@ -903,7 +903,7 @@ int ac97_probe_codec(struct ac97_codec *codec)
                }
        }
 
-       mutex_unlock(&codec_mutex);
+       up(&codec_sem);
        return 1;
 }
 
@@ -1439,7 +1439,7 @@ int ac97_register_driver(struct ac97_driver *driver)
        struct list_head *l;
        struct ac97_codec *c;
        
-       mutex_lock(&codec_mutex);
+       down(&codec_sem);
        INIT_LIST_HEAD(&driver->list);
        list_add(&driver->list, &codec_drivers);
        
@@ -1452,7 +1452,7 @@ int ac97_register_driver(struct ac97_driver *driver)
                        continue;
                c->driver = driver;
        }
-       mutex_unlock(&codec_mutex);
+       up(&codec_sem);
        return 0;
 }
 
@@ -1471,7 +1471,7 @@ void ac97_unregister_driver(struct ac97_driver *driver)
        struct list_head *l;
        struct ac97_codec *c;
        
-       mutex_lock(&codec_mutex);
+       down(&codec_sem);
        list_del_init(&driver->list);
 
        list_for_each(l, &codecs)
@@ -1483,7 +1483,7 @@ void ac97_unregister_driver(struct ac97_driver *driver)
                }
        }
        
-       mutex_unlock(&codec_mutex);
+       up(&codec_sem);
 }
 
 EXPORT_SYMBOL_GPL(ac97_unregister_driver);
@@ -1494,14 +1494,14 @@ static int swap_headphone(int remove_master)
        struct ac97_codec *c;
        
        if (remove_master) {
-               mutex_lock(&codec_mutex);
+               down(&codec_sem);
                list_for_each(l, &codecs)
                {
                        c = list_entry(l, struct ac97_codec, list);
                        if (supported_mixer(c, SOUND_MIXER_PHONEOUT))
                                c->supported_mixers &= ~SOUND_MASK_PHONEOUT;
                }
-               mutex_unlock(&codec_mutex);
+               up(&codec_sem);
        } else
                ac97_hw[SOUND_MIXER_PHONEOUT].offset = AC97_MASTER_VOL_STEREO;