cycles_t last_interrupt;
 
+       unsigned int serial;
+
        struct hdspm_peak_rms peak_rms;
 };
 
 
        snd_iprintf(buffer, "HW Serial: 0x%06x%06x\n",
                        (hdspm_read(hdspm, HDSPM_midiStatusIn1)>>8) & 0xFFFFFF,
-                       (hdspm_read(hdspm, HDSPM_midiStatusIn0)>>8) & 0xFFFFFF);
+                       hdspm->serial);
 
        snd_iprintf(buffer, "IRQ: %d Registers bus: 0x%lx VM: 0x%lx\n",
                        hdspm->irq, hdspm->port, (unsigned long)hdspm->iobase);
                hdspm_version.card_type = hdspm->io_type;
                strncpy(hdspm_version.cardname, hdspm->card_name,
                                sizeof(hdspm_version.cardname));
-               hdspm_version.serial = (hdspm_read(hdspm,
-                                       HDSPM_midiStatusIn0)>>8) & 0xFFFFFF;
+               hdspm_version.serial = hdspm->serial;
                hdspm_version.firmware_rev = hdspm->firmware_rev;
                hdspm_version.addons = 0;
                if (hdspm->tco)
        }
 
        if (hdspm->io_type != MADIface) {
+               hdspm->serial = (hdspm_read(hdspm,
+                               HDSPM_midiStatusIn0)>>8) & 0xFFFFFF;
                sprintf(card->shortname, "%s_%x",
                        hdspm->card_name,
-                       (hdspm_read(hdspm, HDSPM_midiStatusIn0)>>8) & 0xFFFFFF);
+                       hdspm->serial);
                sprintf(card->longname, "%s S/N 0x%x at 0x%lx, irq %d",
                        hdspm->card_name,
-                       (hdspm_read(hdspm, HDSPM_midiStatusIn0)>>8) & 0xFFFFFF,
+                       hdspm->serial,
                        hdspm->port, hdspm->irq);
        } else {
                sprintf(card->shortname, "%s", hdspm->card_name);