[ALSA] emu10k1 - Fix handling of ac97_chip=2

EMU10K1/EMU10K2 driver
Fixed the handling of ac97_chip=2 capability type.
The error occurs in snd_ac97_mixer(), not in snd_ac97_bus().
Also, release the unnecessary ac97_bus object in the error path.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Takashi Iwai 2005-10-04 13:49:32 +02:00 committed by Jaroslav Kysela
parent 315e3bd717
commit b150869369
1 changed files with 10 additions and 9 deletions

View File

@ -802,21 +802,22 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu,
.read = snd_emu10k1_ac97_read, .read = snd_emu10k1_ac97_read,
}; };
if ((err = snd_ac97_bus(emu->card, 0, &ops, NULL, &pbus)) < 0) { if ((err = snd_ac97_bus(emu->card, 0, &ops, NULL, &pbus)) < 0)
if (emu->card_capabilities->ac97_chip == 1) return err;
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 */ pbus->no_vra = 1; /* we don't need VRA */
memset(&ac97, 0, sizeof(ac97)); memset(&ac97, 0, sizeof(ac97));
ac97.private_data = emu; ac97.private_data = emu;
ac97.private_free = snd_emu10k1_mixer_free_ac97; ac97.private_free = snd_emu10k1_mixer_free_ac97;
ac97.scaps = AC97_SCAP_NO_SPDIF; ac97.scaps = AC97_SCAP_NO_SPDIF;
if ((err = snd_ac97_mixer(pbus, &ac97, &emu->ac97)) < 0) if ((err = snd_ac97_mixer(pbus, &ac97, &emu->ac97)) < 0) {
return err; 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");
snd_device_free(emu->card, pbus);
goto no_ac97; /* FIXME: get rid of ugly gotos.. */
}
if (emu->audigy) { if (emu->audigy) {
/* set master volume to 0 dB */ /* set master volume to 0 dB */
snd_ac97_write(emu->ac97, AC97_MASTER, 0x0000); snd_ac97_write(emu->ac97, AC97_MASTER, 0x0000);