* [PATCH v5 1/3] dt-bindings: adc: ltc2497: add support for ltc2305
2026-03-25 2:24 [PATCH v5 0/3] iio: adc: ltc2309: add support driver for ltc2305 Kyle Hsieh
@ 2026-03-25 2:24 ` Kyle Hsieh
2026-03-25 2:24 ` [PATCH v5 2/3] iio: adc: ltc2309: explicitly assign hex values to channel enums Kyle Hsieh
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Kyle Hsieh @ 2026-03-25 2:24 UTC (permalink / raw)
To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
David Lechner, Nuno Sá, Andy Shevchenko, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Liam Beguin
Cc: Michael Hennerich, linux-iio, devicetree, linux-kernel,
Kyle Hsieh
Add documentation for the 2-channel LTC2305 ADC in the
existing ltc2497 binding.
This enables automatic device tree matching for LTC2305
while using the LTC2309 driver (drivers/iio/adc/ltc2309.c),
since both ADCs share the same I2C interface and 12-bit SAR architecture.
The main difference is the number of channels (LTC2305: 2, LTC2309: 8).
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Kyle Hsieh <kylehsieh1995@gmail.com>
---
Documentation/devicetree/bindings/iio/adc/lltc,ltc2497.yaml | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/Documentation/devicetree/bindings/iio/adc/lltc,ltc2497.yaml b/Documentation/devicetree/bindings/iio/adc/lltc,ltc2497.yaml
index 5cc6a9684077..c884b6e03767 100644
--- a/Documentation/devicetree/bindings/iio/adc/lltc,ltc2497.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/lltc,ltc2497.yaml
@@ -11,6 +11,12 @@ maintainers:
- Liam Beguin <liambeguin@gmail.com>
description: |
+ LTC2305:
+ low noise, low power, 2-channel, 12-bit successive approximation ADC with an
+ I2C compatible serial interface.
+
+ https://www.analog.com/media/en/technical-documentation/data-sheets/23015fb.pdf
+
LTC2309:
low noise, low power, 8-channel, 12-bit successive approximation ADC with an
I2C compatible serial interface.
@@ -28,6 +34,7 @@ description: |
properties:
compatible:
enum:
+ - lltc,ltc2305
- lltc,ltc2309
- lltc,ltc2497
- lltc,ltc2499
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v5 2/3] iio: adc: ltc2309: explicitly assign hex values to channel enums
2026-03-25 2:24 [PATCH v5 0/3] iio: adc: ltc2309: add support driver for ltc2305 Kyle Hsieh
2026-03-25 2:24 ` [PATCH v5 1/3] dt-bindings: adc: ltc2497: add support " Kyle Hsieh
@ 2026-03-25 2:24 ` Kyle Hsieh
2026-03-25 2:24 ` [PATCH v5 3/3] iio: adc: ltc2309: add support for ltc2305 Kyle Hsieh
2026-03-25 19:50 ` [PATCH v5 0/3] iio: adc: ltc2309: add support driver " Jonathan Cameron
3 siblings, 0 replies; 7+ messages in thread
From: Kyle Hsieh @ 2026-03-25 2:24 UTC (permalink / raw)
To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
David Lechner, Nuno Sá, Andy Shevchenko, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Liam Beguin
Cc: Michael Hennerich, linux-iio, devicetree, linux-kernel,
Kyle Hsieh
The current ltc2309_channels enum relies on implicit sequential
assignment. While this works for the 8-channel LTC2309, it is
not intuitive and makes it difficult to support other chips in
the same family that might have different bit mappings.
Explicitly assign hex values to the enum members based on the
channel selection bits defined in the datasheet. This improves
code readability and provides a consistent pattern for future
chip support.
Signed-off-by: Kyle Hsieh <kylehsieh1995@gmail.com>
---
drivers/iio/adc/ltc2309.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/drivers/iio/adc/ltc2309.c b/drivers/iio/adc/ltc2309.c
index 5f0d947d0615..3f27ffc66668 100644
--- a/drivers/iio/adc/ltc2309.c
+++ b/drivers/iio/adc/ltc2309.c
@@ -42,22 +42,22 @@ struct ltc2309 {
/* Order matches expected channel address, See datasheet Table 1. */
enum ltc2309_channels {
- LTC2309_CH0_CH1 = 0,
- LTC2309_CH2_CH3,
- LTC2309_CH4_CH5,
- LTC2309_CH6_CH7,
- LTC2309_CH1_CH0,
- LTC2309_CH3_CH2,
- LTC2309_CH5_CH4,
- LTC2309_CH7_CH6,
- LTC2309_CH0,
- LTC2309_CH2,
- LTC2309_CH4,
- LTC2309_CH6,
- LTC2309_CH1,
- LTC2309_CH3,
- LTC2309_CH5,
- LTC2309_CH7,
+ LTC2309_CH0_CH1 = 0x0,
+ LTC2309_CH2_CH3 = 0x1,
+ LTC2309_CH4_CH5 = 0x2,
+ LTC2309_CH6_CH7 = 0x3,
+ LTC2309_CH1_CH0 = 0x4,
+ LTC2309_CH3_CH2 = 0x5,
+ LTC2309_CH5_CH4 = 0x6,
+ LTC2309_CH7_CH6 = 0x7,
+ LTC2309_CH0 = 0x8,
+ LTC2309_CH2 = 0x9,
+ LTC2309_CH4 = 0xa,
+ LTC2309_CH6 = 0xb,
+ LTC2309_CH1 = 0xc,
+ LTC2309_CH3 = 0xd,
+ LTC2309_CH5 = 0xe,
+ LTC2309_CH7 = 0xf,
};
#define LTC2309_CHAN(_chan, _addr) { \
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v5 3/3] iio: adc: ltc2309: add support for ltc2305
2026-03-25 2:24 [PATCH v5 0/3] iio: adc: ltc2309: add support driver for ltc2305 Kyle Hsieh
2026-03-25 2:24 ` [PATCH v5 1/3] dt-bindings: adc: ltc2497: add support " Kyle Hsieh
2026-03-25 2:24 ` [PATCH v5 2/3] iio: adc: ltc2309: explicitly assign hex values to channel enums Kyle Hsieh
@ 2026-03-25 2:24 ` Kyle Hsieh
2026-03-25 19:50 ` [PATCH v5 0/3] iio: adc: ltc2309: add support driver " Jonathan Cameron
3 siblings, 0 replies; 7+ messages in thread
From: Kyle Hsieh @ 2026-03-25 2:24 UTC (permalink / raw)
To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
David Lechner, Nuno Sá, Andy Shevchenko, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Liam Beguin
Cc: Michael Hennerich, linux-iio, devicetree, linux-kernel,
Kyle Hsieh
Add support for the LTC2305 ADC to the LTC2309 driver. The LTC2305 is
a 2-channel, 12-bit SAR ADC that is register-compatible with the
LTC2309 but has a different channel selection mapping and count.
To support multiple chips in this family, introduce ltc2309_chip_info
struct to store chip-specific channel specifications and names.
The probe function now uses i2c_get_match_data() to retrieve the
correct configuration for the detected device.
Specific channel addresses for LTC2305 (CH0, CH1, and differential
pairs) are added based on the datasheet.
Signed-off-by: Kyle Hsieh <kylehsieh1995@gmail.com>
---
drivers/iio/adc/ltc2309.c | 49 ++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 44 insertions(+), 5 deletions(-)
diff --git a/drivers/iio/adc/ltc2309.c b/drivers/iio/adc/ltc2309.c
index 3f27ffc66668..316256edf150 100644
--- a/drivers/iio/adc/ltc2309.c
+++ b/drivers/iio/adc/ltc2309.c
@@ -1,8 +1,10 @@
// SPDX-License-Identifier: GPL-2.0
/*
+ * The LTC2305 is a 2-Channel, 12-Bit SAR ADC with an I2C Interface.
* The LTC2309 is an 8-Channel, 12-Bit SAR ADC with an I2C Interface.
*
* Datasheet:
+ * https://www.analog.com/media/en/technical-documentation/data-sheets/23015fb.pdf
* https://www.analog.com/media/en/technical-documentation/data-sheets/2309fd.pdf
*
* Copyright (c) 2023, Liam Beguin <liambeguin@gmail.com>
@@ -41,6 +43,13 @@ struct ltc2309 {
};
/* Order matches expected channel address, See datasheet Table 1. */
+enum ltc2305_channels {
+ LTC2305_CH0_CH1 = 0x0,
+ LTC2305_CH1_CH0 = 0x4,
+ LTC2305_CH0 = 0x8,
+ LTC2305_CH1 = 0xc,
+};
+
enum ltc2309_channels {
LTC2309_CH0_CH1 = 0x0,
LTC2309_CH2_CH3 = 0x1,
@@ -80,6 +89,13 @@ enum ltc2309_channels {
.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
}
+static const struct iio_chan_spec ltc2305_channels[] = {
+ LTC2309_CHAN(0, LTC2305_CH0),
+ LTC2309_CHAN(1, LTC2305_CH1),
+ LTC2309_DIFF_CHAN(0, 1, LTC2305_CH0_CH1),
+ LTC2309_DIFF_CHAN(1, 0, LTC2305_CH1_CH0),
+};
+
static const struct iio_chan_spec ltc2309_channels[] = {
LTC2309_CHAN(0, LTC2309_CH0),
LTC2309_CHAN(1, LTC2309_CH1),
@@ -99,6 +115,24 @@ static const struct iio_chan_spec ltc2309_channels[] = {
LTC2309_DIFF_CHAN(7, 6, LTC2309_CH7_CH6),
};
+struct ltc2309_chip_info {
+ const char *name;
+ const struct iio_chan_spec *channels;
+ int num_channels;
+};
+
+static const struct ltc2309_chip_info ltc2305_chip_info = {
+ .name = "ltc2305",
+ .channels = ltc2305_channels,
+ .num_channels = ARRAY_SIZE(ltc2305_channels),
+};
+
+static const struct ltc2309_chip_info ltc2309_chip_info = {
+ .name = "ltc2309",
+ .channels = ltc2309_channels,
+ .num_channels = ARRAY_SIZE(ltc2309_channels),
+};
+
static int ltc2309_read_raw_channel(struct ltc2309 *ltc2309,
unsigned long address, int *val)
{
@@ -158,6 +192,7 @@ static const struct iio_info ltc2309_info = {
static int ltc2309_probe(struct i2c_client *client)
{
+ const struct ltc2309_chip_info *chip_info;
struct iio_dev *indio_dev;
struct ltc2309 *ltc2309;
int ret;
@@ -167,13 +202,15 @@ static int ltc2309_probe(struct i2c_client *client)
return -ENOMEM;
ltc2309 = iio_priv(indio_dev);
+ chip_info = i2c_get_match_data(client);
+
ltc2309->dev = &indio_dev->dev;
ltc2309->client = client;
- indio_dev->name = "ltc2309";
+ indio_dev->name = chip_info->name;
indio_dev->modes = INDIO_DIRECT_MODE;
- indio_dev->channels = ltc2309_channels;
- indio_dev->num_channels = ARRAY_SIZE(ltc2309_channels);
+ indio_dev->channels = chip_info->channels;
+ indio_dev->num_channels = chip_info->num_channels;
indio_dev->info = <c2309_info;
ret = devm_regulator_get_enable_read_voltage(&client->dev, "vref");
@@ -189,13 +226,15 @@ static int ltc2309_probe(struct i2c_client *client)
}
static const struct of_device_id ltc2309_of_match[] = {
- { .compatible = "lltc,ltc2309" },
+ { .compatible = "lltc,ltc2305", .data = <c2305_chip_info },
+ { .compatible = "lltc,ltc2309", .data = <c2309_chip_info },
{ }
};
MODULE_DEVICE_TABLE(of, ltc2309_of_match);
static const struct i2c_device_id ltc2309_id[] = {
- { "ltc2309" },
+ { "ltc2305", (kernel_ulong_t)<c2305_chip_info },
+ { "ltc2309", (kernel_ulong_t)<c2309_chip_info },
{ }
};
MODULE_DEVICE_TABLE(i2c, ltc2309_id);
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v5 0/3] iio: adc: ltc2309: add support driver for ltc2305
2026-03-25 2:24 [PATCH v5 0/3] iio: adc: ltc2309: add support driver for ltc2305 Kyle Hsieh
` (2 preceding siblings ...)
2026-03-25 2:24 ` [PATCH v5 3/3] iio: adc: ltc2309: add support for ltc2305 Kyle Hsieh
@ 2026-03-25 19:50 ` Jonathan Cameron
2026-03-26 8:35 ` Andy Shevchenko
2026-03-27 1:32 ` Kyle Hsieh
3 siblings, 2 replies; 7+ messages in thread
From: Jonathan Cameron @ 2026-03-25 19:50 UTC (permalink / raw)
To: Kyle Hsieh
Cc: Lars-Peter Clausen, Michael Hennerich, David Lechner,
Nuno Sá, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Liam Beguin, linux-iio, devicetree, linux-kernel
On Wed, 25 Mar 2026 10:24:19 +0800
Kyle Hsieh <kylehsieh1995@gmail.com> wrote:
> The series add support for ltc2305 controller from
> Linear Technology Corporation(lltc).
> This is low noise, low power, 2 channels 12-bit successive
> approximation ADCs.
>
> Signed-off-by: Kyle Hsieh <kylehsieh1995@gmail.com>
Applied to the togreg branch of iio.git.
To hussle things along a touch I skipped the normal pushing
it out as testing first (what could possibly go wrong ;)
Jonathan
> ---
> Changes in v5:
> - Split the patch series to refactor LTC2309 channel enums first.
> - Explicitly assign hex values to channel enums based on datasheet.
> - Add support for LTC2305 on top of the refactored driver.
> - Link to v4: https://lore.kernel.org/r/20260311-add_ltc2305_driver-v4-0-bc350d347f33@gmail.com
>
> Changes in v4:
> - Fix build warning in ltc2309_probe(): initialize 'chip_info'.
> - Link to v3: https://lore.kernel.org/r/20260126-add_ltc2305_driver-v3-0-951349a87f97@gmail.com
>
> Changes in v3:
> - Modify ltc2305 channel mask to compatible ltc2309.
> - Link to v2: https://lore.kernel.org/r/20251224-add_ltc2305_driver-v2-0-061f78cf45a3@gmail.com
>
> Changes in v2:
> - Reordered chip descriptions and code from low to high order.
> - Renamed chip info structure to use ltc2309 driver prefix.
> - Switched to i2c_get_match_data().
> - Removed unused variables.
> - Added chip info to i2c_device_id table.
> - Link to v1: https://lore.kernel.org/r/20251223-add_ltc2305_driver-v1-0-dfa0827fd620@gmail.com
>
> ---
> Kyle Hsieh (3):
> dt-bindings: adc: ltc2497: add support for ltc2305
> iio: adc: ltc2309: explicitly assign hex values to channel enums
> iio: adc: ltc2309: add support for ltc2305
>
> .../devicetree/bindings/iio/adc/lltc,ltc2497.yaml | 7 ++
> drivers/iio/adc/ltc2309.c | 81 ++++++++++++++++------
> 2 files changed, 67 insertions(+), 21 deletions(-)
> ---
> base-commit: 9448598b22c50c8a5bb77a9103e2d49f134c9578
> change-id: 20251223-add_ltc2305_driver-728fa9161bc7
>
> Best regards,
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v5 0/3] iio: adc: ltc2309: add support driver for ltc2305
2026-03-25 19:50 ` [PATCH v5 0/3] iio: adc: ltc2309: add support driver " Jonathan Cameron
@ 2026-03-26 8:35 ` Andy Shevchenko
2026-03-27 1:32 ` Kyle Hsieh
1 sibling, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2026-03-26 8:35 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Kyle Hsieh, Lars-Peter Clausen, Michael Hennerich, David Lechner,
Nuno Sá, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Liam Beguin, linux-iio, devicetree, linux-kernel
On Wed, Mar 25, 2026 at 07:50:35PM +0000, Jonathan Cameron wrote:
> On Wed, 25 Mar 2026 10:24:19 +0800
> Kyle Hsieh <kylehsieh1995@gmail.com> wrote:
>
> > The series add support for ltc2305 controller from
> > Linear Technology Corporation(lltc).
> > This is low noise, low power, 2 channels 12-bit successive
> > approximation ADCs.
> >
> > Signed-off-by: Kyle Hsieh <kylehsieh1995@gmail.com>
> Applied to the togreg branch of iio.git.
With this version I also noticed a clash, but I forgot to reply yesterday...
TBH, I prefer the approach in the other series. But this can also do it
by splitting the chip_info introduction to the separate change.
Anyway, if it's applied, in the case of _this_ work it's not a big deal as
the result looks sane.
> To hussle things along a touch I skipped the normal pushing
> it out as testing first (what could possibly go wrong ;)
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 0/3] iio: adc: ltc2309: add support driver for ltc2305
2026-03-25 19:50 ` [PATCH v5 0/3] iio: adc: ltc2309: add support driver " Jonathan Cameron
2026-03-26 8:35 ` Andy Shevchenko
@ 2026-03-27 1:32 ` Kyle Hsieh
1 sibling, 0 replies; 7+ messages in thread
From: Kyle Hsieh @ 2026-03-27 1:32 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Lars-Peter Clausen, Michael Hennerich, David Lechner,
Nuno Sá, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Liam Beguin, linux-iio, devicetree, linux-kernel
On Thu, Mar 26, 2026 at 3:50 AM Jonathan Cameron <jic23@kernel.org> wrote:
>
> On Wed, 25 Mar 2026 10:24:19 +0800
> Kyle Hsieh <kylehsieh1995@gmail.com> wrote:
>
> > The series add support for ltc2305 controller from
> > Linear Technology Corporation(lltc).
> > This is low noise, low power, 2 channels 12-bit successive
> > approximation ADCs.
> >
> > Signed-off-by: Kyle Hsieh <kylehsieh1995@gmail.com>
> Applied to the togreg branch of iio.git.
>
> To hussle things along a touch I skipped the normal pushing
> it out as testing first (what could possibly go wrong ;)
>
> Jonathan
Hi Jonathan,
I'm glad to see this series moving forward.
Thanks for your help!
Best regards,
Kyle
>
> > ---
> > Changes in v5:
> > - Split the patch series to refactor LTC2309 channel enums first.
> > - Explicitly assign hex values to channel enums based on datasheet.
> > - Add support for LTC2305 on top of the refactored driver.
> > - Link to v4: https://lore.kernel.org/r/20260311-add_ltc2305_driver-v4-0-bc350d347f33@gmail.com
> >
> > Changes in v4:
> > - Fix build warning in ltc2309_probe(): initialize 'chip_info'.
> > - Link to v3: https://lore.kernel.org/r/20260126-add_ltc2305_driver-v3-0-951349a87f97@gmail.com
> >
> > Changes in v3:
> > - Modify ltc2305 channel mask to compatible ltc2309.
> > - Link to v2: https://lore.kernel.org/r/20251224-add_ltc2305_driver-v2-0-061f78cf45a3@gmail.com
> >
> > Changes in v2:
> > - Reordered chip descriptions and code from low to high order.
> > - Renamed chip info structure to use ltc2309 driver prefix.
> > - Switched to i2c_get_match_data().
> > - Removed unused variables.
> > - Added chip info to i2c_device_id table.
> > - Link to v1: https://lore.kernel.org/r/20251223-add_ltc2305_driver-v1-0-dfa0827fd620@gmail.com
> >
> > ---
> > Kyle Hsieh (3):
> > dt-bindings: adc: ltc2497: add support for ltc2305
> > iio: adc: ltc2309: explicitly assign hex values to channel enums
> > iio: adc: ltc2309: add support for ltc2305
> >
> > .../devicetree/bindings/iio/adc/lltc,ltc2497.yaml | 7 ++
> > drivers/iio/adc/ltc2309.c | 81 ++++++++++++++++------
> > 2 files changed, 67 insertions(+), 21 deletions(-)
> > ---
> > base-commit: 9448598b22c50c8a5bb77a9103e2d49f134c9578
> > change-id: 20251223-add_ltc2305_driver-728fa9161bc7
> >
> > Best regards,
>
^ permalink raw reply [flat|nested] 7+ messages in thread