Skip to content

Commit

Permalink
ALSA: opl3sa2 - Fix NULL dereference when suspending snd_opl3sa2
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Krzysztof-H authored and tiwai committed Mar 17, 2009
1 parent 041b623 commit dde332b
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions sound/isa/opl3sa2.c
Original file line number Diff line number Diff line change
Expand Up @@ -550,21 +550,27 @@ static int __devinit snd_opl3sa2_mixer(struct snd_card *card)
#ifdef CONFIG_PM
static int snd_opl3sa2_suspend(struct snd_card *card, pm_message_t state)
{
struct snd_opl3sa2 *chip = card->private_data;
if (card) {
struct snd_opl3sa2 *chip = card->private_data;

snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
chip->wss->suspend(chip->wss);
/* power down */
snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D3);
snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
chip->wss->suspend(chip->wss);
/* power down */
snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D3);
}

return 0;
}

static int snd_opl3sa2_resume(struct snd_card *card)
{
struct snd_opl3sa2 *chip = card->private_data;
struct snd_opl3sa2 *chip;
int i;

if (!card)
return 0;

chip = card->private_data;
/* power up */
snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D0);

Expand Down

0 comments on commit dde332b

Please sign in to comment.