diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-09-20 15:20:52 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-09-20 15:36:07 +0200 |
commit | 0ec33d1f952934ea3251cefc6d108b47818eedd0 (patch) | |
tree | 78a8ba489440e192f40fcfd7d7ea8f5885f1650d /sound | |
parent | ALSA: hda - Fix capture widget for ALC269vb and co (diff) | |
download | linux-0ec33d1f952934ea3251cefc6d108b47818eedd0.tar.xz linux-0ec33d1f952934ea3251cefc6d108b47818eedd0.zip |
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.c | 51 |
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, |