|
@@ -1320,11 +1320,13 @@ int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus,
|
|
|
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,
|
|
@@ -3544,7 +3546,9 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
|
|
|
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);
|
|
@@ -3569,9 +3573,11 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
|
|
|
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
|