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>

authored by

Markus Elfring and committed by
Takashi Iwai
468778a0 ee5f38a4

+28 -29
+28 -29
sound/pci/maestro3.c
··· 2622 2622 2623 2623 err = request_firmware(&chip->assp_kernel_image, 2624 2624 "ess/maestro3_assp_kernel.fw", &pci->dev); 2625 - if (err < 0) { 2626 - snd_m3_free(chip); 2627 - return err; 2628 - } 2625 + if (err < 0) 2626 + goto free_chip; 2629 2627 2630 2628 err = request_firmware(&chip->assp_minisrc_image, 2631 2629 "ess/maestro3_assp_minisrc.fw", &pci->dev); 2632 - if (err < 0) { 2633 - snd_m3_free(chip); 2634 - return err; 2635 - } 2630 + if (err < 0) 2631 + goto free_chip; 2636 2632 2637 - if ((err = pci_request_regions(pci, card->driver)) < 0) { 2638 - snd_m3_free(chip); 2639 - return err; 2640 - } 2633 + err = pci_request_regions(pci, card->driver); 2634 + if (err < 0) 2635 + goto free_chip; 2636 + 2641 2637 chip->iobase = pci_resource_start(pci, 0); 2642 2638 2643 2639 /* just to be sure */ ··· 2651 2655 if (request_irq(pci->irq, snd_m3_interrupt, IRQF_SHARED, 2652 2656 KBUILD_MODNAME, chip)) { 2653 2657 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 2654 - snd_m3_free(chip); 2655 - return -ENOMEM; 2658 + err = -ENOMEM; 2659 + goto free_chip; 2656 2660 } 2657 2661 chip->irq = pci->irq; 2658 2662 ··· 2662 2666 dev_warn(card->dev, "can't allocate apm buffer\n"); 2663 2667 #endif 2664 2668 2665 - if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { 2666 - snd_m3_free(chip); 2667 - return err; 2668 - } 2669 + err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); 2670 + if (err < 0) 2671 + goto free_chip; 2669 2672 2670 2673 if ((err = snd_m3_mixer(chip)) < 0) 2671 2674 return err; ··· 2694 2699 *chip_ret = chip; 2695 2700 2696 2701 return 0; 2702 + 2703 + free_chip: 2704 + snd_m3_free(chip); 2705 + return err; 2697 2706 } 2698 2707 2699 2708 /* ··· 2740 2741 break; 2741 2742 } 2742 2743 2743 - if ((err = snd_m3_create(card, pci, 2744 - external_amp[dev], 2745 - amp_gpio[dev], 2746 - &chip)) < 0) { 2747 - snd_card_free(card); 2748 - return err; 2749 - } 2744 + err = snd_m3_create(card, pci, external_amp[dev], amp_gpio[dev], &chip); 2745 + if (err < 0) 2746 + goto free_card; 2747 + 2750 2748 card->private_data = chip; 2751 2749 2752 2750 sprintf(card->shortname, "ESS %s PCI", card->driver); 2753 2751 sprintf(card->longname, "%s at 0x%lx, irq %d", 2754 2752 card->shortname, chip->iobase, chip->irq); 2755 2753 2756 - if ((err = snd_card_register(card)) < 0) { 2757 - snd_card_free(card); 2758 - return err; 2759 - } 2754 + err = snd_card_register(card); 2755 + if (err < 0) 2756 + goto free_card; 2760 2757 2761 2758 #if 0 /* TODO: not supported yet */ 2762 2759 /* TODO enable MIDI IRQ and I/O */ ··· 2767 2772 pci_set_drvdata(pci, card); 2768 2773 dev++; 2769 2774 return 0; 2775 + 2776 + free_card: 2777 + snd_card_free(card); 2778 + return err; 2770 2779 } 2771 2780 2772 2781 static void snd_m3_remove(struct pci_dev *pci)