Commit dde332b6 authored by Krzysztof Helt's avatar Krzysztof Helt Committed by Takashi Iwai

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: default avatarKrzysztof Helt <krzysztof.h1@wp.pl>
Cc: <stable@kernel.org>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 041b6237
...@@ -550,21 +550,27 @@ static int __devinit snd_opl3sa2_mixer(struct snd_card *card) ...@@ -550,21 +550,27 @@ static int __devinit snd_opl3sa2_mixer(struct snd_card *card)
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int snd_opl3sa2_suspend(struct snd_card *card, pm_message_t state) static int snd_opl3sa2_suspend(struct snd_card *card, pm_message_t state)
{ {
if (card) {
struct snd_opl3sa2 *chip = card->private_data; struct snd_opl3sa2 *chip = card->private_data;
snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
chip->wss->suspend(chip->wss); chip->wss->suspend(chip->wss);
/* power down */ /* power down */
snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D3); snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D3);
}
return 0; return 0;
} }
static int snd_opl3sa2_resume(struct snd_card *card) static int snd_opl3sa2_resume(struct snd_card *card)
{ {
struct snd_opl3sa2 *chip = card->private_data; struct snd_opl3sa2 *chip;
int i; int i;
if (!card)
return 0;
chip = card->private_data;
/* power up */ /* power up */
snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D0); snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment