summaryrefslogtreecommitdiff
path: root/SOURCES/0001-ALSA-hda-Workaround-for-spurious-wakeups-on-some-Int.patch
diff options
context:
space:
mode:
Diffstat (limited to 'SOURCES/0001-ALSA-hda-Workaround-for-spurious-wakeups-on-some-Int.patch')
-rw-r--r--SOURCES/0001-ALSA-hda-Workaround-for-spurious-wakeups-on-some-Int.patch88
1 files changed, 0 insertions, 88 deletions
diff --git a/SOURCES/0001-ALSA-hda-Workaround-for-spurious-wakeups-on-some-Int.patch b/SOURCES/0001-ALSA-hda-Workaround-for-spurious-wakeups-on-some-Int.patch
deleted file mode 100644
index 1a36632..0000000
--- a/SOURCES/0001-ALSA-hda-Workaround-for-spurious-wakeups-on-some-Int.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From 2b796b34a3b9ade3307304121a726d318641415a Mon Sep 17 00:00:00 2001
-From: Takashi Iwai <tiwai@suse.de>
-Date: Mon, 27 Jul 2020 17:19:18 +0200
-Subject: [PATCH] ALSA: hda: Workaround for spurious wakeups on some Intel
- platforms
-
-We've received a regression report on Intel HD-audio controller that
-wakes up immediately after S3 suspend. The bisection leads to the
-commit c4c8dd6ef807 ("ALSA: hda: Skip controller resume if not
-needed"). This commit replaces the system-suspend to use
-pm_runtime_force_suspend() instead of the direct call of
-__azx_runtime_suspend(). However, by some really mysterious reason,
-pm_runtime_force_suspend() causes a spurious wakeup (although it calls
-the same __azx_runtime_suspend() internally).
-
-As an ugly workaround for now, revert the behavior to call
-__azx_runtime_suspend() and __azx_runtime_resume() for those old Intel
-platforms that may exhibit such a problem, while keeping the new
-standard pm_runtime_force_suspend() and pm_runtime_force_resume()
-pair for the remaining chips.
-
-Fixes: c4c8dd6ef807 ("ALSA: hda: Skip controller resume if not needed")
-BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=208649
-Cc: <stable@vger.kernel.org>
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
----
- sound/pci/hda/hda_controller.h | 2 +-
- sound/pci/hda/hda_intel.c | 17 ++++++++++++++---
- 2 files changed, 15 insertions(+), 4 deletions(-)
-
-diff --git a/sound/pci/hda/hda_controller.h b/sound/pci/hda/hda_controller.h
-index fe171685492d..be63ead8161f 100644
---- a/sound/pci/hda/hda_controller.h
-+++ b/sound/pci/hda/hda_controller.h
-@@ -41,7 +41,7 @@
- /* 24 unused */
- #define AZX_DCAPS_COUNT_LPIB_DELAY (1 << 25) /* Take LPIB as delay */
- #define AZX_DCAPS_PM_RUNTIME (1 << 26) /* runtime PM support */
--/* 27 unused */
-+#define AZX_DCAPS_SUSPEND_SPURIOUS_WAKEUP (1 << 27) /* Workaround for spurious wakeups after suspend */
- #define AZX_DCAPS_CORBRP_SELF_CLEAR (1 << 28) /* CORBRP clears itself after reset */
- #define AZX_DCAPS_NO_MSI64 (1 << 29) /* Stick to 32-bit MSIs */
- #define AZX_DCAPS_SEPARATE_STREAM_TAG (1 << 30) /* capture and playback use separate stream tag */
-diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
-index 9ba1fb8f0b7f..fb65450d8de1 100644
---- a/sound/pci/hda/hda_intel.c
-+++ b/sound/pci/hda/hda_intel.c
-@@ -297,7 +297,8 @@ enum {
- /* PCH for HSW/BDW; with runtime PM */
- /* no i915 binding for this as HSW/BDW has another controller for HDMI */
- #define AZX_DCAPS_INTEL_PCH \
-- (AZX_DCAPS_INTEL_PCH_BASE | AZX_DCAPS_PM_RUNTIME)
-+ (AZX_DCAPS_INTEL_PCH_BASE | AZX_DCAPS_PM_RUNTIME |\
-+ AZX_DCAPS_SUSPEND_SPURIOUS_WAKEUP)
-
- /* HSW HDMI */
- #define AZX_DCAPS_INTEL_HASWELL \
-@@ -1026,7 +1027,14 @@ static int azx_suspend(struct device *dev)
- chip = card->private_data;
- bus = azx_bus(chip);
- snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
-- pm_runtime_force_suspend(dev);
-+ /* An ugly workaround: direct call of __azx_runtime_suspend() and
-+ * __azx_runtime_resume() for old Intel platforms that suffer from
-+ * spurious wakeups after S3 suspend
-+ */
-+ if (chip->driver_caps & AZX_DCAPS_SUSPEND_SPURIOUS_WAKEUP)
-+ __azx_runtime_suspend(chip);
-+ else
-+ pm_runtime_force_suspend(dev);
- if (bus->irq >= 0) {
- free_irq(bus->irq, chip);
- bus->irq = -1;
-@@ -1055,7 +1063,10 @@ static int azx_resume(struct device *dev)
- if (azx_acquire_irq(chip, 1) < 0)
- return -EIO;
-
-- pm_runtime_force_resume(dev);
-+ if (chip->driver_caps & AZX_DCAPS_SUSPEND_SPURIOUS_WAKEUP)
-+ __azx_runtime_resume(chip, false);
-+ else
-+ pm_runtime_force_resume(dev);
- snd_power_change_state(card, SNDRV_CTL_POWER_D0);
-
- trace_azx_resume(chip);
---
-2.26.2
-