iio: light: opt3001: move driver to guard(mutex)() use

Move driver to use guard(mutex)() macro, to facilitate automatic
locking/unlocking of resources. This modernizes the driver and
improves code style.

While at it, remove unnecessary gotos and return variables.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Joshua Crofts <joshua.crofts1@gmail.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
Joshua Crofts 2026-06-14 15:19:08 +02:00 committed by Jonathan Cameron
parent 960642100c
commit 1bff00e98c

View File

@ -10,6 +10,7 @@
#include <linux/array_size.h>
#include <linux/bits.h>
#include <linux/cleanup.h>
#include <linux/delay.h>
#include <linux/dev_printk.h>
#include <linux/errno.h>
@ -479,7 +480,6 @@ static int opt3001_read_raw(struct iio_dev *iio,
int *val, int *val2, long mask)
{
struct opt3001 *opt = iio_priv(iio);
int ret;
if (opt->mode == OPT3001_CONFIGURATION_M_CONTINUOUS)
return -EBUSY;
@ -487,23 +487,17 @@ static int opt3001_read_raw(struct iio_dev *iio,
if (chan->type != opt->chip_info->chan_type)
return -EINVAL;
mutex_lock(&opt->lock);
guard(mutex)(&opt->lock);
switch (mask) {
case IIO_CHAN_INFO_RAW:
case IIO_CHAN_INFO_PROCESSED:
ret = opt3001_get_processed(opt, val, val2);
break;
return opt3001_get_processed(opt, val, val2);
case IIO_CHAN_INFO_INT_TIME:
ret = opt3001_get_int_time(opt, val, val2);
break;
return opt3001_get_int_time(opt, val, val2);
default:
ret = -EINVAL;
return -EINVAL;
}
mutex_unlock(&opt->lock);
return ret;
}
static int opt3001_write_raw(struct iio_dev *iio,
@ -511,7 +505,6 @@ static int opt3001_write_raw(struct iio_dev *iio,
int val, int val2, long mask)
{
struct opt3001 *opt = iio_priv(iio);
int ret;
if (opt->mode == OPT3001_CONFIGURATION_M_CONTINUOUS)
return -EBUSY;
@ -525,11 +518,9 @@ static int opt3001_write_raw(struct iio_dev *iio,
if (val != 0)
return -EINVAL;
mutex_lock(&opt->lock);
ret = opt3001_set_int_time(opt, val2);
mutex_unlock(&opt->lock);
guard(mutex)(&opt->lock);
return ret;
return opt3001_set_int_time(opt, val2);
}
static int opt3001_read_event_value(struct iio_dev *iio,
@ -540,26 +531,21 @@ static int opt3001_read_event_value(struct iio_dev *iio,
int *val, int *val2)
{
struct opt3001 *opt = iio_priv(iio);
int ret = IIO_VAL_INT_PLUS_MICRO;
mutex_lock(&opt->lock);
guard(mutex)(&opt->lock);
switch (dir) {
case IIO_EV_DIR_RISING:
opt3001_to_iio_ret(opt, opt->high_thresh_exp,
opt->high_thresh_mantissa, val, val2);
break;
return IIO_VAL_INT_PLUS_MICRO;
case IIO_EV_DIR_FALLING:
opt3001_to_iio_ret(opt, opt->low_thresh_exp,
opt->low_thresh_mantissa, val, val2);
break;
return IIO_VAL_INT_PLUS_MICRO;
default:
ret = -EINVAL;
return -EINVAL;
}
mutex_unlock(&opt->lock);
return ret;
}
static int opt3001_write_event_value(struct iio_dev *iio,
@ -586,12 +572,12 @@ static int opt3001_write_event_value(struct iio_dev *iio,
if (val < 0)
return -EINVAL;
mutex_lock(&opt->lock);
guard(mutex)(&opt->lock);
ret = opt3001_find_scale(opt, val, val2, &exponent);
if (ret < 0) {
dev_err(dev, "can't find scale for %d.%06u\n", val, val2);
goto err;
return ret;
}
whole = opt->chip_info->factor_whole;
@ -614,20 +600,16 @@ static int opt3001_write_event_value(struct iio_dev *iio,
opt->low_thresh_exp = exponent;
break;
default:
ret = -EINVAL;
goto err;
return -EINVAL;
}
ret = i2c_smbus_write_word_swapped(client, reg, value);
if (ret < 0) {
dev_err(dev, "failed to write register %02x\n", reg);
goto err;
return ret;
}
err:
mutex_unlock(&opt->lock);
return ret;
return 0;
}
static int opt3001_read_event_config(struct iio_dev *iio,
@ -659,7 +641,7 @@ static int opt3001_write_event_config(struct iio_dev *iio,
if (!state && opt->mode == OPT3001_CONFIGURATION_M_SHUTDOWN)
return 0;
mutex_lock(&opt->lock);
guard(mutex)(&opt->lock);
mode = state ? OPT3001_CONFIGURATION_M_CONTINUOUS
: OPT3001_CONFIGURATION_M_SHUTDOWN;
@ -668,7 +650,7 @@ static int opt3001_write_event_config(struct iio_dev *iio,
if (ret < 0) {
dev_err(dev, "failed to read register %02x\n",
OPT3001_CONFIGURATION);
goto err;
return ret;
}
reg = ret;
@ -678,13 +660,10 @@ static int opt3001_write_event_config(struct iio_dev *iio,
if (ret < 0) {
dev_err(dev, "failed to write register %02x\n",
OPT3001_CONFIGURATION);
goto err;
return ret;
}
err:
mutex_unlock(&opt->lock);
return ret;
return 0;
}
static const struct iio_info opt3001_info = {