mirror of
https://github.com/torvalds/linux.git
synced 2026-10-12 13:27:02 +02:00
ASoC: codecs: cs42l42: Use guard() cleanup helpers
Clean up the code using guard() helpers for mutex locking and PM runtime management. No functional change intended. Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com> Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Signed-off-by: bui duc phuc <phucduc.bui@gmail.com> Link: https://patch.msgid.link/20260708125002.202515-15-phucduc.bui@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
fa08036d5d
commit
6e982e8f5a
|
|
@ -9,6 +9,7 @@
|
|||
* Author: Michael White <michael.white@cirrus.com>
|
||||
*/
|
||||
|
||||
#include <linux/cleanup.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/types.h>
|
||||
|
|
@ -565,7 +566,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 +582,6 @@ static int cs42l42_set_jack(struct snd_soc_component *component, struct snd_soc_
|
|||
break;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&cs42l42->irq_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1668,13 +1668,10 @@ irqreturn_t cs42l42_irq_thread(int irq, void *data)
|
|||
unsigned int current_button_status;
|
||||
unsigned int i;
|
||||
|
||||
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);
|
||||
guard(pm_runtime_active_auto)(cs42l42->dev);
|
||||
guard(mutex)(&cs42l42->irq_lock);
|
||||
if (cs42l42->suspended || !cs42l42->init_done)
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
/* Read sticky registers to clear interurpt */
|
||||
for (i = 0; i < ARRAY_SIZE(stickies); i++) {
|
||||
|
|
@ -1774,9 +1771,6 @@ irqreturn_t cs42l42_irq_thread(int irq, void *data)
|
|||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&cs42l42->irq_lock);
|
||||
pm_runtime_put_autosuspend(cs42l42->dev);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(cs42l42_irq_thread, "SND_SOC_CS42L42_CORE");
|
||||
|
|
@ -2163,23 +2157,23 @@ 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));
|
||||
|
||||
/* All interrupt sources are now disabled */
|
||||
}
|
||||
|
||||
/* 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);
|
||||
|
||||
/* Wait for power-down complete */
|
||||
msleep(CS42L42_PDN_DONE_TIME_MS);
|
||||
ret = regmap_read_poll_timeout(cs42l42->regmap,
|
||||
|
|
@ -2250,13 +2244,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");
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user