diff options
author | Takashi Iwai <tiwai@suse.de> | 2014-01-13 16:09:57 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2014-01-13 16:30:15 +0100 |
commit | dfc6e469b6d1ee5e8c71fa398b7b58fbb600dad8 (patch) | |
tree | 0be5382d677d330bc326f4931cabf0e483d09a52 /sound/pci/hda/hda_codec.c | |
parent | cbd209f41ea5f39394de5c1fe2dd9aa54a9c5744 (diff) | |
download | lwn-dfc6e469b6d1ee5e8c71fa398b7b58fbb600dad8.tar.gz lwn-dfc6e469b6d1ee5e8c71fa398b7b58fbb600dad8.zip |
ALSA: hda - Apply codec power_filter to FG nodes
Apply the codec->power_filter to the FG nodes in general for reducing
hackish set_power_state ops override in patch_sigmatel.c.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda/hda_codec.c')
-rw-r--r-- | sound/pci/hda/hda_codec.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index ab2a991d916f..ec4536c8d8d4 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -3927,6 +3927,8 @@ unsigned int snd_hda_codec_eapd_power_filter(struct hda_codec *codec, hda_nid_t nid, unsigned int power_state) { + if (nid == codec->afg || nid == codec->mfg) + return power_state; if (power_state == AC_PWRST_D3 && get_wcaps_type(get_wcaps(codec, nid)) == AC_WID_PIN && (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD)) { @@ -3965,9 +3967,13 @@ static unsigned int hda_set_power_state(struct hda_codec *codec, codec->patch_ops.set_power_state(codec, fg, power_state); else { - snd_hda_codec_read(codec, fg, flags, - AC_VERB_SET_POWER_STATE, - power_state); + state = power_state; + if (codec->power_filter) + state = codec->power_filter(codec, fg, state); + if (state == power_state || power_state != AC_PWRST_D3) + snd_hda_codec_read(codec, fg, flags, + AC_VERB_SET_POWER_STATE, + state); snd_hda_codec_set_power_to_all(codec, fg, power_state); } state = hda_sync_power_state(codec, fg, power_state); |