Skip to content

Commit

Permalink
Revert "ALSA: hda - Set codec to D3 forcibly even if not used"
Browse files Browse the repository at this point in the history
This reverts commit 785f857.

The commit causes a problem with the wrong D3 state after suspend
because the call of hda_set_power_state() involves with the power-up
sequence, which changes the power_count, and this confuses the resume
sequence that checks the power_count as well.

Originally, this go-to-D3 sequence should be a simple task without the
power-up sequence.  But, it'd need some proper sanity checks in the
case of power-saved state, so it's not too easy to write now in the
3.4-rc cycle.

In short, the safest option now is to revert this affecting commit.

Of course, we need to clean up and robustify the power-saving code
better for 3.5 kernel.

Reported-by: Konstantin Khlebnikov <khlebnikov@openvz.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Takashi Iwai committed May 8, 2012
1 parent af741c1 commit 619a341
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
4 changes: 0 additions & 4 deletions sound/pci/hda/hda_codec.c
Original file line number Diff line number Diff line change
Expand Up @@ -5444,10 +5444,6 @@ int snd_hda_suspend(struct hda_bus *bus)
list_for_each_entry(codec, &bus->codec_list, list) {
if (hda_codec_is_power_on(codec))
hda_call_codec_suspend(codec);
else /* forcibly change the power to D3 even if not used */
hda_set_power_state(codec,
codec->afg ? codec->afg : codec->mfg,
AC_PWRST_D3);
if (codec->patch_ops.post_suspend)
codec->patch_ops.post_suspend(codec);
}
Expand Down
14 changes: 13 additions & 1 deletion sound/pci/hda/hda_intel.c
Original file line number Diff line number Diff line change
Expand Up @@ -2351,6 +2351,17 @@ static void azx_power_notify(struct hda_bus *bus)
* power management
*/

static int snd_hda_codecs_inuse(struct hda_bus *bus)
{
struct hda_codec *codec;

list_for_each_entry(codec, &bus->codec_list, list) {
if (snd_hda_codec_needs_resume(codec))
return 1;
}
return 0;
}

static int azx_suspend(struct pci_dev *pci, pm_message_t state)
{
struct snd_card *card = pci_get_drvdata(pci);
Expand Down Expand Up @@ -2397,7 +2408,8 @@ static int azx_resume(struct pci_dev *pci)
return -EIO;
azx_init_pci(chip);

azx_init_chip(chip, 1);
if (snd_hda_codecs_inuse(chip->bus))
azx_init_chip(chip, 1);

snd_hda_resume(chip->bus);
snd_power_change_state(card, SNDRV_CTL_POWER_D0);
Expand Down

0 comments on commit 619a341

Please sign in to comment.