aboutsummaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2013-07-05 12:13:59 +0200
committerTakashi Iwai <tiwai@suse.de>2013-07-08 09:42:42 +0200
commitcd63a5ffd24214246b1092365c7d6c2cd5aca29b (patch)
tree246e3ae7038e395193a797bd86cfdc66668219c8 /sound
parent38f0ad7c90c2b2091e7d8689dde294fef27db68b (diff)
ALSA: hda - Keep halting ALC5505 DSP
ALC5505 DSP is enabled even though we don't use the features yet at all. This results in the unnecessarily high power consumption, more than 100mV higher. Until we implement the DSP support, better to bypass DSP for saving more power. Reported-by: Mengdong Lin <mengdong.lin@intel.com> [Patch modified by Mengdong to cal alc5505_dsp_init() with extra acl5505_dsp_halt().] Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/patch_realtek.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 14ac9b0e740..8bd22614986 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -37,6 +37,9 @@
#include "hda_jack.h"
#include "hda_generic.h"
+/* keep halting ALC5505 DSP, for power saving */
+#define HALT_REALTEK_ALC5505
+
/* unsol event tags */
#define ALC_DCVOL_EVENT 0x08
@@ -2659,15 +2662,27 @@ static void alc5505_dsp_init(struct hda_codec *codec)
alc5505_coef_set(codec, 0x880c, 0x00000004); /* DRAM Function control */
alc5505_coef_set(codec, 0x880c, 0x00000003);
alc5505_coef_set(codec, 0x880c, 0x00000010);
+
+#ifdef HALT_REALTEK_ALC5505
+ alc5505_dsp_halt(codec);
+#endif
}
+#ifdef HALT_REALTEK_ALC5505
+#define alc5505_dsp_suspend(codec) /* NOP */
+#define alc5505_dsp_resume(codec) /* NOP */
+#else
+#define alc5505_dsp_suspend(codec) alc5505_dsp_halt(codec)
+#define alc5505_dsp_resume(codec) alc5505_dsp_back_from_halt(codec)
+#endif
+
#ifdef CONFIG_PM
static int alc269_suspend(struct hda_codec *codec)
{
struct alc_spec *spec = codec->spec;
if (spec->has_alc5505_dsp)
- alc5505_dsp_halt(codec);
+ alc5505_dsp_suspend(codec);
return alc_suspend(codec);
}
@@ -2696,7 +2711,7 @@ static int alc269_resume(struct hda_codec *codec)
alc_inv_dmic_sync(codec, true);
hda_call_check_power_status(codec, 0x01);
if (spec->has_alc5505_dsp)
- alc5505_dsp_back_from_halt(codec);
+ alc5505_dsp_resume(codec);
return 0;
}
#endif /* CONFIG_PM */