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: Mengdong Lin <mengdong.lin@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
b8dfc46241
commit
5d6147f101
|
@ -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,
|
||||||
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,
|
||||||
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)
|
||||||
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);
|
||||||
|
|
Loading…
Reference in a new issue