[ALSA] emu10k1 - Fix loading of SBLive Game board

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>

authored by Takashi Iwai and committed by Jaroslav Kysela f12aa40c c66186e1

+13 -4
+1 -1
include/sound/emu10k1.h
··· 1059 unsigned char spk71; /* Has 7.1 speakers */ 1060 unsigned char sblive51; /* SBLive! 5.1 - extout 0x11 -> center, 0x12 -> lfe */ 1061 unsigned char spdif_bug; /* Has Spdif phasing bug */ 1062 - unsigned char ac97_chip; /* Has an AC97 chip */ 1063 unsigned char ecard; /* APS EEPROM */ 1064 const char *driver; 1065 const char *name;
··· 1059 unsigned char spk71; /* Has 7.1 speakers */ 1060 unsigned char sblive51; /* SBLive! 5.1 - extout 0x11 -> center, 0x12 -> lfe */ 1061 unsigned char spdif_bug; /* Has Spdif phasing bug */ 1062 + unsigned char ac97_chip; /* Has an AC97 chip: 1 = mandatory, 2 = optional */ 1063 unsigned char ecard; /* APS EEPROM */ 1064 const char *driver; 1065 const char *name;
+4 -1
sound/pci/emu10k1/emu10k1_main.c
··· 756 .sblive51 = 1} , 757 /* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */ 758 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102, 759 - .driver = "EMU10K1", .name = "SBLive! Platinum 5.1 [SB0060]", 760 .id = "Live", 761 .emu10k1_chip = 1, 762 .sblive51 = 1} , 763 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102, 764 .driver = "EMU10K1", .name = "SBLive! Value [CT4850]",
··· 756 .sblive51 = 1} , 757 /* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */ 758 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102, 759 + .driver = "EMU10K1", .name = "SBLive 5.1 [SB0060]", 760 .id = "Live", 761 .emu10k1_chip = 1, 762 + .ac97_chip = 2, /* ac97 is optional; both SBLive 5.1 and platinum 763 + * share the same IDs! 764 + */ 765 .sblive51 = 1} , 766 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102, 767 .driver = "EMU10K1", .name = "SBLive! Value [CT4850]",
+8 -2
sound/pci/emu10k1/emumixer.c
··· 802 .read = snd_emu10k1_ac97_read, 803 }; 804 805 - if ((err = snd_ac97_bus(emu->card, 0, &ops, NULL, &pbus)) < 0) 806 - return err; 807 pbus->no_vra = 1; /* we don't need VRA */ 808 809 memset(&ac97, 0, sizeof(ac97)); ··· 841 for (; *c; c++) 842 remove_ctl(card, *c); 843 } else { 844 if (emu->card_capabilities->ecard) 845 strcpy(emu->card->mixername, "EMU APS"); 846 else if (emu->audigy)
··· 802 .read = snd_emu10k1_ac97_read, 803 }; 804 805 + if ((err = snd_ac97_bus(emu->card, 0, &ops, NULL, &pbus)) < 0) { 806 + if (emu->card_capabilities->ac97_chip == 1) 807 + return err; 808 + snd_printd(KERN_INFO "emu10k1: AC97 is optional on this board\n"); 809 + snd_printd(KERN_INFO" Proceeding without ac97 mixers...\n"); 810 + goto no_ac97; /* FIXME: get rid of ugly gotos.. */ 811 + } 812 pbus->no_vra = 1; /* we don't need VRA */ 813 814 memset(&ac97, 0, sizeof(ac97)); ··· 836 for (; *c; c++) 837 remove_ctl(card, *c); 838 } else { 839 + no_ac97: 840 if (emu->card_capabilities->ecard) 841 strcpy(emu->card->mixername, "EMU APS"); 842 else if (emu->audigy)