unsigned char emu10k2_chip; /* Audigy 1 or Audigy 2. */
        unsigned char ca0102_chip;  /* Audigy 1 or Audigy 2. Not SB Audigy 2 Value. */
        unsigned char ca0108_chip;  /* Audigy 2 Value */
+       unsigned char ca_cardbus_chip; /* Audigy 2 ZS Notebook */
        unsigned char ca0151_chip;  /* P16V */
        unsigned char spk71;        /* Has 7.1 speakers */
        unsigned char sblive51;     /* SBLive! 5.1 - extout 0x11 -> center, 0x12 -> lfe */
 
        return 0;
 }
 
+static int __devinit snd_emu10k1_cardbus_init(emu10k1_t * emu)
+{
+       unsigned long special_port;
+       unsigned int value;
+
+       /* Special initialisation routine
+        * before the rest of the IO-Ports become active.
+        */
+       special_port = emu->port + 0x38;
+       value = inl(special_port);
+       outl(0x00d00000, special_port);
+       value = inl(special_port);
+       outl(0x00d00001, special_port);
+       value = inl(special_port);
+       outl(0x00d0005f, special_port);
+       value = inl(special_port);
+       outl(0x00d0007f, special_port);
+       value = inl(special_port);
+       outl(0x0090007f, special_port);
+       value = inl(special_port);
+
+       return 0;
+}
+
 /*
  *  Create the EMU10K1 instance
  */
         .ca0108_chip = 1,
         .spk71 = 1,
         .ac97_chip = 1} ,
+       /* Audigy 2 ZS Notebook Cardbus card.*/
+       /* Tested by James@superbug.co.uk 30th October 2005 */
+       /* Not working yet, but progressing. */
+       {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x20011102,
+        .driver = "Audigy2", .name = "Audigy 2 ZS Notebook [SB0530]", 
+        .id = "Audigy2",
+        .emu10k2_chip = 1,
+        .ca0108_chip = 1,
+        .ca_cardbus_chip = 1,
+        .spk71 = 1} ,
        {.vendor = 0x1102, .device = 0x0008, 
         .driver = "Audigy2", .name = "Audigy 2 Value [Unknown]", 
         .id = "Audigy2",
                        snd_emu10k1_free(emu);
                        return err;
                }
+       } else if (emu->card_capabilities->ca_cardbus_chip) {
+               if ((err = snd_emu10k1_cardbus_init(emu)) < 0) {
+                       snd_emu10k1_free(emu);
+                       return err;
+               }
        } else {
                /* 5.1: Enable the additional AC97 Slots. If the emu10k1 version
                        does not support this, it shouldn't do any harm */