summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2010-09-20 15:20:52 +0200
committerTakashi Iwai <tiwai@suse.de>2010-09-20 15:36:07 +0200
commit0ec33d1f952934ea3251cefc6d108b47818eedd0 (patch)
tree78a8ba489440e192f40fcfd7d7ea8f5885f1650d /sound
parentf3550d1b052a8acf4159b407dbdd1def47f223f9 (diff)
downloadlinux-0ec33d1f952934ea3251cefc6d108b47818eedd0.tar.bz2
ALSA: hda - Refactor ALC269 power-ups/downs in PM callbacks
Create a helper function to simplify the code. Also, cleaned up the ifdef SND_HDA_NEEDS_RESUME and CONFIG_SND_HDA_POWER_SAVE. The former is always defined when the latter is set. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/patch_realtek.c51
1 files changed, 21 insertions, 30 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 4abe3da1240c..8689216fdcce 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -4128,10 +4128,8 @@ static int alc_resume(struct hda_codec *codec)
codec->patch_ops.init(codec);
snd_hda_codec_resume_amp(codec);
snd_hda_codec_resume_cache(codec);
-#ifdef CONFIG_SND_HDA_POWER_SAVE
if (codec->patch_ops.check_power_status)
codec->patch_ops.check_power_status(codec, 0x01);
-#endif
return 0;
}
#endif
@@ -14656,22 +14654,26 @@ static void alc269_auto_init(struct hda_codec *codec)
alc_inithook(codec);
}
+#ifdef SND_HDA_NEEDS_RESUME
+static void alc269_toggle_power_output(struct hda_codec *codec, int power_up)
+{
+ int val = alc_read_coef_idx(codec, 0x04);
+ if (power_up)
+ val |= 1 << 11;
+ else
+ val &= ~(1 << 11);
+ alc_write_coef_idx(codec, 0x04, val);
+}
+
#ifdef CONFIG_SND_HDA_POWER_SAVE
static int alc269_suspend(struct hda_codec *codec, pm_message_t state)
{
struct alc_spec *spec = codec->spec;
- int val;
-
- if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x017) {
- val = alc_read_coef_idx(codec, 0x04);
- /* Power down output pin */
- alc_write_coef_idx(codec, 0x04, val & ~(1<<11));
- }
+ if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x017)
+ alc269_toggle_power_output(codec, 0);
if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018) {
- val = alc_read_coef_idx(codec, 0x04);
- /* Power down output pin */
- alc_write_coef_idx(codec, 0x04, val & ~(1<<11));
+ alc269_toggle_power_output(codec, 0);
msleep(150);
}
@@ -14680,43 +14682,32 @@ static int alc269_suspend(struct hda_codec *codec, pm_message_t state)
spec->power_hook(codec);
return 0;
}
-#endif
-#ifdef SND_HDA_NEEDS_RESUME
+#endif /* CONFIG_SND_HDA_POWER_SAVE */
+
static int alc269_resume(struct hda_codec *codec)
{
- int val;
-
if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018) {
- val = alc_read_coef_idx(codec, 0x04);
- /* Power down output pin */
- alc_write_coef_idx(codec, 0x04, val & ~(1<<11));
+ alc269_toggle_power_output(codec, 0);
msleep(150);
}
codec->patch_ops.init(codec);
if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x017) {
- val = alc_read_coef_idx(codec, 0x04);
- /* Power up output pin */
- alc_write_coef_idx(codec, 0x04, val | (1<<11));
+ alc269_toggle_power_output(codec, 1);
msleep(200);
}
- if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018) {
- val = alc_read_coef_idx(codec, 0x04);
- /* Power up output pin */
- alc_write_coef_idx(codec, 0x04, val | (1<<11));
- }
+ if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018)
+ alc269_toggle_power_output(codec, 1);
snd_hda_codec_resume_amp(codec);
snd_hda_codec_resume_cache(codec);
-#ifdef CONFIG_SND_HDA_POWER_SAVE
if (codec->patch_ops.check_power_status)
codec->patch_ops.check_power_status(codec, 0x01);
-#endif
return 0;
}
-#endif
+#endif /* SND_HDA_NEEDS_RESUME */
enum {
ALC269_FIXUP_SONY_VAIO,