From: Kurt Borja <kuurtb@gmail.com>
To: Jonathan Cameron <jic23@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Linus Walleij <linusw@kernel.org>,
Bartosz Golaszewski <brgl@kernel.org>
Cc: "David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org,
"Kurt Borja" <kuurtb@gmail.com>,
"Jonathan Cameron" <jic23@kernel.org>
Subject: [PATCH 4/5] iio: adc: ti-ads1262: Add calibration support
Date: Fri, 12 Jun 2026 17:46:22 -0500 [thread overview]
Message-ID: <20260612-ads126x-v1-4-894c788d03ed@gmail.com> (raw)
In-Reply-To: <20260612-ads126x-v1-0-894c788d03ed@gmail.com>
Add channel calibration support.
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/iio/adc/ti-ads1262.c | 70 +++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 69 insertions(+), 1 deletion(-)
diff --git a/drivers/iio/adc/ti-ads1262.c b/drivers/iio/adc/ti-ads1262.c
index 6d5f22836ad8..b33505e7fdc7 100644
--- a/drivers/iio/adc/ti-ads1262.c
+++ b/drivers/iio/adc/ti-ads1262.c
@@ -217,6 +217,10 @@
#define ADS1262_RMUX_AVDD_AVSS 4
#define ADS1262_RMUX_COUNT 5
+/* The calibration word is signed 24 bits value */
+#define ADS1262_CALIB_WORD_MAX ((int)(GENMASK(22, 0)))
+#define ADS1262_CALIB_WORD_MIN (-ADS1262_CALIB_WORD_MAX - 1)
+
struct ads1262_channel {
/* MODE0 */
u8 conv_delay:4;
@@ -453,6 +457,32 @@ static int ads1262_dev_start_one(struct ads1262 *st, u8 runmode)
return 0;
}
+static int ads1262_read_calib(struct ads1262 *st, unsigned int reg, u32 *val)
+{
+ __le32 lval;
+ int ret;
+
+ /*
+ * The calibration word is a signed 24 bit LSB-first value.
+ */
+ ret = regmap_bulk_read(st->regmap, reg, &lval, 3);
+ if (ret)
+ return ret;
+ *val = sign_extend32(le32_to_cpu(lval), 23);
+
+ return 0;
+}
+
+static int ads1262_write_calib(struct ads1262 *st, unsigned int reg, u32 val)
+{
+ __le32 lval = cpu_to_le32(val);
+
+ /*
+ * The calibration word is a signed 24 bit LSB-first value.
+ */
+ return regmap_bulk_write(st->regmap, reg, &lval, 3);
+}
+
static void ads1262_wait_for_conversion(struct ads1262 *st)
{
reinit_completion(&st->drdy);
@@ -673,6 +703,18 @@ static int ads1262_read_raw(struct iio_dev *indio_dev,
*val2 = ads1262_conv_delay_avail[mode][1];
return IIO_VAL_INT_PLUS_NANO;
+ case IIO_CHAN_INFO_CALIBSCALE:
+ ret = ads1262_read_calib(st, ADS1262_FSCAL0_REG, val);
+ if (ret)
+ return ret;
+ return IIO_VAL_INT;
+
+ case IIO_CHAN_INFO_CALIBBIAS:
+ ret = ads1262_read_calib(st, ADS1262_OFCAL0_REG, val);
+ if (ret)
+ return ret;
+ return IIO_VAL_INT;
+
default:
return -EOPNOTSUPP;
}
@@ -682,6 +724,9 @@ static int ads1262_read_avail(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, const int **vals,
int *type, int *length, long mask)
{
+ static int calib_range[3] = { ADS1262_CALIB_WORD_MIN, 1,
+ ADS1262_CALIB_WORD_MAX };
+
switch (mask) {
case IIO_CHAN_INFO_SAMP_FREQ:
*type = IIO_VAL_INT_PLUS_MICRO;
@@ -701,6 +746,13 @@ static int ads1262_read_avail(struct iio_dev *indio_dev,
*length = ARRAY_SIZE(ads1262_conv_delay_avail) * 2;
return IIO_AVAIL_LIST;
+ case IIO_CHAN_INFO_CALIBSCALE:
+ case IIO_CHAN_INFO_CALIBBIAS:
+ *type = IIO_VAL_INT;
+ *vals = calib_range;
+ *length = ARRAY_SIZE(calib_range);
+ return IIO_AVAIL_RANGE;
+
default:
return -EOPNOTSUPP;
}
@@ -761,6 +813,18 @@ static int ads1262_write_raw(struct iio_dev *indio_dev,
break;
+ case IIO_CHAN_INFO_CALIBSCALE:
+ if (val > ADS1262_CALIB_WORD_MAX || val < ADS1262_CALIB_WORD_MIN)
+ return -EINVAL;
+
+ return ads1262_write_calib(st, ADS1262_FSCAL0_REG, val);
+
+ case IIO_CHAN_INFO_CALIBBIAS:
+ if (val > ADS1262_CALIB_WORD_MAX || val < ADS1262_CALIB_WORD_MIN)
+ return -EINVAL;
+
+ return ads1262_write_calib(st, ADS1262_OFCAL0_REG, val);
+
default:
return -EOPNOTSUPP;
}
@@ -867,9 +931,13 @@ static const struct iio_chan_spec ads1262_iio_voltage_template = {
BIT(IIO_CHAN_INFO_HARDWAREGAIN) |
BIT(IIO_CHAN_INFO_SAMP_FREQ) |
BIT(IIO_CHAN_INFO_CONVDELAY),
+ .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_CALIBSCALE) |
+ BIT(IIO_CHAN_INFO_CALIBBIAS),
.info_mask_shared_by_all_available = BIT(IIO_CHAN_INFO_HARDWAREGAIN) |
BIT(IIO_CHAN_INFO_SAMP_FREQ) |
- BIT(IIO_CHAN_INFO_CONVDELAY),
+ BIT(IIO_CHAN_INFO_CONVDELAY) |
+ BIT(IIO_CHAN_INFO_CALIBSCALE) |
+ BIT(IIO_CHAN_INFO_CALIBBIAS),
.ext_info = ads1262_ext_info,
};
--
2.54.0
next prev parent reply other threads:[~2026-06-12 22:47 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-12 22:46 [PATCH 0/5] iio: adc: Add TI ADS126X ADC family support Kurt Borja
2026-06-12 22:46 ` [PATCH 1/5] dt-bindings: iio: adc: Add TI ADS126x ADC family Kurt Borja
2026-06-13 18:54 ` Krzysztof Kozlowski
2026-06-14 20:53 ` Kurt Borja
2026-06-14 21:37 ` David Lechner
2026-06-14 21:57 ` Kurt Borja
2026-06-15 0:06 ` David Lechner
2026-06-15 4:34 ` Krzysztof Kozlowski
2026-06-15 4:40 ` Kurt Borja
2026-06-12 22:46 ` [PATCH 2/5] iio: adc: Add ti-ads1262 driver Kurt Borja
2026-06-13 13:45 ` Jonathan Cameron
2026-06-13 14:06 ` Jonathan Cameron
2026-06-14 20:27 ` Kurt Borja
2026-06-21 14:25 ` Jonathan Cameron
2026-06-13 18:59 ` Krzysztof Kozlowski
2026-06-14 13:39 ` Jonathan Cameron
2026-06-15 4:33 ` Krzysztof Kozlowski
2026-06-15 4:42 ` Kurt Borja
2026-06-14 20:56 ` Kurt Borja
2026-06-15 4:30 ` Krzysztof Kozlowski
2026-06-21 14:33 ` Jonathan Cameron
2026-06-22 0:18 ` Kurt Borja
2026-06-22 9:47 ` Jonathan Cameron
2026-06-22 16:42 ` David Lechner
2026-06-12 22:46 ` [PATCH 3/5] iio: adc: ti-ads1262: Add GPIO controller support Kurt Borja
2026-06-13 6:23 ` Kurt Borja
2026-06-12 22:46 ` Kurt Borja [this message]
2026-06-13 13:50 ` [PATCH 4/5] iio: adc: ti-ads1262: Add calibration support Jonathan Cameron
2026-06-14 20:31 ` Kurt Borja
2026-06-12 22:46 ` [PATCH 5/5] iio: adc: Add ti-ads1263-adc2 driver Kurt Borja
2026-06-13 14:10 ` Jonathan Cameron
2026-06-14 20:43 ` Kurt Borja
2026-06-21 14:41 ` Jonathan Cameron
2026-06-12 23:50 ` [PATCH 0/5] iio: adc: Add TI ADS126X ADC family support David Lechner
2026-06-13 0:06 ` Kurt Borja
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260612-ads126x-v1-4-894c788d03ed@gmail.com \
--to=kuurtb@gmail.com \
--cc=andy@kernel.org \
--cc=brgl@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linusw@kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=robh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox