aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Elfring <elfring@users.sourceforge.net>2017-09-06 02:18:30 -0400
committerTakashi Iwai <tiwai@suse.de>2017-09-07 04:23:47 -0400
commit468778a09c8a0c0b495064745ece2c73f4b4d389 (patch)
treee0aab4592115686106a6a133f18beedd1a59968e
parentee5f38a4459a453ba5d5bdacdcffdf408548338f (diff)
ALSA: maestro3: Use common error handling code in two functions
Add jump targets so that a bit of exception handling can be better reused at the end of these functions. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring <elfring@users.sourceforge.net> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/pci/maestro3.c57
1 files changed, 28 insertions, 29 deletions
diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
index 97ac80af4447..8f20dec97843 100644
--- a/sound/pci/maestro3.c
+++ b/sound/pci/maestro3.c
@@ -2622,22 +2622,18 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
2622 2622
2623 err = request_firmware(&chip->assp_kernel_image, 2623 err = request_firmware(&chip->assp_kernel_image,
2624 "ess/maestro3_assp_kernel.fw", &pci->dev); 2624 "ess/maestro3_assp_kernel.fw", &pci->dev);
2625 if (err < 0) { 2625 if (err < 0)
2626 snd_m3_free(chip); 2626 goto free_chip;
2627 return err;
2628 }
2629 2627
2630 err = request_firmware(&chip->assp_minisrc_image, 2628 err = request_firmware(&chip->assp_minisrc_image,
2631 "ess/maestro3_assp_minisrc.fw", &pci->dev); 2629 "ess/maestro3_assp_minisrc.fw", &pci->dev);
2632 if (err < 0) { 2630 if (err < 0)
2633 snd_m3_free(chip); 2631 goto free_chip;
2634 return err; 2632
2635 } 2633 err = pci_request_regions(pci, card->driver);
2634 if (err < 0)
2635 goto free_chip;
2636 2636
2637 if ((err = pci_request_regions(pci, card->driver)) < 0) {
2638 snd_m3_free(chip);
2639 return err;
2640 }
2641 chip->iobase = pci_resource_start(pci, 0); 2637 chip->iobase = pci_resource_start(pci, 0);
2642 2638
2643 /* just to be sure */ 2639 /* just to be sure */
@@ -2655,8 +2651,8 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
2655 if (request_irq(pci->irq, snd_m3_interrupt, IRQF_SHARED, 2651 if (request_irq(pci->irq, snd_m3_interrupt, IRQF_SHARED,
2656 KBUILD_MODNAME, chip)) { 2652 KBUILD_MODNAME, chip)) {
2657 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 2653 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
2658 snd_m3_free(chip); 2654 err = -ENOMEM;
2659 return -ENOMEM; 2655 goto free_chip;
2660 } 2656 }
2661 chip->irq = pci->irq; 2657 chip->irq = pci->irq;
2662 2658
@@ -2666,10 +2662,9 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
2666 dev_warn(card->dev, "can't allocate apm buffer\n"); 2662 dev_warn(card->dev, "can't allocate apm buffer\n");
2667#endif 2663#endif
2668 2664
2669 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { 2665 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
2670 snd_m3_free(chip); 2666 if (err < 0)
2671 return err; 2667 goto free_chip;
2672 }
2673 2668
2674 if ((err = snd_m3_mixer(chip)) < 0) 2669 if ((err = snd_m3_mixer(chip)) < 0)
2675 return err; 2670 return err;
@@ -2699,6 +2694,10 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
2699 *chip_ret = chip; 2694 *chip_ret = chip;
2700 2695
2701 return 0; 2696 return 0;
2697
2698free_chip:
2699 snd_m3_free(chip);
2700 return err;
2702} 2701}
2703 2702
2704/* 2703/*
@@ -2741,23 +2740,19 @@ snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
2741 break; 2740 break;
2742 } 2741 }
2743 2742
2744 if ((err = snd_m3_create(card, pci, 2743 err = snd_m3_create(card, pci, external_amp[dev], amp_gpio[dev], &chip);
2745 external_amp[dev], 2744 if (err < 0)
2746 amp_gpio[dev], 2745 goto free_card;
2747 &chip)) < 0) { 2746
2748 snd_card_free(card);
2749 return err;
2750 }
2751 card->private_data = chip; 2747 card->private_data = chip;
2752 2748
2753 sprintf(card->shortname, "ESS %s PCI", card->driver); 2749 sprintf(card->shortname, "ESS %s PCI", card->driver);
2754 sprintf(card->longname, "%s at 0x%lx, irq %d", 2750 sprintf(card->longname, "%s at 0x%lx, irq %d",
2755 card->shortname, chip->iobase, chip->irq); 2751 card->shortname, chip->iobase, chip->irq);
2756 2752
2757 if ((err = snd_card_register(card)) < 0) { 2753 err = snd_card_register(card);
2758 snd_card_free(card); 2754 if (err < 0)
2759 return err; 2755 goto free_card;
2760 }
2761 2756
2762#if 0 /* TODO: not supported yet */ 2757#if 0 /* TODO: not supported yet */
2763 /* TODO enable MIDI IRQ and I/O */ 2758 /* TODO enable MIDI IRQ and I/O */
@@ -2772,6 +2767,10 @@ snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
2772 pci_set_drvdata(pci, card); 2767 pci_set_drvdata(pci, card);
2773 dev++; 2768 dev++;
2774 return 0; 2769 return 0;
2770
2771free_card:
2772 snd_card_free(card);
2773 return err;
2775} 2774}
2776 2775
2777static void snd_m3_remove(struct pci_dev *pci) 2776static void snd_m3_remove(struct pci_dev *pci)