vserver 1.9.5.x5
[linux-2.6.git] / sound / pci / rme96.c
index a282795..8e26668 100644 (file)
@@ -56,13 +56,12 @@ MODULE_SUPPORTED_DEVICE("{{RME,Digi96},"
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;     /* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;      /* ID for this card */
 static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;     /* Enable this card */
-static int boot_devs;
 
-module_param_array(index, int, boot_devs, 0444);
+module_param_array(index, int, NULL, 0444);
 MODULE_PARM_DESC(index, "Index value for RME Digi96 soundcard.");
-module_param_array(id, charp, boot_devs, 0444);
+module_param_array(id, charp, NULL, 0444);
 MODULE_PARM_DESC(id, "ID string for RME Digi96 soundcard.");
-module_param_array(enable, bool, boot_devs, 0444);
+module_param_array(enable, bool, NULL, 0444);
 MODULE_PARM_DESC(enable, "Enable RME Digi96 soundcard.");
 
 /*
@@ -225,7 +224,7 @@ typedef struct snd_rme96 {
        spinlock_t    lock;
        int irq;
        unsigned long port;
-       unsigned long iobase;
+       void __iomem *iobase;
        
        u32 wcreg;    /* cached write control register value */
        u32 wcreg_spdif;                /* S/PDIF setup */
@@ -1547,13 +1546,14 @@ snd_rme96_free(void *private_data)
                rme96->irq = -1;
        }
        if (rme96->iobase) {
-               iounmap((void *)rme96->iobase);
-               rme96->iobase = 0;
+               iounmap(rme96->iobase);
+               rme96->iobase = NULL;
        }
        if (rme96->port) {
                pci_release_regions(rme96->pci);
                rme96->port = 0;
        }
+       pci_disable_device(rme96->pci);
 }
 
 static void
@@ -1592,7 +1592,7 @@ snd_rme96_create(rme96_t *rme96)
        }
        rme96->irq = pci->irq;
 
-       if ((rme96->iobase = (unsigned long) ioremap_nocache(rme96->port, RME96_IO_SIZE)) == 0) {
+       if ((rme96->iobase = ioremap_nocache(rme96->port, RME96_IO_SIZE)) == 0) {
                snd_printk("unable to remap memory region 0x%lx-0x%lx\n", rme96->port, rme96->port + RME96_IO_SIZE - 1);
                return -ENOMEM;
        }
@@ -1859,7 +1859,8 @@ snd_rme96_put_loopback_control(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *
        spin_lock_irq(&rme96->lock);
        val = (rme96->wcreg & ~RME96_WCR_SEL) | val;
        change = val != rme96->wcreg;
-       writel(rme96->wcreg = val, rme96->iobase + RME96_IO_CONTROL_REGISTER);
+       rme96->wcreg = val;
+       writel(val, rme96->iobase + RME96_IO_CONTROL_REGISTER);
        spin_unlock_irq(&rme96->lock);
        return change;
 }
@@ -2177,7 +2178,8 @@ static int snd_rme96_control_spdif_stream_put(snd_kcontrol_t * kcontrol, snd_ctl
        change = val != rme96->wcreg_spdif_stream;
        rme96->wcreg_spdif_stream = val;
        rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP);
-       writel(rme96->wcreg |= val, rme96->iobase + RME96_IO_CONTROL_REGISTER);
+       rme96->wcreg |= val;
+       writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
        spin_unlock_irq(&rme96->lock);
        return change;
 }
@@ -2283,35 +2285,35 @@ static snd_kcontrol_new_t snd_rme96_controls[] = {
                        IEC958_AES0_PRO_EMPHASIS
 },
 {
-        .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
+        .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
        .name =         "Input Connector",
        .info =         snd_rme96_info_inputtype_control, 
        .get =          snd_rme96_get_inputtype_control,
        .put =          snd_rme96_put_inputtype_control 
 },
 {
-        .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
+        .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
        .name =         "Loopback Input",
        .info =         snd_rme96_info_loopback_control,
        .get =          snd_rme96_get_loopback_control,
        .put =          snd_rme96_put_loopback_control
 },
 {
-        .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
+        .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
        .name =         "Sample Clock Source",
        .info =         snd_rme96_info_clockmode_control, 
        .get =          snd_rme96_get_clockmode_control,
        .put =          snd_rme96_put_clockmode_control
 },
 {
-        .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
+        .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
        .name =         "Monitor Tracks",
        .info =         snd_rme96_info_montracks_control, 
        .get =          snd_rme96_get_montracks_control,
        .put =          snd_rme96_put_montracks_control
 },
 {
-        .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
+        .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
        .name =         "Attenuation",
        .info =         snd_rme96_info_attenuation_control, 
        .get =          snd_rme96_get_attenuation_control,