mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 12:16:29 -04:00
iio: bu27034: simplify using guard(mutex)
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>
This commit is contained in:
committed by
Jonathan Cameron
parent
d95986fb81
commit
439c2cef81
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user