ALSA: hda - Move runtime PM check to runtime_idle callback
The runtime_idle callback is the right place to check the suspend capability, but currently we do it wrongly in the runtime_suspend callback. This leads to a kernel error message like: pci_pm_runtime_suspend(): azx_runtime_suspend+0x0/0x50 [snd_hda_intel] returns -11 and the runtime PM core would even repeat the attempts. Reported-and-tested-by: Borislav Petkov <bp@alien8.de> Cc: <stable@vger.kernel.org> [v3.7] Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
63a077e276
commit
6eb827d235
1 changed files with 14 additions and 5 deletions
|
@ -2691,10 +2691,6 @@ static int azx_runtime_suspend(struct device *dev)
|
||||||
struct snd_card *card = dev_get_drvdata(dev);
|
struct snd_card *card = dev_get_drvdata(dev);
|
||||||
struct azx *chip = card->private_data;
|
struct azx *chip = card->private_data;
|
||||||
|
|
||||||
if (!power_save_controller ||
|
|
||||||
!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
|
|
||||||
return -EAGAIN;
|
|
||||||
|
|
||||||
azx_stop_chip(chip);
|
azx_stop_chip(chip);
|
||||||
azx_clear_irq_pending(chip);
|
azx_clear_irq_pending(chip);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2709,12 +2705,25 @@ static int azx_runtime_resume(struct device *dev)
|
||||||
azx_init_chip(chip, 1);
|
azx_init_chip(chip, 1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int azx_runtime_idle(struct device *dev)
|
||||||
|
{
|
||||||
|
struct snd_card *card = dev_get_drvdata(dev);
|
||||||
|
struct azx *chip = card->private_data;
|
||||||
|
|
||||||
|
if (!power_save_controller ||
|
||||||
|
!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
|
||||||
|
return -EBUSY;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_PM_RUNTIME */
|
#endif /* CONFIG_PM_RUNTIME */
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
static const struct dev_pm_ops azx_pm = {
|
static const struct dev_pm_ops azx_pm = {
|
||||||
SET_SYSTEM_SLEEP_PM_OPS(azx_suspend, azx_resume)
|
SET_SYSTEM_SLEEP_PM_OPS(azx_suspend, azx_resume)
|
||||||
SET_RUNTIME_PM_OPS(azx_runtime_suspend, azx_runtime_resume, NULL)
|
SET_RUNTIME_PM_OPS(azx_runtime_suspend, azx_runtime_resume, azx_runtime_idle)
|
||||||
};
|
};
|
||||||
|
|
||||||
#define AZX_PM_OPS &azx_pm
|
#define AZX_PM_OPS &azx_pm
|
||||||
|
|
Loading…
Reference in a new issue