summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/pci/ymfpci/ymfpci.c62
1 files changed, 30 insertions, 32 deletions
diff --git a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c
index 4faf3e1ed06a..eafdee384059 100644
--- a/sound/pci/ymfpci/ymfpci.c
+++ b/sound/pci/ymfpci/ymfpci.c
@@ -268,10 +268,9 @@ static int snd_card_ymfpci_probe(struct pci_dev *pci,
268 if ((err = snd_ymfpci_create(card, pci, 268 if ((err = snd_ymfpci_create(card, pci,
269 old_legacy_ctrl, 269 old_legacy_ctrl,
270 &chip)) < 0) { 270 &chip)) < 0) {
271 snd_card_free(card);
272 release_and_free_resource(mpu_res); 271 release_and_free_resource(mpu_res);
273 release_and_free_resource(fm_res); 272 release_and_free_resource(fm_res);
274 return err; 273 goto free_card;
275 } 274 }
276 chip->fm_res = fm_res; 275 chip->fm_res = fm_res;
277 chip->mpu_res = mpu_res; 276 chip->mpu_res = mpu_res;
@@ -283,35 +282,31 @@ static int snd_card_ymfpci_probe(struct pci_dev *pci,
283 card->shortname, 282 card->shortname,
284 chip->reg_area_phys, 283 chip->reg_area_phys,
285 chip->irq); 284 chip->irq);
286 if ((err = snd_ymfpci_pcm(chip, 0)) < 0) { 285 err = snd_ymfpci_pcm(chip, 0);
287 snd_card_free(card); 286 if (err < 0)
288 return err; 287 goto free_card;
289 } 288
290 if ((err = snd_ymfpci_pcm_spdif(chip, 1)) < 0) { 289 err = snd_ymfpci_pcm_spdif(chip, 1);
291 snd_card_free(card); 290 if (err < 0)
292 return err; 291 goto free_card;
293 } 292
294 err = snd_ymfpci_mixer(chip, rear_switch[dev]); 293 err = snd_ymfpci_mixer(chip, rear_switch[dev]);
295 if (err < 0) { 294 if (err < 0)
296 snd_card_free(card); 295 goto free_card;
297 return err; 296
298 }
299 if (chip->ac97->ext_id & AC97_EI_SDAC) { 297 if (chip->ac97->ext_id & AC97_EI_SDAC) {
300 err = snd_ymfpci_pcm_4ch(chip, 2); 298 err = snd_ymfpci_pcm_4ch(chip, 2);
301 if (err < 0) { 299 if (err < 0)
302 snd_card_free(card); 300 goto free_card;
303 return err; 301
304 }
305 err = snd_ymfpci_pcm2(chip, 3); 302 err = snd_ymfpci_pcm2(chip, 3);
306 if (err < 0) { 303 if (err < 0)
307 snd_card_free(card); 304 goto free_card;
308 return err;
309 }
310 }
311 if ((err = snd_ymfpci_timer(chip, 0)) < 0) {
312 snd_card_free(card);
313 return err;
314 } 305 }
306 err = snd_ymfpci_timer(chip, 0);
307 if (err < 0)
308 goto free_card;
309
315 if (chip->mpu_res) { 310 if (chip->mpu_res) {
316 if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI, 311 if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI,
317 mpu_port[dev], 312 mpu_port[dev],
@@ -336,21 +331,24 @@ static int snd_card_ymfpci_probe(struct pci_dev *pci,
336 legacy_ctrl &= ~YMFPCI_LEGACY_FMEN; 331 legacy_ctrl &= ~YMFPCI_LEGACY_FMEN;
337 pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl); 332 pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl);
338 } else if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) { 333 } else if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
339 snd_card_free(card);
340 dev_err(card->dev, "cannot create opl3 hwdep\n"); 334 dev_err(card->dev, "cannot create opl3 hwdep\n");
341 return err; 335 goto free_card;
342 } 336 }
343 } 337 }
344 338
345 snd_ymfpci_create_gameport(chip, dev, legacy_ctrl, legacy_ctrl2); 339 snd_ymfpci_create_gameport(chip, dev, legacy_ctrl, legacy_ctrl2);
346 340
347 if ((err = snd_card_register(card)) < 0) { 341 err = snd_card_register(card);
348 snd_card_free(card); 342 if (err < 0)
349 return err; 343 goto free_card;
350 } 344
351 pci_set_drvdata(pci, card); 345 pci_set_drvdata(pci, card);
352 dev++; 346 dev++;
353 return 0; 347 return 0;
348
349free_card:
350 snd_card_free(card);
351 return err;
354} 352}
355 353
356static void snd_card_ymfpci_remove(struct pci_dev *pci) 354static void snd_card_ymfpci_remove(struct pci_dev *pci)