[ALSA] emu10k1 - Fix loading of SBLive Game board
authorTakashi Iwai <tiwai@suse.de>
Fri, 30 Sep 2005 14:56:59 +0000 (16:56 +0200)
committerJaroslav Kysela <perex@suse.cz>
Fri, 7 Oct 2005 12:46:26 +0000 (14:46 +0200)
EMU10K1/EMU10K2 driver
Fixed the error at loading SBLive Game board (and possible other models).
The PCI SSIDs of this board conflicts with SB Live 5.1 Platinum, which has
no AC97 chip.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/emu10k1.h
sound/pci/emu10k1/emu10k1_main.c
sound/pci/emu10k1/emumixer.c

index 67bf3f18e96a81702821ad1c739f7422cc35892e..14cb2718cb77f1a0d00865ee8ff09e8456ae4fef 100644 (file)
@@ -1059,7 +1059,7 @@ typedef struct {
        unsigned char spk71;        /* Has 7.1 speakers */
        unsigned char sblive51;     /* SBLive! 5.1 - extout 0x11 -> center, 0x12 -> lfe */
        unsigned char spdif_bug;    /* Has Spdif phasing bug */
-       unsigned char ac97_chip;    /* Has an AC97 chip */
+       unsigned char ac97_chip;    /* Has an AC97 chip: 1 = mandatory, 2 = optional */
        unsigned char ecard;        /* APS EEPROM */
        const char *driver;
        const char *name;
index e87e8427f25f0a4c15e3b83f2e128baf2873b911..e9cd8e054f25cea7d7fccdbe5b8a2bfae65dc5dc 100644 (file)
@@ -756,9 +756,12 @@ static emu_chip_details_t emu_chip_details[] = {
         .sblive51 = 1} ,
        /* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */
        {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
-        .driver = "EMU10K1", .name = "SBLive! Platinum 5.1 [SB0060]", 
+        .driver = "EMU10K1", .name = "SBLive 5.1 [SB0060]",
         .id = "Live",
         .emu10k1_chip = 1,
+        .ac97_chip = 2, /* ac97 is optional; both SBLive 5.1 and platinum
+                         * share the same IDs!
+                         */
         .sblive51 = 1} ,
        {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102,
         .driver = "EMU10K1", .name = "SBLive! Value [CT4850]", 
index d71a72e84bcc9181a7c2f23c31b14fd864c9cfe9..6994f90bb83a033bf31f86cc80d644a51d8cca93 100644 (file)
@@ -802,8 +802,13 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu,
                        .read = snd_emu10k1_ac97_read,
                };
 
-               if ((err = snd_ac97_bus(emu->card, 0, &ops, NULL, &pbus)) < 0)
-                       return err;
+               if ((err = snd_ac97_bus(emu->card, 0, &ops, NULL, &pbus)) < 0) {
+                       if (emu->card_capabilities->ac97_chip == 1)
+                               return err;
+                       snd_printd(KERN_INFO "emu10k1: AC97 is optional on this board\n");
+                       snd_printd(KERN_INFO"          Proceeding without ac97 mixers...\n");
+                       goto no_ac97; /* FIXME: get rid of ugly gotos.. */
+               }
                pbus->no_vra = 1; /* we don't need VRA */
                
                memset(&ac97, 0, sizeof(ac97));
@@ -836,6 +841,7 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu,
                for (; *c; c++)
                        remove_ctl(card, *c);
        } else {
+       no_ac97:
                if (emu->card_capabilities->ecard)
                        strcpy(emu->card->mixername, "EMU APS");
                else if (emu->audigy)