diff options
-rw-r--r-- | sound/pci/ymfpci/ymfpci.c | 62 |
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 | |||
349 | free_card: | ||
350 | snd_card_free(card); | ||
351 | return err; | ||
354 | } | 352 | } |
355 | 353 | ||
356 | static void snd_card_ymfpci_remove(struct pci_dev *pci) | 354 | static void snd_card_ymfpci_remove(struct pci_dev *pci) |