mirror of
https://github.com/torvalds/linux.git
synced 2026-10-11 04:47:02 +02:00
ASoC: codecs: arizona-jack: 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-4-phucduc.bui@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
da41b1716f
commit
d46421aeac
|
|
@ -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");
|
||||
|
||||
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;
|
||||
|
||||
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 (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);
|
||||
|
||||
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);
|
||||
|
||||
/*
|
||||
* 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);
|
||||
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,10 +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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user