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, boot_devs, 0444);
+module_param_array(index, int, NULL, 0444);
MODULE_PARM_DESC(index, "Index value for RME Digi32 soundcard.");
-module_param_array(id, charp, boot_devs, 0444);
+module_param_array(id, charp, NULL, 0444);
MODULE_PARM_DESC(id, "ID string for RME Digi32 soundcard.");
-module_param_array(enable, bool, boot_devs, 0444);
+module_param_array(enable, bool, NULL, 0444);
MODULE_PARM_DESC(enable, "Enable RME Digi32 soundcard.");
-module_param_array(fullduplex, bool, boot_devs, 0444);
+module_param_array(fullduplex, bool, NULL, 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");
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 */
/* S/PDIF setup */
if ((rme32->wcreg & RME32_WCR_ADAT) == 0) {
rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP);
- writel(rme32->wcreg |=
- rme32->wcreg_spdif_stream,
- rme32->iobase + RME32_IO_CONTROL_REGISTER);
+ rme32->wcreg |= rme32->wcreg_spdif_stream;
+ writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
}
spin_unlock_irq(&rme32->lock);
}
/* prefill playback buffer */
- if (cmd == SNDRV_PCM_TRIGGER_START) {
+ if (cmd == SNDRV_PCM_TRIGGER_START && rme32->fullduplex_mode) {
snd_pcm_group_for_each(pos, substream) {
s = snd_pcm_group_substream_entry(pos);
if (s == rme32->playback_substream) {
rme32->irq = -1;
}
if (rme32->iobase) {
- iounmap((void *) rme32->iobase);
- rme32->iobase = 0;
+ iounmap(rme32->iobase);
+ rme32->iobase = NULL;
}
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)
}
rme32->irq = pci->irq;
- if ((rme32->iobase = (unsigned long) ioremap_nocache(rme32->port, RME32_IO_SIZE)) == 0) {
+ if ((rme32->iobase = 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;
val &= ~RME32_WCR_MUTE;
else
val |= RME32_WCR_MUTE;
- writel(rme32->wcreg =
- val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
+ rme32->wcreg = val;
+ writel(val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
spin_unlock_irq(&rme32->lock);
return change;
}
change = val != rme32->wcreg_spdif_stream;
rme32->wcreg_spdif_stream = val;
rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP);
- writel(rme32->wcreg |= val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
+ rme32->wcreg |= val;
+ writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
spin_unlock_irq(&rme32->lock);
return change;
}
.private_value = IEC958_AES0_PROFESSIONAL | IEC958_AES0_PRO_EMPHASIS
},
{
- .iface = SNDRV_CTL_ELEM_IFACE_PCM,
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "Input Connector",
.info = snd_rme32_info_inputtype_control,
.get = snd_rme32_get_inputtype_control,
.put = snd_rme32_put_inputtype_control
},
{
- .iface = SNDRV_CTL_ELEM_IFACE_PCM,
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "Loopback Input",
.info = snd_rme32_info_loopback_control,
.get = snd_rme32_get_loopback_control,
.put = snd_rme32_put_loopback_control
},
{
- .iface = SNDRV_CTL_ELEM_IFACE_PCM,
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "Sample Clock Source",
.info = snd_rme32_info_clockmode_control,
.get = snd_rme32_get_clockmode_control,
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;