At Sat, 2 May 2015 16:05:13 +0100, Jonathan McDowell wrote:
On Thu, Apr 30, 2015 at 07:06:31PM +0200, Takashi Iwai wrote:
At Thu, 30 Apr 2015 16:01:31 +0100, Jonathan McDowell wrote:
On Wed, Apr 29, 2015 at 01:54:57PM +0200, Takashi Iwai wrote:
One patch you can try (with or without power_save_node disablement) is below, it squashes the verb sequences at (runtime) PM resume as we did for 4.0. Let me know if this changes the behavior.
Patch alone has no effect. Patch with power_save_node disablement solves the problem. Didn't try power_save_node disablement without the patch.
Then please confirm that only power_save_node disablement suffices. This can be considered as the least change that can be put to 4.1-rc if no better fix is found.
Setting codec->power_save_node to 0 in patch_alc269 is sufficient; no noticeable cracking occurring.
Does the patch below have any improvement?
Takashi
--- diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c index 788f969b1a68..17147c2638f3 100644 --- a/sound/pci/hda/hda_generic.c +++ b/sound/pci/hda/hda_generic.c @@ -841,11 +841,19 @@ static hda_nid_t path_power_update(struct hda_codec *codec, else state = AC_PWRST_D3; if (!snd_hda_check_power_state(codec, nid, state)) { - snd_hda_codec_write(codec, nid, 0, + snd_hda_codec_read(codec, nid, 0, AC_VERB_SET_POWER_STATE, state); changed = nid; - if (state == AC_PWRST_D0) - snd_hdac_regmap_sync_node(&codec->core, nid); + if (state == AC_PWRST_D0) { + msleep(10); + /* all known codecs seem to be capable to handle + * widgets state even in D3, so far. + * if any new codecs need to restore the widget + * states after D0 transition, call the function + * below. + */ + /* snd_hdac_regmap_sync_node(&codec->core, nid); */ + } } } return changed;