From 5d6147f10113c240845ea9e8e4e744bbadce5bcb Mon Sep 17 00:00:00 2001
From: Mengdong Lin <mengdong.lin@intel.com>
Date: Fri, 24 Aug 2012 12:06:30 +0800
Subject: [PATCH] ALSA: hda - bug fix on references without checking CONFIG_SND_HDA_POWER_SAVE
Git-commit: 5d6147f10113c240845ea9e8e4e744bbadce5bcb
Patch-mainline: 3.7-rc1
References: FATE#313754

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>

---
 sound/pci/hda/hda_codec.c |    6 ++++++
 sound/pci/hda/hda_intel.c |    2 ++
 2 files changed, 8 insertions(+)

--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -1319,11 +1319,13 @@ int /*__devinit*/ snd_hda_codec_new(stru
 					   AC_VERB_GET_SUBSYSTEM_ID, 0);
 	}
 
+#ifdef CONFIG_SND_HDA_POWER_SAVE
 	codec->d3_stop_clk = snd_hda_codec_get_supported_ps(codec,
 					codec->afg ? codec->afg : codec->mfg,
 					AC_PWRST_CLKSTOP);
 	if (!codec->d3_stop_clk)
 		bus->power_keep_link_on = 1;
+#endif
 
 	/* power-up all before initialization */
 	hda_set_power_state(codec,
@@ -3550,7 +3552,9 @@ static void hda_set_power_state(struct h
 	int count;
 	unsigned int state;
 
+#ifdef CONFIG_SND_HDA_POWER_SAVE
 	codec->d3_stop_clk_ok = 0;
+#endif
 
 	if (codec->patch_ops.set_power_state) {
 		codec->patch_ops.set_power_state(codec, fg, power_state);
@@ -3575,9 +3579,11 @@ static void hda_set_power_state(struct h
 			break;
 	}
 
+#ifdef CONFIG_SND_HDA_POWER_SAVE
 	if ((power_state == AC_PWRST_D3)
 		&& codec->d3_stop_clk && (state & AC_PWRST_CLK_STOP_OK))
 		codec->d3_stop_clk_ok = 1;
+#endif
 }
 
 #ifdef CONFIG_SND_HDA_HWDEP
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2483,8 +2483,10 @@ static int azx_runtime_suspend(struct de
 	struct snd_card *card = dev_get_drvdata(dev);
 	struct azx *chip = card->private_data;
 
+#ifdef CONFIG_SND_HDA_POWER_SAVE
 	if (!power_save_controller)
 		return -EAGAIN;
+#endif
 
 	azx_stop_chip(chip);
 	azx_clear_irq_pending(chip);
