u32 vendor;
        u32 device;
        u32 subsystem;
+       unsigned char revision;
        unsigned char emu10k1_chip; /* Original SB Live. Not SB Live 24bit. */
        unsigned char emu10k2_chip; /* Audigy 1 or Audigy 2. */
        unsigned char ca0102_chip;  /* Audigy 1 or Audigy 2. Not SB Audigy 2 Value. */
 
         .spk71 = 1,
         .spdif_bug = 1,
         .ac97_chip = 1} ,
+       {.vendor = 0x1102, .device = 0x0004, .revision = 0x04,
+        .driver = "Audigy2", .name = "Audigy 2 [Unknown]",
+        .id = "Audigy2",
+        .emu10k2_chip = 1,
+        .ca0102_chip = 1,
+        .ca0151_chip = 1,
+        .spdif_bug = 1,
+        .ac97_chip = 1} ,
        {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10020052,
         .driver = "Audigy", .name = "Audigy 1 ES [SB0160]", 
         .id = "Audigy",
         .ca0102_chip = 1,
         .ac97_chip = 1} ,
        {.vendor = 0x1102, .device = 0x0004,
-        .driver = "Audigy", .name = "Audigy 1 or 2 [Unknown]", 
+        .driver = "Audigy", .name = "Audigy 1 [Unknown]", 
         .id = "Audigy",
         .emu10k2_chip = 1,
         .ca0102_chip = 1,
-        .spdif_bug = 1,
         .ac97_chip = 1} ,
        {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x40011102,
         .driver = "EMU10K1", .name = "E-mu APS [4001]", 
 
        for (c = emu_chip_details; c->vendor; c++) {
                if (c->vendor == pci->vendor && c->device == pci->device) {
-                       if (c->subsystem == emu->serial) break;
-                       if (c->subsystem == 0) break;
+                       if (c->subsystem && c->subsystem != emu->serial)
+                               continue;
+                       if (c->revision && c->revision != emu->revision)
+                               continue;
+                       break;
                }
        }
        if (c->vendor == 0) {