[PATCH 14/78] ASoC: codecs: cs42l42: Use guard() for mutex locks
phucduc.bui at gmail.com
phucduc.bui at gmail.com
Wed Jun 17 03:31:31 PDT 2026
From: bui duc phuc <phucduc.bui at gmail.com>
Clean up the code using guard() for mutex locks.
Merely code refactoring, and no behavior change.
Signed-off-by: bui duc phuc <phucduc.bui at gmail.com>
---
sound/soc/codecs/cs42l42.c | 222 ++++++++++++++++++-------------------
1 file changed, 111 insertions(+), 111 deletions(-)
diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c
index 2652a639a79a..f9e02cc4e9f1 100644
--- a/sound/soc/codecs/cs42l42.c
+++ b/sound/soc/codecs/cs42l42.c
@@ -565,7 +565,7 @@ static int cs42l42_set_jack(struct snd_soc_component *component, struct snd_soc_
struct cs42l42_private *cs42l42 = snd_soc_component_get_drvdata(component);
/* Prevent race with interrupt handler */
- mutex_lock(&cs42l42->irq_lock);
+ guard(mutex)(&cs42l42->irq_lock);
cs42l42->jack = jk;
if (jk) {
@@ -581,7 +581,6 @@ static int cs42l42_set_jack(struct snd_soc_component *component, struct snd_soc_
break;
}
}
- mutex_unlock(&cs42l42->irq_lock);
return 0;
}
@@ -1667,117 +1666,118 @@ irqreturn_t cs42l42_irq_thread(int irq, void *data)
unsigned int current_plug_status;
unsigned int current_button_status;
unsigned int i;
+ irqreturn_t ret = IRQ_HANDLED;
pm_runtime_get_sync(cs42l42->dev);
- mutex_lock(&cs42l42->irq_lock);
- if (cs42l42->suspended || !cs42l42->init_done) {
- mutex_unlock(&cs42l42->irq_lock);
- pm_runtime_put_autosuspend(cs42l42->dev);
- return IRQ_NONE;
- }
+ scoped_guard(mutex, &cs42l42->irq_lock) {
+ if (cs42l42->suspended || !cs42l42->init_done) {
+ ret = IRQ_NONE;
+ break;
+ }
- /* Read sticky registers to clear interurpt */
- for (i = 0; i < ARRAY_SIZE(stickies); i++) {
- regmap_read(cs42l42->regmap, irq_params_table[i].status_addr,
- &(stickies[i]));
- regmap_read(cs42l42->regmap, irq_params_table[i].mask_addr,
- &(masks[i]));
- stickies[i] = stickies[i] & (~masks[i]) &
- irq_params_table[i].mask;
- }
+ /* Read sticky registers to clear interrupt */
+ for (i = 0; i < ARRAY_SIZE(stickies); i++) {
+ regmap_read(cs42l42->regmap, irq_params_table[i].status_addr,
+ &(stickies[i]));
+ regmap_read(cs42l42->regmap, irq_params_table[i].mask_addr,
+ &(masks[i]));
+ stickies[i] = stickies[i] & (~masks[i]) &
+ irq_params_table[i].mask;
+ }
- /* Read tip sense status before handling type detect */
- current_plug_status = (stickies[11] &
- (CS42L42_TS_PLUG_MASK | CS42L42_TS_UNPLUG_MASK)) >>
- CS42L42_TS_PLUG_SHIFT;
+ /* Read tip sense status before handling type detect */
+ current_plug_status = (stickies[11] &
+ (CS42L42_TS_PLUG_MASK | CS42L42_TS_UNPLUG_MASK)) >>
+ CS42L42_TS_PLUG_SHIFT;
- /* Read button sense status */
- current_button_status = stickies[7] &
- (CS42L42_M_DETECT_TF_MASK |
- CS42L42_M_DETECT_FT_MASK |
- CS42L42_M_HSBIAS_HIZ_MASK);
+ /* Read button sense status */
+ current_button_status = stickies[7] &
+ (CS42L42_M_DETECT_TF_MASK |
+ CS42L42_M_DETECT_FT_MASK |
+ CS42L42_M_HSBIAS_HIZ_MASK);
- /*
- * Check auto-detect status. Don't assume a previous unplug event has
- * cleared the flags. If the jack is unplugged and plugged during
- * system suspend there won't have been an unplug event.
- */
- if ((~masks[5]) & irq_params_table[5].mask) {
- if (stickies[5] & CS42L42_HSDET_AUTO_DONE_MASK) {
- cs42l42_process_hs_type_detect(cs42l42);
- switch (cs42l42->hs_type) {
- case CS42L42_PLUG_CTIA:
- case CS42L42_PLUG_OMTP:
- snd_soc_jack_report(cs42l42->jack, SND_JACK_HEADSET,
- SND_JACK_HEADSET |
- SND_JACK_BTN_0 | SND_JACK_BTN_1 |
- SND_JACK_BTN_2 | SND_JACK_BTN_3);
- break;
- case CS42L42_PLUG_HEADPHONE:
- snd_soc_jack_report(cs42l42->jack, SND_JACK_HEADPHONE,
- SND_JACK_HEADSET |
- SND_JACK_BTN_0 | SND_JACK_BTN_1 |
- SND_JACK_BTN_2 | SND_JACK_BTN_3);
- break;
- default:
- break;
+ /*
+ * Check auto-detect status. Don't assume a previous unplug event has
+ * cleared the flags. If the jack is unplugged and plugged during
+ * system suspend there won't have been an unplug event.
+ */
+ if ((~masks[5]) & irq_params_table[5].mask) {
+ if (stickies[5] & CS42L42_HSDET_AUTO_DONE_MASK) {
+ cs42l42_process_hs_type_detect(cs42l42);
+ switch (cs42l42->hs_type) {
+ case CS42L42_PLUG_CTIA:
+ case CS42L42_PLUG_OMTP:
+ snd_soc_jack_report(cs42l42->jack, SND_JACK_HEADSET,
+ SND_JACK_HEADSET |
+ SND_JACK_BTN_0 | SND_JACK_BTN_1 |
+ SND_JACK_BTN_2 | SND_JACK_BTN_3);
+ break;
+ case CS42L42_PLUG_HEADPHONE:
+ snd_soc_jack_report(cs42l42->jack, SND_JACK_HEADPHONE,
+ SND_JACK_HEADSET |
+ SND_JACK_BTN_0 | SND_JACK_BTN_1 |
+ SND_JACK_BTN_2 | SND_JACK_BTN_3);
+ break;
+ default:
+ break;
+ }
+ dev_dbg(cs42l42->dev, "Auto detect done (%d)\n", cs42l42->hs_type);
}
- dev_dbg(cs42l42->dev, "Auto detect done (%d)\n", cs42l42->hs_type);
}
- }
- /* Check tip sense status */
- if ((~masks[11]) & irq_params_table[11].mask) {
- switch (current_plug_status) {
- case CS42L42_TS_PLUG:
- if (cs42l42->plug_state != CS42L42_TS_PLUG) {
- cs42l42->plug_state = CS42L42_TS_PLUG;
- cs42l42_init_hs_type_detect(cs42l42);
- }
- break;
+ /* Check tip sense status */
+ if ((~masks[11]) & irq_params_table[11].mask) {
+ switch (current_plug_status) {
+ case CS42L42_TS_PLUG:
+ if (cs42l42->plug_state != CS42L42_TS_PLUG) {
+ cs42l42->plug_state = CS42L42_TS_PLUG;
+ cs42l42_init_hs_type_detect(cs42l42);
+ }
+ break;
- case CS42L42_TS_UNPLUG:
- if (cs42l42->plug_state != CS42L42_TS_UNPLUG) {
- cs42l42->plug_state = CS42L42_TS_UNPLUG;
- cs42l42_cancel_hs_type_detect(cs42l42);
+ case CS42L42_TS_UNPLUG:
+ if (cs42l42->plug_state != CS42L42_TS_UNPLUG) {
+ cs42l42->plug_state = CS42L42_TS_UNPLUG;
+ cs42l42_cancel_hs_type_detect(cs42l42);
- snd_soc_jack_report(cs42l42->jack, 0,
- SND_JACK_HEADSET |
- SND_JACK_BTN_0 | SND_JACK_BTN_1 |
- SND_JACK_BTN_2 | SND_JACK_BTN_3);
+ snd_soc_jack_report(cs42l42->jack, 0,
+ SND_JACK_HEADSET |
+ SND_JACK_BTN_0 | SND_JACK_BTN_1 |
+ SND_JACK_BTN_2 | SND_JACK_BTN_3);
- dev_dbg(cs42l42->dev, "Unplug event\n");
- }
- break;
+ dev_dbg(cs42l42->dev, "Unplug event\n");
+ }
+ break;
- default:
- cs42l42->plug_state = CS42L42_TS_TRANS;
+ default:
+ cs42l42->plug_state = CS42L42_TS_TRANS;
+ }
}
- }
- /* Check button detect status */
- if (cs42l42->plug_state == CS42L42_TS_PLUG && ((~masks[7]) & irq_params_table[7].mask)) {
- if (!(current_button_status &
- CS42L42_M_HSBIAS_HIZ_MASK)) {
-
- if (current_button_status & CS42L42_M_DETECT_TF_MASK) {
- dev_dbg(cs42l42->dev, "Button released\n");
- snd_soc_jack_report(cs42l42->jack, 0,
- SND_JACK_BTN_0 | SND_JACK_BTN_1 |
- SND_JACK_BTN_2 | SND_JACK_BTN_3);
- } else if (current_button_status & CS42L42_M_DETECT_FT_MASK) {
- snd_soc_jack_report(cs42l42->jack,
- cs42l42_handle_button_press(cs42l42),
- SND_JACK_BTN_0 | SND_JACK_BTN_1 |
- SND_JACK_BTN_2 | SND_JACK_BTN_3);
+ /* Check button detect status */
+ if (cs42l42->plug_state == CS42L42_TS_PLUG &&
+ ((~masks[7]) & irq_params_table[7].mask)) {
+ if (!(current_button_status &
+ CS42L42_M_HSBIAS_HIZ_MASK)) {
+
+ if (current_button_status & CS42L42_M_DETECT_TF_MASK) {
+ dev_dbg(cs42l42->dev, "Button released\n");
+ snd_soc_jack_report(cs42l42->jack, 0,
+ SND_JACK_BTN_0 | SND_JACK_BTN_1 |
+ SND_JACK_BTN_2 | SND_JACK_BTN_3);
+ } else if (current_button_status & CS42L42_M_DETECT_FT_MASK) {
+ snd_soc_jack_report(cs42l42->jack,
+ cs42l42_handle_button_press(cs42l42),
+ SND_JACK_BTN_0 | SND_JACK_BTN_1 |
+ SND_JACK_BTN_2 | SND_JACK_BTN_3);
+ }
}
}
}
- mutex_unlock(&cs42l42->irq_lock);
pm_runtime_put_autosuspend(cs42l42->dev);
- return IRQ_HANDLED;
+ return ret;
}
EXPORT_SYMBOL_NS_GPL(cs42l42_irq_thread, "SND_SOC_CS42L42_CORE");
@@ -2163,22 +2163,22 @@ int cs42l42_suspend(struct device *dev)
* future interrupts. This ensures a safe disable if the interrupt
* is shared.
*/
- mutex_lock(&cs42l42->irq_lock);
- cs42l42->suspended = true;
+ scoped_guard(mutex, &cs42l42->irq_lock) {
+ cs42l42->suspended = true;
- /* Save register values that will be overwritten by shutdown sequence */
- for (i = 0; i < ARRAY_SIZE(cs42l42_shutdown_seq); ++i) {
- regmap_read(cs42l42->regmap, cs42l42_shutdown_seq[i].reg, ®);
- save_regs[i] = (u8)reg;
- }
+ /* Save register values that will be overwritten by shutdown sequence */
+ for (i = 0; i < ARRAY_SIZE(cs42l42_shutdown_seq); ++i) {
+ regmap_read(cs42l42->regmap, cs42l42_shutdown_seq[i].reg, ®);
+ save_regs[i] = (u8)reg;
+ }
- /* Shutdown codec */
- regmap_multi_reg_write(cs42l42->regmap,
- cs42l42_shutdown_seq,
- ARRAY_SIZE(cs42l42_shutdown_seq));
+ /* Shutdown codec */
+ regmap_multi_reg_write(cs42l42->regmap,
+ cs42l42_shutdown_seq,
+ ARRAY_SIZE(cs42l42_shutdown_seq));
- /* All interrupt sources are now disabled */
- mutex_unlock(&cs42l42->irq_lock);
+ /* All interrupt sources are now disabled */
+ }
/* Wait for power-down complete */
msleep(CS42L42_PDN_DONE_TIME_MS);
@@ -2250,13 +2250,13 @@ void cs42l42_resume_restore(struct device *dev)
regcache_cache_only(cs42l42->regmap, false);
regcache_mark_dirty(cs42l42->regmap);
- mutex_lock(&cs42l42->irq_lock);
- /* Sync LATCH_TO_VP first so the VP domain registers sync correctly */
- regcache_sync_region(cs42l42->regmap, CS42L42_MIC_DET_CTL1, CS42L42_MIC_DET_CTL1);
- regcache_sync(cs42l42->regmap);
+ scoped_guard(mutex, &cs42l42->irq_lock) {
+ /* Sync LATCH_TO_VP first so the VP domain registers sync correctly */
+ regcache_sync_region(cs42l42->regmap, CS42L42_MIC_DET_CTL1, CS42L42_MIC_DET_CTL1);
+ regcache_sync(cs42l42->regmap);
- cs42l42->suspended = false;
- mutex_unlock(&cs42l42->irq_lock);
+ cs42l42->suspended = false;
+ }
dev_dbg(dev, "System resumed\n");
}
--
2.43.0
More information about the linux-arm-kernel
mailing list