* [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode
@ 2025-02-17 14:16 Jonathan Cameron
2025-02-17 14:16 ` [PATCH 01/29] iio: adc: vf610: Move claim of direct mode to caller of vf610_read_sample and use guard(mutex) Jonathan Cameron
` (29 more replies)
0 siblings, 30 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Note that a number of the drivers touched in this series have no
obvious active maintainer, so it would be much appreciated if anyone
has time to take a look! It is a large series so feel free to review
any you have time to look at rather than feeling you need to look
at the whole thing!
This is effectively part 3 of what will probably be around 5 series
focused on moving from iio_device_claim/release_direct_mode() to
iio_device_claim/release_direct(). The new form is more consistent
with conditional locking semantics and sparse markings have been
added that let us detect miss-balance between claim and release.
More details can be found in the cover letter of the first series:
https://lore.kernel.org/all/20250209180624.701140-1-jic23@kernel.org/
This series focuses on the ADC drivers.
Jonathan Cameron (29):
iio: adc: vf610: Move claim of direct mode to caller of
vf610_read_sample and use guard(mutex)
iio: adc: vf610: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: ti-ads1100: Use guard(mutex) to allow direct returns
iio: adc: ti-ads1100: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: ti-ads1015: Use guard(mutex) and factor out code for
INFO_RAW
iio: adc: ti-ads1015: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: stm32-dfsdm: Factor out core of reading INFO_RAW
iio: adc: stm32-dfsdm: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: ad4030: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: ad7192: Factor out core of ad7192_write_raw() to simplify
error handling.
iio: adc: ad7192: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: ad7768-1: Move setting of val a bit later to avoid
unnecessary return value check
iio: adc: ad7768-1: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: ad7606: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: ad7791: Factor out core of ad7791_write_raw() to simplify
error handling
iio: adc: ad7791: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: ad7793: Factor out core of ad7793_write_raw() to simplify
error handling
iio: adc: ad7793: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: ad799x: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: ad_sigma_delta: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: at91-sama5d2: Move claim of direct mode up a level and use
guard()
iio: adc: at91-sama5d2: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: max1027: Move claim of direct mode up one level and use
guard()
iio: adc: max1027: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: max11410: Factor out writing of sampling frequency to
simplify errro paths.
iio: adc: max11410: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: mxs-lradc: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: rcar: Switch to sparse friendly
iio_device_claim/release_direct()
iio: adc: Switch to sparse friendly iio_device_claim/release_direct()
drivers/iio/adc/ad4030.c | 21 ++--
drivers/iio/adc/ad7173.c | 9 +-
drivers/iio/adc/ad7192.c | 119 ++++++++++----------
drivers/iio/adc/ad7266.c | 7 +-
drivers/iio/adc/ad7298.c | 7 +-
drivers/iio/adc/ad7380.c | 56 +++++-----
drivers/iio/adc/ad7476.c | 7 +-
drivers/iio/adc/ad7606.c | 14 ++-
drivers/iio/adc/ad7768-1.c | 10 +-
drivers/iio/adc/ad7791.c | 31 +++---
drivers/iio/adc/ad7793.c | 80 +++++++-------
drivers/iio/adc/ad7887.c | 7 +-
drivers/iio/adc/ad7923.c | 7 +-
drivers/iio/adc/ad7944.c | 7 +-
drivers/iio/adc/ad799x.c | 14 ++-
drivers/iio/adc/ad_sigma_delta.c | 7 +-
drivers/iio/adc/at91-sama5d2_adc.c | 54 +++++-----
drivers/iio/adc/dln2-adc.c | 7 +-
drivers/iio/adc/max1027.c | 37 +++----
drivers/iio/adc/max11410.c | 72 ++++++-------
drivers/iio/adc/mxs-lradc-adc.c | 14 ++-
drivers/iio/adc/rcar-gyroadc.c | 9 +-
drivers/iio/adc/stm32-adc.c | 7 +-
drivers/iio/adc/stm32-dfsdm-adc.c | 76 +++++++------
drivers/iio/adc/ti-adc084s021.c | 9 +-
drivers/iio/adc/ti-adc108s102.c | 7 +-
drivers/iio/adc/ti-ads1015.c | 168 ++++++++++++-----------------
drivers/iio/adc/ti-ads1100.c | 44 +++-----
drivers/iio/adc/ti-ads1298.c | 7 +-
drivers/iio/adc/ti-ads131e08.c | 14 ++-
drivers/iio/adc/ti-tlc4541.c | 7 +-
drivers/iio/adc/vf610_adc.c | 36 +++----
32 files changed, 440 insertions(+), 531 deletions(-)
--
2.48.1
^ permalink raw reply [flat|nested] 55+ messages in thread
* [PATCH 01/29] iio: adc: vf610: Move claim of direct mode to caller of vf610_read_sample and use guard(mutex)
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-17 14:16 ` [PATCH 02/29] iio: adc: vf610: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
` (28 subsequent siblings)
29 siblings, 0 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These two changes allow direct returns in all paths, improving code
readablity.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Frank Li <Frank.Li@nxp.com>
---
drivers/iio/adc/vf610_adc.c | 37 ++++++++++++++-----------------------
1 file changed, 14 insertions(+), 23 deletions(-)
diff --git a/drivers/iio/adc/vf610_adc.c b/drivers/iio/adc/vf610_adc.c
index 513365d42aa5..57a22e31cfc7 100644
--- a/drivers/iio/adc/vf610_adc.c
+++ b/drivers/iio/adc/vf610_adc.c
@@ -11,6 +11,7 @@
#include <linux/property.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
+#include <linux/cleanup.h>
#include <linux/delay.h>
#include <linux/kernel.h>
#include <linux/slab.h>
@@ -630,36 +631,29 @@ static const struct attribute_group vf610_attribute_group = {
.attrs = vf610_attributes,
};
-static int vf610_read_sample(struct iio_dev *indio_dev,
+static int vf610_read_sample(struct vf610_adc *info,
struct iio_chan_spec const *chan, int *val)
{
- struct vf610_adc *info = iio_priv(indio_dev);
unsigned int hc_cfg;
int ret;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
-
- mutex_lock(&info->lock);
+ guard(mutex)(&info->lock);
reinit_completion(&info->completion);
hc_cfg = VF610_ADC_ADCHC(chan->channel);
hc_cfg |= VF610_ADC_AIEN;
writel(hc_cfg, info->regs + VF610_REG_ADC_HC0);
ret = wait_for_completion_interruptible_timeout(&info->completion,
VF610_ADC_TIMEOUT);
- if (ret == 0) {
- ret = -ETIMEDOUT;
- goto out_unlock;
- }
+ if (ret == 0)
+ return -ETIMEDOUT;
if (ret < 0)
- goto out_unlock;
+ return ret;
switch (chan->type) {
case IIO_VOLTAGE:
*val = info->value;
- break;
+ return 0;
case IIO_TEMP:
/*
* Calculate in degree Celsius times 1000
@@ -669,17 +663,10 @@ static int vf610_read_sample(struct iio_dev *indio_dev,
*val = 25000 - ((int)info->value - VF610_VTEMP25_3V3) *
1000000 / VF610_TEMP_SLOPE_COEFF;
- break;
+ return 0;
default:
- ret = -EINVAL;
- break;
+ return -EINVAL;
}
-
-out_unlock:
- mutex_unlock(&info->lock);
- iio_device_release_direct_mode(indio_dev);
-
- return ret;
}
static int vf610_read_raw(struct iio_dev *indio_dev,
@@ -694,7 +681,11 @@ static int vf610_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
case IIO_CHAN_INFO_PROCESSED:
- ret = vf610_read_sample(indio_dev, chan, val);
+ ret = iio_device_claim_direct_mode(indio_dev);
+ if (ret)
+ return ret;
+ ret = vf610_read_sample(info, chan, val);
+ iio_device_release_direct_mode(indio_dev);
if (ret < 0)
return ret;
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 02/29] iio: adc: vf610: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
2025-02-17 14:16 ` [PATCH 01/29] iio: adc: vf610: Move claim of direct mode to caller of vf610_read_sample and use guard(mutex) Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-17 14:16 ` [PATCH 03/29] iio: adc: ti-ads1100: Use guard(mutex) to allow direct returns Jonathan Cameron
` (27 subsequent siblings)
29 siblings, 0 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Frank Li <Frank.Li@nxp.com>
---
drivers/iio/adc/vf610_adc.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/adc/vf610_adc.c b/drivers/iio/adc/vf610_adc.c
index 57a22e31cfc7..f506ca4150b1 100644
--- a/drivers/iio/adc/vf610_adc.c
+++ b/drivers/iio/adc/vf610_adc.c
@@ -681,11 +681,10 @@ static int vf610_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
case IIO_CHAN_INFO_PROCESSED:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = vf610_read_sample(info, chan, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 03/29] iio: adc: ti-ads1100: Use guard(mutex) to allow direct returns
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
2025-02-17 14:16 ` [PATCH 01/29] iio: adc: vf610: Move claim of direct mode to caller of vf610_read_sample and use guard(mutex) Jonathan Cameron
2025-02-17 14:16 ` [PATCH 02/29] iio: adc: vf610: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-17 14:16 ` [PATCH 04/29] iio: adc: ti-ads1100: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
` (26 subsequent siblings)
29 siblings, 0 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Use of automated lock release simplifies the code.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Mike Looijmans <mike.looijmans@topic.nl>
---
drivers/iio/adc/ti-ads1100.c | 39 +++++++++++++-----------------------
1 file changed, 14 insertions(+), 25 deletions(-)
diff --git a/drivers/iio/adc/ti-ads1100.c b/drivers/iio/adc/ti-ads1100.c
index 1e46f07a9ca6..0519f8afb033 100644
--- a/drivers/iio/adc/ti-ads1100.c
+++ b/drivers/iio/adc/ti-ads1100.c
@@ -10,6 +10,7 @@
#include <linux/bitfield.h>
#include <linux/bits.h>
+#include <linux/cleanup.h>
#include <linux/delay.h>
#include <linux/module.h>
#include <linux/init.h>
@@ -219,36 +220,31 @@ static int ads1100_read_raw(struct iio_dev *indio_dev,
int ret;
struct ads1100_data *data = iio_priv(indio_dev);
- mutex_lock(&data->lock);
+ guard(mutex)(&data->lock);
switch (mask) {
case IIO_CHAN_INFO_RAW:
ret = iio_device_claim_direct_mode(indio_dev);
if (ret)
- break;
+ return ret;
ret = ads1100_get_adc_result(data, chan->address, val);
- if (ret >= 0)
- ret = IIO_VAL_INT;
iio_device_release_direct_mode(indio_dev);
- break;
+ if (ret < 0)
+ return ret;
+
+ return IIO_VAL_INT;
case IIO_CHAN_INFO_SCALE:
/* full-scale is the supply voltage in millivolts */
*val = ads1100_get_vdd_millivolts(data);
*val2 = 15 + FIELD_GET(ADS1100_PGA_MASK, data->config);
- ret = IIO_VAL_FRACTIONAL_LOG2;
- break;
+ return IIO_VAL_FRACTIONAL_LOG2;
case IIO_CHAN_INFO_SAMP_FREQ:
*val = ads1100_data_rate[FIELD_GET(ADS1100_DR_MASK,
data->config)];
- ret = IIO_VAL_INT;
- break;
+ return IIO_VAL_INT;
default:
- ret = -EINVAL;
- break;
+ return -EINVAL;
}
- mutex_unlock(&data->lock);
-
- return ret;
}
static int ads1100_write_raw(struct iio_dev *indio_dev,
@@ -256,23 +252,16 @@ static int ads1100_write_raw(struct iio_dev *indio_dev,
int val2, long mask)
{
struct ads1100_data *data = iio_priv(indio_dev);
- int ret;
- mutex_lock(&data->lock);
+ guard(mutex)(&data->lock);
switch (mask) {
case IIO_CHAN_INFO_SCALE:
- ret = ads1100_set_scale(data, val, val2);
- break;
+ return ads1100_set_scale(data, val, val2);
case IIO_CHAN_INFO_SAMP_FREQ:
- ret = ads1100_set_data_rate(data, chan->address, val);
- break;
+ return ads1100_set_data_rate(data, chan->address, val);
default:
- ret = -EINVAL;
- break;
+ return -EINVAL;
}
- mutex_unlock(&data->lock);
-
- return ret;
}
static const struct iio_info ads1100_info = {
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 04/29] iio: adc: ti-ads1100: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (2 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 03/29] iio: adc: ti-ads1100: Use guard(mutex) to allow direct returns Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-17 14:16 ` [PATCH 05/29] iio: adc: ti-ads1015: Use guard(mutex) and factor out code for INFO_RAW Jonathan Cameron
` (25 subsequent siblings)
29 siblings, 0 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Mike Looijmans <mike.looijmans@topic.nl>
---
drivers/iio/adc/ti-ads1100.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/adc/ti-ads1100.c b/drivers/iio/adc/ti-ads1100.c
index 0519f8afb033..b0790e300b18 100644
--- a/drivers/iio/adc/ti-ads1100.c
+++ b/drivers/iio/adc/ti-ads1100.c
@@ -223,12 +223,11 @@ static int ads1100_read_raw(struct iio_dev *indio_dev,
guard(mutex)(&data->lock);
switch (mask) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ads1100_get_adc_result(data, chan->address, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 05/29] iio: adc: ti-ads1015: Use guard(mutex) and factor out code for INFO_RAW
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (3 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 04/29] iio: adc: ti-ads1100: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-17 14:16 ` [PATCH 06/29] iio: adc: ti-ads1015: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
` (24 subsequent siblings)
29 siblings, 0 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
By use of automatic lock release and introducing a new utility
function to handle the core activity of reading the ADC channel,
many more complex code flows can be replaced by direct returns.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Marek Vasut <marex@denx.de>
---
drivers/iio/adc/ti-ads1015.c | 162 ++++++++++++++---------------------
1 file changed, 64 insertions(+), 98 deletions(-)
diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
index 4355726b373a..a91ec18ddbec 100644
--- a/drivers/iio/adc/ti-ads1015.c
+++ b/drivers/iio/adc/ti-ads1015.c
@@ -12,6 +12,7 @@
*/
#include <linux/module.h>
+#include <linux/cleanup.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/i2c.h>
@@ -533,6 +534,31 @@ static int ads1015_read_avail(struct iio_dev *indio_dev,
}
}
+static int __ads1015_read_info_raw(struct ads1015_data *data,
+ struct iio_chan_spec const *chan, int *val)
+{
+ int ret;
+
+ if (ads1015_event_channel_enabled(data) &&
+ data->event_channel != chan->address)
+ return -EBUSY;
+
+ ret = ads1015_set_power_state(data, true);
+ if (ret < 0)
+ return ret;
+
+ ret = ads1015_get_adc_result(data, chan->address, val);
+ if (ret < 0) {
+ ads1015_set_power_state(data, false);
+ return ret;
+ }
+
+ *val = sign_extend32(*val >> chan->scan_type.shift,
+ chan->scan_type.realbits - 1);
+
+ return ads1015_set_power_state(data, false);
+}
+
static int ads1015_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, int *val,
int *val2, long mask)
@@ -540,58 +566,30 @@ static int ads1015_read_raw(struct iio_dev *indio_dev,
int ret, idx;
struct ads1015_data *data = iio_priv(indio_dev);
- mutex_lock(&data->lock);
+ guard(mutex)(&data->lock);
switch (mask) {
case IIO_CHAN_INFO_RAW:
ret = iio_device_claim_direct_mode(indio_dev);
if (ret)
- break;
-
- if (ads1015_event_channel_enabled(data) &&
- data->event_channel != chan->address) {
- ret = -EBUSY;
- goto release_direct;
- }
-
- ret = ads1015_set_power_state(data, true);
- if (ret < 0)
- goto release_direct;
-
- ret = ads1015_get_adc_result(data, chan->address, val);
- if (ret < 0) {
- ads1015_set_power_state(data, false);
- goto release_direct;
- }
-
- *val = sign_extend32(*val >> chan->scan_type.shift,
- chan->scan_type.realbits - 1);
-
- ret = ads1015_set_power_state(data, false);
- if (ret < 0)
- goto release_direct;
-
- ret = IIO_VAL_INT;
-release_direct:
+ return ret;
+ ret = __ads1015_read_info_raw(data, chan, val);
iio_device_release_direct_mode(indio_dev);
- break;
+ if (ret)
+ return ret;
+
+ return IIO_VAL_INT;
case IIO_CHAN_INFO_SCALE:
idx = data->channel_data[chan->address].pga;
*val = ads1015_fullscale_range[idx];
*val2 = chan->scan_type.realbits - 1;
- ret = IIO_VAL_FRACTIONAL_LOG2;
- break;
+ return IIO_VAL_FRACTIONAL_LOG2;
case IIO_CHAN_INFO_SAMP_FREQ:
idx = data->channel_data[chan->address].data_rate;
*val = data->chip->data_rate[idx];
- ret = IIO_VAL_INT;
- break;
+ return IIO_VAL_INT;
default:
- ret = -EINVAL;
- break;
+ return -EINVAL;
}
- mutex_unlock(&data->lock);
-
- return ret;
}
static int ads1015_write_raw(struct iio_dev *indio_dev,
@@ -599,23 +597,16 @@ static int ads1015_write_raw(struct iio_dev *indio_dev,
int val2, long mask)
{
struct ads1015_data *data = iio_priv(indio_dev);
- int ret;
- mutex_lock(&data->lock);
+ guard(mutex)(&data->lock);
switch (mask) {
case IIO_CHAN_INFO_SCALE:
- ret = ads1015_set_scale(data, chan, val, val2);
- break;
+ return ads1015_set_scale(data, chan, val, val2);
case IIO_CHAN_INFO_SAMP_FREQ:
- ret = ads1015_set_data_rate(data, chan->address, val);
- break;
+ return ads1015_set_data_rate(data, chan->address, val);
default:
- ret = -EINVAL;
- break;
+ return -EINVAL;
}
- mutex_unlock(&data->lock);
-
- return ret;
}
static int ads1015_read_event(struct iio_dev *indio_dev,
@@ -624,20 +615,18 @@ static int ads1015_read_event(struct iio_dev *indio_dev,
int *val2)
{
struct ads1015_data *data = iio_priv(indio_dev);
- int ret;
unsigned int comp_queue;
int period;
int dr;
- mutex_lock(&data->lock);
+ guard(mutex)(&data->lock);
switch (info) {
case IIO_EV_INFO_VALUE:
*val = (dir == IIO_EV_DIR_RISING) ?
data->thresh_data[chan->address].high_thresh :
data->thresh_data[chan->address].low_thresh;
- ret = IIO_VAL_INT;
- break;
+ return IIO_VAL_INT;
case IIO_EV_INFO_PERIOD:
dr = data->channel_data[chan->address].data_rate;
comp_queue = data->thresh_data[chan->address].comp_queue;
@@ -646,16 +635,10 @@ static int ads1015_read_event(struct iio_dev *indio_dev,
*val = period / USEC_PER_SEC;
*val2 = period % USEC_PER_SEC;
- ret = IIO_VAL_INT_PLUS_MICRO;
- break;
+ return IIO_VAL_INT_PLUS_MICRO;
default:
- ret = -EINVAL;
- break;
+ return -EINVAL;
}
-
- mutex_unlock(&data->lock);
-
- return ret;
}
static int ads1015_write_event(struct iio_dev *indio_dev,
@@ -666,24 +649,22 @@ static int ads1015_write_event(struct iio_dev *indio_dev,
struct ads1015_data *data = iio_priv(indio_dev);
const int *data_rate = data->chip->data_rate;
int realbits = chan->scan_type.realbits;
- int ret = 0;
long long period;
int i;
int dr;
- mutex_lock(&data->lock);
+ guard(mutex)(&data->lock);
switch (info) {
case IIO_EV_INFO_VALUE:
- if (val >= 1 << (realbits - 1) || val < -1 << (realbits - 1)) {
- ret = -EINVAL;
- break;
- }
+ if (val >= 1 << (realbits - 1) || val < -1 << (realbits - 1))
+ return -EINVAL;
+
if (dir == IIO_EV_DIR_RISING)
data->thresh_data[chan->address].high_thresh = val;
else
data->thresh_data[chan->address].low_thresh = val;
- break;
+ return 0;
case IIO_EV_INFO_PERIOD:
dr = data->channel_data[chan->address].data_rate;
period = val * USEC_PER_SEC + val2;
@@ -694,15 +675,10 @@ static int ads1015_write_event(struct iio_dev *indio_dev,
break;
}
data->thresh_data[chan->address].comp_queue = i;
- break;
+ return 0;
default:
- ret = -EINVAL;
- break;
+ return -EINVAL;
}
-
- mutex_unlock(&data->lock);
-
- return ret;
}
static int ads1015_read_event_config(struct iio_dev *indio_dev,
@@ -710,25 +686,19 @@ static int ads1015_read_event_config(struct iio_dev *indio_dev,
enum iio_event_direction dir)
{
struct ads1015_data *data = iio_priv(indio_dev);
- int ret = 0;
- mutex_lock(&data->lock);
- if (data->event_channel == chan->address) {
- switch (dir) {
- case IIO_EV_DIR_RISING:
- ret = 1;
- break;
- case IIO_EV_DIR_EITHER:
- ret = (data->comp_mode == ADS1015_CFG_COMP_MODE_WINDOW);
- break;
- default:
- ret = -EINVAL;
- break;
- }
- }
- mutex_unlock(&data->lock);
+ guard(mutex)(&data->lock);
+ if (data->event_channel != chan->address)
+ return -EBUSY;
- return ret;
+ switch (dir) {
+ case IIO_EV_DIR_RISING:
+ return 1;
+ case IIO_EV_DIR_EITHER:
+ return (data->comp_mode == ADS1015_CFG_COMP_MODE_WINDOW);
+ default:
+ return -EINVAL;
+ }
}
static int ads1015_enable_event_config(struct ads1015_data *data,
@@ -813,14 +783,12 @@ static int ads1015_write_event_config(struct iio_dev *indio_dev,
int comp_mode = (dir == IIO_EV_DIR_EITHER) ?
ADS1015_CFG_COMP_MODE_WINDOW : ADS1015_CFG_COMP_MODE_TRAD;
- mutex_lock(&data->lock);
+ guard(mutex)(&data->lock);
/* Prevent from enabling both buffer and event at a time */
ret = iio_device_claim_direct_mode(indio_dev);
- if (ret) {
- mutex_unlock(&data->lock);
+ if (ret)
return ret;
- }
if (state)
ret = ads1015_enable_event_config(data, chan, comp_mode);
@@ -828,8 +796,6 @@ static int ads1015_write_event_config(struct iio_dev *indio_dev,
ret = ads1015_disable_event_config(data, chan, comp_mode);
iio_device_release_direct_mode(indio_dev);
- mutex_unlock(&data->lock);
-
return ret;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 06/29] iio: adc: ti-ads1015: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (4 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 05/29] iio: adc: ti-ads1015: Use guard(mutex) and factor out code for INFO_RAW Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-17 14:16 ` [PATCH 07/29] iio: adc: stm32-dfsdm: Factor out core of reading INFO_RAW Jonathan Cameron
` (23 subsequent siblings)
29 siblings, 0 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Marek Vasut <marex@denx.de>
---
drivers/iio/adc/ti-ads1015.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
index a91ec18ddbec..729977b611ec 100644
--- a/drivers/iio/adc/ti-ads1015.c
+++ b/drivers/iio/adc/ti-ads1015.c
@@ -569,11 +569,10 @@ static int ads1015_read_raw(struct iio_dev *indio_dev,
guard(mutex)(&data->lock);
switch (mask) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = __ads1015_read_info_raw(data, chan, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret)
return ret;
@@ -786,16 +785,15 @@ static int ads1015_write_event_config(struct iio_dev *indio_dev,
guard(mutex)(&data->lock);
/* Prevent from enabling both buffer and event at a time */
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
if (state)
ret = ads1015_enable_event_config(data, chan, comp_mode);
else
ret = ads1015_disable_event_config(data, chan, comp_mode);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 07/29] iio: adc: stm32-dfsdm: Factor out core of reading INFO_RAW
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (5 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 06/29] iio: adc: ti-ads1015: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-18 15:32 ` Olivier MOYSAN
2025-02-17 14:16 ` [PATCH 08/29] iio: adc: stm32-dfsdm: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
` (22 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This allows the claim on direct mode to be release in one place
rather than a lot of error paths, simplifying code.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Olivier Moysan <olivier.moysan@foss.st.com>
---
drivers/iio/adc/stm32-dfsdm-adc.c | 59 +++++++++++++++++++------------
1 file changed, 36 insertions(+), 23 deletions(-)
diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c
index fe11b0d8eab3..1cf2594d6872 100644
--- a/drivers/iio/adc/stm32-dfsdm-adc.c
+++ b/drivers/iio/adc/stm32-dfsdm-adc.c
@@ -1306,6 +1306,38 @@ static int stm32_dfsdm_write_raw(struct iio_dev *indio_dev,
return -EINVAL;
}
+static int __stm32_dfsdm_read_info_raw(struct iio_dev *indio_dev,
+ struct iio_chan_spec const *chan,
+ int *val)
+{
+ struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
+ int ret = 0;
+
+ if (adc->hwc)
+ ret = iio_hw_consumer_enable(adc->hwc);
+ if (adc->backend)
+ ret = iio_backend_enable(adc->backend[chan->scan_index]);
+ if (ret < 0) {
+ dev_err(&indio_dev->dev,
+ "%s: IIO enable failed (channel %d)\n",
+ __func__, chan->channel);
+ return ret;
+ }
+ ret = stm32_dfsdm_single_conv(indio_dev, chan, val);
+ if (adc->hwc)
+ iio_hw_consumer_disable(adc->hwc);
+ if (adc->backend)
+ iio_backend_disable(adc->backend[chan->scan_index]);
+ if (ret < 0) {
+ dev_err(&indio_dev->dev,
+ "%s: Conversion failed (channel %d)\n",
+ __func__, chan->channel);
+ return ret;
+ }
+
+ return 0;
+}
+
static int stm32_dfsdm_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, int *val,
int *val2, long mask)
@@ -1326,30 +1358,11 @@ static int stm32_dfsdm_read_raw(struct iio_dev *indio_dev,
ret = iio_device_claim_direct_mode(indio_dev);
if (ret)
return ret;
- if (adc->hwc)
- ret = iio_hw_consumer_enable(adc->hwc);
- if (adc->backend)
- ret = iio_backend_enable(adc->backend[idx]);
- if (ret < 0) {
- dev_err(&indio_dev->dev,
- "%s: IIO enable failed (channel %d)\n",
- __func__, chan->channel);
- iio_device_release_direct_mode(indio_dev);
- return ret;
- }
- ret = stm32_dfsdm_single_conv(indio_dev, chan, val);
- if (adc->hwc)
- iio_hw_consumer_disable(adc->hwc);
- if (adc->backend)
- iio_backend_disable(adc->backend[idx]);
- if (ret < 0) {
- dev_err(&indio_dev->dev,
- "%s: Conversion failed (channel %d)\n",
- __func__, chan->channel);
- iio_device_release_direct_mode(indio_dev);
- return ret;
- }
+
+ ret = __stm32_dfsdm_read_info_raw(indio_dev, chan, val);
iio_device_release_direct_mode(indio_dev);
+ if (ret)
+ return ret;
return IIO_VAL_INT;
case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 08/29] iio: adc: stm32-dfsdm: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (6 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 07/29] iio: adc: stm32-dfsdm: Factor out core of reading INFO_RAW Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-18 15:34 ` Olivier MOYSAN
2025-02-17 14:16 ` [PATCH 09/29] iio: adc: ad4030: " Jonathan Cameron
` (21 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Olivier Moysan <olivier.moysan@foss.st.com>
---
drivers/iio/adc/stm32-dfsdm-adc.c | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c
index 1cf2594d6872..726ddafc9f6d 100644
--- a/drivers/iio/adc/stm32-dfsdm-adc.c
+++ b/drivers/iio/adc/stm32-dfsdm-adc.c
@@ -1275,9 +1275,8 @@ static int stm32_dfsdm_write_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = stm32_dfsdm_compute_all_osrs(indio_dev, val);
if (!ret) {
@@ -1287,19 +1286,18 @@ static int stm32_dfsdm_write_raw(struct iio_dev *indio_dev,
adc->oversamp = val;
adc->sample_freq = spi_freq / val;
}
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
case IIO_CHAN_INFO_SAMP_FREQ:
if (!val)
return -EINVAL;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = dfsdm_adc_set_samp_freq(indio_dev, val, spi_freq);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
@@ -1355,12 +1353,11 @@ static int stm32_dfsdm_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = __stm32_dfsdm_read_info_raw(indio_dev, chan, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret)
return ret;
return IIO_VAL_INT;
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 09/29] iio: adc: ad4030: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (7 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 08/29] iio: adc: stm32-dfsdm: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 10:54 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 10/29] iio: adc: ad7192: Factor out core of ad7192_write_raw() to simplify error handling Jonathan Cameron
` (20 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
drivers/iio/adc/ad4030.c | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/drivers/iio/adc/ad4030.c b/drivers/iio/adc/ad4030.c
index ab5497c8ea1e..209cfc2e1785 100644
--- a/drivers/iio/adc/ad4030.c
+++ b/drivers/iio/adc/ad4030.c
@@ -784,13 +784,12 @@ static int ad4030_read_raw(struct iio_dev *indio_dev,
if (info == IIO_CHAN_INFO_SCALE)
return ad4030_get_chan_scale(indio_dev, chan, val, val2);
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad4030_read_raw_dispatch(indio_dev, chan, val, val2, info);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
@@ -822,13 +821,12 @@ static int ad4030_write_raw(struct iio_dev *indio_dev,
{
int ret;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad4030_write_raw_dispatch(indio_dev, chan, val, val2, info);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
@@ -839,16 +837,15 @@ static int ad4030_reg_access(struct iio_dev *indio_dev, unsigned int reg,
const struct ad4030_state *st = iio_priv(indio_dev);
int ret;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
if (readval)
ret = regmap_read(st->regmap, reg, readval);
else
ret = regmap_write(st->regmap, reg, writeval);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 10/29] iio: adc: ad7192: Factor out core of ad7192_write_raw() to simplify error handling.
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (8 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 09/29] iio: adc: ad4030: " Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 10:54 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 11/29] iio: adc: ad7192: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
` (19 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Factor out everything under the lock, use guard() for the mutex to
avoid need to manually unlock, and switch sense of matching checks
in loops to reduce indent.
There are some functional changes in here as well as the code
no longer updates the filter_freq_available if no change has
been made to the oversampling ratio.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Alisa-Dariana Roman <alisa.roman@analog.com>
---
drivers/iio/adc/ad7192.c | 111 ++++++++++++++++++++-------------------
1 file changed, 57 insertions(+), 54 deletions(-)
diff --git a/drivers/iio/adc/ad7192.c b/drivers/iio/adc/ad7192.c
index e96a5ae92375..785429900da8 100644
--- a/drivers/iio/adc/ad7192.c
+++ b/drivers/iio/adc/ad7192.c
@@ -7,6 +7,7 @@
#include <linux/interrupt.h>
#include <linux/bitfield.h>
+#include <linux/cleanup.h>
#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/device.h>
@@ -945,80 +946,82 @@ static int ad7192_read_raw(struct iio_dev *indio_dev,
return -EINVAL;
}
-static int ad7192_write_raw(struct iio_dev *indio_dev,
- struct iio_chan_spec const *chan,
- int val,
- int val2,
- long mask)
+static int __ad7192_write_raw(struct iio_dev *indio_dev,
+ struct iio_chan_spec const *chan,
+ int val,
+ int val2,
+ long mask)
{
struct ad7192_state *st = iio_priv(indio_dev);
- int ret, i, div;
+ int i, div;
unsigned int tmp;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
-
- mutex_lock(&st->lock);
+ guard(mutex)(&st->lock);
switch (mask) {
case IIO_CHAN_INFO_SCALE:
- ret = -EINVAL;
- for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++)
- if (val2 == st->scale_avail[i][1]) {
- ret = 0;
- tmp = st->conf;
- st->conf &= ~AD7192_CONF_GAIN_MASK;
- st->conf |= FIELD_PREP(AD7192_CONF_GAIN_MASK, i);
- if (tmp == st->conf)
- break;
- ad_sd_write_reg(&st->sd, AD7192_REG_CONF,
- 3, st->conf);
- ad7192_calibrate_all(st);
- break;
- }
- break;
- case IIO_CHAN_INFO_SAMP_FREQ:
- if (!val) {
- ret = -EINVAL;
- break;
+ for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++) {
+ if (val2 != st->scale_avail[i][1])
+ continue;
+
+ tmp = st->conf;
+ st->conf &= ~AD7192_CONF_GAIN_MASK;
+ st->conf |= FIELD_PREP(AD7192_CONF_GAIN_MASK, i);
+ if (tmp == st->conf)
+ return 0;
+ ad_sd_write_reg(&st->sd, AD7192_REG_CONF, 3, st->conf);
+ ad7192_calibrate_all(st);
+ return 0;
}
+ return -EINVAL;
+ case IIO_CHAN_INFO_SAMP_FREQ:
+ if (!val)
+ return -EINVAL;
div = st->fclk / (val * ad7192_get_f_order(st) * 1024);
- if (div < 1 || div > 1023) {
- ret = -EINVAL;
- break;
- }
+ if (div < 1 || div > 1023)
+ return -EINVAL;
st->mode &= ~AD7192_MODE_RATE_MASK;
st->mode |= FIELD_PREP(AD7192_MODE_RATE_MASK, div);
ad_sd_write_reg(&st->sd, AD7192_REG_MODE, 3, st->mode);
ad7192_update_filter_freq_avail(st);
- break;
+ return 0;
case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
- ret = ad7192_set_3db_filter_freq(st, val, val2 / 1000);
- break;
+ return ad7192_set_3db_filter_freq(st, val, val2 / 1000);
case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
- ret = -EINVAL;
- for (i = 0; i < ARRAY_SIZE(st->oversampling_ratio_avail); i++)
- if (val == st->oversampling_ratio_avail[i]) {
- ret = 0;
- tmp = st->mode;
- st->mode &= ~AD7192_MODE_AVG_MASK;
- st->mode |= FIELD_PREP(AD7192_MODE_AVG_MASK, i);
- if (tmp == st->mode)
- break;
- ad_sd_write_reg(&st->sd, AD7192_REG_MODE,
- 3, st->mode);
- break;
- }
- ad7192_update_filter_freq_avail(st);
- break;
+ for (i = 0; i < ARRAY_SIZE(st->oversampling_ratio_avail); i++) {
+ if (val != st->oversampling_ratio_avail[i])
+ continue;
+
+ tmp = st->mode;
+ st->mode &= ~AD7192_MODE_AVG_MASK;
+ st->mode |= FIELD_PREP(AD7192_MODE_AVG_MASK, i);
+ if (tmp == st->mode)
+ return 0;
+ ad_sd_write_reg(&st->sd, AD7192_REG_MODE, 3, st->mode);
+ ad7192_update_filter_freq_avail(st);
+ return 0;
+ }
+ return -EINVAL;
default:
- ret = -EINVAL;
+ return -EINVAL;
}
+}
+
+static int ad7192_write_raw(struct iio_dev *indio_dev,
+ struct iio_chan_spec const *chan,
+ int val,
+ int val2,
+ long mask)
+{
+ int ret;
+
+ ret = iio_device_claim_direct_mode(indio_dev);
+ if (ret)
+ return ret;
- mutex_unlock(&st->lock);
+ ret = __ad7192_write_raw(indio_dev, chan, val, val2, mask);
iio_device_release_direct_mode(indio_dev);
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 11/29] iio: adc: ad7192: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (9 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 10/29] iio: adc: ad7192: Factor out core of ad7192_write_raw() to simplify error handling Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 10:55 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 12/29] iio: adc: ad7768-1: Move setting of val a bit later to avoid unnecessary return value check Jonathan Cameron
` (18 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Alisa-Dariana Roman <alisa.roman@analog.com>
---
drivers/iio/adc/ad7192.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/iio/adc/ad7192.c b/drivers/iio/adc/ad7192.c
index 785429900da8..f6150b905286 100644
--- a/drivers/iio/adc/ad7192.c
+++ b/drivers/iio/adc/ad7192.c
@@ -694,9 +694,8 @@ static ssize_t ad7192_set(struct device *dev,
if (ret < 0)
return ret;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
switch ((u32)this_attr->address) {
case AD7192_REG_GPOCON:
@@ -719,7 +718,7 @@ static ssize_t ad7192_set(struct device *dev,
ret = -EINVAL;
}
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret ? ret : len;
}
@@ -1017,13 +1016,12 @@ static int ad7192_write_raw(struct iio_dev *indio_dev,
{
int ret;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = __ad7192_write_raw(indio_dev, chan, val, val2, mask);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 12/29] iio: adc: ad7768-1: Move setting of val a bit later to avoid unnecessary return value check
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (10 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 11/29] iio: adc: ad7192: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 10:56 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 13/29] iio: adc: ad7768-1: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
` (17 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
The data used is all in local variables so there is no advantage
in setting *val = ret with the direct mode claim held.
Move it later to after error check.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
drivers/iio/adc/ad7768-1.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/iio/adc/ad7768-1.c b/drivers/iio/adc/ad7768-1.c
index 113703fb7245..c2ba357b82d8 100644
--- a/drivers/iio/adc/ad7768-1.c
+++ b/drivers/iio/adc/ad7768-1.c
@@ -370,12 +370,11 @@ static int ad7768_read_raw(struct iio_dev *indio_dev,
return ret;
ret = ad7768_scan_direct(indio_dev);
- if (ret >= 0)
- *val = ret;
iio_device_release_direct_mode(indio_dev);
if (ret < 0)
return ret;
+ *val = ret;
return IIO_VAL_INT;
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 13/29] iio: adc: ad7768-1: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (11 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 12/29] iio: adc: ad7768-1: Move setting of val a bit later to avoid unnecessary return value check Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 10:56 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 14/29] iio: adc: ad7606: " Jonathan Cameron
` (16 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
drivers/iio/adc/ad7768-1.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/adc/ad7768-1.c b/drivers/iio/adc/ad7768-1.c
index c2ba357b82d8..ea829c51e80b 100644
--- a/drivers/iio/adc/ad7768-1.c
+++ b/drivers/iio/adc/ad7768-1.c
@@ -365,13 +365,12 @@ static int ad7768_read_raw(struct iio_dev *indio_dev,
switch (info) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad7768_scan_direct(indio_dev);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
*val = ret;
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 14/29] iio: adc: ad7606: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (12 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 13/29] iio: adc: ad7768-1: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 10:57 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 15/29] iio: adc: ad7791: Factor out core of ad7791_write_raw() to simplify error handling Jonathan Cameron
` (15 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
This driver got partly converted during removal of the _scoped form.
However some more cases got added in parallel.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
drivers/iio/adc/ad7606.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c
index 87908cc51e48..f566248db70a 100644
--- a/drivers/iio/adc/ad7606.c
+++ b/drivers/iio/adc/ad7606.c
@@ -862,11 +862,10 @@ static int ad7606_write_raw(struct iio_dev *indio_dev,
val = (val * MICRO) + val2;
i = find_closest(val, scale_avail_uv, cs->num_scales);
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret < 0)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = st->write_scale(indio_dev, ch, i + cs->reg_offset);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
cs->range = i;
@@ -878,11 +877,10 @@ static int ad7606_write_raw(struct iio_dev *indio_dev,
i = find_closest(val, st->oversampling_avail,
st->num_os_ratios);
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret < 0)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = st->write_os(indio_dev, i);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
st->oversampling = st->oversampling_avail[i];
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 15/29] iio: adc: ad7791: Factor out core of ad7791_write_raw() to simplify error handling
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (13 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 14/29] iio: adc: ad7606: " Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 10:59 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 16/29] iio: adc: ad7791: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
` (14 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Factor out everything under the direct mode claim allowing direct returns
in error paths.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
drivers/iio/adc/ad7791.c | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/drivers/iio/adc/ad7791.c b/drivers/iio/adc/ad7791.c
index 76118fe22db8..e49d4843f304 100644
--- a/drivers/iio/adc/ad7791.c
+++ b/drivers/iio/adc/ad7791.c
@@ -310,15 +310,11 @@ static int ad7791_read_raw(struct iio_dev *indio_dev,
return -EINVAL;
}
-static int ad7791_write_raw(struct iio_dev *indio_dev,
+static int __ad7791_write_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, int val, int val2, long mask)
{
struct ad7791_state *st = iio_priv(indio_dev);
- int ret, i;
-
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ int i;
switch (mask) {
case IIO_CHAN_INFO_SAMP_FREQ:
@@ -328,20 +324,30 @@ static int ad7791_write_raw(struct iio_dev *indio_dev,
break;
}
- if (i == ARRAY_SIZE(ad7791_sample_freq_avail)) {
- ret = -EINVAL;
- break;
- }
+ if (i == ARRAY_SIZE(ad7791_sample_freq_avail))
+ return -EINVAL;
st->filter &= ~AD7791_FILTER_RATE_MASK;
st->filter |= i;
ad_sd_write_reg(&st->sd, AD7791_REG_FILTER,
sizeof(st->filter),
st->filter);
- break;
+ return 0;
default:
- ret = -EINVAL;
+ return -EINVAL;
}
+}
+
+static int ad7791_write_raw(struct iio_dev *indio_dev,
+ struct iio_chan_spec const *chan, int val, int val2, long mask)
+{
+ int ret;
+
+ ret = iio_device_claim_direct_mode(indio_dev);
+ if (ret)
+ return ret;
+
+ ret = __ad7791_write_raw(indio_dev, chan, val, val2, mask);
iio_device_release_direct_mode(indio_dev);
return ret;
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 16/29] iio: adc: ad7791: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (14 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 15/29] iio: adc: ad7791: Factor out core of ad7791_write_raw() to simplify error handling Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 11:00 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 17/29] iio: adc: ad7793: Factor out core of ad7793_write_raw() to simplify error handling Jonathan Cameron
` (13 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
drivers/iio/adc/ad7791.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/adc/ad7791.c b/drivers/iio/adc/ad7791.c
index e49d4843f304..597c2686ffa4 100644
--- a/drivers/iio/adc/ad7791.c
+++ b/drivers/iio/adc/ad7791.c
@@ -343,13 +343,12 @@ static int ad7791_write_raw(struct iio_dev *indio_dev,
{
int ret;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = __ad7791_write_raw(indio_dev, chan, val, val2, mask);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 17/29] iio: adc: ad7793: Factor out core of ad7793_write_raw() to simplify error handling
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (15 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 16/29] iio: adc: ad7791: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 11:00 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 18/29] iio: adc: ad7793: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
` (12 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Factor out everything under the direct mode claim allowing direct returns
in error paths. Switch sense of matching in the loop and use a continue
to reduce code indent and improve readability.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
drivers/iio/adc/ad7793.c | 79 +++++++++++++++++++++-------------------
1 file changed, 42 insertions(+), 37 deletions(-)
diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
index 1b50d9643a63..861a3e44e5ad 100644
--- a/drivers/iio/adc/ad7793.c
+++ b/drivers/iio/adc/ad7793.c
@@ -462,64 +462,69 @@ static int ad7793_read_raw(struct iio_dev *indio_dev,
return -EINVAL;
}
-static int ad7793_write_raw(struct iio_dev *indio_dev,
- struct iio_chan_spec const *chan,
- int val,
- int val2,
- long mask)
+static int __ad7793_write_raw(struct iio_dev *indio_dev,
+ struct iio_chan_spec const *chan,
+ int val, int val2, long mask)
{
struct ad7793_state *st = iio_priv(indio_dev);
- int ret, i;
+ int i;
unsigned int tmp;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
-
switch (mask) {
case IIO_CHAN_INFO_SCALE:
- ret = -EINVAL;
- for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++)
- if (val2 == st->scale_avail[i][1]) {
- ret = 0;
- tmp = st->conf;
- st->conf &= ~AD7793_CONF_GAIN(-1);
- st->conf |= AD7793_CONF_GAIN(i);
-
- if (tmp == st->conf)
- break;
-
- ad_sd_write_reg(&st->sd, AD7793_REG_CONF,
- sizeof(st->conf), st->conf);
- ad7793_calibrate_all(st);
- break;
- }
- break;
- case IIO_CHAN_INFO_SAMP_FREQ:
- if (!val) {
- ret = -EINVAL;
- break;
+ for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++) {
+ if (val2 != st->scale_avail[i][1])
+ continue;
+
+ tmp = st->conf;
+ st->conf &= ~AD7793_CONF_GAIN(-1);
+ st->conf |= AD7793_CONF_GAIN(i);
+
+ if (tmp == st->conf)
+ return 0;
+
+ ad_sd_write_reg(&st->sd, AD7793_REG_CONF,
+ sizeof(st->conf), st->conf);
+ ad7793_calibrate_all(st);
+
+ return 0;
}
+ return -EINVAL;
+ case IIO_CHAN_INFO_SAMP_FREQ:
+ if (!val)
+ return -EINVAL;
for (i = 0; i < 16; i++)
if (val == st->chip_info->sample_freq_avail[i])
break;
- if (i == 16) {
- ret = -EINVAL;
- break;
- }
+ if (i == 16)
+ return -EINVAL;
st->mode &= ~AD7793_MODE_RATE(-1);
st->mode |= AD7793_MODE_RATE(i);
ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode),
st->mode);
- break;
+ return 0;
default:
- ret = -EINVAL;
+ return -EINVAL;
}
+}
+
+static int ad7793_write_raw(struct iio_dev *indio_dev,
+ struct iio_chan_spec const *chan,
+ int val, int val2, long mask)
+{
+ int ret;
+
+ ret = iio_device_claim_direct_mode(indio_dev);
+ if (ret)
+ return ret;
+
+ ret = __ad7793_write_raw(indio_dev, chan, val, val2, mask);
iio_device_release_direct_mode(indio_dev);
+
return ret;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 18/29] iio: adc: ad7793: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (16 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 17/29] iio: adc: ad7793: Factor out core of ad7793_write_raw() to simplify error handling Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 11:01 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 19/29] iio: adc: ad799x: " Jonathan Cameron
` (11 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
drivers/iio/adc/ad7793.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
index 861a3e44e5ad..ccf18ce48e34 100644
--- a/drivers/iio/adc/ad7793.c
+++ b/drivers/iio/adc/ad7793.c
@@ -517,13 +517,12 @@ static int ad7793_write_raw(struct iio_dev *indio_dev,
{
int ret;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = __ad7793_write_raw(indio_dev, chan, val, val2, mask);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 19/29] iio: adc: ad799x: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (17 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 18/29] iio: adc: ad7793: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 11:02 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 20/29] iio: adc: ad_sigma_delta: " Jonathan Cameron
` (10 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
Kept this one out of the 'simple' category as it is worth considering
factoring out the code when the claim on direct mode is held. I think
it isn't quite complex enough to make that useful but if others disagree
I can do so.
---
drivers/iio/adc/ad799x.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c
index aa44b4e2542b..993f4651b73a 100644
--- a/drivers/iio/adc/ad799x.c
+++ b/drivers/iio/adc/ad799x.c
@@ -291,13 +291,12 @@ static int ad799x_read_raw(struct iio_dev *indio_dev,
switch (m) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
mutex_lock(&st->lock);
ret = ad799x_scan_direct(st, chan->scan_index);
mutex_unlock(&st->lock);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
@@ -411,9 +410,8 @@ static int ad799x_write_event_config(struct iio_dev *indio_dev,
struct ad799x_state *st = iio_priv(indio_dev);
int ret;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
mutex_lock(&st->lock);
@@ -429,7 +427,7 @@ static int ad799x_write_event_config(struct iio_dev *indio_dev,
ret = ad799x_write_config(st, st->config);
mutex_unlock(&st->lock);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 20/29] iio: adc: ad_sigma_delta: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (18 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 19/29] iio: adc: ad799x: " Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 11:03 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 21/29] iio: adc: at91-sama5d2: Move claim of direct mode up a level and use guard() Jonathan Cameron
` (9 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
This is a complex function with a lot more than the release of direct
mode to unwind on error. As such no attempt made to factor out
the inner code.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
---
drivers/iio/adc/ad_sigma_delta.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/adc/ad_sigma_delta.c b/drivers/iio/adc/ad_sigma_delta.c
index 10e635fc4fa4..5907c35b98e5 100644
--- a/drivers/iio/adc/ad_sigma_delta.c
+++ b/drivers/iio/adc/ad_sigma_delta.c
@@ -386,9 +386,8 @@ int ad_sigma_delta_single_conversion(struct iio_dev *indio_dev,
unsigned int data_reg;
int ret = 0;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ad_sigma_delta_set_channel(sigma_delta, chan->address);
@@ -431,7 +430,7 @@ int ad_sigma_delta_single_conversion(struct iio_dev *indio_dev,
sigma_delta->keep_cs_asserted = false;
sigma_delta->bus_locked = false;
spi_bus_unlock(sigma_delta->spi->controller);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret)
return ret;
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 21/29] iio: adc: at91-sama5d2: Move claim of direct mode up a level and use guard()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (19 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 20/29] iio: adc: ad_sigma_delta: " Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 12:45 ` Claudiu Beznea
2025-02-17 14:16 ` [PATCH 22/29] iio: adc: at91-sama5d2: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
` (8 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Move iio_device_claim_direct_mode() up one layer in the call stack,
and use guard() for scope based unlocking to simplify error handling
by allowing direct returns.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Claudiu Beznea <claudiu.beznea@tuxon.dev>
---
drivers/iio/adc/at91-sama5d2_adc.c | 42 +++++++++++++++---------------
1 file changed, 21 insertions(+), 21 deletions(-)
diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
index 8e5aaf15a921..70d3dbb39b25 100644
--- a/drivers/iio/adc/at91-sama5d2_adc.c
+++ b/drivers/iio/adc/at91-sama5d2_adc.c
@@ -9,6 +9,7 @@
*/
#include <linux/bitops.h>
+#include <linux/cleanup.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/dma-mapping.h>
@@ -1814,19 +1815,10 @@ static int at91_adc_read_info_locked(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, int *val)
{
struct at91_adc_state *st = iio_priv(indio_dev);
- int ret;
-
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
-
- mutex_lock(&st->lock);
- ret = at91_adc_read_info_raw(indio_dev, chan, val);
- mutex_unlock(&st->lock);
- iio_device_release_direct_mode(indio_dev);
+ guard(mutex)(&st->lock);
- return ret;
+ return at91_adc_read_info_raw(indio_dev, chan, val);
}
static void at91_adc_temp_sensor_configure(struct at91_adc_state *st,
@@ -1871,14 +1863,11 @@ static int at91_adc_read_temp(struct iio_dev *indio_dev,
u32 tmp;
int ret, vbg, vtemp;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
- mutex_lock(&st->lock);
+ guard(mutex)(&st->lock);
ret = pm_runtime_resume_and_get(st->dev);
if (ret < 0)
- goto unlock;
+ return ret;
at91_adc_temp_sensor_configure(st, true);
@@ -1900,9 +1889,6 @@ static int at91_adc_read_temp(struct iio_dev *indio_dev,
at91_adc_temp_sensor_configure(st, false);
pm_runtime_mark_last_busy(st->dev);
pm_runtime_put_autosuspend(st->dev);
-unlock:
- mutex_unlock(&st->lock);
- iio_device_release_direct_mode(indio_dev);
if (ret < 0)
return ret;
@@ -1924,10 +1910,17 @@ static int at91_adc_read_raw(struct iio_dev *indio_dev,
int *val, int *val2, long mask)
{
struct at91_adc_state *st = iio_priv(indio_dev);
+ int ret;
switch (mask) {
case IIO_CHAN_INFO_RAW:
- return at91_adc_read_info_locked(indio_dev, chan, val);
+ ret = iio_device_claim_direct_mode(indio_dev);
+ if (ret)
+ return ret;
+
+ ret = at91_adc_read_info_locked(indio_dev, chan, val);
+ iio_device_release_direct_mode(indio_dev);
+ return ret;
case IIO_CHAN_INFO_SCALE:
*val = st->vref_uv / 1000;
@@ -1939,7 +1932,14 @@ static int at91_adc_read_raw(struct iio_dev *indio_dev,
case IIO_CHAN_INFO_PROCESSED:
if (chan->type != IIO_TEMP)
return -EINVAL;
- return at91_adc_read_temp(indio_dev, chan, val);
+ ret = iio_device_claim_direct_mode(indio_dev);
+ if (ret)
+ return ret;
+
+ ret = at91_adc_read_temp(indio_dev, chan, val);
+ iio_device_release_direct_mode(indio_dev);
+
+ return ret;
case IIO_CHAN_INFO_SAMP_FREQ:
*val = at91_adc_get_sample_freq(st);
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 22/29] iio: adc: at91-sama5d2: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (20 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 21/29] iio: adc: at91-sama5d2: Move claim of direct mode up a level and use guard() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 12:46 ` Claudiu Beznea
2025-02-17 14:16 ` [PATCH 23/29] iio: adc: max1027: Move claim of direct mode up one level and use guard() Jonathan Cameron
` (7 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Claudiu Beznea <claudiu.beznea@tuxon.dev>
---
drivers/iio/adc/at91-sama5d2_adc.c | 28 ++++++++++++----------------
1 file changed, 12 insertions(+), 16 deletions(-)
diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
index 70d3dbb39b25..694ff96fc913 100644
--- a/drivers/iio/adc/at91-sama5d2_adc.c
+++ b/drivers/iio/adc/at91-sama5d2_adc.c
@@ -1914,12 +1914,11 @@ static int at91_adc_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = at91_adc_read_info_locked(indio_dev, chan, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
case IIO_CHAN_INFO_SCALE:
@@ -1932,12 +1931,11 @@ static int at91_adc_read_raw(struct iio_dev *indio_dev,
case IIO_CHAN_INFO_PROCESSED:
if (chan->type != IIO_TEMP)
return -EINVAL;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = at91_adc_read_temp(indio_dev, chan, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
@@ -1967,28 +1965,26 @@ static int at91_adc_write_raw(struct iio_dev *indio_dev,
if (val == st->oversampling_ratio)
return 0;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
mutex_lock(&st->lock);
/* update ratio */
ret = at91_adc_config_emr(st, val, 0);
mutex_unlock(&st->lock);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
case IIO_CHAN_INFO_SAMP_FREQ:
if (val < st->soc_info.min_sample_rate ||
val > st->soc_info.max_sample_rate)
return -EINVAL;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
mutex_lock(&st->lock);
at91_adc_setup_samp_freq(indio_dev, val,
st->soc_info.startup_time, 0);
mutex_unlock(&st->lock);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return 0;
default:
return -EINVAL;
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 23/29] iio: adc: max1027: Move claim of direct mode up one level and use guard()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (21 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 22/29] iio: adc: at91-sama5d2: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-17 15:38 ` Miquel Raynal
2025-02-22 13:04 ` Jonathan Cameron
2025-02-17 14:16 ` [PATCH 24/29] iio: adc: max1027: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
` (6 subsequent siblings)
29 siblings, 2 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Move iio_device_claim_direct_mode() into the read_raw() callback
and use guard() to release a mutex. This enables simpler error
handling via direct returns.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
---
drivers/iio/adc/max1027.c | 38 +++++++++++++-------------------------
1 file changed, 13 insertions(+), 25 deletions(-)
diff --git a/drivers/iio/adc/max1027.c b/drivers/iio/adc/max1027.c
index f5ba4a1b5a7d..e6a47abc862f 100644
--- a/drivers/iio/adc/max1027.c
+++ b/drivers/iio/adc/max1027.c
@@ -336,10 +336,6 @@ static int max1027_read_single_value(struct iio_dev *indio_dev,
int ret;
struct max1027_state *st = iio_priv(indio_dev);
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
-
/* Configure conversion register with the requested chan */
st->reg = MAX1027_CONV_REG | MAX1027_CHAN(chan->channel) |
MAX1027_NOSCAN;
@@ -349,7 +345,7 @@ static int max1027_read_single_value(struct iio_dev *indio_dev,
if (ret < 0) {
dev_err(&indio_dev->dev,
"Failed to configure conversion register\n");
- goto release;
+ return ret;
}
/*
@@ -359,14 +355,10 @@ static int max1027_read_single_value(struct iio_dev *indio_dev,
*/
ret = max1027_wait_eoc(indio_dev);
if (ret)
- goto release;
+ return ret;
/* Read result */
ret = spi_read(st->spi, st->buffer, (chan->type == IIO_TEMP) ? 4 : 2);
-
-release:
- iio_device_release_direct_mode(indio_dev);
-
if (ret < 0)
return ret;
@@ -382,37 +374,33 @@ static int max1027_read_raw(struct iio_dev *indio_dev,
int ret = 0;
struct max1027_state *st = iio_priv(indio_dev);
- mutex_lock(&st->lock);
+ guard(mutex)(&st->lock);
switch (mask) {
case IIO_CHAN_INFO_RAW:
+ ret = iio_device_claim_direct_mode(indio_dev);
+ if (ret)
+ return ret
+
ret = max1027_read_single_value(indio_dev, chan, val);
- break;
+ iio_device_release_direct_mode(indio_dev);
+ return ret;
case IIO_CHAN_INFO_SCALE:
switch (chan->type) {
case IIO_TEMP:
*val = 1;
*val2 = 8;
- ret = IIO_VAL_FRACTIONAL;
- break;
+ return IIO_VAL_FRACTIONAL;
case IIO_VOLTAGE:
*val = 2500;
*val2 = chan->scan_type.realbits;
- ret = IIO_VAL_FRACTIONAL_LOG2;
- break;
+ return IIO_VAL_FRACTIONAL_LOG2;
default:
- ret = -EINVAL;
- break;
+ return -EINVAL;
}
- break;
default:
- ret = -EINVAL;
- break;
+ return -EINVAL;
}
-
- mutex_unlock(&st->lock);
-
- return ret;
}
static int max1027_debugfs_reg_access(struct iio_dev *indio_dev,
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 24/29] iio: adc: max1027: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (22 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 23/29] iio: adc: max1027: Move claim of direct mode up one level and use guard() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-17 15:40 ` Miquel Raynal
2025-02-17 14:16 ` [PATCH 25/29] iio: adc: max11410: Factor out writing of sampling frequency to simplify errro paths Jonathan Cameron
` (5 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
---
drivers/iio/adc/max1027.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/adc/max1027.c b/drivers/iio/adc/max1027.c
index e6a47abc862f..7e736e77d8bb 100644
--- a/drivers/iio/adc/max1027.c
+++ b/drivers/iio/adc/max1027.c
@@ -378,12 +378,11 @@ static int max1027_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = max1027_read_single_value(indio_dev, chan, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
case IIO_CHAN_INFO_SCALE:
switch (chan->type) {
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 25/29] iio: adc: max11410: Factor out writing of sampling frequency to simplify errro paths.
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (23 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 24/29] iio: adc: max1027: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 11:03 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 26/29] iio: adc: max11410: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
` (4 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Introduce __max11410_write_samp_freq() helper and use guard() to avoid
need for manual unlock of the mutex. This allows direct returns and
simplifies the resulting error handling.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
drivers/iio/adc/max11410.c | 51 ++++++++++++++++++++------------------
1 file changed, 27 insertions(+), 24 deletions(-)
diff --git a/drivers/iio/adc/max11410.c b/drivers/iio/adc/max11410.c
index 76abafd47404..6e06c62715a8 100644
--- a/drivers/iio/adc/max11410.c
+++ b/drivers/iio/adc/max11410.c
@@ -507,12 +507,37 @@ static int max11410_read_raw(struct iio_dev *indio_dev,
return -EINVAL;
}
+static int __max11410_write_samp_freq(struct max11410_state *st,
+ int val, int val2)
+{
+ int ret, i, reg_val, filter;
+
+ guard(mutex)(&st->lock);
+
+ ret = regmap_read(st->regmap, MAX11410_REG_FILTER, ®_val);
+ if (ret)
+ return ret;
+
+ filter = FIELD_GET(MAX11410_FILTER_LINEF_MASK, reg_val);
+
+ for (i = 0; i < max11410_sampling_len[filter]; ++i) {
+ if (val == max11410_sampling_rates[filter][i][0] &&
+ val2 == max11410_sampling_rates[filter][i][1])
+ break;
+ }
+ if (i == max11410_sampling_len[filter])
+ return -EINVAL;
+
+ return regmap_write_bits(st->regmap, MAX11410_REG_FILTER,
+ MAX11410_FILTER_RATE_MASK, i);
+}
+
static int max11410_write_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
int val, int val2, long mask)
{
struct max11410_state *st = iio_priv(indio_dev);
- int i, ret, reg_val, filter, gain;
+ int ret, gain;
u32 *scale_avail;
switch (mask) {
@@ -544,29 +569,7 @@ static int max11410_write_raw(struct iio_dev *indio_dev,
if (ret)
return ret;
- mutex_lock(&st->lock);
-
- ret = regmap_read(st->regmap, MAX11410_REG_FILTER, ®_val);
- if (ret)
- goto out;
-
- filter = FIELD_GET(MAX11410_FILTER_LINEF_MASK, reg_val);
-
- for (i = 0; i < max11410_sampling_len[filter]; ++i) {
- if (val == max11410_sampling_rates[filter][i][0] &&
- val2 == max11410_sampling_rates[filter][i][1])
- break;
- }
- if (i == max11410_sampling_len[filter]) {
- ret = -EINVAL;
- goto out;
- }
-
- ret = regmap_write_bits(st->regmap, MAX11410_REG_FILTER,
- MAX11410_FILTER_RATE_MASK, i);
-
-out:
- mutex_unlock(&st->lock);
+ ret = __max11410_write_samp_freq(st, val, val2);
iio_device_release_direct_mode(indio_dev);
return ret;
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 26/29] iio: adc: max11410: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (24 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 25/29] iio: adc: max11410: Factor out writing of sampling frequency to simplify errro paths Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 11:04 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 27/29] iio: adc: mxs-lradc: " Jonathan Cameron
` (3 subsequent siblings)
29 siblings, 1 reply; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
drivers/iio/adc/max11410.c | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/drivers/iio/adc/max11410.c b/drivers/iio/adc/max11410.c
index 6e06c62715a8..437d9f24b5a1 100644
--- a/drivers/iio/adc/max11410.c
+++ b/drivers/iio/adc/max11410.c
@@ -471,9 +471,8 @@ static int max11410_read_raw(struct iio_dev *indio_dev,
return IIO_VAL_INT;
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
mutex_lock(&state->lock);
@@ -481,7 +480,7 @@ static int max11410_read_raw(struct iio_dev *indio_dev,
mutex_unlock(&state->lock);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret)
return ret;
@@ -550,9 +549,8 @@ static int max11410_write_raw(struct iio_dev *indio_dev,
if (val != 0 || val2 == 0)
return -EINVAL;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
/* Convert from INT_PLUS_MICRO to FRACTIONAL_LOG2 */
val2 = val2 * DIV_ROUND_CLOSEST(BIT(24), 1000000);
@@ -561,16 +559,15 @@ static int max11410_write_raw(struct iio_dev *indio_dev,
st->channels[chan->address].gain = clamp_val(gain, 0, 7);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return 0;
case IIO_CHAN_INFO_SAMP_FREQ:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = __max11410_write_samp_freq(st, val, val2);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
default:
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 27/29] iio: adc: mxs-lradc: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (25 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 26/29] iio: adc: max11410: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-17 14:16 ` [PATCH 28/29] iio: adc: rcar: " Jonathan Cameron
` (2 subsequent siblings)
29 siblings, 0 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
drivers/iio/adc/mxs-lradc-adc.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/iio/adc/mxs-lradc-adc.c b/drivers/iio/adc/mxs-lradc-adc.c
index 152cbe265e1a..8f1e6acea53b 100644
--- a/drivers/iio/adc/mxs-lradc-adc.c
+++ b/drivers/iio/adc/mxs-lradc-adc.c
@@ -141,9 +141,8 @@ static int mxs_lradc_adc_read_single(struct iio_dev *iio_dev, int chan,
* the same time, yet the code becomes horribly complicated. Therefore I
* applied KISS principle here.
*/
- ret = iio_device_claim_direct_mode(iio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(iio_dev))
+ return -EBUSY;
reinit_completion(&adc->completion);
@@ -192,7 +191,7 @@ static int mxs_lradc_adc_read_single(struct iio_dev *iio_dev, int chan,
writel(LRADC_CTRL1_LRADC_IRQ_EN(0),
adc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
- iio_device_release_direct_mode(iio_dev);
+ iio_device_release_direct(iio_dev);
return ret;
}
@@ -275,9 +274,8 @@ static int mxs_lradc_adc_write_raw(struct iio_dev *iio_dev,
adc->scale_avail[chan->channel];
int ret;
- ret = iio_device_claim_direct_mode(iio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(iio_dev))
+ return -EBUSY;
switch (m) {
case IIO_CHAN_INFO_SCALE:
@@ -300,7 +298,7 @@ static int mxs_lradc_adc_write_raw(struct iio_dev *iio_dev,
break;
}
- iio_device_release_direct_mode(iio_dev);
+ iio_device_release_direct(iio_dev);
return ret;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 28/29] iio: adc: rcar: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (26 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 27/29] iio: adc: mxs-lradc: " Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-17 14:16 ` [PATCH 29/29] iio: adc: " Jonathan Cameron
2025-02-22 13:09 ` [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
29 siblings, 0 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Marek Vasut <marek.vasut+renesas@gmail.com>
---
drivers/iio/adc/rcar-gyroadc.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/iio/adc/rcar-gyroadc.c b/drivers/iio/adc/rcar-gyroadc.c
index 11170b5852d1..221c075da198 100644
--- a/drivers/iio/adc/rcar-gyroadc.c
+++ b/drivers/iio/adc/rcar-gyroadc.c
@@ -199,13 +199,12 @@ static int rcar_gyroadc_read_raw(struct iio_dev *indio_dev,
if (!consumer)
return -EINVAL;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = rcar_gyroadc_set_power(priv, true);
if (ret < 0) {
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
@@ -213,7 +212,7 @@ static int rcar_gyroadc_read_raw(struct iio_dev *indio_dev,
*val &= BIT(priv->sample_width) - 1;
ret = rcar_gyroadc_set_power(priv, false);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [PATCH 29/29] iio: adc: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (27 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 28/29] iio: adc: rcar: " Jonathan Cameron
@ 2025-02-17 14:16 ` Jonathan Cameron
2025-02-19 11:07 ` Nuno Sá
2025-02-20 12:47 ` Mike Looijmans
2025-02-22 13:09 ` [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
29 siblings, 2 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-17 14:16 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Single patch for all the relatively simple cases.
These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Olivier Moysan <olivier.moysan@foss.st.com>
Cc: Mike Looijmans <mike.looijmans@topic.nl>
Cc: Phil Reid <preid@electromag.com.au>
---
drivers/iio/adc/ad7173.c | 9 +++---
drivers/iio/adc/ad7266.c | 7 ++---
drivers/iio/adc/ad7298.c | 7 ++---
drivers/iio/adc/ad7380.c | 56 ++++++++++++++-------------------
drivers/iio/adc/ad7476.c | 7 ++---
drivers/iio/adc/ad7887.c | 7 ++---
drivers/iio/adc/ad7923.c | 7 ++---
drivers/iio/adc/ad7944.c | 7 ++---
drivers/iio/adc/dln2-adc.c | 7 ++---
drivers/iio/adc/stm32-adc.c | 7 ++---
drivers/iio/adc/ti-adc084s021.c | 9 +++---
drivers/iio/adc/ti-adc108s102.c | 7 ++---
drivers/iio/adc/ti-ads1298.c | 7 ++---
drivers/iio/adc/ti-ads131e08.c | 14 ++++-----
drivers/iio/adc/ti-tlc4541.c | 7 ++---
15 files changed, 71 insertions(+), 94 deletions(-)
diff --git a/drivers/iio/adc/ad7173.c b/drivers/iio/adc/ad7173.c
index 54f9cc5a89f5..ca2b41b16cc9 100644
--- a/drivers/iio/adc/ad7173.c
+++ b/drivers/iio/adc/ad7173.c
@@ -1157,11 +1157,10 @@ static int ad7173_write_raw(struct iio_dev *indio_dev,
struct ad7173_state *st = iio_priv(indio_dev);
struct ad7173_channel_config *cfg;
unsigned int freq, i;
- int ret;
+ int ret = 0;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
switch (info) {
/*
@@ -1195,7 +1194,7 @@ static int ad7173_write_raw(struct iio_dev *indio_dev,
break;
}
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
diff --git a/drivers/iio/adc/ad7266.c b/drivers/iio/adc/ad7266.c
index 858c8be2ff1a..18559757f908 100644
--- a/drivers/iio/adc/ad7266.c
+++ b/drivers/iio/adc/ad7266.c
@@ -153,11 +153,10 @@ static int ad7266_read_raw(struct iio_dev *indio_dev,
switch (m) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad7266_read_single(st, val, chan->address);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
diff --git a/drivers/iio/adc/ad7298.c b/drivers/iio/adc/ad7298.c
index b35bd4d9ef81..28b88092b4aa 100644
--- a/drivers/iio/adc/ad7298.c
+++ b/drivers/iio/adc/ad7298.c
@@ -232,16 +232,15 @@ static int ad7298_read_raw(struct iio_dev *indio_dev,
switch (m) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
if (chan->address == AD7298_CH_TEMP)
ret = ad7298_scan_temp(st, val);
else
ret = ad7298_scan_direct(st, chan->address);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
diff --git a/drivers/iio/adc/ad7380.c b/drivers/iio/adc/ad7380.c
index a18dcd664c1b..f232ad1a4963 100644
--- a/drivers/iio/adc/ad7380.c
+++ b/drivers/iio/adc/ad7380.c
@@ -716,16 +716,15 @@ static int ad7380_debugfs_reg_access(struct iio_dev *indio_dev, u32 reg,
struct ad7380_state *st = iio_priv(indio_dev);
int ret;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
if (readval)
ret = regmap_read(st->regmap, reg, readval);
else
ret = regmap_write(st->regmap, reg, writeval);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
@@ -1018,14 +1017,13 @@ static int ad7380_read_raw(struct iio_dev *indio_dev,
switch (info) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad7380_read_direct(st, chan->scan_index,
scan_type, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
case IIO_CHAN_INFO_SCALE:
@@ -1056,13 +1054,12 @@ static int ad7380_read_raw(struct iio_dev *indio_dev,
return IIO_VAL_INT;
case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad7380_get_osr(st, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret)
return ret;
@@ -1155,13 +1152,12 @@ static int ad7380_write_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad7380_set_oversampling_ratio(st, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
default:
@@ -1186,13 +1182,12 @@ static int ad7380_read_event_config(struct iio_dev *indio_dev,
struct ad7380_state *st = iio_priv(indio_dev);
int tmp, ret;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = regmap_read(st->regmap, AD7380_REG_ADDR_CONFIG1, &tmp);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret)
return ret;
@@ -1209,16 +1204,15 @@ static int ad7380_write_event_config(struct iio_dev *indio_dev,
struct ad7380_state *st = iio_priv(indio_dev);
int ret;
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = regmap_update_bits(st->regmap,
AD7380_REG_ADDR_CONFIG1,
AD7380_CONFIG1_ALERTEN,
FIELD_PREP(AD7380_CONFIG1_ALERTEN, state));
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
@@ -1265,13 +1259,12 @@ static int ad7380_read_event_value(struct iio_dev *indio_dev,
switch (info) {
case IIO_EV_INFO_VALUE:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad7380_get_alert_th(st, dir, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
default:
return -EINVAL;
@@ -1332,13 +1325,12 @@ static int ad7380_write_event_value(struct iio_dev *indio_dev,
switch (info) {
case IIO_EV_INFO_VALUE:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad7380_set_alert_th(indio_dev, chan, dir, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
default:
return -EINVAL;
diff --git a/drivers/iio/adc/ad7476.c b/drivers/iio/adc/ad7476.c
index aeb8e383fe71..37b0515cf4fc 100644
--- a/drivers/iio/adc/ad7476.c
+++ b/drivers/iio/adc/ad7476.c
@@ -138,11 +138,10 @@ static int ad7476_read_raw(struct iio_dev *indio_dev,
switch (m) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad7476_scan_direct(st);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
diff --git a/drivers/iio/adc/ad7887.c b/drivers/iio/adc/ad7887.c
index 69add1dc4b53..87ff95643794 100644
--- a/drivers/iio/adc/ad7887.c
+++ b/drivers/iio/adc/ad7887.c
@@ -152,11 +152,10 @@ static int ad7887_read_raw(struct iio_dev *indio_dev,
switch (m) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad7887_scan_direct(st, chan->address);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
diff --git a/drivers/iio/adc/ad7923.c b/drivers/iio/adc/ad7923.c
index acc44cb34f82..87945efb940b 100644
--- a/drivers/iio/adc/ad7923.c
+++ b/drivers/iio/adc/ad7923.c
@@ -260,11 +260,10 @@ static int ad7923_read_raw(struct iio_dev *indio_dev,
switch (m) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad7923_scan_direct(st, chan->address);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
diff --git a/drivers/iio/adc/ad7944.c b/drivers/iio/adc/ad7944.c
index 9a7825ea5087..2f949fe55873 100644
--- a/drivers/iio/adc/ad7944.c
+++ b/drivers/iio/adc/ad7944.c
@@ -407,12 +407,11 @@ static int ad7944_read_raw(struct iio_dev *indio_dev,
switch (info) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ad7944_single_conversion(adc, chan, val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
case IIO_CHAN_INFO_SCALE:
diff --git a/drivers/iio/adc/dln2-adc.c b/drivers/iio/adc/dln2-adc.c
index 221a5fdc1eaa..b9029fa13b32 100644
--- a/drivers/iio/adc/dln2-adc.c
+++ b/drivers/iio/adc/dln2-adc.c
@@ -314,15 +314,14 @@ static int dln2_adc_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret < 0)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;;
mutex_lock(&dln2->mutex);
ret = dln2_adc_read(dln2, chan->channel);
mutex_unlock(&dln2->mutex);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
diff --git a/drivers/iio/adc/stm32-adc.c b/drivers/iio/adc/stm32-adc.c
index 9d3b23efcc06..5dbf5f136768 100644
--- a/drivers/iio/adc/stm32-adc.c
+++ b/drivers/iio/adc/stm32-adc.c
@@ -1471,9 +1471,8 @@ static int stm32_adc_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
case IIO_CHAN_INFO_PROCESSED:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
if (chan->type == IIO_VOLTAGE)
ret = stm32_adc_single_conv(indio_dev, chan, val);
else
@@ -1482,7 +1481,7 @@ static int stm32_adc_read_raw(struct iio_dev *indio_dev,
if (mask == IIO_CHAN_INFO_PROCESSED)
*val = STM32_ADC_VREFINT_VOLTAGE * adc->vrefint.vrefint_cal / *val;
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
case IIO_CHAN_INFO_SCALE:
diff --git a/drivers/iio/adc/ti-adc084s021.c b/drivers/iio/adc/ti-adc084s021.c
index da16876c32ae..9c845ee01697 100644
--- a/drivers/iio/adc/ti-adc084s021.c
+++ b/drivers/iio/adc/ti-adc084s021.c
@@ -96,19 +96,18 @@ static int adc084s021_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret < 0)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = regulator_enable(adc->reg);
if (ret) {
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
}
adc->tx_buf[0] = channel->channel << 3;
ret = adc084s021_adc_conversion(adc, &be_val);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
regulator_disable(adc->reg);
if (ret < 0)
return ret;
diff --git a/drivers/iio/adc/ti-adc108s102.c b/drivers/iio/adc/ti-adc108s102.c
index 9758ac801310..7d615e2bbf39 100644
--- a/drivers/iio/adc/ti-adc108s102.c
+++ b/drivers/iio/adc/ti-adc108s102.c
@@ -181,13 +181,12 @@ static int adc108s102_read_raw(struct iio_dev *indio_dev,
switch (m) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = adc108s102_scan_direct(st, chan->address);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
diff --git a/drivers/iio/adc/ti-ads1298.c b/drivers/iio/adc/ti-ads1298.c
index 03f762415fa5..ae30b47e4514 100644
--- a/drivers/iio/adc/ti-ads1298.c
+++ b/drivers/iio/adc/ti-ads1298.c
@@ -319,13 +319,12 @@ static int ads1298_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ads1298_read_one(priv, chan->scan_index);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret)
return ret;
diff --git a/drivers/iio/adc/ti-ads131e08.c b/drivers/iio/adc/ti-ads131e08.c
index 91a79ebc4bde..c6096b64664e 100644
--- a/drivers/iio/adc/ti-ads131e08.c
+++ b/drivers/iio/adc/ti-ads131e08.c
@@ -505,12 +505,11 @@ static int ads131e08_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ads131e08_read_direct(indio_dev, channel, value);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret)
return ret;
@@ -551,12 +550,11 @@ static int ads131e08_write_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_SAMP_FREQ:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = ads131e08_set_data_rate(st, value);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
return ret;
default:
diff --git a/drivers/iio/adc/ti-tlc4541.c b/drivers/iio/adc/ti-tlc4541.c
index 08de997584fd..5a138be983ed 100644
--- a/drivers/iio/adc/ti-tlc4541.c
+++ b/drivers/iio/adc/ti-tlc4541.c
@@ -131,11 +131,10 @@ static int tlc4541_read_raw(struct iio_dev *indio_dev,
switch (m) {
case IIO_CHAN_INFO_RAW:
- ret = iio_device_claim_direct_mode(indio_dev);
- if (ret)
- return ret;
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
ret = spi_sync(st->spi, &st->scan_single_msg);
- iio_device_release_direct_mode(indio_dev);
+ iio_device_release_direct(indio_dev);
if (ret < 0)
return ret;
*val = be16_to_cpu(st->rx_buf[0]);
--
2.48.1
^ permalink raw reply related [flat|nested] 55+ messages in thread
* Re: [PATCH 23/29] iio: adc: max1027: Move claim of direct mode up one level and use guard()
2025-02-17 14:16 ` [PATCH 23/29] iio: adc: max1027: Move claim of direct mode up one level and use guard() Jonathan Cameron
@ 2025-02-17 15:38 ` Miquel Raynal
2025-02-22 13:04 ` Jonathan Cameron
1 sibling, 0 replies; 55+ messages in thread
From: Miquel Raynal @ 2025-02-17 15:38 UTC (permalink / raw)
To: Jonathan Cameron
Cc: linux-iio, David Lechner, Nuno Sá, Olivier Moysan,
Mike Looijmans, Phil Reid, Marek Vasut, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
Hello Jonathan,
On 17/02/2025 at 14:16:23 GMT, Jonathan Cameron <jic23@kernel.org> wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> Move iio_device_claim_direct_mode() into the read_raw() callback
> and use guard() to release a mutex. This enables simpler error
> handling via direct returns.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Thanks,
Miquèl
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 24/29] iio: adc: max1027: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 24/29] iio: adc: max1027: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-17 15:40 ` Miquel Raynal
2025-02-22 13:06 ` Jonathan Cameron
0 siblings, 1 reply; 55+ messages in thread
From: Miquel Raynal @ 2025-02-17 15:40 UTC (permalink / raw)
To: Jonathan Cameron
Cc: linux-iio, David Lechner, Nuno Sá, Olivier Moysan,
Mike Looijmans, Phil Reid, Marek Vasut, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
Hi Jonathan,
On 17/02/2025 at 14:16:24 GMT, Jonathan Cameron <jic23@kernel.org> wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
Ok, I didn't know.
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Thanks,
Miquèl
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 07/29] iio: adc: stm32-dfsdm: Factor out core of reading INFO_RAW
2025-02-17 14:16 ` [PATCH 07/29] iio: adc: stm32-dfsdm: Factor out core of reading INFO_RAW Jonathan Cameron
@ 2025-02-18 15:32 ` Olivier MOYSAN
0 siblings, 0 replies; 55+ messages in thread
From: Olivier MOYSAN @ 2025-02-18 15:32 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Nuno Sá, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
Hi Jonathan,
Reviewed-by: Olivier Moysan <olivier.moysan@foss.st.com>
Thanks
On 2/17/25 15:16, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> This allows the claim on direct mode to be release in one place
> rather than a lot of error paths, simplifying code.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Olivier Moysan <olivier.moysan@foss.st.com>
> ---
> drivers/iio/adc/stm32-dfsdm-adc.c | 59 +++++++++++++++++++------------
> 1 file changed, 36 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c
> index fe11b0d8eab3..1cf2594d6872 100644
> --- a/drivers/iio/adc/stm32-dfsdm-adc.c
> +++ b/drivers/iio/adc/stm32-dfsdm-adc.c
> @@ -1306,6 +1306,38 @@ static int stm32_dfsdm_write_raw(struct iio_dev *indio_dev,
> return -EINVAL;
> }
>
> +static int __stm32_dfsdm_read_info_raw(struct iio_dev *indio_dev,
> + struct iio_chan_spec const *chan,
> + int *val)
> +{
> + struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
> + int ret = 0;
> +
> + if (adc->hwc)
> + ret = iio_hw_consumer_enable(adc->hwc);
> + if (adc->backend)
> + ret = iio_backend_enable(adc->backend[chan->scan_index]);
> + if (ret < 0) {
> + dev_err(&indio_dev->dev,
> + "%s: IIO enable failed (channel %d)\n",
> + __func__, chan->channel);
> + return ret;
> + }
> + ret = stm32_dfsdm_single_conv(indio_dev, chan, val);
> + if (adc->hwc)
> + iio_hw_consumer_disable(adc->hwc);
> + if (adc->backend)
> + iio_backend_disable(adc->backend[chan->scan_index]);
> + if (ret < 0) {
> + dev_err(&indio_dev->dev,
> + "%s: Conversion failed (channel %d)\n",
> + __func__, chan->channel);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> static int stm32_dfsdm_read_raw(struct iio_dev *indio_dev,
> struct iio_chan_spec const *chan, int *val,
> int *val2, long mask)
> @@ -1326,30 +1358,11 @@ static int stm32_dfsdm_read_raw(struct iio_dev *indio_dev,
> ret = iio_device_claim_direct_mode(indio_dev);
> if (ret)
> return ret;
> - if (adc->hwc)
> - ret = iio_hw_consumer_enable(adc->hwc);
> - if (adc->backend)
> - ret = iio_backend_enable(adc->backend[idx]);
> - if (ret < 0) {
> - dev_err(&indio_dev->dev,
> - "%s: IIO enable failed (channel %d)\n",
> - __func__, chan->channel);
> - iio_device_release_direct_mode(indio_dev);
> - return ret;
> - }
> - ret = stm32_dfsdm_single_conv(indio_dev, chan, val);
> - if (adc->hwc)
> - iio_hw_consumer_disable(adc->hwc);
> - if (adc->backend)
> - iio_backend_disable(adc->backend[idx]);
> - if (ret < 0) {
> - dev_err(&indio_dev->dev,
> - "%s: Conversion failed (channel %d)\n",
> - __func__, chan->channel);
> - iio_device_release_direct_mode(indio_dev);
> - return ret;
> - }
> +
> + ret = __stm32_dfsdm_read_info_raw(indio_dev, chan, val);
> iio_device_release_direct_mode(indio_dev);
> + if (ret)
> + return ret;
> return IIO_VAL_INT;
>
> case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 08/29] iio: adc: stm32-dfsdm: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 08/29] iio: adc: stm32-dfsdm: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-18 15:34 ` Olivier MOYSAN
0 siblings, 0 replies; 55+ messages in thread
From: Olivier MOYSAN @ 2025-02-18 15:34 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Nuno Sá, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
Hi Jonathan,
Reviewed-by: Olivier Moysan <olivier.moysan@foss.st.com>
Thanks
On 2/17/25 15:16, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Olivier Moysan <olivier.moysan@foss.st.com>
> ---
> drivers/iio/adc/stm32-dfsdm-adc.c | 21 +++++++++------------
> 1 file changed, 9 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c
> index 1cf2594d6872..726ddafc9f6d 100644
> --- a/drivers/iio/adc/stm32-dfsdm-adc.c
> +++ b/drivers/iio/adc/stm32-dfsdm-adc.c
> @@ -1275,9 +1275,8 @@ static int stm32_dfsdm_write_raw(struct iio_dev *indio_dev,
>
> switch (mask) {
> case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = stm32_dfsdm_compute_all_osrs(indio_dev, val);
> if (!ret) {
> @@ -1287,19 +1286,18 @@ static int stm32_dfsdm_write_raw(struct iio_dev *indio_dev,
> adc->oversamp = val;
> adc->sample_freq = spi_freq / val;
> }
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
>
> case IIO_CHAN_INFO_SAMP_FREQ:
> if (!val)
> return -EINVAL;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = dfsdm_adc_set_samp_freq(indio_dev, val, spi_freq);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
> }
>
> @@ -1355,12 +1353,11 @@ static int stm32_dfsdm_read_raw(struct iio_dev *indio_dev,
>
> switch (mask) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = __stm32_dfsdm_read_info_raw(indio_dev, chan, val);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> if (ret)
> return ret;
> return IIO_VAL_INT;
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 09/29] iio: adc: ad4030: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 09/29] iio: adc: ad4030: " Jonathan Cameron
@ 2025-02-19 10:54 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 10:54 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad4030.c | 21 +++++++++------------
> 1 file changed, 9 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/iio/adc/ad4030.c b/drivers/iio/adc/ad4030.c
> index ab5497c8ea1e..209cfc2e1785 100644
> --- a/drivers/iio/adc/ad4030.c
> +++ b/drivers/iio/adc/ad4030.c
> @@ -784,13 +784,12 @@ static int ad4030_read_raw(struct iio_dev *indio_dev,
> if (info == IIO_CHAN_INFO_SCALE)
> return ad4030_get_chan_scale(indio_dev, chan, val, val2);
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ad4030_read_raw_dispatch(indio_dev, chan, val, val2, info);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret;
> }
> @@ -822,13 +821,12 @@ static int ad4030_write_raw(struct iio_dev *indio_dev,
> {
> int ret;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ad4030_write_raw_dispatch(indio_dev, chan, val, val2, info);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret;
> }
> @@ -839,16 +837,15 @@ static int ad4030_reg_access(struct iio_dev *indio_dev,
> unsigned int reg,
> const struct ad4030_state *st = iio_priv(indio_dev);
> int ret;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> if (readval)
> ret = regmap_read(st->regmap, reg, readval);
> else
> ret = regmap_write(st->regmap, reg, writeval);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret;
> }
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 10/29] iio: adc: ad7192: Factor out core of ad7192_write_raw() to simplify error handling.
2025-02-17 14:16 ` [PATCH 10/29] iio: adc: ad7192: Factor out core of ad7192_write_raw() to simplify error handling Jonathan Cameron
@ 2025-02-19 10:54 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 10:54 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> Factor out everything under the lock, use guard() for the mutex to
> avoid need to manually unlock, and switch sense of matching checks
> in loops to reduce indent.
>
> There are some functional changes in here as well as the code
> no longer updates the filter_freq_available if no change has
> been made to the oversampling ratio.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Alisa-Dariana Roman <alisa.roman@analog.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad7192.c | 111 ++++++++++++++++++++-------------------
> 1 file changed, 57 insertions(+), 54 deletions(-)
>
> diff --git a/drivers/iio/adc/ad7192.c b/drivers/iio/adc/ad7192.c
> index e96a5ae92375..785429900da8 100644
> --- a/drivers/iio/adc/ad7192.c
> +++ b/drivers/iio/adc/ad7192.c
> @@ -7,6 +7,7 @@
>
> #include <linux/interrupt.h>
> #include <linux/bitfield.h>
> +#include <linux/cleanup.h>
> #include <linux/clk.h>
> #include <linux/clk-provider.h>
> #include <linux/device.h>
> @@ -945,80 +946,82 @@ static int ad7192_read_raw(struct iio_dev *indio_dev,
> return -EINVAL;
> }
>
> -static int ad7192_write_raw(struct iio_dev *indio_dev,
> - struct iio_chan_spec const *chan,
> - int val,
> - int val2,
> - long mask)
> +static int __ad7192_write_raw(struct iio_dev *indio_dev,
> + struct iio_chan_spec const *chan,
> + int val,
> + int val2,
> + long mask)
> {
> struct ad7192_state *st = iio_priv(indio_dev);
> - int ret, i, div;
> + int i, div;
> unsigned int tmp;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> -
> - mutex_lock(&st->lock);
> + guard(mutex)(&st->lock);
>
> switch (mask) {
> case IIO_CHAN_INFO_SCALE:
> - ret = -EINVAL;
> - for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++)
> - if (val2 == st->scale_avail[i][1]) {
> - ret = 0;
> - tmp = st->conf;
> - st->conf &= ~AD7192_CONF_GAIN_MASK;
> - st->conf |= FIELD_PREP(AD7192_CONF_GAIN_MASK,
> i);
> - if (tmp == st->conf)
> - break;
> - ad_sd_write_reg(&st->sd, AD7192_REG_CONF,
> - 3, st->conf);
> - ad7192_calibrate_all(st);
> - break;
> - }
> - break;
> - case IIO_CHAN_INFO_SAMP_FREQ:
> - if (!val) {
> - ret = -EINVAL;
> - break;
> + for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++) {
> + if (val2 != st->scale_avail[i][1])
> + continue;
> +
> + tmp = st->conf;
> + st->conf &= ~AD7192_CONF_GAIN_MASK;
> + st->conf |= FIELD_PREP(AD7192_CONF_GAIN_MASK, i);
> + if (tmp == st->conf)
> + return 0;
> + ad_sd_write_reg(&st->sd, AD7192_REG_CONF, 3, st-
> >conf);
> + ad7192_calibrate_all(st);
> + return 0;
> }
> + return -EINVAL;
> + case IIO_CHAN_INFO_SAMP_FREQ:
> + if (!val)
> + return -EINVAL;
>
> div = st->fclk / (val * ad7192_get_f_order(st) * 1024);
> - if (div < 1 || div > 1023) {
> - ret = -EINVAL;
> - break;
> - }
> + if (div < 1 || div > 1023)
> + return -EINVAL;
>
> st->mode &= ~AD7192_MODE_RATE_MASK;
> st->mode |= FIELD_PREP(AD7192_MODE_RATE_MASK, div);
> ad_sd_write_reg(&st->sd, AD7192_REG_MODE, 3, st->mode);
> ad7192_update_filter_freq_avail(st);
> - break;
> + return 0;
> case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
> - ret = ad7192_set_3db_filter_freq(st, val, val2 / 1000);
> - break;
> + return ad7192_set_3db_filter_freq(st, val, val2 / 1000);
> case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
> - ret = -EINVAL;
> - for (i = 0; i < ARRAY_SIZE(st->oversampling_ratio_avail);
> i++)
> - if (val == st->oversampling_ratio_avail[i]) {
> - ret = 0;
> - tmp = st->mode;
> - st->mode &= ~AD7192_MODE_AVG_MASK;
> - st->mode |= FIELD_PREP(AD7192_MODE_AVG_MASK,
> i);
> - if (tmp == st->mode)
> - break;
> - ad_sd_write_reg(&st->sd, AD7192_REG_MODE,
> - 3, st->mode);
> - break;
> - }
> - ad7192_update_filter_freq_avail(st);
> - break;
> + for (i = 0; i < ARRAY_SIZE(st->oversampling_ratio_avail);
> i++) {
> + if (val != st->oversampling_ratio_avail[i])
> + continue;
> +
> + tmp = st->mode;
> + st->mode &= ~AD7192_MODE_AVG_MASK;
> + st->mode |= FIELD_PREP(AD7192_MODE_AVG_MASK, i);
> + if (tmp == st->mode)
> + return 0;
> + ad_sd_write_reg(&st->sd, AD7192_REG_MODE, 3, st-
> >mode);
> + ad7192_update_filter_freq_avail(st);
> + return 0;
> + }
> + return -EINVAL;
> default:
> - ret = -EINVAL;
> + return -EINVAL;
> }
> +}
> +
> +static int ad7192_write_raw(struct iio_dev *indio_dev,
> + struct iio_chan_spec const *chan,
> + int val,
> + int val2,
> + long mask)
> +{
> + int ret;
> +
> + ret = iio_device_claim_direct_mode(indio_dev);
> + if (ret)
> + return ret;
>
> - mutex_unlock(&st->lock);
> + ret = __ad7192_write_raw(indio_dev, chan, val, val2, mask);
>
> iio_device_release_direct_mode(indio_dev);
>
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 11/29] iio: adc: ad7192: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 11/29] iio: adc: ad7192: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-19 10:55 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 10:55 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Alisa-Dariana Roman <alisa.roman@analog.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad7192.c | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/iio/adc/ad7192.c b/drivers/iio/adc/ad7192.c
> index 785429900da8..f6150b905286 100644
> --- a/drivers/iio/adc/ad7192.c
> +++ b/drivers/iio/adc/ad7192.c
> @@ -694,9 +694,8 @@ static ssize_t ad7192_set(struct device *dev,
> if (ret < 0)
> return ret;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> switch ((u32)this_attr->address) {
> case AD7192_REG_GPOCON:
> @@ -719,7 +718,7 @@ static ssize_t ad7192_set(struct device *dev,
> ret = -EINVAL;
> }
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret ? ret : len;
> }
> @@ -1017,13 +1016,12 @@ static int ad7192_write_raw(struct iio_dev *indio_dev,
> {
> int ret;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = __ad7192_write_raw(indio_dev, chan, val, val2, mask);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret;
> }
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 12/29] iio: adc: ad7768-1: Move setting of val a bit later to avoid unnecessary return value check
2025-02-17 14:16 ` [PATCH 12/29] iio: adc: ad7768-1: Move setting of val a bit later to avoid unnecessary return value check Jonathan Cameron
@ 2025-02-19 10:56 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 10:56 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> The data used is all in local variables so there is no advantage
> in setting *val = ret with the direct mode claim held.
> Move it later to after error check.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad7768-1.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/iio/adc/ad7768-1.c b/drivers/iio/adc/ad7768-1.c
> index 113703fb7245..c2ba357b82d8 100644
> --- a/drivers/iio/adc/ad7768-1.c
> +++ b/drivers/iio/adc/ad7768-1.c
> @@ -370,12 +370,11 @@ static int ad7768_read_raw(struct iio_dev *indio_dev,
> return ret;
>
> ret = ad7768_scan_direct(indio_dev);
> - if (ret >= 0)
> - *val = ret;
>
> iio_device_release_direct_mode(indio_dev);
> if (ret < 0)
> return ret;
> + *val = ret;
>
> return IIO_VAL_INT;
>
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 13/29] iio: adc: ad7768-1: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 13/29] iio: adc: ad7768-1: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-19 10:56 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 10:56 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad7768-1.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iio/adc/ad7768-1.c b/drivers/iio/adc/ad7768-1.c
> index c2ba357b82d8..ea829c51e80b 100644
> --- a/drivers/iio/adc/ad7768-1.c
> +++ b/drivers/iio/adc/ad7768-1.c
> @@ -365,13 +365,12 @@ static int ad7768_read_raw(struct iio_dev *indio_dev,
>
> switch (info) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ad7768_scan_direct(indio_dev);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> if (ret < 0)
> return ret;
> *val = ret;
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 14/29] iio: adc: ad7606: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 14/29] iio: adc: ad7606: " Jonathan Cameron
@ 2025-02-19 10:57 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 10:57 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> This driver got partly converted during removal of the _scoped form.
> However some more cases got added in parallel.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad7606.c | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c
> index 87908cc51e48..f566248db70a 100644
> --- a/drivers/iio/adc/ad7606.c
> +++ b/drivers/iio/adc/ad7606.c
> @@ -862,11 +862,10 @@ static int ad7606_write_raw(struct iio_dev *indio_dev,
> val = (val * MICRO) + val2;
> i = find_closest(val, scale_avail_uv, cs->num_scales);
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret < 0)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
> ret = st->write_scale(indio_dev, ch, i + cs->reg_offset);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> if (ret < 0)
> return ret;
> cs->range = i;
> @@ -878,11 +877,10 @@ static int ad7606_write_raw(struct iio_dev *indio_dev,
> i = find_closest(val, st->oversampling_avail,
> st->num_os_ratios);
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret < 0)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
> ret = st->write_os(indio_dev, i);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> if (ret < 0)
> return ret;
> st->oversampling = st->oversampling_avail[i];
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 15/29] iio: adc: ad7791: Factor out core of ad7791_write_raw() to simplify error handling
2025-02-17 14:16 ` [PATCH 15/29] iio: adc: ad7791: Factor out core of ad7791_write_raw() to simplify error handling Jonathan Cameron
@ 2025-02-19 10:59 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 10:59 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> Factor out everything under the direct mode claim allowing direct returns
> in error paths.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad7791.c | 30 ++++++++++++++++++------------
> 1 file changed, 18 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/iio/adc/ad7791.c b/drivers/iio/adc/ad7791.c
> index 76118fe22db8..e49d4843f304 100644
> --- a/drivers/iio/adc/ad7791.c
> +++ b/drivers/iio/adc/ad7791.c
> @@ -310,15 +310,11 @@ static int ad7791_read_raw(struct iio_dev *indio_dev,
> return -EINVAL;
> }
>
> -static int ad7791_write_raw(struct iio_dev *indio_dev,
> +static int __ad7791_write_raw(struct iio_dev *indio_dev,
> struct iio_chan_spec const *chan, int val, int val2, long mask)
> {
> struct ad7791_state *st = iio_priv(indio_dev);
> - int ret, i;
> -
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + int i;
>
> switch (mask) {
> case IIO_CHAN_INFO_SAMP_FREQ:
> @@ -328,20 +324,30 @@ static int ad7791_write_raw(struct iio_dev *indio_dev,
> break;
> }
>
> - if (i == ARRAY_SIZE(ad7791_sample_freq_avail)) {
> - ret = -EINVAL;
> - break;
> - }
> + if (i == ARRAY_SIZE(ad7791_sample_freq_avail))
> + return -EINVAL;
>
> st->filter &= ~AD7791_FILTER_RATE_MASK;
> st->filter |= i;
> ad_sd_write_reg(&st->sd, AD7791_REG_FILTER,
> sizeof(st->filter),
> st->filter);
> - break;
> + return 0;
> default:
> - ret = -EINVAL;
> + return -EINVAL;
> }
> +}
> +
> +static int ad7791_write_raw(struct iio_dev *indio_dev,
> + struct iio_chan_spec const *chan, int val, int val2, long mask)
> +{
> + int ret;
> +
> + ret = iio_device_claim_direct_mode(indio_dev);
> + if (ret)
> + return ret;
> +
> + ret = __ad7791_write_raw(indio_dev, chan, val, val2, mask);
>
> iio_device_release_direct_mode(indio_dev);
> return ret;
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 16/29] iio: adc: ad7791: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 16/29] iio: adc: ad7791: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-19 11:00 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 11:00 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad7791.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iio/adc/ad7791.c b/drivers/iio/adc/ad7791.c
> index e49d4843f304..597c2686ffa4 100644
> --- a/drivers/iio/adc/ad7791.c
> +++ b/drivers/iio/adc/ad7791.c
> @@ -343,13 +343,12 @@ static int ad7791_write_raw(struct iio_dev *indio_dev,
> {
> int ret;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = __ad7791_write_raw(indio_dev, chan, val, val2, mask);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
> }
>
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 17/29] iio: adc: ad7793: Factor out core of ad7793_write_raw() to simplify error handling
2025-02-17 14:16 ` [PATCH 17/29] iio: adc: ad7793: Factor out core of ad7793_write_raw() to simplify error handling Jonathan Cameron
@ 2025-02-19 11:00 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 11:00 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> Factor out everything under the direct mode claim allowing direct returns
> in error paths. Switch sense of matching in the loop and use a continue
> to reduce code indent and improve readability.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad7793.c | 79 +++++++++++++++++++++-------------------
> 1 file changed, 42 insertions(+), 37 deletions(-)
>
> diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
> index 1b50d9643a63..861a3e44e5ad 100644
> --- a/drivers/iio/adc/ad7793.c
> +++ b/drivers/iio/adc/ad7793.c
> @@ -462,64 +462,69 @@ static int ad7793_read_raw(struct iio_dev *indio_dev,
> return -EINVAL;
> }
>
> -static int ad7793_write_raw(struct iio_dev *indio_dev,
> - struct iio_chan_spec const *chan,
> - int val,
> - int val2,
> - long mask)
> +static int __ad7793_write_raw(struct iio_dev *indio_dev,
> + struct iio_chan_spec const *chan,
> + int val, int val2, long mask)
> {
> struct ad7793_state *st = iio_priv(indio_dev);
> - int ret, i;
> + int i;
> unsigned int tmp;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> -
> switch (mask) {
> case IIO_CHAN_INFO_SCALE:
> - ret = -EINVAL;
> - for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++)
> - if (val2 == st->scale_avail[i][1]) {
> - ret = 0;
> - tmp = st->conf;
> - st->conf &= ~AD7793_CONF_GAIN(-1);
> - st->conf |= AD7793_CONF_GAIN(i);
> -
> - if (tmp == st->conf)
> - break;
> -
> - ad_sd_write_reg(&st->sd, AD7793_REG_CONF,
> - sizeof(st->conf), st->conf);
> - ad7793_calibrate_all(st);
> - break;
> - }
> - break;
> - case IIO_CHAN_INFO_SAMP_FREQ:
> - if (!val) {
> - ret = -EINVAL;
> - break;
> + for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++) {
> + if (val2 != st->scale_avail[i][1])
> + continue;
> +
> + tmp = st->conf;
> + st->conf &= ~AD7793_CONF_GAIN(-1);
> + st->conf |= AD7793_CONF_GAIN(i);
> +
> + if (tmp == st->conf)
> + return 0;
> +
> + ad_sd_write_reg(&st->sd, AD7793_REG_CONF,
> + sizeof(st->conf), st->conf);
> + ad7793_calibrate_all(st);
> +
> + return 0;
> }
> + return -EINVAL;
> + case IIO_CHAN_INFO_SAMP_FREQ:
> + if (!val)
> + return -EINVAL;
>
> for (i = 0; i < 16; i++)
> if (val == st->chip_info->sample_freq_avail[i])
> break;
>
> - if (i == 16) {
> - ret = -EINVAL;
> - break;
> - }
> + if (i == 16)
> + return -EINVAL;
>
> st->mode &= ~AD7793_MODE_RATE(-1);
> st->mode |= AD7793_MODE_RATE(i);
> ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode),
> st->mode);
> - break;
> + return 0;
> default:
> - ret = -EINVAL;
> + return -EINVAL;
> }
> +}
> +
> +static int ad7793_write_raw(struct iio_dev *indio_dev,
> + struct iio_chan_spec const *chan,
> + int val, int val2, long mask)
> +{
> + int ret;
> +
> + ret = iio_device_claim_direct_mode(indio_dev);
> + if (ret)
> + return ret;
> +
> + ret = __ad7793_write_raw(indio_dev, chan, val, val2, mask);
>
> iio_device_release_direct_mode(indio_dev);
> +
> return ret;
> }
>
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 18/29] iio: adc: ad7793: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 18/29] iio: adc: ad7793: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-19 11:01 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 11:01 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad7793.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
> index 861a3e44e5ad..ccf18ce48e34 100644
> --- a/drivers/iio/adc/ad7793.c
> +++ b/drivers/iio/adc/ad7793.c
> @@ -517,13 +517,12 @@ static int ad7793_write_raw(struct iio_dev *indio_dev,
> {
> int ret;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = __ad7793_write_raw(indio_dev, chan, val, val2, mask);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret;
> }
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 19/29] iio: adc: ad799x: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 19/29] iio: adc: ad799x: " Jonathan Cameron
@ 2025-02-19 11:02 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 11:02 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> ---
> Kept this one out of the 'simple' category as it is worth considering
> factoring out the code when the claim on direct mode is held. I think
> it isn't quite complex enough to make that useful but if others disagree
> I can do so.
> ---
Fine by me:
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad799x.c | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c
> index aa44b4e2542b..993f4651b73a 100644
> --- a/drivers/iio/adc/ad799x.c
> +++ b/drivers/iio/adc/ad799x.c
> @@ -291,13 +291,12 @@ static int ad799x_read_raw(struct iio_dev *indio_dev,
>
> switch (m) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
> mutex_lock(&st->lock);
> ret = ad799x_scan_direct(st, chan->scan_index);
> mutex_unlock(&st->lock);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret < 0)
> return ret;
> @@ -411,9 +410,8 @@ static int ad799x_write_event_config(struct iio_dev
> *indio_dev,
> struct ad799x_state *st = iio_priv(indio_dev);
> int ret;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> mutex_lock(&st->lock);
>
> @@ -429,7 +427,7 @@ static int ad799x_write_event_config(struct iio_dev
> *indio_dev,
>
> ret = ad799x_write_config(st, st->config);
> mutex_unlock(&st->lock);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
> }
>
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 20/29] iio: adc: ad_sigma_delta: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 20/29] iio: adc: ad_sigma_delta: " Jonathan Cameron
@ 2025-02-19 11:03 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 11:03 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> This is a complex function with a lot more than the release of direct
> mode to unwind on error. As such no attempt made to factor out
> the inner code.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad_sigma_delta.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iio/adc/ad_sigma_delta.c
> b/drivers/iio/adc/ad_sigma_delta.c
> index 10e635fc4fa4..5907c35b98e5 100644
> --- a/drivers/iio/adc/ad_sigma_delta.c
> +++ b/drivers/iio/adc/ad_sigma_delta.c
> @@ -386,9 +386,8 @@ int ad_sigma_delta_single_conversion(struct iio_dev
> *indio_dev,
> unsigned int data_reg;
> int ret = 0;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ad_sigma_delta_set_channel(sigma_delta, chan->address);
>
> @@ -431,7 +430,7 @@ int ad_sigma_delta_single_conversion(struct iio_dev
> *indio_dev,
> sigma_delta->keep_cs_asserted = false;
> sigma_delta->bus_locked = false;
> spi_bus_unlock(sigma_delta->spi->controller);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret)
> return ret;
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 25/29] iio: adc: max11410: Factor out writing of sampling frequency to simplify errro paths.
2025-02-17 14:16 ` [PATCH 25/29] iio: adc: max11410: Factor out writing of sampling frequency to simplify errro paths Jonathan Cameron
@ 2025-02-19 11:03 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 11:03 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> Introduce __max11410_write_samp_freq() helper and use guard() to avoid
> need for manual unlock of the mutex. This allows direct returns and
> simplifies the resulting error handling.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/max11410.c | 51 ++++++++++++++++++++------------------
> 1 file changed, 27 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/iio/adc/max11410.c b/drivers/iio/adc/max11410.c
> index 76abafd47404..6e06c62715a8 100644
> --- a/drivers/iio/adc/max11410.c
> +++ b/drivers/iio/adc/max11410.c
> @@ -507,12 +507,37 @@ static int max11410_read_raw(struct iio_dev *indio_dev,
> return -EINVAL;
> }
>
> +static int __max11410_write_samp_freq(struct max11410_state *st,
> + int val, int val2)
> +{
> + int ret, i, reg_val, filter;
> +
> + guard(mutex)(&st->lock);
> +
> + ret = regmap_read(st->regmap, MAX11410_REG_FILTER, ®_val);
> + if (ret)
> + return ret;
> +
> + filter = FIELD_GET(MAX11410_FILTER_LINEF_MASK, reg_val);
> +
> + for (i = 0; i < max11410_sampling_len[filter]; ++i) {
> + if (val == max11410_sampling_rates[filter][i][0] &&
> + val2 == max11410_sampling_rates[filter][i][1])
> + break;
> + }
> + if (i == max11410_sampling_len[filter])
> + return -EINVAL;
> +
> + return regmap_write_bits(st->regmap, MAX11410_REG_FILTER,
> + MAX11410_FILTER_RATE_MASK, i);
> +}
> +
> static int max11410_write_raw(struct iio_dev *indio_dev,
> struct iio_chan_spec const *chan,
> int val, int val2, long mask)
> {
> struct max11410_state *st = iio_priv(indio_dev);
> - int i, ret, reg_val, filter, gain;
> + int ret, gain;
> u32 *scale_avail;
>
> switch (mask) {
> @@ -544,29 +569,7 @@ static int max11410_write_raw(struct iio_dev *indio_dev,
> if (ret)
> return ret;
>
> - mutex_lock(&st->lock);
> -
> - ret = regmap_read(st->regmap, MAX11410_REG_FILTER, ®_val);
> - if (ret)
> - goto out;
> -
> - filter = FIELD_GET(MAX11410_FILTER_LINEF_MASK, reg_val);
> -
> - for (i = 0; i < max11410_sampling_len[filter]; ++i) {
> - if (val == max11410_sampling_rates[filter][i][0] &&
> - val2 == max11410_sampling_rates[filter][i][1])
> - break;
> - }
> - if (i == max11410_sampling_len[filter]) {
> - ret = -EINVAL;
> - goto out;
> - }
> -
> - ret = regmap_write_bits(st->regmap, MAX11410_REG_FILTER,
> - MAX11410_FILTER_RATE_MASK, i);
> -
> -out:
> - mutex_unlock(&st->lock);
> + ret = __max11410_write_samp_freq(st, val, val2);
> iio_device_release_direct_mode(indio_dev);
>
> return ret;
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 26/29] iio: adc: max11410: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 26/29] iio: adc: max11410: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-19 11:04 ` Nuno Sá
0 siblings, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 11:04 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/max11410.c | 21 +++++++++------------
> 1 file changed, 9 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/iio/adc/max11410.c b/drivers/iio/adc/max11410.c
> index 6e06c62715a8..437d9f24b5a1 100644
> --- a/drivers/iio/adc/max11410.c
> +++ b/drivers/iio/adc/max11410.c
> @@ -471,9 +471,8 @@ static int max11410_read_raw(struct iio_dev *indio_dev,
>
> return IIO_VAL_INT;
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> mutex_lock(&state->lock);
>
> @@ -481,7 +480,7 @@ static int max11410_read_raw(struct iio_dev *indio_dev,
>
> mutex_unlock(&state->lock);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret)
> return ret;
> @@ -550,9 +549,8 @@ static int max11410_write_raw(struct iio_dev *indio_dev,
> if (val != 0 || val2 == 0)
> return -EINVAL;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> /* Convert from INT_PLUS_MICRO to FRACTIONAL_LOG2 */
> val2 = val2 * DIV_ROUND_CLOSEST(BIT(24), 1000000);
> @@ -561,16 +559,15 @@ static int max11410_write_raw(struct iio_dev *indio_dev,
>
> st->channels[chan->address].gain = clamp_val(gain, 0, 7);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return 0;
> case IIO_CHAN_INFO_SAMP_FREQ:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = __max11410_write_samp_freq(st, val, val2);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret;
> default:
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 29/29] iio: adc: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 29/29] iio: adc: " Jonathan Cameron
@ 2025-02-19 11:07 ` Nuno Sá
2025-02-20 12:47 ` Mike Looijmans
1 sibling, 0 replies; 55+ messages in thread
From: Nuno Sá @ 2025-02-19 11:07 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Olivier Moysan, Mike Looijmans, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> Single patch for all the relatively simple cases.
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Olivier Moysan <olivier.moysan@foss.st.com>
> Cc: Mike Looijmans <mike.looijmans@topic.nl>
> Cc: Phil Reid <preid@electromag.com.au>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> drivers/iio/adc/ad7173.c | 9 +++---
> drivers/iio/adc/ad7266.c | 7 ++---
> drivers/iio/adc/ad7298.c | 7 ++---
> drivers/iio/adc/ad7380.c | 56 ++++++++++++++-------------------
> drivers/iio/adc/ad7476.c | 7 ++---
> drivers/iio/adc/ad7887.c | 7 ++---
> drivers/iio/adc/ad7923.c | 7 ++---
> drivers/iio/adc/ad7944.c | 7 ++---
> drivers/iio/adc/dln2-adc.c | 7 ++---
> drivers/iio/adc/stm32-adc.c | 7 ++---
> drivers/iio/adc/ti-adc084s021.c | 9 +++---
> drivers/iio/adc/ti-adc108s102.c | 7 ++---
> drivers/iio/adc/ti-ads1298.c | 7 ++---
> drivers/iio/adc/ti-ads131e08.c | 14 ++++-----
> drivers/iio/adc/ti-tlc4541.c | 7 ++---
> 15 files changed, 71 insertions(+), 94 deletions(-)
>
> diff --git a/drivers/iio/adc/ad7173.c b/drivers/iio/adc/ad7173.c
> index 54f9cc5a89f5..ca2b41b16cc9 100644
> --- a/drivers/iio/adc/ad7173.c
> +++ b/drivers/iio/adc/ad7173.c
> @@ -1157,11 +1157,10 @@ static int ad7173_write_raw(struct iio_dev *indio_dev,
> struct ad7173_state *st = iio_priv(indio_dev);
> struct ad7173_channel_config *cfg;
> unsigned int freq, i;
> - int ret;
> + int ret = 0;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> switch (info) {
> /*
> @@ -1195,7 +1194,7 @@ static int ad7173_write_raw(struct iio_dev *indio_dev,
> break;
> }
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
> }
>
> diff --git a/drivers/iio/adc/ad7266.c b/drivers/iio/adc/ad7266.c
> index 858c8be2ff1a..18559757f908 100644
> --- a/drivers/iio/adc/ad7266.c
> +++ b/drivers/iio/adc/ad7266.c
> @@ -153,11 +153,10 @@ static int ad7266_read_raw(struct iio_dev *indio_dev,
>
> switch (m) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
> ret = ad7266_read_single(st, val, chan->address);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret < 0)
> return ret;
> diff --git a/drivers/iio/adc/ad7298.c b/drivers/iio/adc/ad7298.c
> index b35bd4d9ef81..28b88092b4aa 100644
> --- a/drivers/iio/adc/ad7298.c
> +++ b/drivers/iio/adc/ad7298.c
> @@ -232,16 +232,15 @@ static int ad7298_read_raw(struct iio_dev *indio_dev,
>
> switch (m) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> if (chan->address == AD7298_CH_TEMP)
> ret = ad7298_scan_temp(st, val);
> else
> ret = ad7298_scan_direct(st, chan->address);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret < 0)
> return ret;
> diff --git a/drivers/iio/adc/ad7380.c b/drivers/iio/adc/ad7380.c
> index a18dcd664c1b..f232ad1a4963 100644
> --- a/drivers/iio/adc/ad7380.c
> +++ b/drivers/iio/adc/ad7380.c
> @@ -716,16 +716,15 @@ static int ad7380_debugfs_reg_access(struct iio_dev
> *indio_dev, u32 reg,
> struct ad7380_state *st = iio_priv(indio_dev);
> int ret;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> if (readval)
> ret = regmap_read(st->regmap, reg, readval);
> else
> ret = regmap_write(st->regmap, reg, writeval);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret;
> }
> @@ -1018,14 +1017,13 @@ static int ad7380_read_raw(struct iio_dev *indio_dev,
>
> switch (info) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ad7380_read_direct(st, chan->scan_index,
> scan_type, val);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret;
> case IIO_CHAN_INFO_SCALE:
> @@ -1056,13 +1054,12 @@ static int ad7380_read_raw(struct iio_dev *indio_dev,
>
> return IIO_VAL_INT;
> case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ad7380_get_osr(st, val);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret)
> return ret;
> @@ -1155,13 +1152,12 @@ static int ad7380_write_raw(struct iio_dev *indio_dev,
>
> switch (mask) {
> case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ad7380_set_oversampling_ratio(st, val);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret;
> default:
> @@ -1186,13 +1182,12 @@ static int ad7380_read_event_config(struct iio_dev
> *indio_dev,
> struct ad7380_state *st = iio_priv(indio_dev);
> int tmp, ret;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = regmap_read(st->regmap, AD7380_REG_ADDR_CONFIG1, &tmp);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret)
> return ret;
> @@ -1209,16 +1204,15 @@ static int ad7380_write_event_config(struct iio_dev
> *indio_dev,
> struct ad7380_state *st = iio_priv(indio_dev);
> int ret;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = regmap_update_bits(st->regmap,
> AD7380_REG_ADDR_CONFIG1,
> AD7380_CONFIG1_ALERTEN,
> FIELD_PREP(AD7380_CONFIG1_ALERTEN, state));
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret;
> }
> @@ -1265,13 +1259,12 @@ static int ad7380_read_event_value(struct iio_dev
> *indio_dev,
>
> switch (info) {
> case IIO_EV_INFO_VALUE:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ad7380_get_alert_th(st, dir, val);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
> default:
> return -EINVAL;
> @@ -1332,13 +1325,12 @@ static int ad7380_write_event_value(struct iio_dev
> *indio_dev,
>
> switch (info) {
> case IIO_EV_INFO_VALUE:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ad7380_set_alert_th(indio_dev, chan, dir, val);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
> default:
> return -EINVAL;
> diff --git a/drivers/iio/adc/ad7476.c b/drivers/iio/adc/ad7476.c
> index aeb8e383fe71..37b0515cf4fc 100644
> --- a/drivers/iio/adc/ad7476.c
> +++ b/drivers/iio/adc/ad7476.c
> @@ -138,11 +138,10 @@ static int ad7476_read_raw(struct iio_dev *indio_dev,
>
> switch (m) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
> ret = ad7476_scan_direct(st);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret < 0)
> return ret;
> diff --git a/drivers/iio/adc/ad7887.c b/drivers/iio/adc/ad7887.c
> index 69add1dc4b53..87ff95643794 100644
> --- a/drivers/iio/adc/ad7887.c
> +++ b/drivers/iio/adc/ad7887.c
> @@ -152,11 +152,10 @@ static int ad7887_read_raw(struct iio_dev *indio_dev,
>
> switch (m) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
> ret = ad7887_scan_direct(st, chan->address);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret < 0)
> return ret;
> diff --git a/drivers/iio/adc/ad7923.c b/drivers/iio/adc/ad7923.c
> index acc44cb34f82..87945efb940b 100644
> --- a/drivers/iio/adc/ad7923.c
> +++ b/drivers/iio/adc/ad7923.c
> @@ -260,11 +260,10 @@ static int ad7923_read_raw(struct iio_dev *indio_dev,
>
> switch (m) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
> ret = ad7923_scan_direct(st, chan->address);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret < 0)
> return ret;
> diff --git a/drivers/iio/adc/ad7944.c b/drivers/iio/adc/ad7944.c
> index 9a7825ea5087..2f949fe55873 100644
> --- a/drivers/iio/adc/ad7944.c
> +++ b/drivers/iio/adc/ad7944.c
> @@ -407,12 +407,11 @@ static int ad7944_read_raw(struct iio_dev *indio_dev,
>
> switch (info) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ad7944_single_conversion(adc, chan, val);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
>
> case IIO_CHAN_INFO_SCALE:
> diff --git a/drivers/iio/adc/dln2-adc.c b/drivers/iio/adc/dln2-adc.c
> index 221a5fdc1eaa..b9029fa13b32 100644
> --- a/drivers/iio/adc/dln2-adc.c
> +++ b/drivers/iio/adc/dln2-adc.c
> @@ -314,15 +314,14 @@ static int dln2_adc_read_raw(struct iio_dev *indio_dev,
>
> switch (mask) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret < 0)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;;
>
> mutex_lock(&dln2->mutex);
> ret = dln2_adc_read(dln2, chan->channel);
> mutex_unlock(&dln2->mutex);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret < 0)
> return ret;
> diff --git a/drivers/iio/adc/stm32-adc.c b/drivers/iio/adc/stm32-adc.c
> index 9d3b23efcc06..5dbf5f136768 100644
> --- a/drivers/iio/adc/stm32-adc.c
> +++ b/drivers/iio/adc/stm32-adc.c
> @@ -1471,9 +1471,8 @@ static int stm32_adc_read_raw(struct iio_dev *indio_dev,
> switch (mask) {
> case IIO_CHAN_INFO_RAW:
> case IIO_CHAN_INFO_PROCESSED:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
> if (chan->type == IIO_VOLTAGE)
> ret = stm32_adc_single_conv(indio_dev, chan, val);
> else
> @@ -1482,7 +1481,7 @@ static int stm32_adc_read_raw(struct iio_dev *indio_dev,
> if (mask == IIO_CHAN_INFO_PROCESSED)
> *val = STM32_ADC_VREFINT_VOLTAGE * adc-
> >vrefint.vrefint_cal / *val;
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
>
> case IIO_CHAN_INFO_SCALE:
> diff --git a/drivers/iio/adc/ti-adc084s021.c b/drivers/iio/adc/ti-adc084s021.c
> index da16876c32ae..9c845ee01697 100644
> --- a/drivers/iio/adc/ti-adc084s021.c
> +++ b/drivers/iio/adc/ti-adc084s021.c
> @@ -96,19 +96,18 @@ static int adc084s021_read_raw(struct iio_dev *indio_dev,
>
> switch (mask) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret < 0)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = regulator_enable(adc->reg);
> if (ret) {
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
> }
>
> adc->tx_buf[0] = channel->channel << 3;
> ret = adc084s021_adc_conversion(adc, &be_val);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> regulator_disable(adc->reg);
> if (ret < 0)
> return ret;
> diff --git a/drivers/iio/adc/ti-adc108s102.c b/drivers/iio/adc/ti-adc108s102.c
> index 9758ac801310..7d615e2bbf39 100644
> --- a/drivers/iio/adc/ti-adc108s102.c
> +++ b/drivers/iio/adc/ti-adc108s102.c
> @@ -181,13 +181,12 @@ static int adc108s102_read_raw(struct iio_dev
> *indio_dev,
>
> switch (m) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = adc108s102_scan_direct(st, chan->address);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret < 0)
> return ret;
> diff --git a/drivers/iio/adc/ti-ads1298.c b/drivers/iio/adc/ti-ads1298.c
> index 03f762415fa5..ae30b47e4514 100644
> --- a/drivers/iio/adc/ti-ads1298.c
> +++ b/drivers/iio/adc/ti-ads1298.c
> @@ -319,13 +319,12 @@ static int ads1298_read_raw(struct iio_dev *indio_dev,
>
> switch (mask) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ads1298_read_one(priv, chan->scan_index);
>
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> if (ret)
> return ret;
> diff --git a/drivers/iio/adc/ti-ads131e08.c b/drivers/iio/adc/ti-ads131e08.c
> index 91a79ebc4bde..c6096b64664e 100644
> --- a/drivers/iio/adc/ti-ads131e08.c
> +++ b/drivers/iio/adc/ti-ads131e08.c
> @@ -505,12 +505,11 @@ static int ads131e08_read_raw(struct iio_dev *indio_dev,
>
> switch (mask) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ads131e08_read_direct(indio_dev, channel, value);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> if (ret)
> return ret;
>
> @@ -551,12 +550,11 @@ static int ads131e08_write_raw(struct iio_dev
> *indio_dev,
>
> switch (mask) {
> case IIO_CHAN_INFO_SAMP_FREQ:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = ads131e08_set_data_rate(st, value);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
>
> default:
> diff --git a/drivers/iio/adc/ti-tlc4541.c b/drivers/iio/adc/ti-tlc4541.c
> index 08de997584fd..5a138be983ed 100644
> --- a/drivers/iio/adc/ti-tlc4541.c
> +++ b/drivers/iio/adc/ti-tlc4541.c
> @@ -131,11 +131,10 @@ static int tlc4541_read_raw(struct iio_dev *indio_dev,
>
> switch (m) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
> ret = spi_sync(st->spi, &st->scan_single_msg);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> if (ret < 0)
> return ret;
> *val = be16_to_cpu(st->rx_buf[0]);
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 21/29] iio: adc: at91-sama5d2: Move claim of direct mode up a level and use guard()
2025-02-17 14:16 ` [PATCH 21/29] iio: adc: at91-sama5d2: Move claim of direct mode up a level and use guard() Jonathan Cameron
@ 2025-02-19 12:45 ` Claudiu Beznea
0 siblings, 0 replies; 55+ messages in thread
From: Claudiu Beznea @ 2025-02-19 12:45 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On 17.02.2025 16:16, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> Move iio_device_claim_direct_mode() up one layer in the call stack,
> and use guard() for scope based unlocking to simplify error handling
> by allowing direct returns.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Claudiu Beznea <claudiu.beznea@tuxon.dev>
Reviewed-by: Claudiu Beznea <claudiu.beznea@tuxon.dev>
> ---
> drivers/iio/adc/at91-sama5d2_adc.c | 42 +++++++++++++++---------------
> 1 file changed, 21 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
> index 8e5aaf15a921..70d3dbb39b25 100644
> --- a/drivers/iio/adc/at91-sama5d2_adc.c
> +++ b/drivers/iio/adc/at91-sama5d2_adc.c
> @@ -9,6 +9,7 @@
> */
>
> #include <linux/bitops.h>
> +#include <linux/cleanup.h>
> #include <linux/clk.h>
> #include <linux/delay.h>
> #include <linux/dma-mapping.h>
> @@ -1814,19 +1815,10 @@ static int at91_adc_read_info_locked(struct iio_dev *indio_dev,
> struct iio_chan_spec const *chan, int *val)
> {
> struct at91_adc_state *st = iio_priv(indio_dev);
> - int ret;
> -
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> -
> - mutex_lock(&st->lock);
> - ret = at91_adc_read_info_raw(indio_dev, chan, val);
> - mutex_unlock(&st->lock);
>
> - iio_device_release_direct_mode(indio_dev);
> + guard(mutex)(&st->lock);
>
> - return ret;
> + return at91_adc_read_info_raw(indio_dev, chan, val);
> }
>
> static void at91_adc_temp_sensor_configure(struct at91_adc_state *st,
> @@ -1871,14 +1863,11 @@ static int at91_adc_read_temp(struct iio_dev *indio_dev,
> u32 tmp;
> int ret, vbg, vtemp;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> - mutex_lock(&st->lock);
> + guard(mutex)(&st->lock);
>
> ret = pm_runtime_resume_and_get(st->dev);
> if (ret < 0)
> - goto unlock;
> + return ret;
>
> at91_adc_temp_sensor_configure(st, true);
>
> @@ -1900,9 +1889,6 @@ static int at91_adc_read_temp(struct iio_dev *indio_dev,
> at91_adc_temp_sensor_configure(st, false);
> pm_runtime_mark_last_busy(st->dev);
> pm_runtime_put_autosuspend(st->dev);
> -unlock:
> - mutex_unlock(&st->lock);
> - iio_device_release_direct_mode(indio_dev);
> if (ret < 0)
> return ret;
>
> @@ -1924,10 +1910,17 @@ static int at91_adc_read_raw(struct iio_dev *indio_dev,
> int *val, int *val2, long mask)
> {
> struct at91_adc_state *st = iio_priv(indio_dev);
> + int ret;
>
> switch (mask) {
> case IIO_CHAN_INFO_RAW:
> - return at91_adc_read_info_locked(indio_dev, chan, val);
> + ret = iio_device_claim_direct_mode(indio_dev);
> + if (ret)
> + return ret;
> +
> + ret = at91_adc_read_info_locked(indio_dev, chan, val);
> + iio_device_release_direct_mode(indio_dev);
> + return ret;
>
> case IIO_CHAN_INFO_SCALE:
> *val = st->vref_uv / 1000;
> @@ -1939,7 +1932,14 @@ static int at91_adc_read_raw(struct iio_dev *indio_dev,
> case IIO_CHAN_INFO_PROCESSED:
> if (chan->type != IIO_TEMP)
> return -EINVAL;
> - return at91_adc_read_temp(indio_dev, chan, val);
> + ret = iio_device_claim_direct_mode(indio_dev);
> + if (ret)
> + return ret;
> +
> + ret = at91_adc_read_temp(indio_dev, chan, val);
> + iio_device_release_direct_mode(indio_dev);
> +
> + return ret;
>
> case IIO_CHAN_INFO_SAMP_FREQ:
> *val = at91_adc_get_sample_freq(st);
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 22/29] iio: adc: at91-sama5d2: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 22/29] iio: adc: at91-sama5d2: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
@ 2025-02-19 12:46 ` Claudiu Beznea
0 siblings, 0 replies; 55+ messages in thread
From: Claudiu Beznea @ 2025-02-19 12:46 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On 17.02.2025 16:16, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Claudiu Beznea <claudiu.beznea@tuxon.dev>
Reviewed-by: Claudiu Beznea <claudiu.beznea@tuxon.dev>
> ---
> drivers/iio/adc/at91-sama5d2_adc.c | 28 ++++++++++++----------------
> 1 file changed, 12 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
> index 70d3dbb39b25..694ff96fc913 100644
> --- a/drivers/iio/adc/at91-sama5d2_adc.c
> +++ b/drivers/iio/adc/at91-sama5d2_adc.c
> @@ -1914,12 +1914,11 @@ static int at91_adc_read_raw(struct iio_dev *indio_dev,
>
> switch (mask) {
> case IIO_CHAN_INFO_RAW:
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = at91_adc_read_info_locked(indio_dev, chan, val);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
>
> case IIO_CHAN_INFO_SCALE:
> @@ -1932,12 +1931,11 @@ static int at91_adc_read_raw(struct iio_dev *indio_dev,
> case IIO_CHAN_INFO_PROCESSED:
> if (chan->type != IIO_TEMP)
> return -EINVAL;
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
>
> ret = at91_adc_read_temp(indio_dev, chan, val);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
>
> return ret;
>
> @@ -1967,28 +1965,26 @@ static int at91_adc_write_raw(struct iio_dev *indio_dev,
> if (val == st->oversampling_ratio)
> return 0;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
> mutex_lock(&st->lock);
> /* update ratio */
> ret = at91_adc_config_emr(st, val, 0);
> mutex_unlock(&st->lock);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return ret;
> case IIO_CHAN_INFO_SAMP_FREQ:
> if (val < st->soc_info.min_sample_rate ||
> val > st->soc_info.max_sample_rate)
> return -EINVAL;
>
> - ret = iio_device_claim_direct_mode(indio_dev);
> - if (ret)
> - return ret;
> + if (!iio_device_claim_direct(indio_dev))
> + return -EBUSY;
> mutex_lock(&st->lock);
> at91_adc_setup_samp_freq(indio_dev, val,
> st->soc_info.startup_time, 0);
> mutex_unlock(&st->lock);
> - iio_device_release_direct_mode(indio_dev);
> + iio_device_release_direct(indio_dev);
> return 0;
> default:
> return -EINVAL;
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 29/29] iio: adc: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 14:16 ` [PATCH 29/29] iio: adc: " Jonathan Cameron
2025-02-19 11:07 ` Nuno Sá
@ 2025-02-20 12:47 ` Mike Looijmans
1 sibling, 0 replies; 55+ messages in thread
From: Mike Looijmans @ 2025-02-20 12:47 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Phil Reid,
Marek Vasut, Miquel Raynal, Claudiu Beznea, Uwe Kleine-König,
Alisa-Dariana Roman, Marek Vasut, Frank Li, Jonathan Cameron
On 17-02-2025 15:16, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> Single patch for all the relatively simple cases.
>
> These new functions allow sparse to find failures to release
> direct mode reducing chances of bugs over the claim_direct_mode()
> functions that are deprecated.
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Olivier Moysan <olivier.moysan@foss.st.com>
> Cc: Mike Looijmans <mike.looijmans@topic.nl>
> Cc: Phil Reid <preid@electromag.com.au>
> ---
> drivers/iio/adc/ad7173.c | 9 +++---
> drivers/iio/adc/ad7266.c | 7 ++---
> drivers/iio/adc/ad7298.c | 7 ++---
> drivers/iio/adc/ad7380.c | 56 ++++++++++++++-------------------
> drivers/iio/adc/ad7476.c | 7 ++---
> drivers/iio/adc/ad7887.c | 7 ++---
> drivers/iio/adc/ad7923.c | 7 ++---
> drivers/iio/adc/ad7944.c | 7 ++---
> drivers/iio/adc/dln2-adc.c | 7 ++---
> drivers/iio/adc/stm32-adc.c | 7 ++---
> drivers/iio/adc/ti-adc084s021.c | 9 +++---
> drivers/iio/adc/ti-adc108s102.c | 7 ++---
> drivers/iio/adc/ti-ads1298.c | 7 ++---
For this one in particular (ti-ads1298),
Reviewed-by: Mike Looijmans <mike.looijmans@topic.nl>
> drivers/iio/adc/ti-ads131e08.c | 14 ++++-----
> drivers/iio/adc/ti-tlc4541.c | 7 ++---
> 15 files changed, 71 insertions(+), 94 deletions(-)
> ...
M.
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 23/29] iio: adc: max1027: Move claim of direct mode up one level and use guard()
2025-02-17 14:16 ` [PATCH 23/29] iio: adc: max1027: Move claim of direct mode up one level and use guard() Jonathan Cameron
2025-02-17 15:38 ` Miquel Raynal
@ 2025-02-22 13:04 ` Jonathan Cameron
1 sibling, 0 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-22 13:04 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
>
> @@ -382,37 +374,33 @@ static int max1027_read_raw(struct iio_dev *indio_dev,
> int ret = 0;
> struct max1027_state *st = iio_priv(indio_dev);
>
> - mutex_lock(&st->lock);
> + guard(mutex)(&st->lock);
>
> switch (mask) {
> case IIO_CHAN_INFO_RAW:
> + ret = iio_device_claim_direct_mode(indio_dev);
> + if (ret)
> + return ret
Naughty me. I clearly didn't build test between this patch and next one.
Fixed up to maintain bisectability.
> +
> ret = max1027_read_single_value(indio_dev, chan, val);
> - break;
> + iio_device_release_direct_mode(indio_dev);
> + return ret;
> case IIO_CHAN_INFO_SCALE:
> switch (chan->type) {
> case IIO_TEMP:
> *val = 1;
> *val2 = 8;
> - ret = IIO_VAL_FRACTIONAL;
> - break;
> + return IIO_VAL_FRACTIONAL;
> case IIO_VOLTAGE:
> *val = 2500;
> *val2 = chan->scan_type.realbits;
> - ret = IIO_VAL_FRACTIONAL_LOG2;
> - break;
> + return IIO_VAL_FRACTIONAL_LOG2;
> default:
> - ret = -EINVAL;
> - break;
> + return -EINVAL;
> }
> - break;
> default:
> - ret = -EINVAL;
> - break;
> + return -EINVAL;
> }
> -
> - mutex_unlock(&st->lock);
> -
> - return ret;
> }
>
> static int max1027_debugfs_reg_access(struct iio_dev *indio_dev,
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 24/29] iio: adc: max1027: Switch to sparse friendly iio_device_claim/release_direct()
2025-02-17 15:40 ` Miquel Raynal
@ 2025-02-22 13:06 ` Jonathan Cameron
0 siblings, 0 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-22 13:06 UTC (permalink / raw)
To: Miquel Raynal
Cc: linux-iio, David Lechner, Nuno Sá, Olivier Moysan,
Mike Looijmans, Phil Reid, Marek Vasut, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
On Mon, 17 Feb 2025 16:40:43 +0100
Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> Hi Jonathan,
>
> On 17/02/2025 at 14:16:24 GMT, Jonathan Cameron <jic23@kernel.org> wrote:
>
> > From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> >
> > These new functions allow sparse to find failures to release
> > direct mode reducing chances of bugs over the claim_direct_mode()
> > functions that are deprecated.
>
> Ok, I didn't know.
>
> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Only just deprecated about 2 weeks back!
This one needed a tiny tweak to fix up the removal of the missing
semicolon in the previous patch.
Jonathan
>
> Thanks,
> Miquèl
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
` (28 preceding siblings ...)
2025-02-17 14:16 ` [PATCH 29/29] iio: adc: " Jonathan Cameron
@ 2025-02-22 13:09 ` Jonathan Cameron
29 siblings, 0 replies; 55+ messages in thread
From: Jonathan Cameron @ 2025-02-22 13:09 UTC (permalink / raw)
To: linux-iio
Cc: David Lechner, Nuno Sá, Olivier Moysan, Mike Looijmans,
Phil Reid, Marek Vasut, Miquel Raynal, Claudiu Beznea,
Uwe Kleine-König, Alisa-Dariana Roman, Marek Vasut, Frank Li,
Jonathan Cameron
On Mon, 17 Feb 2025 14:16:00 +0000
Jonathan Cameron <jic23@kernel.org> wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> Note that a number of the drivers touched in this series have no
> obvious active maintainer, so it would be much appreciated if anyone
> has time to take a look! It is a large series so feel free to review
> any you have time to look at rather than feeling you need to look
> at the whole thing!
>
> This is effectively part 3 of what will probably be around 5 series
> focused on moving from iio_device_claim/release_direct_mode() to
> iio_device_claim/release_direct(). The new form is more consistent
> with conditional locking semantics and sparse markings have been
> added that let us detect miss-balance between claim and release.
>
> More details can be found in the cover letter of the first series:
> https://lore.kernel.org/all/20250209180624.701140-1-jic23@kernel.org/
>
> This series focuses on the ADC drivers.
I'm going to pick up those that have tags just to trim down how
many of these we have in flight (more coming soon ;)
So for now applied. 7-26 and 29. If anyone has time to look
at 1-6 and 27-28 that would be great.
As normal pushed out as testing initially to give 0-day something
to poke at.
Thanks,
Jonathan
>
> Jonathan Cameron (29):
> iio: adc: vf610: Move claim of direct mode to caller of
> vf610_read_sample and use guard(mutex)
> iio: adc: vf610: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: ti-ads1100: Use guard(mutex) to allow direct returns
> iio: adc: ti-ads1100: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: ti-ads1015: Use guard(mutex) and factor out code for
> INFO_RAW
> iio: adc: ti-ads1015: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: stm32-dfsdm: Factor out core of reading INFO_RAW
> iio: adc: stm32-dfsdm: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: ad4030: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: ad7192: Factor out core of ad7192_write_raw() to simplify
> error handling.
> iio: adc: ad7192: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: ad7768-1: Move setting of val a bit later to avoid
> unnecessary return value check
> iio: adc: ad7768-1: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: ad7606: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: ad7791: Factor out core of ad7791_write_raw() to simplify
> error handling
> iio: adc: ad7791: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: ad7793: Factor out core of ad7793_write_raw() to simplify
> error handling
> iio: adc: ad7793: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: ad799x: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: ad_sigma_delta: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: at91-sama5d2: Move claim of direct mode up a level and use
> guard()
> iio: adc: at91-sama5d2: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: max1027: Move claim of direct mode up one level and use
> guard()
> iio: adc: max1027: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: max11410: Factor out writing of sampling frequency to
> simplify errro paths.
> iio: adc: max11410: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: mxs-lradc: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: rcar: Switch to sparse friendly
> iio_device_claim/release_direct()
> iio: adc: Switch to sparse friendly iio_device_claim/release_direct()
>
> drivers/iio/adc/ad4030.c | 21 ++--
> drivers/iio/adc/ad7173.c | 9 +-
> drivers/iio/adc/ad7192.c | 119 ++++++++++----------
> drivers/iio/adc/ad7266.c | 7 +-
> drivers/iio/adc/ad7298.c | 7 +-
> drivers/iio/adc/ad7380.c | 56 +++++-----
> drivers/iio/adc/ad7476.c | 7 +-
> drivers/iio/adc/ad7606.c | 14 ++-
> drivers/iio/adc/ad7768-1.c | 10 +-
> drivers/iio/adc/ad7791.c | 31 +++---
> drivers/iio/adc/ad7793.c | 80 +++++++-------
> drivers/iio/adc/ad7887.c | 7 +-
> drivers/iio/adc/ad7923.c | 7 +-
> drivers/iio/adc/ad7944.c | 7 +-
> drivers/iio/adc/ad799x.c | 14 ++-
> drivers/iio/adc/ad_sigma_delta.c | 7 +-
> drivers/iio/adc/at91-sama5d2_adc.c | 54 +++++-----
> drivers/iio/adc/dln2-adc.c | 7 +-
> drivers/iio/adc/max1027.c | 37 +++----
> drivers/iio/adc/max11410.c | 72 ++++++-------
> drivers/iio/adc/mxs-lradc-adc.c | 14 ++-
> drivers/iio/adc/rcar-gyroadc.c | 9 +-
> drivers/iio/adc/stm32-adc.c | 7 +-
> drivers/iio/adc/stm32-dfsdm-adc.c | 76 +++++++------
> drivers/iio/adc/ti-adc084s021.c | 9 +-
> drivers/iio/adc/ti-adc108s102.c | 7 +-
> drivers/iio/adc/ti-ads1015.c | 168 ++++++++++++-----------------
> drivers/iio/adc/ti-ads1100.c | 44 +++-----
> drivers/iio/adc/ti-ads1298.c | 7 +-
> drivers/iio/adc/ti-ads131e08.c | 14 ++-
> drivers/iio/adc/ti-tlc4541.c | 7 +-
> drivers/iio/adc/vf610_adc.c | 36 +++----
> 32 files changed, 440 insertions(+), 531 deletions(-)
>
^ permalink raw reply [flat|nested] 55+ messages in thread
end of thread, other threads:[~2025-02-22 13:09 UTC | newest]
Thread overview: 55+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-17 14:16 [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
2025-02-17 14:16 ` [PATCH 01/29] iio: adc: vf610: Move claim of direct mode to caller of vf610_read_sample and use guard(mutex) Jonathan Cameron
2025-02-17 14:16 ` [PATCH 02/29] iio: adc: vf610: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
2025-02-17 14:16 ` [PATCH 03/29] iio: adc: ti-ads1100: Use guard(mutex) to allow direct returns Jonathan Cameron
2025-02-17 14:16 ` [PATCH 04/29] iio: adc: ti-ads1100: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
2025-02-17 14:16 ` [PATCH 05/29] iio: adc: ti-ads1015: Use guard(mutex) and factor out code for INFO_RAW Jonathan Cameron
2025-02-17 14:16 ` [PATCH 06/29] iio: adc: ti-ads1015: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
2025-02-17 14:16 ` [PATCH 07/29] iio: adc: stm32-dfsdm: Factor out core of reading INFO_RAW Jonathan Cameron
2025-02-18 15:32 ` Olivier MOYSAN
2025-02-17 14:16 ` [PATCH 08/29] iio: adc: stm32-dfsdm: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
2025-02-18 15:34 ` Olivier MOYSAN
2025-02-17 14:16 ` [PATCH 09/29] iio: adc: ad4030: " Jonathan Cameron
2025-02-19 10:54 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 10/29] iio: adc: ad7192: Factor out core of ad7192_write_raw() to simplify error handling Jonathan Cameron
2025-02-19 10:54 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 11/29] iio: adc: ad7192: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
2025-02-19 10:55 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 12/29] iio: adc: ad7768-1: Move setting of val a bit later to avoid unnecessary return value check Jonathan Cameron
2025-02-19 10:56 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 13/29] iio: adc: ad7768-1: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
2025-02-19 10:56 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 14/29] iio: adc: ad7606: " Jonathan Cameron
2025-02-19 10:57 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 15/29] iio: adc: ad7791: Factor out core of ad7791_write_raw() to simplify error handling Jonathan Cameron
2025-02-19 10:59 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 16/29] iio: adc: ad7791: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
2025-02-19 11:00 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 17/29] iio: adc: ad7793: Factor out core of ad7793_write_raw() to simplify error handling Jonathan Cameron
2025-02-19 11:00 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 18/29] iio: adc: ad7793: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
2025-02-19 11:01 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 19/29] iio: adc: ad799x: " Jonathan Cameron
2025-02-19 11:02 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 20/29] iio: adc: ad_sigma_delta: " Jonathan Cameron
2025-02-19 11:03 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 21/29] iio: adc: at91-sama5d2: Move claim of direct mode up a level and use guard() Jonathan Cameron
2025-02-19 12:45 ` Claudiu Beznea
2025-02-17 14:16 ` [PATCH 22/29] iio: adc: at91-sama5d2: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
2025-02-19 12:46 ` Claudiu Beznea
2025-02-17 14:16 ` [PATCH 23/29] iio: adc: max1027: Move claim of direct mode up one level and use guard() Jonathan Cameron
2025-02-17 15:38 ` Miquel Raynal
2025-02-22 13:04 ` Jonathan Cameron
2025-02-17 14:16 ` [PATCH 24/29] iio: adc: max1027: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
2025-02-17 15:40 ` Miquel Raynal
2025-02-22 13:06 ` Jonathan Cameron
2025-02-17 14:16 ` [PATCH 25/29] iio: adc: max11410: Factor out writing of sampling frequency to simplify errro paths Jonathan Cameron
2025-02-19 11:03 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 26/29] iio: adc: max11410: Switch to sparse friendly iio_device_claim/release_direct() Jonathan Cameron
2025-02-19 11:04 ` Nuno Sá
2025-02-17 14:16 ` [PATCH 27/29] iio: adc: mxs-lradc: " Jonathan Cameron
2025-02-17 14:16 ` [PATCH 28/29] iio: adc: rcar: " Jonathan Cameron
2025-02-17 14:16 ` [PATCH 29/29] iio: adc: " Jonathan Cameron
2025-02-19 11:07 ` Nuno Sá
2025-02-20 12:47 ` Mike Looijmans
2025-02-22 13:09 ` [PATCH 00/29] IIO: ADCs: Sparse friendly claim of direct mode Jonathan Cameron
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox