| From: Sameer Pujar <spujar@nvidia.com> |
| Date: Wed, 26 Dec 2018 16:04:49 +0530 |
| Subject: ALSA: hda/tegra: clear pending irq handlers |
| |
| commit 63d2a9ec310d8bcc955574220d4631aa55c1a80c upstream. |
| |
| Even after disabling interrupts on the module, it could be possible |
| that irq handlers are still running. System hang is seen during |
| suspend path. It was found that, there were pending writes on the |
| HDA bus and clock was disabled by that time. |
| |
| Above mentioned issue is fixed by clearing any pending irq handlers |
| before disabling clocks and returning from hda suspend. |
| |
| Suggested-by: Mohan Kumar <mkumard@nvidia.com> |
| Suggested-by: Dara Ramesh <dramesh@nvidia.com> |
| Signed-off-by: Sameer Pujar <spujar@nvidia.com> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| [bwh: Backported to 3.16: |
| - Use azx::irq instead of hdac_bus::irq |
| - Adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| --- a/sound/pci/hda/hda_tegra.c |
| +++ b/sound/pci/hda/hda_tegra.c |
| @@ -261,6 +261,7 @@ static int hda_tegra_suspend(struct devi |
| snd_hda_suspend(chip->bus); |
| |
| azx_stop_chip(chip); |
| + synchronize_irq(chip->irq); |
| azx_enter_link_reset(chip); |
| hda_tegra_disable_clocks(hda); |
| |