diff options
author | Markus Elfring <elfring@users.sourceforge.net> | 2017-09-06 02:18:30 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2017-09-07 04:23:47 -0400 |
commit | 468778a09c8a0c0b495064745ece2c73f4b4d389 (patch) | |
tree | e0aab4592115686106a6a133f18beedd1a59968e | |
parent | ee5f38a4459a453ba5d5bdacdcffdf408548338f (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.c | 57 |
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 | |||
2698 | free_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 | |||
2771 | free_card: | ||
2772 | snd_card_free(card); | ||
2773 | return err; | ||
2775 | } | 2774 | } |
2776 | 2775 | ||
2777 | static void snd_m3_remove(struct pci_dev *pci) | 2776 | static void snd_m3_remove(struct pci_dev *pci) |