From: Pengpeng Hou <hppiscas@163.com>
To: Liam Girdwood <lgirdwood@gmail.com>, Mark Brown <broonie@kernel.org>
Cc: Pengpeng Hou <hppiscas@163.com>, Jaroslav Kysela <perex@perex.cz>,
Takashi Iwai <tiwai@suse.com>, Seven Lee <wtli@nuvoton.com>,
linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org,
Charles Keepax <ckeepax@opensource.cirrus.com>
Subject: [PATCH v2 1/9] ASoC: nau8821: restore safe state after resume errors
Date: Wed, 14 Oct 2026 11:24:44 +0800 [thread overview]
Message-ID: <20261014032452.13456-2-hppiscas@163.com> (raw)
In-Reply-To: <20261014032452.13456-1-hppiscas@163.com>
nau8821_resume() ignores regcache_sync() failure before continuing
dependent resume operations. Restore cache-only mode, leave the cache
dirty, and return the replay error before those operations.
Leave jack-detection IRQs disabled after a failed replay.
ASoC still marks the component resumed when the callback reports failure.
Track the suspend-owned IRQ disable so another suspend does not increment
the disable depth again after a failed resume. A later successful resume
releases that one disable reference. This does not add automatic retry or
change the framework's best-effort card resume policy.
The issue was found by our static-analysis tool and manually reviewed.
Fixes: aab1ad11d69f ("ASoC: nau8821: new driver")
Assisted-by: gpt 5
Signed-off-by: Pengpeng Hou <hppiscas@163.com>
---
Changes since v1:
- restore cache-only mode and dirty state on replay failure
- keep suspend-owned IRQ disables balanced across failed resume cycles
- send as one correctly threaded series, as Mark requested
Previous series:
https://lore.kernel.org/all/20260906034321.86080-1-hppiscas@163.com/
sound/soc/codecs/nau8821.c | 16 +++++++++++++---
sound/soc/codecs/nau8821.h | 1 +
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/sound/soc/codecs/nau8821.c b/sound/soc/codecs/nau8821.c
index ecadbaee103798466755e2fbc2f3843f6ad2c05e..41c4cf947999020246e6431cf24c8527c7f6319a 100644
--- a/sound/soc/codecs/nau8821.c
+++ b/sound/soc/codecs/nau8821.c
@@ -1620,8 +1620,10 @@ static int __maybe_unused nau8821_suspend(struct snd_soc_component *component)
{
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
- if (nau8821->irq)
+ if (nau8821->irq && !nau8821->suspend_irq_disabled) {
disable_irq(nau8821->irq);
+ nau8821->suspend_irq_disabled = true;
+ }
if (nau8821->jdet_active)
cancel_delayed_work_sync(&nau8821->jdet_work);
@@ -1639,11 +1641,19 @@ static int __maybe_unused nau8821_suspend(struct snd_soc_component *component)
static int __maybe_unused nau8821_resume(struct snd_soc_component *component)
{
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
+ int ret;
regcache_cache_only(nau8821->regmap, false);
- regcache_sync(nau8821->regmap);
- if (nau8821->irq)
+ ret = regcache_sync(nau8821->regmap);
+ if (ret) {
+ regcache_cache_only(nau8821->regmap, true);
+ regcache_mark_dirty(nau8821->regmap);
+ return ret;
+ }
+ if (nau8821->suspend_irq_disabled) {
+ nau8821->suspend_irq_disabled = false;
enable_irq(nau8821->irq);
+ }
return 0;
}
diff --git a/sound/soc/codecs/nau8821.h b/sound/soc/codecs/nau8821.h
index f9d7cd8cbd2116be93cf8692f1acb9022aeabaed..def3942f8785ece82a2eafd0e18dce51c7db72cc 100644
--- a/sound/soc/codecs/nau8821.h
+++ b/sound/soc/codecs/nau8821.h
@@ -563,6 +563,7 @@ struct nau8821 {
struct snd_soc_jack *jack;
struct delayed_work jdet_work;
bool jdet_active;
+ bool suspend_irq_disabled;
int irq;
int clk_id;
int micbias_voltage;
base-commit: 8ef28aef33f2d5da6959ad6b579ec3cfccc009f6
next prev parent reply other threads:[~2026-10-14 3:25 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-14 3:24 [PATCH v2 0/9] ASoC: stop dependent resume work after restore failures Pengpeng Hou
2026-10-14 3:24 ` Pengpeng Hou [this message]
2026-10-14 3:24 ` [PATCH v2 2/9] ASoC: nau8824: restore safe state after resume errors Pengpeng Hou
2026-10-14 3:24 ` [PATCH v2 3/9] ASoC: nau8825: " Pengpeng Hou
2026-10-14 18:18 ` Ajay Kumar Nandam
2026-10-14 3:24 ` [PATCH v2 4/9] ASoC: rt5663: " Pengpeng Hou
2026-10-14 3:24 ` [PATCH v2 5/9] ASoC: rt5682s: " Pengpeng Hou
2026-10-14 3:24 ` [PATCH v2 6/9] ASoC: rt5682: " Pengpeng Hou
2026-10-14 3:24 ` [PATCH v2 7/9] ASoC: wm8978: " Pengpeng Hou
2026-10-14 9:20 ` Charles Keepax
2026-10-14 3:24 ` [PATCH v2 8/9] ASoC: rt5640: " Pengpeng Hou
2026-10-14 3:24 ` [PATCH v2 9/9] ASoC: rt5677: " Pengpeng Hou
2026-10-14 18:43 ` Ajay Kumar Nandam
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261014032452.13456-2-hppiscas@163.com \
--to=hppiscas@163.com \
--cc=broonie@kernel.org \
--cc=ckeepax@opensource.cirrus.com \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=tiwai@suse.com \
--cc=wtli@nuvoton.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.