[PATCH v2 2/3] iio: adc: ti-ads112c14: create data read helper functions
From: David Lechner (TI)
Date: Fri Jul 31 2026 - 19:49:46 EST
Refactor a few bits of code into helper functions. These will be reused
when continuous mode support is added in a later patch.
Signed-off-by: David Lechner (TI) <dlechner@xxxxxxxxxxxx>
---
drivers/iio/adc/ti-ads112c14.c | 51 +++++++++++++++++++++++++-----------------
1 file changed, 31 insertions(+), 20 deletions(-)
diff --git a/drivers/iio/adc/ti-ads112c14.c b/drivers/iio/adc/ti-ads112c14.c
index 177f7064092e..c6d83298c312 100644
--- a/drivers/iio/adc/ti-ads112c14.c
+++ b/drivers/iio/adc/ti-ads112c14.c
@@ -601,6 +601,32 @@ static int ads112c14_prepare_sys_mon_channel(struct ads112c14_data *data,
return 0;
}
+static int ads112c14_prepare_channel(struct ads112c14_data *data,
+ const struct iio_chan_spec *chan)
+{
+ if (chan->channel < ADS112C14_SYS_MON_CHANNEL_BASE)
+ return ads112c14_prepare_measurement_channel(data, chan);
+
+ return ads112c14_prepare_sys_mon_channel(data, chan);
+}
+
+static int ads112c14_scan_read(struct ads112c14_data *data, u8 *buf)
+{
+ struct i2c_client *client = to_i2c_client(regmap_get_device(data->regmap));
+ int ret;
+ u8 len;
+
+ len = BITS_TO_BYTES(data->chip_info->resolution_bits);
+ if (data->i2c_crc_enabled)
+ len += 1;
+
+ ret = i2c_smbus_read_i2c_block_data(client, ADS112C14_CMD_RDATA, len, buf);
+ if (ret < 0)
+ return ret;
+
+ return 0;
+}
+
static int ads112c14_wait_for_conversion_irq(struct ads112c14_data *data)
{
unsigned long remaining;
@@ -649,15 +675,9 @@ static int ads112c14_single_conversion(struct ads112c14_data *data,
guard(mutex)(&data->lock);
- if (chan->channel < ADS112C14_SYS_MON_CHANNEL_BASE) {
- ret = ads112c14_prepare_measurement_channel(data, chan);
- if (ret)
- return ret;
- } else {
- ret = ads112c14_prepare_sys_mon_channel(data, chan);
- if (ret)
- return ret;
- }
+ ret = ads112c14_prepare_channel(data, chan);
+ if (ret)
+ return ret;
if (data->drdy_irq)
ret = ads112c14_wait_for_conversion_irq(data);
@@ -672,17 +692,8 @@ static int ads112c14_single_conversion(struct ads112c14_data *data,
* with CRC errors, but rather leave it to userspace to decide what to
* do.
*/
- if (for_scan) {
- u8 len = BITS_TO_BYTES(data->chip_info->resolution_bits) +
- (data->i2c_crc_enabled ? 1 : 0);
-
- ret = i2c_smbus_read_i2c_block_data(client, ADS112C14_CMD_RDATA,
- len, buf);
- if (ret < 0)
- return ret;
-
- return 0;
- }
+ if (for_scan)
+ return ads112c14_scan_read(data, buf);
return ads112c14_i2c_read_bytes(client, ADS112C14_CMD_RDATA, buf,
BITS_TO_BYTES(data->chip_info->resolution_bits),
--
2.43.0