aboutsummaryrefslogtreecommitdiffstats
path: root/sound/isa/opl3sa2.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/isa/opl3sa2.c')
-rw-r--r--sound/isa/opl3sa2.c49
1 files changed, 29 insertions, 20 deletions
diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
index 58c972b2af03..63e51373ddc7 100644
--- a/sound/isa/opl3sa2.c
+++ b/sound/isa/opl3sa2.c
@@ -550,21 +550,27 @@ static int __devinit snd_opl3sa2_mixer(struct snd_card *card)
550#ifdef CONFIG_PM 550#ifdef CONFIG_PM
551static int snd_opl3sa2_suspend(struct snd_card *card, pm_message_t state) 551static int snd_opl3sa2_suspend(struct snd_card *card, pm_message_t state)
552{ 552{
553 struct snd_opl3sa2 *chip = card->private_data; 553 if (card) {
554 struct snd_opl3sa2 *chip = card->private_data;
554 555
555 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); 556 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
556 chip->wss->suspend(chip->wss); 557 chip->wss->suspend(chip->wss);
557 /* power down */ 558 /* power down */
558 snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D3); 559 snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D3);
560 }
559 561
560 return 0; 562 return 0;
561} 563}
562 564
563static int snd_opl3sa2_resume(struct snd_card *card) 565static int snd_opl3sa2_resume(struct snd_card *card)
564{ 566{
565 struct snd_opl3sa2 *chip = card->private_data; 567 struct snd_opl3sa2 *chip;
566 int i; 568 int i;
567 569
570 if (!card)
571 return 0;
572
573 chip = card->private_data;
568 /* power up */ 574 /* power up */
569 snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D0); 575 snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D0);
570 576
@@ -617,21 +623,24 @@ static void snd_opl3sa2_free(struct snd_card *card)
617 release_and_free_resource(chip->res_port); 623 release_and_free_resource(chip->res_port);
618} 624}
619 625
620static struct snd_card *snd_opl3sa2_card_new(int dev) 626static int snd_opl3sa2_card_new(int dev, struct snd_card **cardp)
621{ 627{
622 struct snd_card *card; 628 struct snd_card *card;
623 struct snd_opl3sa2 *chip; 629 struct snd_opl3sa2 *chip;
630 int err;
624 631
625 card = snd_card_new(index[dev], id[dev], THIS_MODULE, sizeof(struct snd_opl3sa2)); 632 err = snd_card_create(index[dev], id[dev], THIS_MODULE,
626 if (card == NULL) 633 sizeof(struct snd_opl3sa2), &card);
627 return NULL; 634 if (err < 0)
635 return err;
628 strcpy(card->driver, "OPL3SA2"); 636 strcpy(card->driver, "OPL3SA2");
629 strcpy(card->shortname, "Yamaha OPL3-SA2"); 637 strcpy(card->shortname, "Yamaha OPL3-SA2");
630 chip = card->private_data; 638 chip = card->private_data;
631 spin_lock_init(&chip->reg_lock); 639 spin_lock_init(&chip->reg_lock);
632 chip->irq = -1; 640 chip->irq = -1;
633 card->private_free = snd_opl3sa2_free; 641 card->private_free = snd_opl3sa2_free;
634 return card; 642 *cardp = card;
643 return 0;
635} 644}
636 645
637static int __devinit snd_opl3sa2_probe(struct snd_card *card, int dev) 646static int __devinit snd_opl3sa2_probe(struct snd_card *card, int dev)
@@ -723,9 +732,9 @@ static int __devinit snd_opl3sa2_pnp_detect(struct pnp_dev *pdev,
723 if (dev >= SNDRV_CARDS) 732 if (dev >= SNDRV_CARDS)
724 return -ENODEV; 733 return -ENODEV;
725 734
726 card = snd_opl3sa2_card_new(dev); 735 err = snd_opl3sa2_card_new(dev, &card);
727 if (! card) 736 if (err < 0)
728 return -ENOMEM; 737 return err;
729 if ((err = snd_opl3sa2_pnp(dev, card->private_data, pdev)) < 0) { 738 if ((err = snd_opl3sa2_pnp(dev, card->private_data, pdev)) < 0) {
730 snd_card_free(card); 739 snd_card_free(card);
731 return err; 740 return err;
@@ -789,9 +798,9 @@ static int __devinit snd_opl3sa2_pnp_cdetect(struct pnp_card_link *pcard,
789 if (dev >= SNDRV_CARDS) 798 if (dev >= SNDRV_CARDS)
790 return -ENODEV; 799 return -ENODEV;
791 800
792 card = snd_opl3sa2_card_new(dev); 801 err = snd_opl3sa2_card_new(dev, &card);
793 if (! card) 802 if (err < 0)
794 return -ENOMEM; 803 return err;
795 if ((err = snd_opl3sa2_pnp(dev, card->private_data, pdev)) < 0) { 804 if ((err = snd_opl3sa2_pnp(dev, card->private_data, pdev)) < 0) {
796 snd_card_free(card); 805 snd_card_free(card);
797 return err; 806 return err;
@@ -870,9 +879,9 @@ static int __devinit snd_opl3sa2_isa_probe(struct device *pdev,
870 struct snd_card *card; 879 struct snd_card *card;
871 int err; 880 int err;
872 881
873 card = snd_opl3sa2_card_new(dev); 882 err = snd_opl3sa2_card_new(dev, &card);
874 if (! card) 883 if (err < 0)
875 return -ENOMEM; 884 return err;
876 snd_card_set_dev(card, pdev); 885 snd_card_set_dev(card, pdev);
877 if ((err = snd_opl3sa2_probe(card, dev)) < 0) { 886 if ((err = snd_opl3sa2_probe(card, dev)) < 0) {
878 snd_card_free(card); 887 snd_card_free(card);