Explorar o código

[ALSA] hda-intel - Don't do suspend if already powered down

In the power-saving mode, the suspend is done dynamically at power-down.
So we don't have to call suspend stuff explicitly if it's already
powered down.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Takashi Iwai %!s(int64=18) %!d(string=hai) anos
pai
achega
0b7a2e9cef
Modificáronse 2 ficheiros con 6 adicións e 1 borrados
  1. 4 0
      sound/pci/hda/hda_codec.c
  2. 2 1
      sound/pci/hda/hda_intel.c

+ 4 - 0
sound/pci/hda/hda_codec.c

@@ -2771,6 +2771,10 @@ int snd_hda_suspend(struct hda_bus *bus, pm_message_t state)
 	struct hda_codec *codec;
 	struct hda_codec *codec;
 
 
 	list_for_each_entry(codec, &bus->codec_list, list) {
 	list_for_each_entry(codec, &bus->codec_list, list) {
+#ifdef CONFIG_SND_HDA_POWER_SAVE
+		if (!codec->power_on)
+			continue;
+#endif
 		hda_call_codec_suspend(codec);
 		hda_call_codec_suspend(codec);
 	}
 	}
 	return 0;
 	return 0;

+ 2 - 1
sound/pci/hda/hda_intel.c

@@ -1550,7 +1550,8 @@ static int azx_suspend(struct pci_dev *pci, pm_message_t state)
 	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
 	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
 	for (i = 0; i < chip->pcm_devs; i++)
 	for (i = 0; i < chip->pcm_devs; i++)
 		snd_pcm_suspend_all(chip->pcm[i]);
 		snd_pcm_suspend_all(chip->pcm[i]);
-	snd_hda_suspend(chip->bus, state);
+	if (chip->initialized)
+		snd_hda_suspend(chip->bus, state);
 	azx_stop_chip(chip);
 	azx_stop_chip(chip);
 	if (chip->irq >= 0) {
 	if (chip->irq >= 0) {
 		synchronize_irq(chip->irq);
 		synchronize_irq(chip->irq);