aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrzysztof Helt <krzysztof.h1@wp.pl>2009-03-16 16:32:25 -0400
committerTakashi Iwai <tiwai@suse.de>2009-03-17 04:27:47 -0400
commitdde332b660cf0bc2baaba678b52768a0fb6e6da2 (patch)
tree0b58cbefed8b0f398c665906df26e6bc4740d4f4
parent041b62374c7fedc11a8a1eeda2868612d3d1436c (diff)
ALSA: opl3sa2 - Fix NULL dereference when suspending snd_opl3sa2
Fix the OOPS during a opl3sa2 card suspend and resume if the driver is loaded but the card is not found. Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Cc: <stable@kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/isa/opl3sa2.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
index 58c972b2af03..b848d1001864 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