]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
iio: bu27034: simplify using guard(mutex)
authorMatti Vaittinen <mazziesaccount@gmail.com>
Thu, 21 Nov 2024 13:05:19 +0000 (15:05 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 7 Dec 2024 17:47:58 +0000 (17:47 +0000)
The BU27034 uses mutex for protecting the gain / time / scale changes.
The clean-up for a few of the functions can be slightly simplified by
removing the goto-based error handling/unlocking and by utilizing the
guard(mutex) scoped mutex handling instead.

Simplify driver by using the scoped mutexes.

Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
Reviewed-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Link: https://patch.msgid.link/4e65a4725c211b166906f70fdb5ba90f2af0f570.1732193263.git.mazziesaccount@gmail.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/light/rohm-bu27034.c

index 4f591c2278f21f0a157a232800c89f59d02eece4..5a3515e47871feb29d958e2f581ceabcf8a51e5c 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <linux/bitfield.h>
 #include <linux/bits.h>
+#include <linux/cleanup.h>
 #include <linux/device.h>
 #include <linux/i2c.h>
 #include <linux/module.h>
@@ -395,30 +396,26 @@ static int bu27034_try_set_int_time(struct bu27034_data *data, int time_us)
        int numg = ARRAY_SIZE(gains);
        int ret, int_time_old, i;
 
-       mutex_lock(&data->mutex);
+       guard(mutex)(&data->mutex);
        ret = bu27034_get_int_time(data);
        if (ret < 0)
-               goto unlock_out;
+               return ret;
 
        int_time_old = ret;
 
        if (!iio_gts_valid_time(&data->gts, time_us)) {
                dev_err(data->dev, "Unsupported integration time %u\n",
                        time_us);
-               ret = -EINVAL;
-
-               goto unlock_out;
+               return -EINVAL;
        }
 
-       if (time_us == int_time_old) {
-               ret = 0;
-               goto unlock_out;
-       }
+       if (time_us == int_time_old)
+               return 0;
 
        for (i = 0; i < numg; i++) {
                ret = bu27034_get_gain(data, gains[i].chan, &gains[i].old_gain);
                if (ret)
-                       goto unlock_out;
+                       return 0;
 
                ret = iio_gts_find_new_gain_by_old_gain_time(&data->gts,
                                                             gains[i].old_gain,
@@ -434,7 +431,7 @@ static int bu27034_try_set_int_time(struct bu27034_data *data, int time_us)
                                gains[i].chan, time_us, scale1, scale2);
 
                        if (gains[i].new_gain < 0)
-                               goto unlock_out;
+                               return ret;
 
                        /*
                         * If caller requests for integration time change and we
@@ -455,7 +452,7 @@ static int bu27034_try_set_int_time(struct bu27034_data *data, int time_us)
                                         "Total gain increase. Risk of saturation");
                                ret = iio_gts_get_min_gain(&data->gts);
                                if (ret < 0)
-                                       goto unlock_out;
+                                       return ret;
                        }
                        dev_dbg(data->dev, "chan %u scale changed\n",
                                 gains[i].chan);
@@ -468,15 +465,10 @@ static int bu27034_try_set_int_time(struct bu27034_data *data, int time_us)
        for (i = 0; i < numg; i++) {
                ret = bu27034_set_gain(data, gains[i].chan, gains[i].new_gain);
                if (ret)
-                       goto unlock_out;
+                       return ret;
        }
 
-       ret = bu27034_set_int_time(data, time_us);
-
-unlock_out:
-       mutex_unlock(&data->mutex);
-
-       return ret;
+       return bu27034_set_int_time(data, time_us);
 }
 
 static int bu27034_set_scale(struct bu27034_data *data, int chan,
@@ -492,10 +484,10 @@ static int bu27034_set_scale(struct bu27034_data *data, int chan,
                return -EINVAL;
        }
 
-       mutex_lock(&data->mutex);
+       guard(mutex)(&data->mutex);
        ret = regmap_read(data->regmap, BU27034_REG_MODE_CONTROL1, &time_sel);
        if (ret)
-               goto unlock_out;
+               return ret;
 
        ret = iio_gts_find_gain_sel_for_scale_using_time(&data->gts, time_sel,
                                                val, val2, &gain_sel);
@@ -518,7 +510,7 @@ static int bu27034_set_scale(struct bu27034_data *data, int chan,
 
                ret = bu27034_get_gain(data, gain.chan, &gain.old_gain);
                if (ret)
-                       goto unlock_out;
+                       return ret;
 
                /*
                 * Iterate through all the times to see if we find one which
@@ -551,26 +543,20 @@ static int bu27034_set_scale(struct bu27034_data *data, int chan,
                if (!found) {
                        dev_dbg(data->dev,
                                "Can't set scale maintaining other channel\n");
-                       ret = -EINVAL;
-
-                       goto unlock_out;
+                       return -EINVAL;
                }
 
                ret = bu27034_set_gain(data, gain.chan, gain.new_gain);
                if (ret)
-                       goto unlock_out;
+                       return ret;
 
                ret = regmap_update_bits(data->regmap, BU27034_REG_MODE_CONTROL1,
                                  BU27034_MASK_MEAS_MODE, new_time_sel);
                if (ret)
-                       goto unlock_out;
+                       return ret;
        }
 
-       ret = bu27034_write_gain_sel(data, chan, gain_sel);
-unlock_out:
-       mutex_unlock(&data->mutex);
-
-       return ret;
+       return bu27034_write_gain_sel(data, chan, gain_sel);
 }
 
 /*
@@ -1221,42 +1207,33 @@ static int bu27034_buffer_enable(struct iio_dev *idev)
        struct task_struct *task;
        int ret;
 
-       mutex_lock(&data->mutex);
+       guard(mutex)(&data->mutex);
        ret = bu27034_meas_set(data, true);
        if (ret)
-               goto unlock_out;
+               return ret;
 
        task = kthread_run(bu27034_buffer_thread, idev,
                                 "bu27034-buffering-%u",
                                 iio_device_id(idev));
-       if (IS_ERR(task)) {
-               ret = PTR_ERR(task);
-               goto unlock_out;
-       }
+       if (IS_ERR(task))
+               return PTR_ERR(task);
 
        data->task = task;
 
-unlock_out:
-       mutex_unlock(&data->mutex);
-
-       return ret;
+       return 0;
 }
 
 static int bu27034_buffer_disable(struct iio_dev *idev)
 {
        struct bu27034_data *data = iio_priv(idev);
-       int ret;
 
-       mutex_lock(&data->mutex);
+       guard(mutex)(&data->mutex);
        if (data->task) {
                kthread_stop(data->task);
                data->task = NULL;
        }
 
-       ret = bu27034_meas_set(data, false);
-       mutex_unlock(&data->mutex);
-
-       return ret;
+       return bu27034_meas_set(data, false);
 }
 
 static const struct iio_buffer_setup_ops bu27034_buffer_ops = {