]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Input: wm97xx - use guard notation when acquiring mutex
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 16 Aug 2024 22:18:44 +0000 (15:18 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 25 Mar 2026 14:54:00 +0000 (07:54 -0700)
Guard notation simplifies code.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/touchscreen/wm97xx-core.c

index 96354c44af87e406a9aa0047264b15970d558038..c51822563f3f1cfee91a2ee6a3e7f34a201490f9 100644 (file)
@@ -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);