Semaphore to mutex conversion.
The conversion was generated via scripts, and the result was validated
automatically via a script as well.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
 #include <linux/module.h> 
 #include <linux/proc_fs.h>
 #include <linux/slab.h>
-#include <asm/semaphore.h>
+#include <linux/mutex.h>
+
 #include <asm/io.h>
 #include <asm/uaccess.h>
 #include "sound_config.h"
                         * checked with ACI versions prior to 0xb0      */
 
 static int mixer_device;
-static struct semaphore aci_sem;
+static struct mutex aci_mutex;
 
 #ifdef MODULE
 static int reset;
        int write[] = {write1, write2, write3};
        int read = -EINTR, i;
 
-       if (down_interruptible(&aci_sem))
+       if (mutex_lock_interruptible(&aci_mutex))
                goto out;
 
        for (i=0; i<3; i++) {
        }
        
        read = aci_rawread();
-out_up:        up(&aci_sem);
+out_up:        mutex_unlock(&aci_mutex);
 out:   return read;
 }
 
        char *boardname;
        int i, rc = -EBUSY;
 
-       init_MUTEX(&aci_sem);
+       mutex_init(&aci_mutex);
 
        outb(0xE3, 0xf8f); /* Write MAD16 password */
        aci_port = (inb(0xf90) & 0x10) ?
 
 #include <linux/ac97_codec.h>
 #include <linux/sound.h>
 #include <linux/interrupt.h>
+#include <linux/mutex.h>
 
 #include <asm/delay.h>
 #include <asm/io.h>
 
        for (i = 0; i < AD_MAX_STATES; i++) {
                dev->state[i].card = dev;
-               init_MUTEX(&dev->state[i].sem);
+               mutex_init(&dev->state[i].mutex);
                init_waitqueue_head(&dev->state[i].dmabuf.wait);
        }
 
        ssize_t ret = 0;
        DECLARE_WAITQUEUE(wait, current);
 
-       down(&state->sem);
+       mutex_lock(&state->mutex);
 #if 0
        if (dmabuf->mapped) {
                ret = -ENXIO;
 err2:
        remove_wait_queue(&state->dmabuf.wait, &wait);
 err1:
-       up(&state->sem);
+       mutex_unlock(&state->mutex);
        return ret;
 }
 
 
                unsigned int subdivision;
        } dmabuf;
 
-       struct semaphore sem;
+       struct mutex mutex;
 } ad1889_state_t;
 
 typedef struct ad1889_dev {
 
 #include <linux/smp_lock.h>
 #include <linux/ac97_codec.h>
 #include <linux/interrupt.h>
+#include <linux/mutex.h>
+
 #include <asm/uaccess.h>
 
 #ifndef PCI_DEVICE_ID_ALI_5455
        struct ali_card *card;  /* Card info */
 
        /* single open lock mechanism, only used for recording */
-       struct semaphore open_sem;
+       struct mutex open_mutex;
        wait_queue_head_t open_wait;
 
        /* file mode */
        state->card = card;
        state->magic = ALI5455_STATE_MAGIC;
        init_waitqueue_head(&dmabuf->wait);
-       init_MUTEX(&state->open_sem);
+       mutex_init(&state->open_mutex);
        file->private_data = state;
        dmabuf->trigger = 0;
        /* allocate hardware channels */
                state->card = card;
                state->magic = ALI5455_STATE_MAGIC;
                init_waitqueue_head(&dmabuf->wait);
-               init_MUTEX(&state->open_sem);
+               mutex_init(&state->open_mutex);
                dmabuf->fmt = ALI5455_FMT_STEREO | ALI5455_FMT_16BIT;
                dmabuf->trigger = PCM_ENABLE_OUTPUT;
                ali_set_dac_rate(state, 48000);
 
 #include <linux/smp_lock.h>
 #include <linux/ac97_codec.h>
 #include <linux/interrupt.h>
+#include <linux/mutex.h>
+
 #include <asm/io.h>
 #include <asm/uaccess.h>
 #include <asm/mach-au1x00/au1000.h>
        int             no_vra; // do not use VRA
 
        spinlock_t      lock;
-       struct semaphore open_sem;
-       struct semaphore sem;
+       struct mutex open_mutex;
+       struct mutex sem;
        mode_t          open_mode;
        wait_queue_head_t open_wait;
 
 
        count *= db->cnt_factor;
 
-       down(&s->sem);
+       mutex_lock(&s->sem);
        add_wait_queue(&db->wait, &wait);
 
        while (count > 0) {
                                                ret = -EAGAIN;
                                        goto out;
                                }
-                               up(&s->sem);
+                               mutex_unlock(&s->sem);
                                schedule();
                                if (signal_pending(current)) {
                                        if (!ret)
                                                ret = -ERESTARTSYS;
                                        goto out2;
                                }
-                               down(&s->sem);
+                               mutex_lock(&s->sem);
                        }
                } while (avail <= 0);
 
        }                       // while (count > 0)
 
 out:
-       up(&s->sem);
+       mutex_unlock(&s->sem);
 out2:
        remove_wait_queue(&db->wait, &wait);
        set_current_state(TASK_RUNNING);
 
        count *= db->cnt_factor;
 
-       down(&s->sem);  
+       mutex_lock(&s->sem);
        add_wait_queue(&db->wait, &wait);
 
        while (count > 0) {
                                                ret = -EAGAIN;
                                        goto out;
                                }
-                               up(&s->sem);
+                               mutex_unlock(&s->sem);
                                schedule();
                                if (signal_pending(current)) {
                                        if (!ret)
                                                ret = -ERESTARTSYS;
                                        goto out2;
                                }
-                               down(&s->sem);
+                               mutex_lock(&s->sem);
                        }
                } while (avail <= 0);
 
        }                       // while (count > 0)
 
 out:
-       up(&s->sem);
+       mutex_unlock(&s->sem);
 out2:
        remove_wait_queue(&db->wait, &wait);
        set_current_state(TASK_RUNNING);
        dbg("%s", __FUNCTION__);
     
        lock_kernel();
-       down(&s->sem);
+       mutex_lock(&s->sem);
        if (vma->vm_flags & VM_WRITE)
                db = &s->dma_dac;
        else if (vma->vm_flags & VM_READ)
        vma->vm_flags &= ~VM_IO;
        db->mapped = 1;
 out:
-       up(&s->sem);
+       mutex_unlock(&s->sem);
        unlock_kernel();
        return ret;
 }
        
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & file->f_mode) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
 
        stop_dac(s);
        }
 
        s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
-       up(&s->open_sem);
-       init_MUTEX(&s->sem);
+       mutex_unlock(&s->open_mutex);
+       mutex_init(&s->sem);
        return nonseekable_open(inode, file);
 }
 
                lock_kernel();
        }
 
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        if (file->f_mode & FMODE_WRITE) {
                stop_dac(s);
                dealloc_dmabuf(s, &s->dma_dac);
                dealloc_dmabuf(s, &s->dma_adc);
        }
        s->open_mode &= ((~file->f_mode) & (FMODE_READ|FMODE_WRITE));
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        wake_up(&s->open_wait);
        unlock_kernel();
        return 0;
        init_waitqueue_head(&s->dma_adc.wait);
        init_waitqueue_head(&s->dma_dac.wait);
        init_waitqueue_head(&s->open_wait);
-       init_MUTEX(&s->open_sem);
+       mutex_init(&s->open_mutex);
        spin_lock_init(&s->lock);
        s->codec.private_data = s;
        s->codec.id = 0;
 
 #include <linux/spinlock.h>
 #include <linux/smp_lock.h>
 #include <linux/ac97_codec.h>
+#include <linux/mutex.h>
+
 #include <asm/io.h>
 #include <asm/uaccess.h>
 #include <asm/hardirq.h>
        int             no_vra;         /* do not use VRA */
 
        spinlock_t      lock;
-       struct semaphore open_sem;
-       struct semaphore sem;
+       struct mutex open_mutex;
+       struct mutex sem;
        mode_t          open_mode;
        wait_queue_head_t open_wait;
 
 
        count *= db->cnt_factor;
 
-       down(&s->sem);
+       mutex_lock(&s->sem);
        add_wait_queue(&db->wait, &wait);
 
        while (count > 0) {
                                                ret = -EAGAIN;
                                        goto out;
                                }
-                               up(&s->sem);
+                               mutex_unlock(&s->sem);
                                schedule();
                                if (signal_pending(current)) {
                                        if (!ret)
                                                ret = -ERESTARTSYS;
                                        goto out2;
                                }
-                               down(&s->sem);
+                               mutex_lock(&s->sem);
                        }
                } while (avail <= 0);
 
        }                       /* while (count > 0) */
 
 out:
-       up(&s->sem);
+       mutex_unlock(&s->sem);
 out2:
        remove_wait_queue(&db->wait, &wait);
        set_current_state(TASK_RUNNING);
 
        count *= db->cnt_factor;
 
-       down(&s->sem);
+       mutex_lock(&s->sem);
        add_wait_queue(&db->wait, &wait);
 
        while (count > 0) {
                                                ret = -EAGAIN;
                                        goto out;
                                }
-                               up(&s->sem);
+                               mutex_unlock(&s->sem);
                                schedule();
                                if (signal_pending(current)) {
                                        if (!ret)
                                                ret = -ERESTARTSYS;
                                        goto out2;
                                }
-                               down(&s->sem);
+                               mutex_lock(&s->sem);
                        }
                } while (avail <= 0);
 
        }                       /* while (count > 0) */
 
 out:
-       up(&s->sem);
+       mutex_unlock(&s->sem);
 out2:
        remove_wait_queue(&db->wait, &wait);
        set_current_state(TASK_RUNNING);
        int ret = 0;
 
        lock_kernel();
-       down(&s->sem);
+       mutex_lock(&s->sem);
        if (vma->vm_flags & VM_WRITE)
                db = &s->dma_dac;
        else if (vma->vm_flags & VM_READ)
        vma->vm_flags &= ~VM_IO;
        db->mapped = 1;
 out:
-       up(&s->sem);
+       mutex_unlock(&s->sem);
        unlock_kernel();
        return ret;
 }
 
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & file->f_mode) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
 
        stop_dac(s);
        }
 
        s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
-       up(&s->open_sem);
-       init_MUTEX(&s->sem);
+       mutex_unlock(&s->open_mutex);
+       mutex_init(&s->sem);
        return 0;
 }
 
                lock_kernel();
        }
 
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        if (file->f_mode & FMODE_WRITE) {
                stop_dac(s);
                kfree(s->dma_dac.rawbuf);
                s->dma_adc.rawbuf = NULL;
        }
        s->open_mode &= ((~file->f_mode) & (FMODE_READ|FMODE_WRITE));
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        wake_up(&s->open_wait);
        unlock_kernel();
        return 0;
        init_waitqueue_head(&s->dma_adc.wait);
        init_waitqueue_head(&s->dma_dac.wait);
        init_waitqueue_head(&s->open_wait);
-       init_MUTEX(&s->open_sem);
+       mutex_init(&s->open_mutex);
        spin_lock_init(&s->lock);
 
        s->codec = ac97_alloc_codec();
 
 #include <linux/soundcard.h>
 #include <linux/slab.h>
 #include <linux/kdev_t.h>
+#include <linux/mutex.h>
+
 #include <asm/uaccess.h>
 #include <asm/io.h>
 
 
        /* locking */
        int            users;
-       struct semaphore lock;
+       struct mutex lock;
 
        /* risc instructions */
        unsigned int   risc_size;
 static int btaudio_dsp_open(struct inode *inode, struct file *file,
                            struct btaudio *bta, int analog)
 {
-       down(&bta->lock);
+       mutex_lock(&bta->lock);
        if (bta->users)
                goto busy;
        bta->users++;
        bta->read_count = 0;
        bta->sampleshift = 0;
 
-       up(&bta->lock);
+       mutex_unlock(&bta->lock);
        return 0;
 
  busy:
-       up(&bta->lock);
+       mutex_unlock(&bta->lock);
        return -EBUSY;
 }
 
 {
        struct btaudio *bta = file->private_data;
 
-       down(&bta->lock);
+       mutex_lock(&bta->lock);
        if (bta->recording)
                stop_recording(bta);
        bta->users--;
-       up(&bta->lock);
+       mutex_unlock(&bta->lock);
        return 0;
 }
 
        DECLARE_WAITQUEUE(wait, current);
 
        add_wait_queue(&bta->readq, &wait);
-       down(&bta->lock);
+       mutex_lock(&bta->lock);
        while (swcount > 0) {
                if (0 == bta->read_count) {
                        if (!bta->recording) {
                                        ret = -EAGAIN;
                                break;
                        }
-                       up(&bta->lock);
+                       mutex_unlock(&bta->lock);
                        current->state = TASK_INTERRUPTIBLE;
                        schedule();
-                       down(&bta->lock);
+                       mutex_lock(&bta->lock);
                        if(signal_pending(current)) {
                                if (0 == ret)
                                        ret = -EINTR;
                if (bta->read_offset == bta->buf_size)
                        bta->read_offset = 0;
        }
-       up(&bta->lock);
+       mutex_unlock(&bta->lock);
        remove_wait_queue(&bta->readq, &wait);
        current->state = TASK_RUNNING;
        return ret;
                        bta->decimation  = 0;
                }
                if (bta->recording) {
-                       down(&bta->lock);
+                       mutex_lock(&bta->lock);
                        stop_recording(bta);
                        start_recording(bta);
-                       up(&bta->lock);
+                       mutex_unlock(&bta->lock);
                }
                /* fall through */
         case SOUND_PCM_READ_RATE:
                        else
                                bta->bits = 16;
                        if (bta->recording) {
-                               down(&bta->lock);
+                               mutex_lock(&bta->lock);
                                stop_recording(bta);
                                start_recording(bta);
-                               up(&bta->lock);
+                               mutex_unlock(&bta->lock);
                        }
                }
                if (debug)
 
         case SNDCTL_DSP_RESET:
                if (bta->recording) {
-                       down(&bta->lock);
+                       mutex_lock(&bta->lock);
                        stop_recording(bta);
-                       up(&bta->lock);
+                       mutex_unlock(&bta->lock);
                }
                return 0;
         case SNDCTL_DSP_GETBLKSIZE:
        if (rate)
                bta->rate = rate;
        
-       init_MUTEX(&bta->lock);
+       mutex_init(&bta->lock);
         init_waitqueue_head(&bta->readq);
 
        if (-1 != latency) {
 
 #endif
 #ifdef CONFIG_SOUND_CMPCI_JOYSTICK
 #include <linux/gameport.h>
+#include <linux/mutex.h>
+
 #endif
 
 /* --------------------------------------------------------------------- */
        unsigned char fmt, enable;
 
        spinlock_t lock;
-       struct semaphore open_sem;
+       struct mutex open_mutex;
        mode_t open_mode;
        wait_queue_head_t open_wait;
 
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & file->f_mode) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        if (file->f_mode & FMODE_READ) {
                s->status &= ~DO_BIGENDIAN_R;
        }
        set_fmt(s, fmtm, fmts);
        s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
        lock_kernel();
        if (file->f_mode & FMODE_WRITE)
                drain_dac(s, file->f_flags & O_NONBLOCK);
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        if (file->f_mode & FMODE_WRITE) {
                stop_dac(s);
 
                s->status &= ~DO_BIGENDIAN_R;
        }
        s->open_mode &= ~(file->f_mode & (FMODE_READ|FMODE_WRITE));
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        wake_up(&s->open_wait);
        unlock_kernel();
        return 0;
        init_waitqueue_head(&s->dma_adc.wait);
        init_waitqueue_head(&s->dma_dac.wait);
        init_waitqueue_head(&s->open_wait);
-       init_MUTEX(&s->open_sem);
+       mutex_init(&s->open_mutex);
        spin_lock_init(&s->lock);
        s->magic = CM_MAGIC;
        s->dev = pcidev;
 
 #include <linux/init.h>
 #include <linux/poll.h>
 #include <linux/ac97_codec.h>
+#include <linux/mutex.h>
 
 #include <asm/io.h>
 #include <asm/dma.h>
        struct cs_card *card;   /* Card info */
 
        /* single open lock mechanism, only used for recording */
-       struct semaphore open_sem;
+       struct mutex open_mutex;
        wait_queue_head_t open_wait;
 
        /* file mode */
                unsigned subdivision;
        } dmabuf;
        /* Guard against mmap/write/read races */
-       struct semaphore sem;
+       struct mutex sem;
 };
 
 struct cs_card {
                unsigned char ibuf[CS_MIDIINBUF];
                unsigned char obuf[CS_MIDIOUTBUF];
                mode_t open_mode;
-               struct semaphore open_sem;
+               struct mutex open_mutex;
        } midi;
        struct cs46xx_pm pm;
 };
 {
        int ret;
        
-       down(&state->sem);
+       mutex_lock(&state->sem);
        ret = __prog_dmabuf(state);
-       up(&state->sem);
+       mutex_unlock(&state->sem);
        
        return ret;
 }
 
         file->private_data = card;
         /* wait for device to become free */
-        down(&card->midi.open_sem);
+        mutex_lock(&card->midi.open_mutex);
         while (card->midi.open_mode & file->f_mode) {
                 if (file->f_flags & O_NONBLOCK) {
-                        up(&card->midi.open_sem);
+                        mutex_unlock(&card->midi.open_mutex);
                         return -EBUSY;
                 }
-                up(&card->midi.open_sem);
+                mutex_unlock(&card->midi.open_mutex);
                 interruptible_sleep_on(&card->midi.open_wait);
                 if (signal_pending(current))
                         return -ERESTARTSYS;
-                down(&card->midi.open_sem);
+                mutex_lock(&card->midi.open_mutex);
         }
         spin_lock_irqsave(&card->midi.lock, flags);
         if (!(card->midi.open_mode & (FMODE_READ | FMODE_WRITE))) {
         }
         spin_unlock_irqrestore(&card->midi.lock, flags);
         card->midi.open_mode |= (file->f_mode & (FMODE_READ | FMODE_WRITE));
-        up(&card->midi.open_sem);
+        mutex_unlock(&card->midi.open_mutex);
         return 0;
 }
 
                 remove_wait_queue(&card->midi.owait, &wait);
                 current->state = TASK_RUNNING;
         }
-        down(&card->midi.open_sem);
+        mutex_lock(&card->midi.open_mutex);
         card->midi.open_mode &= (~(file->f_mode & (FMODE_READ | FMODE_WRITE)));
-        up(&card->midi.open_sem);
+        mutex_unlock(&card->midi.open_mutex);
         wake_up(&card->midi.open_wait);
         return 0;
 }
        if (!access_ok(VERIFY_WRITE, buffer, count))
                return -EFAULT;
        
-       down(&state->sem);
+       mutex_lock(&state->sem);
        if (!dmabuf->ready && (ret = __prog_dmabuf(state)))
                goto out2;
 
                                if (!ret) ret = -EAGAIN;
                                goto out;
                        }
-                       up(&state->sem);
+                       mutex_unlock(&state->sem);
                        schedule();
                        if (signal_pending(current)) {
                                if(!ret) ret = -ERESTARTSYS;
                                goto out;
                        }
-                       down(&state->sem);
+                       mutex_lock(&state->sem);
                        if (dmabuf->mapped) 
                        {
                                if(!ret)
 out:
        remove_wait_queue(&state->dmabuf.wait, &wait);
 out2:
-       up(&state->sem);
+       mutex_unlock(&state->sem);
        set_current_state(TASK_RUNNING);
        CS_DBGOUT(CS_WAVE_READ | CS_FUNCTION, 4, 
                printk("cs46xx: cs_read()- %zd\n",ret) );
                return -EFAULT;
        dmabuf = &state->dmabuf;
 
-       down(&state->sem);
+       mutex_lock(&state->sem);
        if (dmabuf->mapped)
        {
                ret = -ENXIO;
                                if (!ret) ret = -EAGAIN;
                                goto out;
                        }
-                       up(&state->sem);
+                       mutex_unlock(&state->sem);
                        schedule();
                        if (signal_pending(current)) {
                                if(!ret) ret = -ERESTARTSYS;
                                goto out;
                        }
-                       down(&state->sem);
+                       mutex_lock(&state->sem);
                        if (dmabuf->mapped)
                        {
                                if(!ret)
                start_dac(state);
        }
 out:
-       up(&state->sem);
+       mutex_unlock(&state->sem);
        remove_wait_queue(&state->dmabuf.wait, &wait);
        set_current_state(TASK_RUNNING);
 
                goto out;
        }
 
-       down(&state->sem);      
+       mutex_lock(&state->sem);
        dmabuf = &state->dmabuf;
        if (cs4x_pgoff(vma) != 0)
        {
 
        CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_mmap()-\n") );
 out:
-       up(&state->sem);
+       mutex_unlock(&state->sem);
        return ret;     
 }
 
                        if (state == NULL)
                                return -ENOMEM;
                        memset(state, 0, sizeof(struct cs_state));
-                       init_MUTEX(&state->sem);
+                       mutex_init(&state->sem);
                        dmabuf = &state->dmabuf;
                        dmabuf->pbuf = (void *)get_zeroed_page(GFP_KERNEL | GFP_DMA);
                        if(dmabuf->pbuf==NULL)
                state->virt = 0;
                state->magic = CS_STATE_MAGIC;
                init_waitqueue_head(&dmabuf->wait);
-               init_MUTEX(&state->open_sem);
+               mutex_init(&state->open_mutex);
                file->private_data = card;
 
-               down(&state->open_sem);
+               mutex_lock(&state->open_mutex);
 
                /* set default sample format. According to OSS Programmer's Guide  /dev/dsp
                   should be default to unsigned 8-bits, mono, with sample rate 8kHz and
                cs_set_divisor(dmabuf);
 
                state->open_mode |= FMODE_READ;
-               up(&state->open_sem);
+               mutex_unlock(&state->open_mutex);
        }
        if(file->f_mode & FMODE_WRITE)
        {
                        if (state == NULL)
                                return -ENOMEM;
                        memset(state, 0, sizeof(struct cs_state));
-                       init_MUTEX(&state->sem);
+                       mutex_init(&state->sem);
                        dmabuf = &state->dmabuf;
                        dmabuf->pbuf = (void *)get_zeroed_page(GFP_KERNEL | GFP_DMA);
                        if(dmabuf->pbuf==NULL)
                state->virt = 1;
                state->magic = CS_STATE_MAGIC;
                init_waitqueue_head(&dmabuf->wait);
-               init_MUTEX(&state->open_sem);
+               mutex_init(&state->open_mutex);
                file->private_data = card;
 
-               down(&state->open_sem);
+               mutex_lock(&state->open_mutex);
 
                /* set default sample format. According to OSS Programmer's Guide  /dev/dsp
                   should be default to unsigned 8-bits, mono, with sample rate 8kHz and
                cs_set_divisor(dmabuf);
 
                state->open_mode |= FMODE_WRITE;
-               up(&state->open_sem);
+               mutex_unlock(&state->open_mutex);
                if((ret = prog_dmabuf(state)))
                        return ret;
        }
                        cs_clear_tail(state);
                        drain_dac(state, file->f_flags & O_NONBLOCK);
                        /* stop DMA state machine and free DMA buffers/channels */
-                       down(&state->open_sem);
+                       mutex_lock(&state->open_mutex);
                        stop_dac(state);
                        dealloc_dmabuf(state);
                        state->card->free_pcm_channel(state->card, dmabuf->channel->num);
                        free_page((unsigned long)state->dmabuf.pbuf);
 
-                       /* we're covered by the open_sem */
-                       up(&state->open_sem);
+                       /* we're covered by the open_mutex */
+                       mutex_unlock(&state->open_mutex);
                        state->card->states[state->virt] = NULL;
                        state->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
 
                {
                        CS_DBGOUT(CS_RELEASE, 2, printk("cs46xx: cs_release() FMODE_READ\n") );
                        dmabuf = &state->dmabuf;
-                       down(&state->open_sem);
+                       mutex_lock(&state->open_mutex);
                        stop_adc(state);
                        dealloc_dmabuf(state);
                        state->card->free_pcm_channel(state->card, dmabuf->channel->num);
                        free_page((unsigned long)state->dmabuf.pbuf);
 
-                       /* we're covered by the open_sem */
-                       up(&state->open_sem);
+                       /* we're covered by the open_mutex */
+                       mutex_unlock(&state->open_mutex);
                        state->card->states[state->virt] = NULL;
                        state->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
 
        }
 
         init_waitqueue_head(&card->midi.open_wait);
-        init_MUTEX(&card->midi.open_sem);
+        mutex_init(&card->midi.open_mutex);
         init_waitqueue_head(&card->midi.iwait);
         init_waitqueue_head(&card->midi.owait);
         cs461x_pokeBA0(card, BA0_MIDCR, MIDCR_MRST);   
 
 #include <linux/gameport.h>
 #include <linux/wait.h>
 #include <linux/dma-mapping.h>
+#include <linux/mutex.h>
 
 #include <asm/io.h>
 #include <asm/page.h>
        unsigned sctrl;
 
        spinlock_t lock;
-       struct semaphore open_sem;
+       struct mutex open_mutex;
        mode_t open_mode;
        wait_queue_head_t open_wait;
 
        struct gameport *gameport;
 #endif
 
-       struct semaphore sem;
+       struct mutex mutex;
 };
 
 /* --------------------------------------------------------------------- */
                return -ENXIO;
        if (!access_ok(VERIFY_WRITE, buffer, count))
                return -EFAULT;
-       down(&s->sem);  
+       mutex_lock(&s->mutex);
        if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
                goto out;
         
                                        ret = -EAGAIN;
                                goto out;
                        }
-                       up(&s->sem);
+                       mutex_unlock(&s->mutex);
                        schedule();
                        if (signal_pending(current)) {
                                if (!ret)
                                        ret = -ERESTARTSYS;
                                goto out;
                        }
-                       down(&s->sem);
+                       mutex_lock(&s->mutex);
                        if (s->dma_adc.mapped)
                        {
                                ret = -ENXIO;
                        start_adc(s);
        }
 out:
-       up(&s->sem);
+       mutex_unlock(&s->mutex);
         remove_wait_queue(&s->dma_adc.wait, &wait);
        set_current_state(TASK_RUNNING);
        return ret;
                return -ENXIO;
        if (!access_ok(VERIFY_READ, buffer, count))
                return -EFAULT;
-       down(&s->sem);  
+       mutex_lock(&s->mutex);
        if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
                goto out;
        ret = 0;
                                        ret = -EAGAIN;
                                goto out;
                        }
-                       up(&s->sem);
+                       mutex_unlock(&s->mutex);
                        schedule();
                        if (signal_pending(current)) {
                                if (!ret)
                                        ret = -ERESTARTSYS;
                                goto out;       
                        }
-                       down(&s->sem);
+                       mutex_lock(&s->mutex);
                        if (s->dma_dac2.mapped)
                        {
                        ret = -ENXIO;
                        start_dac2(s);
        }
 out:
-       up(&s->sem);
+       mutex_unlock(&s->mutex);
         remove_wait_queue(&s->dma_dac2.wait, &wait);
        set_current_state(TASK_RUNNING);
        return ret;
 
        VALIDATE_STATE(s);
        lock_kernel();
-       down(&s->sem);
+       mutex_lock(&s->mutex);
        if (vma->vm_flags & VM_WRITE) {
                if ((ret = prog_dmabuf_dac2(s)) != 0) {
                        goto out;
        }
        db->mapped = 1;
 out:
-       up(&s->sem);
+       mutex_unlock(&s->mutex);
        unlock_kernel();
        return ret;
 }
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & file->f_mode) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        spin_lock_irqsave(&s->lock, flags);
        if (!(s->open_mode & (FMODE_READ|FMODE_WRITE)))
        outl(s->ctrl, s->io+ES1370_REG_CONTROL);
        spin_unlock_irqrestore(&s->lock, flags);
        s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
-       up(&s->open_sem);
-       init_MUTEX(&s->sem);
+       mutex_unlock(&s->open_mutex);
+       mutex_init(&s->mutex);
        return nonseekable_open(inode, file);
 }
 
        lock_kernel();
        if (file->f_mode & FMODE_WRITE)
                drain_dac2(s, file->f_flags & O_NONBLOCK);
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        if (file->f_mode & FMODE_WRITE) {
                stop_dac2(s);
                synchronize_irq(s->irq);
        }
        s->open_mode &= ~(file->f_mode & (FMODE_READ|FMODE_WRITE));
        wake_up(&s->open_wait);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        unlock_kernel();
        return 0;
 }
                return -EINVAL;
                file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & FMODE_DAC) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        s->dma_dac1.ossfragshift = s->dma_dac1.ossmaxfrags = s->dma_dac1.subdivision = 0;
        s->dma_dac1.enabled = 1;
        outl(s->ctrl, s->io+ES1370_REG_CONTROL);
        spin_unlock_irqrestore(&s->lock, flags);
        s->open_mode |= FMODE_DAC;
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
        VALIDATE_STATE(s);
        lock_kernel();
        drain_dac1(s, file->f_flags & O_NONBLOCK);
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        stop_dac1(s);
        dealloc_dmabuf(s, &s->dma_dac1);
        s->open_mode &= ~FMODE_DAC;
        wake_up(&s->open_wait);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        unlock_kernel();
        return 0;
 }
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & (file->f_mode << FMODE_MIDI_SHIFT)) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        spin_lock_irqsave(&s->lock, flags);
        if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
        es1370_handle_midi(s);
        spin_unlock_irqrestore(&s->lock, flags);
        s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
                remove_wait_queue(&s->midi.owait, &wait);
                set_current_state(TASK_RUNNING);
        }
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        s->open_mode &= ~((file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ|FMODE_MIDI_WRITE));
        spin_lock_irqsave(&s->lock, flags);
        if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
        }
        spin_unlock_irqrestore(&s->lock, flags);
        wake_up(&s->open_wait);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        unlock_kernel();
        return 0;
 }
        init_waitqueue_head(&s->open_wait);
        init_waitqueue_head(&s->midi.iwait);
        init_waitqueue_head(&s->midi.owait);
-       init_MUTEX(&s->open_sem);
+       mutex_init(&s->open_mutex);
        spin_lock_init(&s->lock);
        s->magic = ES1370_MAGIC;
        s->dev = pcidev;
 
 #include <linux/gameport.h>
 #include <linux/wait.h>
 #include <linux/dma-mapping.h>
+#include <linux/mutex.h>
 
 #include <asm/io.h>
 #include <asm/page.h>
        unsigned dac1rate, dac2rate, adcrate;
 
        spinlock_t lock;
-       struct semaphore open_sem;
+       struct mutex open_mutex;
        mode_t open_mode;
        wait_queue_head_t open_wait;
 
        struct gameport *gameport;
 #endif
 
-       struct semaphore sem;
+       struct mutex sem;
 };
 
 /* --------------------------------------------------------------------- */
                return -ENXIO;
        if (!access_ok(VERIFY_WRITE, buffer, count))
                return -EFAULT;
-       down(&s->sem);
+       mutex_lock(&s->sem);
        if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
                goto out2;
        
                                        ret = -EAGAIN;
                                goto out;
                        }
-                       up(&s->sem);
+                       mutex_unlock(&s->sem);
                        schedule();
                        if (signal_pending(current)) {
                                if (!ret)
                                        ret = -ERESTARTSYS;
                                goto out2;
                        }
-                       down(&s->sem);
+                       mutex_lock(&s->sem);
                        if (s->dma_adc.mapped)
                        {
                                ret = -ENXIO;
                        start_adc(s);
        }
 out:
-       up(&s->sem);
+       mutex_unlock(&s->sem);
 out2:
        remove_wait_queue(&s->dma_adc.wait, &wait);
        set_current_state(TASK_RUNNING);
                return -ENXIO;
        if (!access_ok(VERIFY_READ, buffer, count))
                return -EFAULT;
-       down(&s->sem);  
+       mutex_lock(&s->sem);
        if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
                goto out3;
        ret = 0;
                                        ret = -EAGAIN;
                                goto out;
                        }       
-                       up(&s->sem);
+                       mutex_unlock(&s->sem);
                        schedule();
                        if (signal_pending(current)) {
                                if (!ret)
                                        ret = -ERESTARTSYS;
                                goto out2;
                        }
-                       down(&s->sem);
+                       mutex_lock(&s->sem);
                        if (s->dma_dac2.mapped)
                        {
                                ret = -ENXIO;
                        start_dac2(s);
        }
 out:
-       up(&s->sem);
+       mutex_unlock(&s->sem);
 out2:
        remove_wait_queue(&s->dma_dac2.wait, &wait);
 out3:  
 
        VALIDATE_STATE(s);
        lock_kernel();
-       down(&s->sem);
+       mutex_lock(&s->sem);
        
        if (vma->vm_flags & VM_WRITE) {
                if ((ret = prog_dmabuf_dac2(s)) != 0) {
        }
        db->mapped = 1;
 out:
-       up(&s->sem);
+       mutex_unlock(&s->sem);
        unlock_kernel();
        return ret;
 }
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & file->f_mode) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        if (file->f_mode & FMODE_READ) {
                s->dma_adc.ossfragshift = s->dma_adc.ossmaxfrags = s->dma_adc.subdivision = 0;
        outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
        spin_unlock_irqrestore(&s->lock, flags);
        s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
-       up(&s->open_sem);
-       init_MUTEX(&s->sem);
+       mutex_unlock(&s->open_mutex);
+       mutex_init(&s->sem);
        return nonseekable_open(inode, file);
 }
 
        lock_kernel();
        if (file->f_mode & FMODE_WRITE)
                drain_dac2(s, file->f_flags & O_NONBLOCK);
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        if (file->f_mode & FMODE_WRITE) {
                stop_dac2(s);
                dealloc_dmabuf(s, &s->dma_dac2);
                dealloc_dmabuf(s, &s->dma_adc);
        }
        s->open_mode &= ~(file->f_mode & (FMODE_READ|FMODE_WRITE));
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        wake_up(&s->open_wait);
        unlock_kernel();
        return 0;
                return -EINVAL;
                file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & FMODE_DAC) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        s->dma_dac1.ossfragshift = s->dma_dac1.ossmaxfrags = s->dma_dac1.subdivision = 0;
        s->dma_dac1.enabled = 1;
        outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
        spin_unlock_irqrestore(&s->lock, flags);
        s->open_mode |= FMODE_DAC;
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
        VALIDATE_STATE(s);
        lock_kernel();
        drain_dac1(s, file->f_flags & O_NONBLOCK);
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        stop_dac1(s);
        dealloc_dmabuf(s, &s->dma_dac1);
        s->open_mode &= ~FMODE_DAC;
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        wake_up(&s->open_wait);
        unlock_kernel();
        return 0;
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & (file->f_mode << FMODE_MIDI_SHIFT)) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        spin_lock_irqsave(&s->lock, flags);
        if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
        es1371_handle_midi(s);
        spin_unlock_irqrestore(&s->lock, flags);
        s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
                remove_wait_queue(&s->midi.owait, &wait);
                set_current_state(TASK_RUNNING);
        }
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        s->open_mode &= ~((file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ|FMODE_MIDI_WRITE));
        spin_lock_irqsave(&s->lock, flags);
        if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
                outl(s->ctrl, s->io+ES1371_REG_CONTROL);
        }
        spin_unlock_irqrestore(&s->lock, flags);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        wake_up(&s->open_wait);
        unlock_kernel();
        return 0;
        init_waitqueue_head(&s->open_wait);
        init_waitqueue_head(&s->midi.iwait);
        init_waitqueue_head(&s->midi.owait);
-       init_MUTEX(&s->open_sem);
+       mutex_init(&s->open_mutex);
        spin_lock_init(&s->lock);
        s->magic = ES1371_MAGIC;
        s->dev = pcidev;
 
 #include <linux/gameport.h>
 #include <linux/wait.h>
 #include <linux/dma-mapping.h>
+#include <linux/mutex.h>
+
 
 #include <asm/io.h>
 #include <asm/page.h>
        unsigned ena;
 
        spinlock_t lock;
-       struct semaphore open_sem;
+       struct mutex open_mutex;
        mode_t open_mode;
        wait_queue_head_t open_wait;
 
        lock_kernel();
        if (file->f_mode & FMODE_WRITE)
                drain_dac(s, file->f_flags & O_NONBLOCK);
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        if (file->f_mode & FMODE_WRITE) {
                stop_dac(s);
                outb(0, s->iobase+6);  /* disable DMA */
        }
        s->open_mode &= ~(FMODE_READ | FMODE_WRITE);
        wake_up(&s->open_wait);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        unlock_kernel();
        return 0;
 }
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & (FMODE_READ | FMODE_WRITE)) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        s->fmt = AFMT_U8;
        s->channels = 1;
        s->dma_dac.ossfragshift = s->dma_dac.ossmaxfrags = s->dma_dac.subdivision = 0;
        s->dma_dac.enabled = 1;
        s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        prog_codec(s);
        return nonseekable_open(inode, file);
 }
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & (file->f_mode << FMODE_MIDI_SHIFT)) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        spin_lock_irqsave(&s->lock, flags);
        if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
        }
        spin_unlock_irqrestore(&s->lock, flags);
        s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
                remove_wait_queue(&s->midi.owait, &wait);
                set_current_state(TASK_RUNNING);
        }
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        s->open_mode &= ~((file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ|FMODE_MIDI_WRITE));
        spin_lock_irqsave(&s->lock, flags);
        if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
        }
        spin_unlock_irqrestore(&s->lock, flags);
        wake_up(&s->open_wait);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        unlock_kernel();
        return 0;
 }
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & FMODE_DMFM) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        if (!request_region(s->sbbase, FMSYNTH_EXTENT, "ESS Solo1")) {
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                printk(KERN_ERR "solo1: FM synth io ports in use, opl3 loaded?\n");
                return -EBUSY;
        }
        outb(5, s->sbbase+2);
        outb(1, s->sbbase+3);  /* enable OPL3 */
        s->open_mode |= FMODE_DMFM;
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
 
        VALIDATE_STATE(s);
        lock_kernel();
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        s->open_mode &= ~FMODE_DMFM;
        for (regb = 0xb0; regb < 0xb9; regb++) {
                outb(regb, s->sbbase);
        }
        release_region(s->sbbase, FMSYNTH_EXTENT);
        wake_up(&s->open_wait);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        unlock_kernel();
        return 0;
 }
        init_waitqueue_head(&s->open_wait);
        init_waitqueue_head(&s->midi.iwait);
        init_waitqueue_head(&s->midi.owait);
-       init_MUTEX(&s->open_sem);
+       mutex_init(&s->open_mutex);
        spin_lock_init(&s->lock);
        s->magic = SOLO1_MAGIC;
        s->dev = pcidev;
 
 #include <linux/interrupt.h>
 
 #include <linux/proc_fs.h>
+#include <linux/mutex.h>
 
 #include <asm/uaccess.h>
 #include <asm/io.h>
        unsigned long           iobase;
        int                     irq;
 
-       struct semaphore        open_sem;       /* Device access */
+       struct mutex            open_mutex;     /* Device access */
        spinlock_t              lock;           /* State */
 
        spinlock_t              ac97_lock;
        struct forte_chip *chip = forte; /* FIXME: HACK FROM HELL! */
 
        if (file->f_flags & O_NONBLOCK) {
-               if (down_trylock (&chip->open_sem)) {
+               if (!mutex_trylock(&chip->open_mutex)) {
                        DPRINTK ("%s: returning -EAGAIN\n", __FUNCTION__);
                        return -EAGAIN;
                }
        }
        else {
-               if (down_interruptible (&chip->open_sem)) {
+               if (mutex_lock_interruptible(&chip->open_mutex)) {
                        DPRINTK ("%s: returning -ERESTARTSYS\n", __FUNCTION__);
                        return -ERESTARTSYS;
                }
                spin_unlock_irq (&chip->lock);
        }
 
-       up (&chip->open_sem);
+       mutex_unlock(&chip->open_mutex);
 
        return ret;
 }
        memset (chip, 0, sizeof (struct forte_chip));
        chip->pci_dev = pci_dev;
 
-       init_MUTEX(&chip->open_sem);
+       mutex_init(&chip->open_mutex);
        spin_lock_init (&chip->lock);
        spin_lock_init (&chip->ac97_lock);
 
 
 #include <linux/dma-mapping.h>
 #include <linux/sound.h>
 #include <linux/soundcard.h>
+#include <linux/mutex.h>
+
 
 #include <asm/io.h>
 #include <asm/sgi/hpc3.h>
 
        wait_queue_head_t dma_wait;
        spinlock_t lock;
-       struct semaphore sem;
+       struct mutex sem;
 
        int usecount;                   /* recording and playback are
                                         * independent */
 
        if (!count)
                return 0;
-       if (down_interruptible(&adc->sem))
+       if (mutex_lock_interruptible(&adc->sem))
                return -EINTR;
        if (file->f_flags & O_NONBLOCK) {
                err = hal2_get_buffer(hal2, buffer, count);
                        }
                } while (count > 0 && err >= 0);
        }
-       up(&adc->sem);
+       mutex_unlock(&adc->sem);
 
        return err;
 }
 
        if (!count)
                return 0;
-       if (down_interruptible(&dac->sem))
+       if (mutex_lock_interruptible(&dac->sem))
                return -EINTR;
        if (file->f_flags & O_NONBLOCK) {
                err = hal2_add_buffer(hal2, buf, count);
                        }
                } while (count > 0 && err >= 0);
        }
-       up(&dac->sem);
+       mutex_unlock(&dac->sem);
 
        return err;
 }
        if (file->f_mode & FMODE_READ) {
                struct hal2_codec *adc = &hal2->adc;
 
-               down(&adc->sem);
+               mutex_lock(&adc->sem);
                hal2_stop_adc(hal2);
                hal2_free_adc_dmabuf(adc);
                adc->usecount--;
-               up(&adc->sem);
+               mutex_unlock(&adc->sem);
        }
        if (file->f_mode & FMODE_WRITE) {
                struct hal2_codec *dac = &hal2->dac;
 
-               down(&dac->sem);
+               mutex_lock(&dac->sem);
                hal2_sync_dac(hal2);
                hal2_free_dac_dmabuf(dac);
                dac->usecount--;
-               up(&dac->sem);
+               mutex_unlock(&dac->sem);
        }
 
        return 0;
        codec->pbus.pbusnr = index;
        codec->pbus.pbus = &hpc3->pbdma[index];
        init_waitqueue_head(&codec->dma_wait);
-       init_MUTEX(&codec->sem);
+       mutex_init(&codec->sem);
        spin_lock_init(&codec->lock);
 }
 
 
 #include <linux/smp_lock.h>
 #include <linux/ac97_codec.h>
 #include <linux/bitops.h>
+#include <linux/mutex.h>
+
 #include <asm/uaccess.h>
 
 #define DRIVER_VERSION "1.01"
        struct i810_card *card; /* Card info */
 
        /* single open lock mechanism, only used for recording */
-       struct semaphore open_sem;
+       struct mutex open_mutex;
        wait_queue_head_t open_wait;
 
        /* file mode */
        state->card = card;
        state->magic = I810_STATE_MAGIC;
        init_waitqueue_head(&dmabuf->wait);
-       init_MUTEX(&state->open_sem);
+       mutex_init(&state->open_mutex);
        file->private_data = state;
        dmabuf->trigger = 0;
 
                state->card = card;
                state->magic = I810_STATE_MAGIC;
                init_waitqueue_head(&dmabuf->wait);
-               init_MUTEX(&state->open_sem);
+               mutex_init(&state->open_mutex);
                dmabuf->fmt = I810_FMT_STEREO | I810_FMT_16BIT;
                dmabuf->trigger = PCM_ENABLE_OUTPUT;
                i810_set_spdif_output(state, -1, 0);
 
 #include <linux/smp_lock.h>
 #include <linux/ac97_codec.h>
 #include <linux/interrupt.h>
+#include <linux/mutex.h>
+
 #include <asm/io.h>
 #include <asm/dma.h>
 #include <asm/uaccess.h>
        unsigned dacrate, adcrate;
 
        spinlock_t lock;
-       struct semaphore open_sem;
+       struct mutex open_mutex;
        mode_t open_mode;
        wait_queue_head_t open_wait;
 
        }
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & file->f_mode) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
 
        spin_lock_irqsave(&s->lock, flags);
        spin_unlock_irqrestore(&s->lock, flags);
 
        s->open_mode |= (file->f_mode & (FMODE_READ | FMODE_WRITE));
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
        lock_kernel();
        if (file->f_mode & FMODE_WRITE)
                drain_dac(s, file->f_flags & O_NONBLOCK);
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        if (file->f_mode & FMODE_WRITE) {
                stop_dac(s);
                dealloc_dmabuf(s, &s->dma_dac);
                dealloc_dmabuf(s, &s->dma_adc);
        }
        s->open_mode &= ((~file->f_mode) & (FMODE_READ|FMODE_WRITE));
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        wake_up(&s->open_wait);
        unlock_kernel();
        return 0;
        init_waitqueue_head(&s->dma_adc.wait);
        init_waitqueue_head(&s->dma_dac.wait);
        init_waitqueue_head(&s->open_wait);
-       init_MUTEX(&s->open_sem);
+       mutex_init(&s->open_mutex);
        spin_lock_init(&s->lock);
        s->dev = pcidev;
        s->io = pci_resource_start(pcidev, 0);
 
 #include <linux/reboot.h>
 #include <linux/bitops.h>
 #include <linux/wait.h>
+#include <linux/mutex.h>
+
 
 #include <asm/current.h>
 #include <asm/dma.h>
        /* this locks around the oss state in the driver */
        spinlock_t lock;
        /* only let 1 be opening at a time */
-       struct semaphore open_sem;
+       struct mutex open_mutex;
        wait_queue_head_t open_wait;
        mode_t open_mode;
 
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & file->f_mode) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EWOULDBLOCK;
                }
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                interruptible_sleep_on(&s->open_wait);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
 
        /* under semaphore.. */
        if ((s->card->dmapages==NULL) && allocate_buffers(s)) {
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                return -ENOMEM;
        }
 
-       /* we're covered by the open_sem */
+       /* we're covered by the open_mutex */
        if( ! s->card->dsps_open )  {
                maestro_power(s->card,ACPI_D0);
                start_bob(s);
        set_fmt(s, fmtm, fmts);
        s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
 
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
        lock_kernel();
        if (file->f_mode & FMODE_WRITE)
                drain_dac(s, file->f_flags & O_NONBLOCK);
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        if (file->f_mode & FMODE_WRITE) {
                stop_dac(s);
        }
        }
                
        s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
-       /* we're covered by the open_sem */
+       /* we're covered by the open_mutex */
        M_printk("maestro: %d dsps now alive\n",s->card->dsps_open-1);
        if( --s->card->dsps_open <= 0) {
                s->card->dsps_open = 0;
                free_buffers(s);
                maestro_power(s->card,ACPI_D2);
        }
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        wake_up(&s->open_wait);
        unlock_kernel();
        return 0;
                init_waitqueue_head(&s->dma_dac.wait);
                init_waitqueue_head(&s->open_wait);
                spin_lock_init(&s->lock);
-               init_MUTEX(&s->open_sem);
+               mutex_init(&s->open_mutex);
                s->magic = ESS_STATE_MAGIC;
                
                s->apu[0] = 6*i;
 
 #include <linux/spinlock.h>
 #include <linux/ac97_codec.h>
 #include <linux/wait.h>
+#include <linux/mutex.h>
+
 
 #include <asm/io.h>
 #include <asm/dma.h>
                when irqhandler uses s->lock
                and m3_assp_read uses card->lock ?
                */
-    struct semaphore open_sem;
+    struct mutex open_mutex;
     wait_queue_head_t open_wait;
     mode_t open_mode;
 
     file->private_data = s;
 
     /* wait for device to become free */
-    down(&s->open_sem);
+    mutex_lock(&s->open_mutex);
     while (s->open_mode & file->f_mode) {
         if (file->f_flags & O_NONBLOCK) {
-            up(&s->open_sem);
+            mutex_unlock(&s->open_mutex);
             return -EWOULDBLOCK;
         }
-        up(&s->open_sem);
+        mutex_unlock(&s->open_mutex);
         interruptible_sleep_on(&s->open_wait);
         if (signal_pending(current))
             return -ERESTARTSYS;
-        down(&s->open_sem);
+        mutex_lock(&s->open_mutex);
     }
     
     spin_lock_irqsave(&c->lock, flags);
     set_fmt(s, fmtm, fmts);
     s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
 
-    up(&s->open_sem);
+    mutex_unlock(&s->open_mutex);
     spin_unlock_irqrestore(&c->lock, flags);
     return nonseekable_open(inode, file);
 }
     if (file->f_mode & FMODE_WRITE)
         drain_dac(s, file->f_flags & O_NONBLOCK);
 
-    down(&s->open_sem);
+    mutex_lock(&s->open_mutex);
     spin_lock_irqsave(&card->lock, flags);
 
     if (file->f_mode & FMODE_WRITE) {
     s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
 
     spin_unlock_irqrestore(&card->lock, flags);
-    up(&s->open_sem);
+    mutex_unlock(&s->open_mutex);
     wake_up(&s->open_wait);
 
     return 0;
         init_waitqueue_head(&s->dma_adc.wait);
         init_waitqueue_head(&s->dma_dac.wait);
         init_waitqueue_head(&s->open_wait);
-        init_MUTEX(&(s->open_sem));
+        mutex_init(&(s->open_mutex));
         s->magic = M3_STATE_MAGIC;
 
         m3_assp_client_init(s);
 
 #include <linux/spinlock.h>
 #include <linux/smp_lock.h>
 #include <linux/ac97_codec.h>
+#include <linux/mutex.h>
+
 #include <asm/io.h>
 #include <asm/dma.h>
 #include <asm/uaccess.h>
        unsigned short extended_status;
 
        spinlock_t lock;
-       struct semaphore open_sem;
+       struct mutex open_mutex;
        mode_t open_mode;
        wait_queue_head_t open_wait;
 
        file->private_data = s;
 
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & file->f_mode) {
 
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
 
        spin_lock_irqsave(&s->lock, flags);
  bailout:
        spin_unlock_irqrestore(&s->lock, flags);
 
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return ret;
 }
 
        lock_kernel();
        if (file->f_mode & FMODE_WRITE)
                drain_dac(s, file->f_flags & O_NONBLOCK);
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        if (file->f_mode & FMODE_WRITE) {
                stop_dac(s);
                dealloc_dmabuf(s, &s->dma_dac);
                dealloc_dmabuf(s, &s->dma_adc);
        }
        s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        wake_up(&s->open_wait);
        unlock_kernel();
        return 0;
        init_waitqueue_head(&s->dma_adc.wait);
        init_waitqueue_head(&s->dma_dac.wait);
        init_waitqueue_head(&s->open_wait);
-       init_MUTEX(&s->open_sem);
+       mutex_init(&s->open_mutex);
        spin_lock_init(&s->lock);
 
        s->dev = pcidev;
 
 #include <linux/interrupt.h>
 #include <linux/poll.h>
 #include <linux/wait.h>
+#include <linux/mutex.h>
 
 #include <asm/dma.h>
 #include <asm/page.h>
 
                /* waiting and locking */
                wait_queue_head_t wait;
-               struct semaphore  open_sem;
+               struct mutex  open_mutex;
                wait_queue_head_t open_wait;
 
        } dma[RME96xx_MAX_DEVS]; 
 
 static int rme96xx_dmabuf_init(rme96xx_info * s,struct dmabuf* dma,int ioffset,int ooffset) {
 
-       init_MUTEX(&dma->open_sem);
+       mutex_init(&dma->open_mutex);
        init_waitqueue_head(&dma->open_wait);
        init_waitqueue_head(&dma->wait);
        dma->s = s; 
        dma = &s->dma[devnum];
        f->private_data = dma;
        /* wait for device to become free */
-       down(&dma->open_sem);
+       mutex_lock(&dma->open_mutex);
        while (dma->open_mode & f->f_mode) {
                if (f->f_flags & O_NONBLOCK) {
-                       up(&dma->open_sem);
+                       mutex_unlock(&dma->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&dma->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&dma->open_sem);
+               mutex_unlock(&dma->open_mutex);
                schedule();
                remove_wait_queue(&dma->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&dma->open_sem);
+               mutex_lock(&dma->open_mutex);
        }
 
        COMM                ("hardware open")
 
        dma->open_mode |= (f->f_mode & (FMODE_READ | FMODE_WRITE));
        dma->opened = 1;
-       up(&dma->open_sem);
+       mutex_unlock(&dma->open_mutex);
 
        DBG(printk("device num %d open finished\n",devnum));
        return 0;
        }
 
        wake_up(&dma->open_wait);
-       up(&dma->open_sem);
+       mutex_unlock(&dma->open_mutex);
 
        return 0;
 }
 
 #include <linux/spinlock.h>
 #include <linux/smp_lock.h>
 #include <linux/gameport.h>
+#include <linux/mutex.h>
+
 
 #include <asm/io.h>
 #include <asm/uaccess.h>
        unsigned char fmt, enable;
 
        spinlock_t lock;
-       struct semaphore open_sem;
+       struct mutex open_mutex;
        mode_t open_mode;
        wait_queue_head_t open_wait;
 
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & file->f_mode) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        if (file->f_mode & FMODE_READ) {
                fmtm &= ~((SV_CFMT_STEREO | SV_CFMT_16BIT) << SV_CFMT_CSHIFT);
        }
        set_fmt(s, fmtm, fmts);
        s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
        lock_kernel();
        if (file->f_mode & FMODE_WRITE)
                drain_dac(s, file->f_flags & O_NONBLOCK);
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        if (file->f_mode & FMODE_WRITE) {
                stop_dac(s);
                dealloc_dmabuf(s, &s->dma_dac);
        }
        s->open_mode &= ~(file->f_mode & (FMODE_READ|FMODE_WRITE));
        wake_up(&s->open_wait);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        unlock_kernel();
        return 0;
 }
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & (file->f_mode << FMODE_MIDI_SHIFT)) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        spin_lock_irqsave(&s->lock, flags);
        if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
        }
        spin_unlock_irqrestore(&s->lock, flags);
        s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
                remove_wait_queue(&s->midi.owait, &wait);
                set_current_state(TASK_RUNNING);
        }
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        s->open_mode &= ~((file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ|FMODE_MIDI_WRITE));
        spin_lock_irqsave(&s->lock, flags);
        if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
        }
        spin_unlock_irqrestore(&s->lock, flags);
        wake_up(&s->open_wait);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        unlock_kernel();
        return 0;
 }
                VALIDATE_STATE(s);
        file->private_data = s;
        /* wait for device to become free */
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        while (s->open_mode & FMODE_DMFM) {
                if (file->f_flags & O_NONBLOCK) {
-                       up(&s->open_sem);
+                       mutex_unlock(&s->open_mutex);
                        return -EBUSY;
                }
                add_wait_queue(&s->open_wait, &wait);
                __set_current_state(TASK_INTERRUPTIBLE);
-               up(&s->open_sem);
+               mutex_unlock(&s->open_mutex);
                schedule();
                remove_wait_queue(&s->open_wait, &wait);
                set_current_state(TASK_RUNNING);
                if (signal_pending(current))
                        return -ERESTARTSYS;
-               down(&s->open_sem);
+               mutex_lock(&s->open_mutex);
        }
        /* init the stuff */
        outb(1, s->iosynth);
        outb(5, s->iosynth+2);
        outb(1, s->iosynth+3);  /* enable OPL3 */
        s->open_mode |= FMODE_DMFM;
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        return nonseekable_open(inode, file);
 }
 
 
        VALIDATE_STATE(s);
        lock_kernel();
-       down(&s->open_sem);
+       mutex_lock(&s->open_mutex);
        s->open_mode &= ~FMODE_DMFM;
        for (regb = 0xb0; regb < 0xb9; regb++) {
                outb(regb, s->iosynth);
                outb(0, s->iosynth+3);
        }
        wake_up(&s->open_wait);
-       up(&s->open_sem);
+       mutex_unlock(&s->open_mutex);
        unlock_kernel();
        return 0;
 }
        init_waitqueue_head(&s->open_wait);
        init_waitqueue_head(&s->midi.iwait);
        init_waitqueue_head(&s->midi.owait);
-       init_MUTEX(&s->open_sem);
+       mutex_init(&s->open_mutex);
        spin_lock_init(&s->lock);
        s->magic = SV_MAGIC;
        s->dev = pcidev;
 
 #include <linux/init.h>
 #include <linux/poll.h>
 #include <linux/smp_lock.h>
+#include <linux/mutex.h>
 
 #include <asm/byteorder.h>
 #include <asm/dma.h>
        unsigned conversion:1;  // conversion from 16 to 8 bit in progress
        unsigned ena;
        spinlock_t lock;
-       struct semaphore open_sem;
-       struct semaphore open_sem_adc;
-       struct semaphore open_sem_dac;
+       struct mutex open_mutex;
+       struct mutex open_sem_adc;
+       struct mutex open_sem_dac;
        mode_t open_mode;
        wait_queue_head_t open_wait;
        wait_queue_head_t open_wait_adc;
 
        if (file->f_mode & FMODE_WRITE) {
                drain_dac(s, file->f_flags & O_NONBLOCK);
-               down(&s->open_sem_dac);
+               mutex_lock(&s->open_sem_dac);
                stop_dac(s);
                dealloc_dmabuf(s, &s->dma_dac);
                s->open_mode &= ~FMODE_WRITE;
-               up(&s->open_sem_dac);
+               mutex_unlock(&s->open_sem_dac);
                wake_up(&s->open_wait_dac);
        }
        if (file->f_mode & FMODE_READ) {
                drain_adc(s, file->f_flags & O_NONBLOCK);
-               down(&s->open_sem_adc);
+               mutex_lock(&s->open_sem_adc);
                stop_adc(s);
                dealloc_dmabuf(s, &s->dma_adc);
                s->open_mode &= ~FMODE_READ;
-               up(&s->open_sem_adc);
+               mutex_unlock(&s->open_sem_adc);
                wake_up(&s->open_wait_adc);
        }
        return 0;
                                 ;
                 }
           
-               down(&s->open_sem_dac);
+               mutex_lock(&s->open_sem_dac);
                while (s->open_mode & FMODE_WRITE) {
                        if (file->f_flags & O_NONBLOCK) {
-                               up(&s->open_sem_dac);
+                               mutex_unlock(&s->open_sem_dac);
                                return -EBUSY;
                        }
-                       up(&s->open_sem_dac);
+                       mutex_unlock(&s->open_sem_dac);
                        interruptible_sleep_on(&s->open_wait_dac);
 
                        if (signal_pending(current)) {
                                 printk("open - sig pending\n");
                                return -ERESTARTSYS;
                         }
-                       down(&s->open_sem_dac);
+                       mutex_lock(&s->open_sem_dac);
                }
        }
        if (file->f_mode & FMODE_READ) {
-               down(&s->open_sem_adc);
+               mutex_lock(&s->open_sem_adc);
                while (s->open_mode & FMODE_READ) {
                        if (file->f_flags & O_NONBLOCK) {
-                               up(&s->open_sem_adc);
+                               mutex_unlock(&s->open_sem_adc);
                                return -EBUSY;
                        }
-                       up(&s->open_sem_adc);
+                       mutex_unlock(&s->open_sem_adc);
                        interruptible_sleep_on(&s->open_wait_adc);
 
                        if (signal_pending(current)) {
                                 printk("open - sig pending\n");
                                return -ERESTARTSYS;
                         }
-                       down(&s->open_sem_adc);
+                       mutex_lock(&s->open_sem_adc);
                }
        }
        s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
                s->ena &= ~FMODE_READ;
                s->dma_adc.ossfragshift = s->dma_adc.ossmaxfrags =
                    s->dma_adc.subdivision = 0;
-               up(&s->open_sem_adc);
+               mutex_unlock(&s->open_sem_adc);
 
                if (prog_dmabuf_adc(s)) {
                        CS_DBGOUT(CS_OPEN | CS_ERROR, 2, printk(KERN_ERR
                s->ena &= ~FMODE_WRITE;
                s->dma_dac.ossfragshift = s->dma_dac.ossmaxfrags =
                    s->dma_dac.subdivision = 0;
-               up(&s->open_sem_dac);
+               mutex_unlock(&s->open_sem_dac);
 
                if (prog_dmabuf_dac(s)) {
                        CS_DBGOUT(CS_OPEN | CS_ERROR, 2, printk(KERN_ERR
        init_waitqueue_head(&s->open_wait);
        init_waitqueue_head(&s->open_wait_adc);
        init_waitqueue_head(&s->open_wait_dac);
-       init_MUTEX(&s->open_sem_adc);
-       init_MUTEX(&s->open_sem_dac);
+       mutex_init(&s->open_sem_adc);
+       mutex_init(&s->open_sem_dac);
        spin_lock_init(&s->lock);
 
         s->irq = K_INT_SER_1;
 
  *
  *     Lock order (high->low)
  *             lock    -       hardware lock
- *             open_sem -      guard opens
+ *             open_mutex -    guard opens
  *             sem     -       guard dmabuf, write re-entry etc
  */
 
 #include <linux/pm.h>
 #include <linux/gameport.h>
 #include <linux/kernel.h>
+#include <linux/mutex.h>
+
 #include <asm/uaccess.h>
 #include <asm/io.h>
 #include <asm/dma.h>
        unsigned chans_num;
        unsigned long fmt_flag;
        /* Guard against mmap/write/read races */
-       struct semaphore sem;
+       struct mutex sem;
 
 };
 
        struct trident_card *next;
 
        /* single open lock mechanism, only used for recording */
-       struct semaphore open_sem;
+       struct mutex open_mutex;
 
        /* The trident has a certain amount of cross channel interaction
           so we use a single per card lock */
        if (!access_ok(VERIFY_WRITE, buffer, count))
                return -EFAULT;
 
-       down(&state->sem);
+       mutex_lock(&state->sem);
        if (!dmabuf->ready && (ret = prog_dmabuf_record(state)))
                goto out;
 
                                goto out;
                        }
 
-                       up(&state->sem);
+                       mutex_unlock(&state->sem);
                        /* No matter how much space left in the buffer, */ 
                        /* we have to wait until CSO == ESO/2 or CSO == ESO */ 
                        /* when address engine interrupts */
                                        ret = -ERESTARTSYS;
                                goto out;
                        }
-                       down(&state->sem);
+                       mutex_lock(&state->sem);
                        if (dmabuf->mapped) {
                                if (!ret)
                                        ret = -ENXIO;
                start_adc(state);
        }
 out:
-       up(&state->sem);
+       mutex_unlock(&state->sem);
        return ret;
 }
 
         *      Guard against an mmap or ioctl while writing
         */
 
-       down(&state->sem);
+       mutex_lock(&state->sem);
 
        if (dmabuf->mapped) {
                ret = -ENXIO;
                        tmo = (dmabuf->dmasize * HZ) / (dmabuf->rate * 2);
                        tmo >>= sample_shift[dmabuf->fmt];
                        unlock_set_fmt(state);
-                       up(&state->sem);
+                       mutex_unlock(&state->sem);
 
                        /* There are two situations when sleep_on_timeout */ 
                        /* returns, one is when the interrupt is serviced */ 
                                        ret = -ERESTARTSYS;
                                goto out_nolock;
                        }
-                       down(&state->sem);
+                       mutex_lock(&state->sem);
                        if (dmabuf->mapped) {
                                if (!ret)
                                        ret = -ENXIO;
                start_dac(state);
        }
 out:
-       up(&state->sem);
+       mutex_unlock(&state->sem);
 out_nolock:
        return ret;
 }
         *      prog_dmabuf events
         */
 
-       down(&state->sem);
+       mutex_lock(&state->sem);
 
        if (file->f_mode & FMODE_WRITE) {
                if (!dmabuf->ready && prog_dmabuf_playback(state)) {
-                       up(&state->sem);
+                       mutex_unlock(&state->sem);
                        return 0;
                }
                poll_wait(file, &dmabuf->wait, wait);
        }
        if (file->f_mode & FMODE_READ) {
                if (!dmabuf->ready && prog_dmabuf_record(state)) {
-                       up(&state->sem);
+                       mutex_unlock(&state->sem);
                        return 0;
                }
                poll_wait(file, &dmabuf->wait, wait);
        }
 
-       up(&state->sem);
+       mutex_unlock(&state->sem);
 
        spin_lock_irqsave(&state->card->lock, flags);
        trident_update_ptr(state);
         *      a read or write against an mmap.
         */
 
-       down(&state->sem);
+       mutex_lock(&state->sem);
 
        if (vma->vm_flags & VM_WRITE) {
                if ((ret = prog_dmabuf_playback(state)) != 0)
        dmabuf->mapped = 1;
        ret = 0;
 out:
-       up(&state->sem);
+       mutex_unlock(&state->sem);
        return ret;
 }
 
                                                        unlock_set_fmt(state);
                                                        break;
                                                }
-                                               down(&state->card->open_sem);
+                                               mutex_lock(&state->card->open_mutex);
                                                ret = ali_allocate_other_states_resources(state, 6);
                                                if (ret < 0) {
-                                                       up(&state->card->open_sem);
+                                                       mutex_unlock(&state->card->open_mutex);
                                                        unlock_set_fmt(state);
                                                        break;
                                                }
                                                state->card->multi_channel_use_count++;
-                                               up(&state->card->open_sem);
+                                               mutex_unlock(&state->card->open_mutex);
                                        } else
                                                val = 2;        /*yield to 2-channels */
                                } else
 
        /* find an available virtual channel (instance of /dev/dsp) */
        while (card != NULL) {
-               down(&card->open_sem);
+               mutex_lock(&card->open_mutex);
                if (file->f_mode & FMODE_READ) {
                        /* Skip opens on cards that are in 6 channel mode */
                        if (card->multi_channel_use_count > 0) {
-                               up(&card->open_sem);
+                               mutex_unlock(&card->open_mutex);
                                card = card->next;
                                continue;
                        }
                        if (card->states[i] == NULL) {
                                state = card->states[i] = kmalloc(sizeof(*state), GFP_KERNEL);
                                if (state == NULL) {
-                                       up(&card->open_sem);
+                                       mutex_unlock(&card->open_mutex);
                                        return -ENOMEM;
                                }
                                memset(state, 0, sizeof(*state));
-                               init_MUTEX(&state->sem);
+                               mutex_init(&state->sem);
                                dmabuf = &state->dmabuf;
                                goto found_virt;
                        }
                }
-               up(&card->open_sem);
+               mutex_unlock(&card->open_mutex);
                card = card->next;
        }
        /* no more virtual channel avaiable */
        }
 
        state->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
-       up(&card->open_sem);
+       mutex_unlock(&card->open_mutex);
 
        pr_debug("trident: open virtual channel %d, hard channel %d\n",
                 state->virt, dmabuf->channel->num);
                 state->virt, dmabuf->channel->num);
 
        /* stop DMA state machine and free DMA buffers/channels */
-       down(&card->open_sem);
+       mutex_lock(&card->open_mutex);
 
        if (file->f_mode & FMODE_WRITE) {
                stop_dac(state);
        card->states[state->virt] = NULL;
        kfree(state);
 
-       /* we're covered by the open_sem */
-       up(&card->open_sem);
+       /* we're covered by the open_mutex */
+       mutex_unlock(&card->open_mutex);
 
        return 0;
 }
        card->banks[BANK_B].addresses = &bank_b_addrs;
        card->banks[BANK_B].bitmap = 0UL;
 
-       init_MUTEX(&card->open_sem);
+       mutex_init(&card->open_mutex);
        spin_lock_init(&card->lock);
        init_timer(&card->timer);
 
 
 #include <linux/dma-mapping.h>
 #include <asm/io.h>
 #include <asm/uaccess.h>
-#include <asm/semaphore.h>
+#include <linux/mutex.h>
+
 #include "sound_config.h"
 #include "dev_table.h"
 #include "mpu401.h"
        
        int mixer_vol;          /* 8233/35 volume  - not yet implemented */
 
-       struct semaphore syscall_sem;
-       struct semaphore open_sem;
+       struct mutex syscall_mutex;
+       struct mutex open_mutex;
 
        /* The 8233/8235 have 4 DX audio channels, two record and
           one six channel out. We bind ch_in to DX 1, ch_out to multichannel
        nonblock = 0;
 
        if (nonblock) {
-               if (down_trylock (&card->syscall_sem))
+               if (!mutex_trylock(&card->syscall_mutex))
                        return -EAGAIN;
        } else {
-               if (down_interruptible (&card->syscall_sem))
+               if (mutex_lock_interruptible(&card->syscall_mutex))
                        return -ERESTARTSYS;
        }
 
 #endif
        rc = codec->mixer_ioctl(codec, cmd, arg);
 
-       up (&card->syscall_sem);
+       mutex_unlock(&card->syscall_mutex);
 
 out:
        DPRINTK ("EXIT, returning %d\n", rc);
        if (wr)
                card->ch_out.is_mapped = 1;
 
-       up (&card->syscall_sem);
+       mutex_unlock(&card->syscall_mutex);
        rc = 0;
 
 out:
        /* Thomas Sailer:
         * But also to ourselves, release semaphore if we do so */
        if (need_resched()) {
-               up(&card->syscall_sem);
+               mutex_unlock(&card->syscall_mutex);
                schedule ();
                ret = via_syscall_down (card, nonblock);
                if (ret)
                        break;
                }
 
-               up(&card->syscall_sem);
+               mutex_unlock(&card->syscall_mutex);
 
                DPRINTK ("Sleeping on block %d\n", n);
                schedule();
        rc = via_dsp_do_read (card, buffer, count, nonblock);
 
 out_up:
-       up (&card->syscall_sem);
+       mutex_unlock(&card->syscall_mutex);
 out:
        DPRINTK ("EXIT, returning %ld\n",(long) rc);
        return rc;
        /* Thomas Sailer:
         * But also to ourselves, release semaphore if we do so */
        if (need_resched()) {
-               up(&card->syscall_sem);
+               mutex_unlock(&card->syscall_mutex);
                schedule ();
                ret = via_syscall_down (card, nonblock);
                if (ret)
                        break;
                }
 
-               up(&card->syscall_sem);
+               mutex_unlock(&card->syscall_mutex);
 
                DPRINTK ("Sleeping on page %d, tmp==%d, ir==%d\n", n, tmp, chan->is_record);
                schedule();
        rc = via_dsp_do_write (card, buffer, count, nonblock);
 
 out_up:
-       up (&card->syscall_sem);
+       mutex_unlock(&card->syscall_mutex);
 out:
        DPRINTK ("EXIT, returning %ld\n",(long) rc);
        return rc;
  *     Sleeps until all playback has been flushed to the audio
  *     hardware.
  *
- *     Locking: inside card->syscall_sem
+ *     Locking: inside card->syscall_mutex
  */
 
 static int via_dsp_drain_playback (struct via_info *card,
                        printk (KERN_ERR "sleeping but not active\n");
 #endif
 
-               up(&card->syscall_sem);
+               mutex_unlock(&card->syscall_mutex);
 
                DPRINTK ("sleeping, nbufs=%d\n", atomic_read (&chan->n_frags));
                schedule();
  *
  *     Handles SNDCTL_DSP_GETISPACE and SNDCTL_DSP_GETOSPACE.
  *
- *     Locking: inside card->syscall_sem
+ *     Locking: inside card->syscall_mutex
  */
 
 static int via_dsp_ioctl_space (struct via_info *card,
  *
  *     Handles SNDCTL_DSP_GETIPTR and SNDCTL_DSP_GETOPTR.
  *
- *     Locking: inside card->syscall_sem
+ *     Locking: inside card->syscall_mutex
  */
 
 static int via_dsp_ioctl_ptr (struct via_info *card,
                break;
        }
 
-       up (&card->syscall_sem);
+       mutex_unlock(&card->syscall_mutex);
        DPRINTK ("EXIT, returning %d\n", rc);
        return rc;
 }
 
 match:
        if (nonblock) {
-               if (down_trylock (&card->open_sem)) {
+               if (!mutex_trylock(&card->open_mutex)) {
                        DPRINTK ("EXIT, returning -EAGAIN\n");
                        return -EAGAIN;
                }
        } else {
-               if (down_interruptible (&card->open_sem)) {
+               if (mutex_lock_interruptible(&card->open_mutex)) {
                        DPRINTK ("EXIT, returning -ERESTARTSYS\n");
                        return -ERESTARTSYS;
                }
                via_chan_buffer_free (card, &card->ch_in);
        }
 
-       up (&card->syscall_sem);
-       up (&card->open_sem);
+       mutex_unlock(&card->syscall_mutex);
+       mutex_unlock(&card->open_mutex);
 
        DPRINTK ("EXIT, returning 0\n");
        return 0;
        card->card_num = via_num_cards++;
        spin_lock_init (&card->lock);
        spin_lock_init (&card->ac97_lock);
-       init_MUTEX (&card->syscall_sem);
-       init_MUTEX (&card->open_sem);
+       mutex_init(&card->syscall_mutex);
+       mutex_init(&card->open_mutex);
 
        /* we must init these now, in case the intr handler needs them */
        via_chan_init_defaults (card, &card->ch_out);
 
  *     Open will block until the previous client has closed the
  *     device, unless O_NONBLOCK is specified.
  *
- *     The semaphore devc->io_sema serializes PCM I/O syscalls.  This
+ *     The semaphore devc->io_mutex serializes PCM I/O syscalls.  This
  *     is unnecessary in Linux 2.2, because the kernel lock
  *     serializes read, write, and ioctl globally, but it's there,
  *     ready for the brave, new post-kernel-lock world.
  *     area it owns and update its pointers.  See pcm_output() and
  *     pcm_input() for most of the gory stuff.
  *
- *     devc->mix_sema serializes all mixer ioctls.  This is also
+ *     devc->mix_mutex serializes all mixer ioctls.  This is also
  *     redundant because of the kernel lock.
  *
  *     The lowest level lock is lith->lithium_lock.  It is a
 #include <linux/smp_lock.h>
 #include <linux/wait.h>
 #include <linux/interrupt.h>
-#include <asm/semaphore.h>
+#include <linux/mutex.h>
+
 #include <asm/mach-visws/cobalt.h>
 
 #include "sound_config.h"
  *
  *     port->lock protects: hwstate, flags, swb_[iu]_avail.
  *
- *     devc->io_sema protects: swstate, sw_*, swb_[iu]_idx.
+ *     devc->io_mutex protects: swstate, sw_*, swb_[iu]_idx.
  *
  *     everything else is only written by open/release or
  *     pcm_{setup,shutdown}(), which are serialized by a
- *     combination of devc->open_sema and devc->io_sema.
+ *     combination of devc->open_mutex and devc->io_mutex.
  */
 
 typedef struct vwsnd_port {
        int             audio_minor;    /* minor number of audio device */
        int             mixer_minor;    /* minor number of mixer device */
 
-       struct semaphore open_sema;
-       struct semaphore io_sema;
-       struct semaphore mix_sema;
+       struct mutex open_mutex;
+       struct mutex io_mutex;
+       struct mutex mix_mutex;
        mode_t          open_mode;
        wait_queue_head_t open_wait;
 
  * mode-setting ioctls have been done, but before the first I/O is
  * done.
  *
- * Locking: called with devc->io_sema held.
+ * Locking: called with devc->io_mutex held.
  *
  * Returns 0 on success, -errno on failure.
  */
        vwsnd_dev_t *devc = file->private_data;
        ssize_t ret;
 
-       down(&devc->io_sema);
+       mutex_lock(&devc->io_mutex);
        ret = vwsnd_audio_do_read(file, buffer, count, ppos);
-       up(&devc->io_sema);
+       mutex_unlock(&devc->io_mutex);
        return ret;
 }
 
        vwsnd_dev_t *devc = file->private_data;
        ssize_t ret;
 
-       down(&devc->io_sema);
+       mutex_lock(&devc->io_mutex);
        ret = vwsnd_audio_do_write(file, buffer, count, ppos);
-       up(&devc->io_sema);
+       mutex_unlock(&devc->io_mutex);
        return ret;
 }
 
        vwsnd_dev_t *devc = (vwsnd_dev_t *) file->private_data;
        int ret;
 
-       down(&devc->io_sema);
+       mutex_lock(&devc->io_mutex);
        ret = vwsnd_audio_do_ioctl(inode, file, cmd, arg);
-       up(&devc->io_sema);
+       mutex_unlock(&devc->io_mutex);
        return ret;
 }
 
                return -ENODEV;
        }
 
-       down(&devc->open_sema);
+       mutex_lock(&devc->open_mutex);
        while (devc->open_mode & file->f_mode) {
-               up(&devc->open_sema);
+               mutex_unlock(&devc->open_mutex);
                if (file->f_flags & O_NONBLOCK) {
                        DEC_USE_COUNT;
                        return -EBUSY;
                        DEC_USE_COUNT;
                        return -ERESTARTSYS;
                }
-               down(&devc->open_sema);
+               mutex_lock(&devc->open_mutex);
        }
        devc->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
-       up(&devc->open_sema);
+       mutex_unlock(&devc->open_mutex);
 
        /* get default sample format from minor number. */
 
 
        /* Initialize vwsnd_ports. */
 
-       down(&devc->io_sema);
+       mutex_lock(&devc->io_mutex);
        {
                if (file->f_mode & FMODE_READ) {
                        devc->rport.swstate        = SW_INITIAL;
                        devc->wport.frag_count     = 0;
                }
        }
-       up(&devc->io_sema);
+       mutex_unlock(&devc->io_mutex);
 
        file->private_data = devc;
        DBGRV();
        int err = 0;
 
        lock_kernel();
-       down(&devc->io_sema);
+       mutex_lock(&devc->io_mutex);
        {
                DBGEV("(inode=0x%p, file=0x%p)\n", inode, file);
 
                if (wport)
                        wport->swstate = SW_OFF;
        }
-       up(&devc->io_sema);
+       mutex_unlock(&devc->io_mutex);
 
-       down(&devc->open_sema);
+       mutex_lock(&devc->open_mutex);
        {
                devc->open_mode &= ~file->f_mode;
        }
-       up(&devc->open_sema);
+       mutex_unlock(&devc->open_mutex);
        wake_up(&devc->open_wait);
        DEC_USE_COUNT;
        DBGR();
 
        DBGEV("(devc=0x%p, cmd=0x%x, arg=0x%lx)\n", devc, cmd, arg);
 
-       down(&devc->mix_sema);
+       mutex_lock(&devc->mix_mutex);
        {
                if ((cmd & ~nrmask) == MIXER_READ(0))
                        retval = mixer_read_ioctl(devc, nr, (void __user *) arg);
                else
                        retval = -EINVAL;
        }
-       up(&devc->mix_sema);
+       mutex_unlock(&devc->mix_mutex);
        return retval;
 }
 
 
        /* Initialize as much of *devc as possible */
 
-       init_MUTEX(&devc->open_sema);
-       init_MUTEX(&devc->io_sema);
-       init_MUTEX(&devc->mix_sema);
+       mutex_init(&devc->open_mutex);
+       mutex_init(&devc->io_mutex);
+       mutex_init(&devc->mix_mutex);
        devc->open_mode = 0;
        spin_lock_init(&devc->rport.lock);
        init_waitqueue_head(&devc->rport.queue);
 
        if (unit == NULL)
                return -ENODEV;
 
-       down(&unit->open_sem);
+       mutex_lock(&unit->open_mutex);
 
        if ((state = ymf_state_alloc(unit)) == NULL) {
-               up(&unit->open_sem);
+               mutex_unlock(&unit->open_mutex);
                return -ENOMEM;
        }
        list_add_tail(&state->chain, &unit->states);
        ymfpci_writeb(unit, YDSXGR_TIMERCTRL,
            (YDSXGR_TIMERCTRL_TEN|YDSXGR_TIMERCTRL_TIEN));
 #endif
-       up(&unit->open_sem);
+       mutex_unlock(&unit->open_mutex);
 
        return nonseekable_open(inode, file);
 
        list_del(&state->chain);
        kfree(state);
 
-       up(&unit->open_sem);
+       mutex_unlock(&unit->open_mutex);
        return err;
 }
 
        ymfpci_writeb(unit, YDSXGR_TIMERCTRL, 0);
 #endif
 
-       down(&unit->open_sem);
+       mutex_lock(&unit->open_mutex);
 
        /*
         * XXX Solve the case of O_NONBLOCK close - don't deallocate here.
        file->private_data = NULL;      /* Can you tell I programmed Solaris */
        kfree(state);
 
-       up(&unit->open_sem);
+       mutex_unlock(&unit->open_mutex);
 
        return 0;
 }
        spin_lock_init(&codec->reg_lock);
        spin_lock_init(&codec->voice_lock);
        spin_lock_init(&codec->ac97_lock);
-       init_MUTEX(&codec->open_sem);
+       mutex_init(&codec->open_mutex);
        INIT_LIST_HEAD(&codec->states);
        codec->pci = pcidev;
 
 
  *
  */
 #include <linux/config.h>
+#include <linux/mutex.h>
 
 /*
  *  Direct registers
 
        /* soundcore stuff */
        int dev_audio;
-       struct semaphore open_sem;
+       struct mutex open_mutex;
 
        struct list_head ymf_devs;
        struct list_head states;        /* List of states for this unit */