ALSA: hda - Fix stac92hd83xxx_amp_nids[]
[safe/jmp/linux-2.6] / sound / pci / rme32.c
index 55b1d48..e7ef3a1 100644 (file)
@@ -69,7 +69,6 @@
  */
 
 
-#include <sound/driver.h>
 #include <linux/delay.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
@@ -227,7 +226,7 @@ struct rme32 {
        struct snd_kcontrol *spdif_ctl;
 };
 
-static struct pci_device_id snd_rme32_ids[] __devinitdata = {
+static struct pci_device_id snd_rme32_ids[] = {
        {PCI_VENDOR_ID_XILINX_RME, PCI_DEVICE_ID_RME_DIGI32,
         PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,},
        {PCI_VENDOR_ID_XILINX_RME, PCI_DEVICE_ID_RME_DIGI32_8,
@@ -258,19 +257,6 @@ static inline unsigned int snd_rme32_pcm_byteptr(struct rme32 * rme32)
                & RME32_RCR_AUDIO_ADDR_MASK);
 }
 
-static int snd_rme32_ratecode(int rate)
-{
-       switch (rate) {
-       case 32000: return SNDRV_PCM_RATE_32000;
-       case 44100: return SNDRV_PCM_RATE_44100;
-       case 48000: return SNDRV_PCM_RATE_48000;
-       case 64000: return SNDRV_PCM_RATE_64000;
-       case 88200: return SNDRV_PCM_RATE_88200;
-       case 96000: return SNDRV_PCM_RATE_96000;
-       }
-       return 0;
-}
-
 /* silence callback for halfduplex mode */
 static int snd_rme32_playback_silence(struct snd_pcm_substream *substream, int channel,        /* not used (interleaved data) */
                                      snd_pcm_uframes_t pos,
@@ -818,8 +804,7 @@ static void snd_rme32_pcm_stop(struct rme32 * rme32, int to_pause)
                writel(0, rme32->iobase + RME32_IO_RESET_POS);
 }
 
-static irqreturn_t
-snd_rme32_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_rme32_interrupt(int irq, void *dev_id)
 {
        struct rme32 *rme32 = (struct rme32 *) dev_id;
 
@@ -888,7 +873,7 @@ static int snd_rme32_playback_spdif_open(struct snd_pcm_substream *substream)
        if ((rme32->rcreg & RME32_RCR_KMODE) &&
            (rate = snd_rme32_capture_getrate(rme32, &dummy)) > 0) {
                /* AutoSync */
-               runtime->hw.rates = snd_rme32_ratecode(rate);
+               runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
                runtime->hw.rate_min = rate;
                runtime->hw.rate_max = rate;
        }       
@@ -930,7 +915,7 @@ static int snd_rme32_capture_spdif_open(struct snd_pcm_substream *substream)
                if (isadat) {
                        return -EIO;
                }
-               runtime->hw.rates = snd_rme32_ratecode(rate);
+               runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
                runtime->hw.rate_min = rate;
                runtime->hw.rate_max = rate;
        }
@@ -966,7 +951,7 @@ snd_rme32_playback_adat_open(struct snd_pcm_substream *substream)
        if ((rme32->rcreg & RME32_RCR_KMODE) &&
            (rate = snd_rme32_capture_getrate(rme32, &dummy)) > 0) {
                 /* AutoSync */
-                runtime->hw.rates = snd_rme32_ratecode(rate);
+                runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
                 runtime->hw.rate_min = rate;
                 runtime->hw.rate_max = rate;
        }        
@@ -990,7 +975,7 @@ snd_rme32_capture_adat_open(struct snd_pcm_substream *substream)
                if (!isadat) {
                        return -EIO;
                }
-                runtime->hw.rates = snd_rme32_ratecode(rate);
+                runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
                 runtime->hw.rate_min = rate;
                 runtime->hw.rate_max = rate;
         }
@@ -1079,12 +1064,10 @@ static int
 snd_rme32_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
 {
        struct rme32 *rme32 = snd_pcm_substream_chip(substream);
-       struct list_head *pos;
        struct snd_pcm_substream *s;
 
        spin_lock(&rme32->lock);
-       snd_pcm_group_for_each(pos, substream) {
-               s = snd_pcm_group_substream_entry(pos);
+       snd_pcm_group_for_each_entry(s, substream) {
                if (s != rme32->playback_substream &&
                    s != rme32->capture_substream)
                        continue;
@@ -1111,8 +1094,7 @@ snd_rme32_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
        
        /* prefill playback buffer */
        if (cmd == SNDRV_PCM_TRIGGER_START && rme32->fullduplex_mode) {
-               snd_pcm_group_for_each(pos, substream) {
-                       s = snd_pcm_group_substream_entry(pos);
+               snd_pcm_group_for_each_entry(s, substream) {
                        if (s == rme32->playback_substream) {
                                s->ops->ack(s);
                                break;
@@ -1368,18 +1350,20 @@ static int __devinit snd_rme32_create(struct rme32 * rme32)
                return err;
        rme32->port = pci_resource_start(rme32->pci, 0);
 
-       if (request_irq(pci->irq, snd_rme32_interrupt, SA_INTERRUPT | SA_SHIRQ, "RME32", (void *) rme32)) {
-               snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
-               return -EBUSY;
-       }
-       rme32->irq = pci->irq;
-
-       if ((rme32->iobase = ioremap_nocache(rme32->port, RME32_IO_SIZE)) == 0) {
+       rme32->iobase = ioremap_nocache(rme32->port, RME32_IO_SIZE);
+       if (!rme32->iobase) {
                snd_printk(KERN_ERR "unable to remap memory region 0x%lx-0x%lx\n",
                           rme32->port, rme32->port + RME32_IO_SIZE - 1);
                return -ENOMEM;
        }
 
+       if (request_irq(pci->irq, snd_rme32_interrupt, IRQF_SHARED,
+                       "RME32", rme32)) {
+               snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
+               return -EBUSY;
+       }
+       rme32->irq = pci->irq;
+
        /* read the card's revision number */
        pci_read_config_byte(pci, 8, &rme32->rev);
 
@@ -1578,23 +1562,15 @@ static void __devinit snd_rme32_proc_init(struct rme32 * rme32)
        struct snd_info_entry *entry;
 
        if (! snd_card_proc_new(rme32->card, "rme32", &entry))
-               snd_info_set_text_ops(entry, rme32, 1024, snd_rme32_proc_read);
+               snd_info_set_text_ops(entry, rme32, snd_rme32_proc_read);
 }
 
 /*
  * control interface
  */
 
-static int
-snd_rme32_info_loopback_control(struct snd_kcontrol *kcontrol,
-                               struct snd_ctl_elem_info *uinfo)
-{
-       uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
-       uinfo->count = 1;
-       uinfo->value.integer.min = 0;
-       uinfo->value.integer.max = 1;
-       return 0;
-}
+#define snd_rme32_info_loopback_control                snd_ctl_boolean_mono_info
+
 static int
 snd_rme32_get_loopback_control(struct snd_kcontrol *kcontrol,
                               struct snd_ctl_elem_value *ucontrol)