Commit c67e2228 authored by Wang Xingchao's avatar Wang Xingchao Committed by Daniel Vetter

ALSA: hda - Fix runtime PM check

The device can support runtime PM no matter whether it support
signal wakeup or not. For some chips like Haswell which doesnot
support PME by default, this patch let haswell Display HD-A controller
enter runtime suspend, and bring more power saving whith power-well
feature enabled.
Signed-off-by: default avatarWang Xingchao <xingchao.wang@linux.intel.com>
Reviewed-by: default avatarTakashi Iwai <tiwai@suse.de>
Reviewed-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent f85da868
...@@ -3120,8 +3120,13 @@ static int register_vga_switcheroo(struct azx *chip) ...@@ -3120,8 +3120,13 @@ static int register_vga_switcheroo(struct azx *chip)
*/ */
static int azx_free(struct azx *chip) static int azx_free(struct azx *chip)
{ {
struct pci_dev *pci = chip->pci;
int i; int i;
if ((chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
&& chip->running)
pm_runtime_get_noresume(&pci->dev);
azx_del_card_list(chip); azx_del_card_list(chip);
azx_notifier_unregister(chip); azx_notifier_unregister(chip);
...@@ -3755,9 +3760,6 @@ static int azx_probe(struct pci_dev *pci, ...@@ -3755,9 +3760,6 @@ static int azx_probe(struct pci_dev *pci,
goto out_free; goto out_free;
} }
if (pci_dev_run_wake(pci))
pm_runtime_put_noidle(&pci->dev);
dev++; dev++;
complete_all(&chip->probe_wait); complete_all(&chip->probe_wait);
return 0; return 0;
...@@ -3770,6 +3772,7 @@ static int azx_probe(struct pci_dev *pci, ...@@ -3770,6 +3772,7 @@ static int azx_probe(struct pci_dev *pci,
static int azx_probe_continue(struct azx *chip) static int azx_probe_continue(struct azx *chip)
{ {
struct pci_dev *pci = chip->pci;
int dev = chip->dev_index; int dev = chip->dev_index;
int err; int err;
...@@ -3817,6 +3820,8 @@ static int azx_probe_continue(struct azx *chip) ...@@ -3817,6 +3820,8 @@ static int azx_probe_continue(struct azx *chip)
power_down_all_codecs(chip); power_down_all_codecs(chip);
azx_notifier_register(chip); azx_notifier_register(chip);
azx_add_card_list(chip); azx_add_card_list(chip);
if (chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
pm_runtime_put_noidle(&pci->dev);
return 0; return 0;
...@@ -3829,9 +3834,6 @@ static void azx_remove(struct pci_dev *pci) ...@@ -3829,9 +3834,6 @@ static void azx_remove(struct pci_dev *pci)
{ {
struct snd_card *card = pci_get_drvdata(pci); struct snd_card *card = pci_get_drvdata(pci);
if (pci_dev_run_wake(pci))
pm_runtime_get_noresume(&pci->dev);
if (card) if (card)
snd_card_free(card); snd_card_free(card);
pci_set_drvdata(pci, NULL); pci_set_drvdata(pci, NULL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment