This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / sound / pci / rme32.c
index 2c13176..ddc8695 100644 (file)
@@ -92,14 +92,15 @@ 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 fullduplex[SNDRV_CARDS]; // = {[0 ... (SNDRV_CARDS - 1)] = 1};
+static int boot_devs;
 
-module_param_array(index, int, NULL, 0444);
+module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for RME Digi32 soundcard.");
-module_param_array(id, charp, NULL, 0444);
+module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for RME Digi32 soundcard.");
-module_param_array(enable, bool, NULL, 0444);
+module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable RME Digi32 soundcard.");
-module_param_array(fullduplex, bool, NULL, 0444);
+module_param_array(fullduplex, bool, boot_devs, 0444);
 MODULE_PARM_DESC(fullduplex, "Support full-duplex mode.");
 MODULE_AUTHOR("Martin Langer <martin-langer@gmx.de>, Pilo Chambert <pilo.c@wanadoo.fr>");
 MODULE_DESCRIPTION("RME Digi32, Digi32/8, Digi32 PRO");
@@ -210,7 +211,7 @@ typedef struct snd_rme32 {
        spinlock_t lock;
        int irq;
        unsigned long port;
-       void __iomem *iobase;
+       unsigned long iobase;
 
        u32 wcreg;              /* cached write control register value */
        u32 wcreg_spdif;        /* S/PDIF setup */
@@ -725,8 +726,9 @@ snd_rme32_playback_hw_params(snd_pcm_substream_t * substream,
        /* S/PDIF setup */
        if ((rme32->wcreg & RME32_WCR_ADAT) == 0) {
                rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP);
-               rme32->wcreg |= rme32->wcreg_spdif_stream;
-               writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
+               writel(rme32->wcreg |=
+                      rme32->wcreg_spdif_stream,
+                      rme32->iobase + RME32_IO_CONTROL_REGISTER);
        }
        spin_unlock_irq(&rme32->lock);
 
@@ -1122,7 +1124,7 @@ snd_rme32_pcm_trigger(snd_pcm_substream_t * substream, int cmd)
        }
        
        /* prefill playback buffer */
-       if (cmd == SNDRV_PCM_TRIGGER_START && rme32->fullduplex_mode) {
+       if (cmd == SNDRV_PCM_TRIGGER_START) {
                snd_pcm_group_for_each(pos, substream) {
                        s = snd_pcm_group_substream_entry(pos);
                        if (s == rme32->playback_substream) {
@@ -1343,14 +1345,13 @@ static void snd_rme32_free(void *private_data)
                rme32->irq = -1;
        }
        if (rme32->iobase) {
-               iounmap(rme32->iobase);
-               rme32->iobase = NULL;
+               iounmap((void *) rme32->iobase);
+               rme32->iobase = 0;
        }
        if (rme32->port) {
                pci_release_regions(rme32->pci);
                rme32->port = 0;
        }
-       pci_disable_device(rme32->pci);
 }
 
 static void snd_rme32_free_spdif_pcm(snd_pcm_t * pcm)
@@ -1387,7 +1388,7 @@ static int __devinit snd_rme32_create(rme32_t * rme32)
        }
        rme32->irq = pci->irq;
 
-       if ((rme32->iobase = ioremap_nocache(rme32->port, RME32_IO_SIZE)) == 0) {
+       if ((rme32->iobase = (unsigned long) ioremap_nocache(rme32->port, RME32_IO_SIZE)) == 0) {
                snd_printk("unable to remap memory region 0x%lx-0x%lx\n",
                           rme32->port, rme32->port + RME32_IO_SIZE - 1);
                return -ENOMEM;
@@ -1636,8 +1637,8 @@ snd_rme32_put_loopback_control(snd_kcontrol_t * kcontrol,
                val &= ~RME32_WCR_MUTE;
        else
                val |= RME32_WCR_MUTE;
-       rme32->wcreg = val;
-       writel(val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
+       writel(rme32->wcreg =
+              val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
        spin_unlock_irq(&rme32->lock);
        return change;
 }
@@ -1861,8 +1862,7 @@ static int snd_rme32_control_spdif_stream_put(snd_kcontrol_t * kcontrol,
        change = val != rme32->wcreg_spdif_stream;
        rme32->wcreg_spdif_stream = val;
        rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP);
-       rme32->wcreg |= val;
-       writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
+       writel(rme32->wcreg |= val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
        spin_unlock_irq(&rme32->lock);
        return change;
 }
@@ -1970,14 +1970,16 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
        snd_card_t *card;
        int err;
 
+       for (; dev < SNDRV_CARDS; dev++) {
+               if (!enable[dev]) {
+                       dev++;
+                       return -ENOENT;
+               }
+               break;
+       }
        if (dev >= SNDRV_CARDS) {
                return -ENODEV;
        }
-       if (!enable[dev]) {
-               dev++;
-               return -ENOENT;
-       }
-
        if ((card = snd_card_new(index[dev], id[dev], THIS_MODULE,
                                 sizeof(rme32_t))) == NULL)
                return -ENOMEM;