X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sound%2Foss%2Fhal2.c;h=80ab402dae9a5123760dcd9acfa019467656a2ff;hb=16c70f8c1b54b61c3b951b6fb220df250fe09b32;hp=afe97c4ce069a5e28caab718327010185812ee8d;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/sound/oss/hal2.c b/sound/oss/hal2.c index afe97c4ce..80ab402da 100644 --- a/sound/oss/hal2.c +++ b/sound/oss/hal2.c @@ -32,6 +32,8 @@ #include #include #include +#include + #include #include @@ -92,7 +94,7 @@ struct hal2_codec { wait_queue_head_t dma_wait; spinlock_t lock; - struct semaphore sem; + struct mutex sem; int usecount; /* recording and playback are * independent */ @@ -1178,7 +1180,7 @@ static ssize_t hal2_read(struct file *file, char *buffer, 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); @@ -1217,7 +1219,7 @@ static ssize_t hal2_read(struct file *file, char *buffer, } } while (count > 0 && err >= 0); } - up(&adc->sem); + mutex_unlock(&adc->sem); return err; } @@ -1232,7 +1234,7 @@ static ssize_t hal2_write(struct file *file, const char *buffer, 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); @@ -1271,7 +1273,7 @@ static ssize_t hal2_write(struct file *file, const char *buffer, } } while (count > 0 && err >= 0); } - up(&dac->sem); + mutex_unlock(&dac->sem); return err; } @@ -1356,20 +1358,20 @@ static int hal2_release(struct inode *inode, struct file *file) 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; @@ -1400,7 +1402,7 @@ static void hal2_init_codec(struct hal2_codec *codec, struct hpc3_regs *hpc3, 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); } @@ -1477,7 +1479,7 @@ static int hal2_init_card(struct hal2_card **phal2, struct hpc3_regs *hpc3) hpc3->pbus_dmacfg[hal2->dac.pbus.pbusnr][0] = 0x8208844; hpc3->pbus_dmacfg[hal2->adc.pbus.pbusnr][0] = 0x8208844; - if (request_irq(SGI_HPCDMA_IRQ, hal2_interrupt, SA_SHIRQ, + if (request_irq(SGI_HPCDMA_IRQ, hal2_interrupt, IRQF_SHARED, hal2str, hal2)) { printk(KERN_ERR "HAL2: Can't get irq %d\n", SGI_HPCDMA_IRQ); ret = -EAGAIN;