linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / sound / pci / ens1370.c
index ca9e34e..55aaf11 100644 (file)
@@ -35,8 +35,6 @@
 #include <linux/slab.h>
 #include <linux/gameport.h>
 #include <linux/moduleparam.h>
-#include <linux/mutex.h>
-
 #include <sound/core.h>
 #include <sound/control.h>
 #include <sound/pcm.h>
@@ -381,7 +379,7 @@ MODULE_PARM_DESC(lineio, "Line In to Rear Out (0 = auto, 1 = force).");
 
 struct ensoniq {
        spinlock_t reg_lock;
-       struct mutex src_mutex;
+       struct semaphore src_mutex;
 
        int irq;
 
@@ -446,7 +444,7 @@ struct ensoniq {
 
 static irqreturn_t snd_audiopci_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 
-static struct pci_device_id snd_audiopci_ids[] __devinitdata = {
+static struct pci_device_id snd_audiopci_ids[] = {
 #ifdef CHIP1370
        { 0x1274, 0x5000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* ES1370 */
 #endif
@@ -611,7 +609,7 @@ static void snd_es1371_codec_write(struct snd_ac97 *ac97,
        struct ensoniq *ensoniq = ac97->private_data;
        unsigned int t, x;
 
-       mutex_lock(&ensoniq->src_mutex);
+       down(&ensoniq->src_mutex);
        for (t = 0; t < POLL_COUNT; t++) {
                if (!(inl(ES_REG(ensoniq, 1371_CODEC)) & ES_1371_CODEC_WIP)) {
                        /* save the current state for latter */
@@ -636,11 +634,11 @@ static void snd_es1371_codec_write(struct snd_ac97 *ac97,
                        /* restore SRC reg */
                        snd_es1371_wait_src_ready(ensoniq);
                        outl(x, ES_REG(ensoniq, 1371_SMPRATE));
-                       mutex_unlock(&ensoniq->src_mutex);
+                       up(&ensoniq->src_mutex);
                        return;
                }
        }
-       mutex_unlock(&ensoniq->src_mutex);
+       up(&ensoniq->src_mutex);
        snd_printk(KERN_ERR "codec write timeout at 0x%lx [0x%x]\n",
                   ES_REG(ensoniq, 1371_CODEC), inl(ES_REG(ensoniq, 1371_CODEC)));
 }
@@ -652,7 +650,7 @@ static unsigned short snd_es1371_codec_read(struct snd_ac97 *ac97,
        unsigned int t, x, fail = 0;
 
       __again:
-       mutex_lock(&ensoniq->src_mutex);
+       down(&ensoniq->src_mutex);
        for (t = 0; t < POLL_COUNT; t++) {
                if (!(inl(ES_REG(ensoniq, 1371_CODEC)) & ES_1371_CODEC_WIP)) {
                        /* save the current state for latter */
@@ -685,11 +683,11 @@ static unsigned short snd_es1371_codec_read(struct snd_ac97 *ac97,
                        /* now wait for the stinkin' data (RDY) */
                        for (t = 0; t < POLL_COUNT; t++) {
                                if ((x = inl(ES_REG(ensoniq, 1371_CODEC))) & ES_1371_CODEC_RDY) {
-                                       mutex_unlock(&ensoniq->src_mutex);
+                                       up(&ensoniq->src_mutex);
                                        return ES_1371_CODEC_READ(x);
                                }
                        }
-                       mutex_unlock(&ensoniq->src_mutex);
+                       up(&ensoniq->src_mutex);
                        if (++fail > 10) {
                                snd_printk(KERN_ERR "codec read timeout (final) "
                                           "at 0x%lx, reg = 0x%x [0x%x]\n",
@@ -700,7 +698,7 @@ static unsigned short snd_es1371_codec_read(struct snd_ac97 *ac97,
                        goto __again;
                }
        }
-       mutex_unlock(&ensoniq->src_mutex);
+       up(&ensoniq->src_mutex);
        snd_printk(KERN_ERR "es1371: codec read timeout at 0x%lx [0x%x]\n",
                   ES_REG(ensoniq, 1371_CODEC), inl(ES_REG(ensoniq, 1371_CODEC)));
        return 0;
@@ -719,7 +717,7 @@ static void snd_es1371_adc_rate(struct ensoniq * ensoniq, unsigned int rate)
 {
        unsigned int n, truncm, freq, result;
 
-       mutex_lock(&ensoniq->src_mutex);
+       down(&ensoniq->src_mutex);
        n = rate / 3000;
        if ((1 << n) & ((1 << 15) | (1 << 13) | (1 << 11) | (1 << 9)))
                n--;
@@ -744,14 +742,14 @@ static void snd_es1371_adc_rate(struct ensoniq * ensoniq, unsigned int rate)
        snd_es1371_src_write(ensoniq, ES_SMPREG_ADC + ES_SMPREG_VFREQ_FRAC, freq & 0x7fff);
        snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_ADC, n << 8);
        snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_ADC + 1, n << 8);
-       mutex_unlock(&ensoniq->src_mutex);
+       up(&ensoniq->src_mutex);
 }
 
 static void snd_es1371_dac1_rate(struct ensoniq * ensoniq, unsigned int rate)
 {
        unsigned int freq, r;
 
-       mutex_lock(&ensoniq->src_mutex);
+       down(&ensoniq->src_mutex);
        freq = ((rate << 15) + 1500) / 3000;
        r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE |
                                                   ES_1371_DIS_P2 | ES_1371_DIS_R1)) |
@@ -765,14 +763,14 @@ static void snd_es1371_dac1_rate(struct ensoniq * ensoniq, unsigned int rate)
        r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE |
                                                   ES_1371_DIS_P2 | ES_1371_DIS_R1));
        outl(r, ES_REG(ensoniq, 1371_SMPRATE));
-       mutex_unlock(&ensoniq->src_mutex);
+       up(&ensoniq->src_mutex);
 }
 
 static void snd_es1371_dac2_rate(struct ensoniq * ensoniq, unsigned int rate)
 {
        unsigned int freq, r;
 
-       mutex_lock(&ensoniq->src_mutex);
+       down(&ensoniq->src_mutex);
        freq = ((rate << 15) + 1500) / 3000;
        r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE |
                                                   ES_1371_DIS_P1 | ES_1371_DIS_R1)) |
@@ -787,7 +785,7 @@ static void snd_es1371_dac2_rate(struct ensoniq * ensoniq, unsigned int rate)
        r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE |
                                                   ES_1371_DIS_P1 | ES_1371_DIS_R1));
        outl(r, ES_REG(ensoniq, 1371_SMPRATE));
-       mutex_unlock(&ensoniq->src_mutex);
+       up(&ensoniq->src_mutex);
 }
 
 #endif /* CHIP1371 */
@@ -2063,13 +2061,6 @@ static int snd_ensoniq_suspend(struct pci_dev *pci, pm_message_t state)
 #ifdef CHIP1371        
        snd_ac97_suspend(ensoniq->u.es1371.ac97);
 #else
-       /* try to reset AK4531 */
-       outw(ES_1370_CODEC_WRITE(AK4531_RESET, 0x02), ES_REG(ensoniq, 1370_CODEC));
-       inw(ES_REG(ensoniq, 1370_CODEC));
-       udelay(100);
-       outw(ES_1370_CODEC_WRITE(AK4531_RESET, 0x03), ES_REG(ensoniq, 1370_CODEC));
-       inw(ES_REG(ensoniq, 1370_CODEC));
-       udelay(100);
        snd_ak4531_suspend(ensoniq->u.es1370.ak4531);
 #endif 
        pci_set_power_state(pci, PCI_D3hot);
@@ -2125,7 +2116,7 @@ static int __devinit snd_ensoniq_create(struct snd_card *card,
                return -ENOMEM;
        }
        spin_lock_init(&ensoniq->reg_lock);
-       mutex_init(&ensoniq->src_mutex);
+       init_MUTEX(&ensoniq->src_mutex);
        ensoniq->card = card;
        ensoniq->pci = pci;
        ensoniq->irq = -1;