From: phucduc.bui@gmail.com
To: Mark Brown <broonie@kernel.org>, Takashi Iwai <tiwai@suse.com>,
Tzung-Bi Shih <tzungbi@kernel.org>,
David Rhodes <david.rhodes@cirrus.com>,
Charles Keepax <ckeepax@opensource.cirrus.com>
Cc: Liam Girdwood <lgirdwood@gmail.com>,
Jaroslav Kysela <perex@perex.cz>,
Cheng-Yi Chiang <cychiang@chromium.org>,
Guenter Roeck <groeck@chromium.org>,
Benson Leung <bleung@chromium.org>,
Richard Fitzgerald <rf@opensource.cirrus.com>,
povik+lin@cutebit.org, u.kleine-koenig@baylibre.com,
kuninori.morimoto.gx@renesas.com, christian.ehrhardt@codasip.com,
Linus Walleij <linusw@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Thorsten Blum <thorsten.blum@linux.dev>,
Chris Morgan <macromorgan@hotmail.com>,
Dan Carpenter <error27@gmail.com>,
Marco Crivellari <marco.crivellari@suse.com>,
Rosen Penev <rosenp@gmail.com>,
Weidong Wang <wangweidong.a@awinic.com>,
Teguh Sobirin <teguh@sobir.in>, Val Packett <val@packett.cool>,
Luca Weiss <luca.weiss@fairphone.com>,
wangdicheng <wangdicheng@kylinos.cn>,
linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org,
patches@opensource.cirrus.com, chrome-platform@lists.linux.dev,
asahi@lists.linux.dev, bui duc phuc <phucduc.bui@gmail.com>
Subject: [PATCH v2 03/24] ASoC: codecs: arizona-jack: Use guard() cleanup helpers
Date: Fri, 3 Jul 2026 12:53:34 +0700 [thread overview]
Message-ID: <20260703055355.244898-4-phucduc.bui@gmail.com> (raw)
In-Reply-To: <20260703055355.244898-1-phucduc.bui@gmail.com>
From: bui duc phuc <phucduc.bui@gmail.com>
Clean up the code using guard() helpers for mutex locking
and PM runtime management.
No functional change intended.
Signed-off-by: bui duc phuc <phucduc.bui@gmail.com>
---
Changes in v2:
Reworked the code to use an if/else structure,
avoiding code duplication after removing the goto label.
sound/soc/codecs/arizona-jack.c | 116 +++++++++++++++-----------------
1 file changed, 53 insertions(+), 63 deletions(-)
diff --git a/sound/soc/codecs/arizona-jack.c b/sound/soc/codecs/arizona-jack.c
index a9063bac2752..7ea8112e0d79 100644
--- a/sound/soc/codecs/arizona-jack.c
+++ b/sound/soc/codecs/arizona-jack.c
@@ -5,6 +5,7 @@
* Copyright (C) 2012-2014 Wolfson Microelectronics plc
*/
+#include <linux/cleanup.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
@@ -707,15 +708,13 @@ static void arizona_micd_timeout_work(struct work_struct *work)
struct arizona_priv,
micd_timeout_work.work);
- mutex_lock(&info->lock);
+ guard(mutex)(&info->lock);
dev_dbg(info->arizona->dev, "MICD timed out, reporting HP\n");
info->detecting = false;
arizona_identify_headphone(info);
-
- mutex_unlock(&info->lock);
}
static int arizona_micd_adc_read(struct arizona_priv *info)
@@ -921,12 +920,11 @@ static void arizona_micd_detect(struct work_struct *work)
cancel_delayed_work_sync(&info->micd_timeout_work);
- mutex_lock(&info->lock);
+ guard(mutex)(&info->lock);
/* If the cable was removed while measuring ignore the result */
if (!(info->jack->status & SND_JACK_MECHANICAL)) {
dev_dbg(arizona->dev, "Ignoring MICDET for removed cable\n");
- mutex_unlock(&info->lock);
return;
}
@@ -936,7 +934,6 @@ static void arizona_micd_detect(struct work_struct *work)
arizona_button_reading(info);
pm_runtime_mark_last_busy(arizona->dev);
- mutex_unlock(&info->lock);
}
static irqreturn_t arizona_micdet(int irq, void *data)
@@ -948,10 +945,10 @@ static irqreturn_t arizona_micdet(int irq, void *data)
cancel_delayed_work_sync(&info->micd_detect_work);
cancel_delayed_work_sync(&info->micd_timeout_work);
- mutex_lock(&info->lock);
- if (!info->detecting)
- debounce = 0;
- mutex_unlock(&info->lock);
+ scoped_guard(mutex, &info->lock) {
+ if (!info->detecting)
+ debounce = 0;
+ }
if (debounce)
queue_delayed_work(system_power_efficient_wq,
@@ -969,9 +966,8 @@ static void arizona_hpdet_work(struct work_struct *work)
struct arizona_priv,
hpdet_work.work);
- mutex_lock(&info->lock);
+ guard(mutex)(&info->lock);
arizona_start_hpdet_acc_id(info);
- mutex_unlock(&info->lock);
}
static int arizona_hpdet_wait(struct arizona_priv *info)
@@ -1018,9 +1014,9 @@ static irqreturn_t arizona_jackdet(int irq, void *data)
cancelled_hp = cancel_delayed_work_sync(&info->hpdet_work);
cancelled_mic = cancel_delayed_work_sync(&info->micd_timeout_work);
- pm_runtime_get_sync(arizona->dev);
+ guard(pm_runtime_active_auto)(arizona->dev);
- mutex_lock(&info->lock);
+ guard(mutex)(&info->lock);
if (info->micd_clamp) {
mask = ARIZONA_MICD_CLAMP_STS;
@@ -1036,8 +1032,6 @@ static irqreturn_t arizona_jackdet(int irq, void *data)
ret = regmap_read(arizona->regmap, ARIZONA_AOD_IRQ_RAW_STATUS, &val);
if (ret) {
dev_err(arizona->dev, "Failed to read jackdet status: %d\n", ret);
- mutex_unlock(&info->lock);
- pm_runtime_put_autosuspend(arizona->dev);
return IRQ_NONE;
}
@@ -1056,62 +1050,61 @@ static irqreturn_t arizona_jackdet(int irq, void *data)
&info->micd_timeout_work,
msecs_to_jiffies(micd_timeout));
}
+ } else {
+ info->last_jackdet = val;
- goto out;
- }
- info->last_jackdet = val;
+ if (info->last_jackdet == present) {
+ dev_dbg(arizona->dev, "Detected jack\n");
+ snd_soc_jack_report(info->jack, SND_JACK_MECHANICAL, SND_JACK_MECHANICAL);
- if (info->last_jackdet == present) {
- dev_dbg(arizona->dev, "Detected jack\n");
- snd_soc_jack_report(info->jack, SND_JACK_MECHANICAL, SND_JACK_MECHANICAL);
+ info->detecting = true;
+ info->mic = false;
+ info->jack_flips = 0;
- info->detecting = true;
- info->mic = false;
- info->jack_flips = 0;
+ if (!arizona->pdata.hpdet_acc_id) {
+ arizona_start_mic(info);
+ } else {
+ queue_delayed_work(system_power_efficient_wq,
+ &info->hpdet_work,
+ msecs_to_jiffies(HPDET_DEBOUNCE));
+ }
- if (!arizona->pdata.hpdet_acc_id) {
- arizona_start_mic(info);
+ if (info->micd_clamp || !arizona->pdata.jd_invert)
+ regmap_update_bits(arizona->regmap,
+ ARIZONA_JACK_DETECT_DEBOUNCE,
+ ARIZONA_MICD_CLAMP_DB |
+ ARIZONA_JD1_DB, 0);
} else {
- queue_delayed_work(system_power_efficient_wq,
- &info->hpdet_work,
- msecs_to_jiffies(HPDET_DEBOUNCE));
- }
+ dev_dbg(arizona->dev, "Detected jack removal\n");
- if (info->micd_clamp || !arizona->pdata.jd_invert)
- regmap_update_bits(arizona->regmap,
- ARIZONA_JACK_DETECT_DEBOUNCE,
- ARIZONA_MICD_CLAMP_DB |
- ARIZONA_JD1_DB, 0);
- } else {
- dev_dbg(arizona->dev, "Detected jack removal\n");
+ arizona_stop_mic(info);
- arizona_stop_mic(info);
+ info->num_hpdet_res = 0;
+ for (i = 0; i < ARRAY_SIZE(info->hpdet_res); i++)
+ info->hpdet_res[i] = 0;
+ info->mic = false;
+ info->hpdet_done = false;
+ info->hpdet_retried = false;
- info->num_hpdet_res = 0;
- for (i = 0; i < ARRAY_SIZE(info->hpdet_res); i++)
- info->hpdet_res[i] = 0;
- info->mic = false;
- info->hpdet_done = false;
- info->hpdet_retried = false;
+ snd_soc_jack_report(info->jack, 0,
+ ARIZONA_JACK_MASK | info->micd_button_mask);
- snd_soc_jack_report(info->jack, 0, ARIZONA_JACK_MASK | info->micd_button_mask);
+ /*
+ * If the jack was removed during a headphone detection we
+ * need to wait for the headphone detection to finish, as
+ * it can not be aborted. We don't want to be able to start
+ * a new headphone detection from a fresh insert until this
+ * one is finished.
+ */
+ arizona_hpdet_wait(info);
- /*
- * If the jack was removed during a headphone detection we
- * need to wait for the headphone detection to finish, as
- * it can not be aborted. We don't want to be able to start
- * a new headphone detection from a fresh insert until this
- * one is finished.
- */
- arizona_hpdet_wait(info);
-
- regmap_update_bits(arizona->regmap,
- ARIZONA_JACK_DETECT_DEBOUNCE,
- ARIZONA_MICD_CLAMP_DB | ARIZONA_JD1_DB,
- ARIZONA_MICD_CLAMP_DB | ARIZONA_JD1_DB);
+ regmap_update_bits(arizona->regmap,
+ ARIZONA_JACK_DETECT_DEBOUNCE,
+ ARIZONA_MICD_CLAMP_DB | ARIZONA_JD1_DB,
+ ARIZONA_MICD_CLAMP_DB | ARIZONA_JD1_DB);
+ }
}
-out:
/* Clear trig_sts to make sure DCVDD is not forced up */
regmap_write(arizona->regmap, ARIZONA_AOD_WKUP_AND_TRIG,
ARIZONA_MICD_CLAMP_FALL_TRIG_STS |
@@ -1119,9 +1112,6 @@ static irqreturn_t arizona_jackdet(int irq, void *data)
ARIZONA_JD1_FALL_TRIG_STS |
ARIZONA_JD1_RISE_TRIG_STS);
- mutex_unlock(&info->lock);
-
- pm_runtime_put_autosuspend(arizona->dev);
return IRQ_HANDLED;
}
--
2.43.0
next prev parent reply other threads:[~2026-07-03 5:54 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-03 5:53 [PATCH v2 00/24] ASoC: codecs: Use guard() for mutex & spin lock - part 1 phucduc.bui
2026-07-03 5:53 ` [PATCH v2 01/24] ASoC: codecs: ab8500: Use guard() for mutex locks phucduc.bui
2026-07-03 5:53 ` [PATCH v2 02/24] ASoC: codecs: ak4613: " phucduc.bui
2026-07-03 5:53 ` phucduc.bui [this message]
2026-07-03 5:53 ` [PATCH v2 04/24] ASoC: codecs: arizona: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 05/24] ASoC: codecs: aw87390: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 06/24] ASoC: codecs: aw88081: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 07/24] ASoC: codecs: aw88166: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 08/24] ASoC: codecs: aw88261: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 09/24] ASoC: codecs: aw88395: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 10/24] ASoC: codecs: aw88399: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 11/24] ASoC: codecs: cros_ec_codec: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 12/24] ASoC: codecs: cs-amp-lib: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 13/24] ASoC: codecs: cs35l56: Use guard() and PM runtime scope helpers phucduc.bui
2026-07-03 5:53 ` [PATCH v2 14/24] ASoC: codecs: cs42l42: Use guard() cleanup helpers phucduc.bui
2026-07-03 5:53 ` [PATCH v2 15/24] ASoC: codecs: cs42l43: Use guard() and PM runtime scope helpers phucduc.bui
2026-07-03 5:53 ` [PATCH v2 16/24] ASoC: codecs: cs42l84: Use guard() for mutex locks phucduc.bui
2026-07-03 5:53 ` [PATCH v2 17/24] ASoC: codecs: cs43130: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 18/24] ASoC: codecs: cs47l15: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 19/24] ASoC: codecs: cs47l35: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 20/24] ASoC: codecs: cs47l85: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 21/24] ASoC: codecs: cs47l90: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 22/24] ASoC: codecs: cs47l92: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 23/24] ASoC: codecs: cs48l32: " phucduc.bui
2026-07-03 5:53 ` [PATCH v2 24/24] ASoC: codecs: cs2072x: " phucduc.bui
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=20260703055355.244898-4-phucduc.bui@gmail.com \
--to=phucduc.bui@gmail.com \
--cc=arnd@arndb.de \
--cc=asahi@lists.linux.dev \
--cc=bleung@chromium.org \
--cc=broonie@kernel.org \
--cc=christian.ehrhardt@codasip.com \
--cc=chrome-platform@lists.linux.dev \
--cc=ckeepax@opensource.cirrus.com \
--cc=cychiang@chromium.org \
--cc=david.rhodes@cirrus.com \
--cc=error27@gmail.com \
--cc=groeck@chromium.org \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=lgirdwood@gmail.com \
--cc=linusw@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=luca.weiss@fairphone.com \
--cc=macromorgan@hotmail.com \
--cc=marco.crivellari@suse.com \
--cc=patches@opensource.cirrus.com \
--cc=perex@perex.cz \
--cc=povik+lin@cutebit.org \
--cc=rf@opensource.cirrus.com \
--cc=rosenp@gmail.com \
--cc=sakari.ailus@linux.intel.com \
--cc=teguh@sobir.in \
--cc=thorsten.blum@linux.dev \
--cc=tiwai@suse.com \
--cc=tzungbi@kernel.org \
--cc=u.kleine-koenig@baylibre.com \
--cc=val@packett.cool \
--cc=wangdicheng@kylinos.cn \
--cc=wangweidong.a@awinic.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox