summaryrefslogtreecommitdiff
path: root/drivers/input
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2024-08-16 15:18:44 -0700
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2026-03-25 07:54:00 -0700
commit35ee82990df219f6f42962c0306c00231b85f238 (patch)
tree27c59ea5f4beb41bce0d996c939cbaba45b9b560 /drivers/input
parentda52f4b27a798304a7f4639ac5addc5574242cdf (diff)
Input: wm97xx - use guard notation when acquiring mutex
Guard notation simplifies code. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/touchscreen/wm97xx-core.c57
1 files changed, 23 insertions, 34 deletions
diff --git a/drivers/input/touchscreen/wm97xx-core.c b/drivers/input/touchscreen/wm97xx-core.c
index 96354c44af87..c51822563f3f 100644
--- a/drivers/input/touchscreen/wm97xx-core.c
+++ b/drivers/input/touchscreen/wm97xx-core.c
@@ -126,7 +126,7 @@ int wm97xx_read_aux_adc(struct wm97xx *wm, u16 adcsel)
int timeout = 0;
/* get codec */
- mutex_lock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
/* When the touchscreen is not in use, we may have to power up
* the AUX ADC before we can use sample the AUX inputs->
@@ -160,7 +160,6 @@ int wm97xx_read_aux_adc(struct wm97xx *wm, u16 adcsel)
wm->codec->dig_enable(wm, false);
}
- mutex_unlock(&wm->codec_mutex);
return (rc == RC_VALID ? auxval & 0xfff : -EBUSY);
}
EXPORT_SYMBOL_GPL(wm97xx_read_aux_adc);
@@ -176,18 +175,11 @@ EXPORT_SYMBOL_GPL(wm97xx_read_aux_adc);
enum wm97xx_gpio_status wm97xx_get_gpio(struct wm97xx *wm, u32 gpio)
{
u16 status;
- enum wm97xx_gpio_status ret;
- mutex_lock(&wm->codec_mutex);
- status = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
-
- if (status & gpio)
- ret = WM97XX_GPIO_HIGH;
- else
- ret = WM97XX_GPIO_LOW;
+ guard(mutex)(&wm->codec_mutex);
- mutex_unlock(&wm->codec_mutex);
- return ret;
+ status = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
+ return (status & gpio) ? WM97XX_GPIO_HIGH : WM97XX_GPIO_LOW;
}
EXPORT_SYMBOL_GPL(wm97xx_get_gpio);
@@ -205,7 +197,8 @@ void wm97xx_set_gpio(struct wm97xx *wm, u32 gpio,
{
u16 reg;
- mutex_lock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
+
reg = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
if (status == WM97XX_GPIO_HIGH)
@@ -217,7 +210,6 @@ void wm97xx_set_gpio(struct wm97xx *wm, u32 gpio,
wm97xx_reg_write(wm, AC97_GPIO_STATUS, reg << 1);
else
wm97xx_reg_write(wm, AC97_GPIO_STATUS, reg);
- mutex_unlock(&wm->codec_mutex);
}
EXPORT_SYMBOL_GPL(wm97xx_set_gpio);
@@ -231,7 +223,8 @@ void wm97xx_config_gpio(struct wm97xx *wm, u32 gpio, enum wm97xx_gpio_dir dir,
{
u16 reg;
- mutex_lock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
+
reg = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
if (pol == WM97XX_GPIO_POL_HIGH)
@@ -264,7 +257,6 @@ void wm97xx_config_gpio(struct wm97xx *wm, u32 gpio, enum wm97xx_gpio_dir dir,
reg &= ~gpio;
wm97xx_reg_write(wm, AC97_GPIO_CFG, reg);
- mutex_unlock(&wm->codec_mutex);
}
EXPORT_SYMBOL_GPL(wm97xx_config_gpio);
@@ -303,7 +295,9 @@ static irqreturn_t wm97xx_pen_interrupt(int irq, void *dev_id)
wm->pen_is_down = 0;
} else {
u16 status, pol;
- mutex_lock(&wm->codec_mutex);
+
+ guard(mutex)(&wm->codec_mutex);
+
status = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
pol = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
@@ -323,7 +317,6 @@ static irqreturn_t wm97xx_pen_interrupt(int irq, void *dev_id)
else
wm97xx_reg_write(wm, AC97_GPIO_STATUS, status &
~WM97XX_GPIO_13);
- mutex_unlock(&wm->codec_mutex);
}
/* If the system is not using continuous mode or it provides a
@@ -382,7 +375,7 @@ static int wm97xx_read_samples(struct wm97xx *wm)
struct wm97xx_data data;
int rc;
- mutex_lock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
if (wm->mach_ops && wm->mach_ops->acc_enabled)
rc = wm->mach_ops->acc_pen_down(wm);
@@ -422,8 +415,7 @@ static int wm97xx_read_samples(struct wm97xx *wm)
abs_y[0] > (data.y & 0xfff) ||
abs_y[1] < (data.y & 0xfff)) {
dev_dbg(wm->dev, "Measurement out of range, dropping it\n");
- rc = RC_AGAIN;
- goto out;
+ return RC_AGAIN;
}
input_report_abs(wm->input_dev, ABS_X, data.x & 0xfff);
@@ -439,8 +431,6 @@ static int wm97xx_read_samples(struct wm97xx *wm)
wm->ts_reader_interval = wm->ts_reader_min_interval;
}
-out:
- mutex_unlock(&wm->codec_mutex);
return rc;
}
@@ -773,7 +763,8 @@ static int wm97xx_suspend(struct device *dev)
else
suspend_mode = 0;
- mutex_lock(&wm->input_dev->mutex);
+ guard(mutex)(&wm->input_dev->mutex);
+
if (input_device_enabled(wm->input_dev))
cancel_delayed_work_sync(&wm->ts_reader);
@@ -791,7 +782,6 @@ static int wm97xx_suspend(struct device *dev)
reg = wm97xx_reg_read(wm, AC97_EXTENDED_MID) | 0x8000;
wm97xx_reg_write(wm, AC97_EXTENDED_MID, reg);
}
- mutex_unlock(&wm->input_dev->mutex);
return 0;
}
@@ -800,7 +790,8 @@ static int wm97xx_resume(struct device *dev)
{
struct wm97xx *wm = dev_get_drvdata(dev);
- mutex_lock(&wm->input_dev->mutex);
+ guard(mutex)(&wm->input_dev->mutex);
+
/* restore digitiser and gpios */
if (wm->id == WM9713_ID2) {
wm97xx_reg_write(wm, AC97_WM9713_DIG1, wm->dig[0]);
@@ -827,7 +818,6 @@ static int wm97xx_resume(struct device *dev)
queue_delayed_work(wm->ts_workq, &wm->ts_reader,
wm->ts_reader_interval);
}
- mutex_unlock(&wm->input_dev->mutex);
return 0;
}
@@ -840,13 +830,12 @@ static DEFINE_SIMPLE_DEV_PM_OPS(wm97xx_pm_ops, wm97xx_suspend, wm97xx_resume);
int wm97xx_register_mach_ops(struct wm97xx *wm,
struct wm97xx_mach_ops *mach_ops)
{
- mutex_lock(&wm->codec_mutex);
- if (wm->mach_ops) {
- mutex_unlock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
+
+ if (wm->mach_ops)
return -EINVAL;
- }
+
wm->mach_ops = mach_ops;
- mutex_unlock(&wm->codec_mutex);
return 0;
}
@@ -854,9 +843,9 @@ EXPORT_SYMBOL_GPL(wm97xx_register_mach_ops);
void wm97xx_unregister_mach_ops(struct wm97xx *wm)
{
- mutex_lock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
+
wm->mach_ops = NULL;
- mutex_unlock(&wm->codec_mutex);
}
EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops);