ALSA: hdspm - Enable all firmware ranges for PCI MADI/AES cards
authorAdrian Knoth <adi@drcomp.erfurt.thur.de>
Thu, 27 Oct 2011 19:57:54 +0000 (21:57 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 31 Oct 2011 08:53:54 +0000 (09:53 +0100)
From the Windows INF file, we know the firmware ranges for all RME
cards. For PCIe, a single revision ID per device (RayDAT, MADI, AIO,
AES) is used. Contrary, the older PCI versions use ranges, that is,
one revision ID per firmware version.

Instead of listing all possible revisions individually, match the range.

This commit enables all MADI and AES PCI versions ever shipped.

Signed-off-by: Adrian Knoth <adi@drcomp.erfurt.thur.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/rme9652/hdspm.c

index 60a0b7de8e572dcf59500c7bd1e03276d903ed9c..15a6c3b9bc9a962903fe5ed162ac7e71697d3784 100644 (file)
@@ -520,16 +520,9 @@ MODULE_SUPPORTED_DEVICE("{{RME HDSPM-MADI}}");
 #define HDSPM_DMA_AREA_BYTES (HDSPM_MAX_CHANNELS * HDSPM_CHANNEL_BUFFER_BYTES)
 #define HDSPM_DMA_AREA_KILOBYTES (HDSPM_DMA_AREA_BYTES/1024)
 
-/* revisions >= 230 indicate AES32 card */
-#define HDSPM_MADI_ANCIENT_REV 204
-#define HDSPM_MADI_OLD_REV     207
-#define HDSPM_MADI_REV         210
 #define HDSPM_RAYDAT_REV       211
 #define HDSPM_AIO_REV          212
 #define HDSPM_MADIFACE_REV     213
-#define HDSPM_AES_REV          240
-#define HDSPM_AES32_REV                234
-#define HDSPM_AES32_OLD_REV    233
 
 /* speed factor modes */
 #define HDSPM_SPEED_SINGLE 0
@@ -6503,13 +6496,6 @@ static int __devinit snd_hdspm_create(struct snd_card *card,
        strcpy(card->driver, "HDSPM");
 
        switch (hdspm->firmware_rev) {
-       case HDSPM_MADI_REV:
-       case HDSPM_MADI_OLD_REV:
-       case HDSPM_MADI_ANCIENT_REV:
-               hdspm->io_type = MADI;
-               hdspm->card_name = "RME MADI";
-               hdspm->midiPorts = 3;
-               break;
        case HDSPM_RAYDAT_REV:
                hdspm->io_type = RayDAT;
                hdspm->card_name = "RME RayDAT";
@@ -6525,17 +6511,25 @@ static int __devinit snd_hdspm_create(struct snd_card *card,
                hdspm->card_name = "RME MADIface";
                hdspm->midiPorts = 1;
                break;
-       case HDSPM_AES_REV:
-       case HDSPM_AES32_REV:
-       case HDSPM_AES32_OLD_REV:
-               hdspm->io_type = AES32;
-               hdspm->card_name = "RME AES32";
-               hdspm->midiPorts = 2;
-               break;
        default:
-               snd_printk(KERN_ERR "HDSPM: unknown firmware revision %x\n",
+               if ((hdspm->firmware_rev == 0xf0) ||
+                       ((hdspm->firmware_rev >= 0xe6) &&
+                                       (hdspm->firmware_rev <= 0xea))) {
+                       hdspm->io_type = AES32;
+                       hdspm->card_name = "RME AES32";
+                       hdspm->midiPorts = 2;
+               } else if ((hdspm->firmware_rev == 0xd5) ||
+                       ((hdspm->firmware_rev >= 0xc8)  &&
+                               (hdspm->firmware_rev <= 0xcf))) {
+                       hdspm->io_type = MADI;
+                       hdspm->card_name = "RME MADI";
+                       hdspm->midiPorts = 3;
+               } else {
+                       snd_printk(KERN_ERR
+                               "HDSPM: unknown firmware revision %x\n",
                                hdspm->firmware_rev);
-               return -ENODEV;
+                       return -ENODEV;
+               }
        }
 
        err = pci_enable_device(pci);