Commit 5d6147f1 authored by Mengdong Lin's avatar Mengdong Lin Committed by Takashi Iwai

ALSA: hda - bug fix on references without checking CONFIG_SND_HDA_POWER_SAVE

The patch to support runtime PM introduced a bug:
Module parameter 'power_save_controller', and the codec flag 'd3_stop_clk'
'd3_stop_clk_ok' are defined only when HDA power save is enabled in config. But
there are references to them without checking macro CONFIG_SND_HDA_POWER_SAVE.

This patch is to fix the bug.
Signed-off-by: default avatarMengdong Lin <mengdong.lin@intel.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b8dfc462
...@@ -1320,11 +1320,13 @@ int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, ...@@ -1320,11 +1320,13 @@ int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus,
AC_VERB_GET_SUBSYSTEM_ID, 0); AC_VERB_GET_SUBSYSTEM_ID, 0);
} }
#ifdef CONFIG_SND_HDA_POWER_SAVE
codec->d3_stop_clk = snd_hda_codec_get_supported_ps(codec, codec->d3_stop_clk = snd_hda_codec_get_supported_ps(codec,
codec->afg ? codec->afg : codec->mfg, codec->afg ? codec->afg : codec->mfg,
AC_PWRST_CLKSTOP); AC_PWRST_CLKSTOP);
if (!codec->d3_stop_clk) if (!codec->d3_stop_clk)
bus->power_keep_link_on = 1; bus->power_keep_link_on = 1;
#endif
/* power-up all before initialization */ /* power-up all before initialization */
hda_set_power_state(codec, hda_set_power_state(codec,
...@@ -3544,7 +3546,9 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg, ...@@ -3544,7 +3546,9 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
int count; int count;
unsigned int state; unsigned int state;
#ifdef CONFIG_SND_HDA_POWER_SAVE
codec->d3_stop_clk_ok = 0; codec->d3_stop_clk_ok = 0;
#endif
if (codec->patch_ops.set_power_state) { if (codec->patch_ops.set_power_state) {
codec->patch_ops.set_power_state(codec, fg, power_state); codec->patch_ops.set_power_state(codec, fg, power_state);
...@@ -3569,9 +3573,11 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg, ...@@ -3569,9 +3573,11 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
break; break;
} }
#ifdef CONFIG_SND_HDA_POWER_SAVE
if ((power_state == AC_PWRST_D3) if ((power_state == AC_PWRST_D3)
&& codec->d3_stop_clk && (state & AC_PWRST_CLK_STOP_OK)) && codec->d3_stop_clk && (state & AC_PWRST_CLK_STOP_OK))
codec->d3_stop_clk_ok = 1; codec->d3_stop_clk_ok = 1;
#endif
} }
#ifdef CONFIG_SND_HDA_HWDEP #ifdef CONFIG_SND_HDA_HWDEP
......
...@@ -2528,8 +2528,10 @@ static int azx_runtime_suspend(struct device *dev) ...@@ -2528,8 +2528,10 @@ static int azx_runtime_suspend(struct device *dev)
struct snd_card *card = dev_get_drvdata(dev); struct snd_card *card = dev_get_drvdata(dev);
struct azx *chip = card->private_data; struct azx *chip = card->private_data;
#ifdef CONFIG_SND_HDA_POWER_SAVE
if (!power_save_controller) if (!power_save_controller)
return -EAGAIN; return -EAGAIN;
#endif
azx_stop_chip(chip); azx_stop_chip(chip);
azx_clear_irq_pending(chip); azx_clear_irq_pending(chip);
......
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