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