* [PATCH v4 0/3] iio: adc: ad9467: add support for ad9211
@ 2025-12-09 5:32 Tomas Melin
2025-12-09 5:32 ` [PATCH v4 1/3] dt-bindings: " Tomas Melin
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Tomas Melin @ 2025-12-09 5:32 UTC (permalink / raw)
To: Lars-Peter Clausen, Michael Hennerich, Nuno Sa, Jonathan Cameron,
David Lechner, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: Michael Hennerich, linux-iio, devicetree, linux-kernel,
Tomas Melin, Krzysztof Kozlowski, Andy Shevchenko
This series adds support for the ad9211, a variant of the already
supported devices.
Example usage:
$ cat name
ad9211
$ cat in_voltage_scale_available
0.957031 0.976562 0.996093 1.015625 1.035156 1.054687 1.074218
1.093750 1.113281 1.132812 1.152343 1.162109 1.171875 1.181640
1.191406 1.201171 1.220703 1.240234 1.259765 1.279296 1.298828
1.318359 1.337890 1.357421 1.376953 1.396484 1.416015 1.425781
1.435546 1.445312 1.455078 1.464843
Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/AD9211.pdf
Signed-off-by: Tomas Melin <tomas.melin@vaisala.com>
---
Changes in v4:
- Add commit which sorts include headers
- Drop array_size.h patch
- Link to v3: https://lore.kernel.org/r/20251208-add-ad9211-v3-0-c49897fa91c4@vaisala.com
Changes in v3:
- Add Cleanup kernel.h in favor of array_size.h patch
- Drop redundant empty line
- Amend commit messages
- Link to v2: https://lore.kernel.org/r/20251204-add-ad9211-v2-0-a1561f977ee5@vaisala.com
Changes in v2:
- Use HZ_PER_MHZ
- Update commit message texts.
- Link to v1: https://lore.kernel.org/r/20251203-add-ad9211-v1-0-170e97e6df11@vaisala.com
---
Tomas Melin (3):
dt-bindings: adc: ad9467: add support for ad9211
iio: adc: ad9467: sort header includes
iio: adc: ad9467: add support for ad9211
.../devicetree/bindings/iio/adc/adi,ad9467.yaml | 2 +
drivers/iio/adc/ad9467.c | 64 ++++++++++++++++++----
2 files changed, 54 insertions(+), 12 deletions(-)
---
base-commit: ac3fd01e4c1efce8f2c054cdeb2ddd2fc0fb150d
change-id: 20251203-add-ad9211-897dc9354185
Best regards,
--
Tomas Melin <tomas.melin@vaisala.com>
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v4 1/3] dt-bindings: adc: ad9467: add support for ad9211 2025-12-09 5:32 [PATCH v4 0/3] iio: adc: ad9467: add support for ad9211 Tomas Melin @ 2025-12-09 5:32 ` Tomas Melin 2025-12-09 5:32 ` [PATCH v4 2/3] iio: adc: ad9467: sort header includes Tomas Melin 2025-12-09 5:32 ` [PATCH v4 3/3] iio: adc: ad9467: add support for ad9211 Tomas Melin 2 siblings, 0 replies; 8+ messages in thread From: Tomas Melin @ 2025-12-09 5:32 UTC (permalink / raw) To: Lars-Peter Clausen, Michael Hennerich, Nuno Sa, Jonathan Cameron, David Lechner, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: Michael Hennerich, linux-iio, devicetree, linux-kernel, Tomas Melin, Krzysztof Kozlowski This device has e.g. different scaling values than currently listed devices. Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Signed-off-by: Tomas Melin <tomas.melin@vaisala.com> --- Documentation/devicetree/bindings/iio/adc/adi,ad9467.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad9467.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad9467.yaml index 2606c0c5dfc61fd65cd0fb2015b3f659c2fc9e07..5acfb0eef4d5cf487adaa93ce5bda759bb4853c9 100644 --- a/Documentation/devicetree/bindings/iio/adc/adi,ad9467.yaml +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad9467.yaml @@ -18,6 +18,7 @@ description: | All the parts support the register map described by Application Note AN-877 https://www.analog.com/media/en/technical-documentation/application-notes/AN-877.pdf + https://www.analog.com/media/en/technical-documentation/data-sheets/AD9211.pdf https://www.analog.com/media/en/technical-documentation/data-sheets/AD9265.pdf https://www.analog.com/media/en/technical-documentation/data-sheets/AD9434.pdf https://www.analog.com/media/en/technical-documentation/data-sheets/AD9467.pdf @@ -25,6 +26,7 @@ description: | properties: compatible: enum: + - adi,ad9211 - adi,ad9265 - adi,ad9434 - adi,ad9467 -- 2.47.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 2/3] iio: adc: ad9467: sort header includes 2025-12-09 5:32 [PATCH v4 0/3] iio: adc: ad9467: add support for ad9211 Tomas Melin 2025-12-09 5:32 ` [PATCH v4 1/3] dt-bindings: " Tomas Melin @ 2025-12-09 5:32 ` Tomas Melin 2025-12-09 14:41 ` Andy Shevchenko 2025-12-09 5:32 ` [PATCH v4 3/3] iio: adc: ad9467: add support for ad9211 Tomas Melin 2 siblings, 1 reply; 8+ messages in thread From: Tomas Melin @ 2025-12-09 5:32 UTC (permalink / raw) To: Lars-Peter Clausen, Michael Hennerich, Nuno Sa, Jonathan Cameron, David Lechner, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: Michael Hennerich, linux-iio, devicetree, linux-kernel, Tomas Melin Include headers in ascending order. Signed-off-by: Tomas Melin <tomas.melin@vaisala.com> --- drivers/iio/adc/ad9467.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/drivers/iio/adc/ad9467.c b/drivers/iio/adc/ad9467.c index f7a9f46ea0dc405e25f312197df4b2131871b4bc..9e79b313ba12f92455c009ae3ade01d1e566465e 100644 --- a/drivers/iio/adc/ad9467.c +++ b/drivers/iio/adc/ad9467.c @@ -8,25 +8,22 @@ #include <linux/bitmap.h> #include <linux/bitops.h> #include <linux/cleanup.h> +#include <linux/clk.h> #include <linux/debugfs.h> -#include <linux/module.h> -#include <linux/mutex.h> +#include <linux/delay.h> #include <linux/device.h> -#include <linux/kernel.h> -#include <linux/slab.h> -#include <linux/spi/spi.h> -#include <linux/seq_file.h> #include <linux/err.h> -#include <linux/delay.h> #include <linux/gpio/consumer.h> -#include <linux/of.h> - - #include <linux/iio/backend.h> #include <linux/iio/iio.h> #include <linux/iio/sysfs.h> - -#include <linux/clk.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/mutex.h> +#include <linux/of.h> +#include <linux/seq_file.h> +#include <linux/slab.h> +#include <linux/spi/spi.h> /* * ADI High-Speed ADC common spi interface registers -- 2.47.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v4 2/3] iio: adc: ad9467: sort header includes 2025-12-09 5:32 ` [PATCH v4 2/3] iio: adc: ad9467: sort header includes Tomas Melin @ 2025-12-09 14:41 ` Andy Shevchenko 2025-12-09 15:46 ` Tomas Melin 0 siblings, 1 reply; 8+ messages in thread From: Andy Shevchenko @ 2025-12-09 14:41 UTC (permalink / raw) To: Tomas Melin Cc: Lars-Peter Clausen, Michael Hennerich, Nuno Sa, Jonathan Cameron, David Lechner, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio, devicetree, linux-kernel On Tue, Dec 9, 2025 at 7:34 AM Tomas Melin <tomas.melin@vaisala.com> wrote: > > Include headers in ascending order. Thanks, but... > #include <linux/iio/backend.h> > #include <linux/iio/iio.h> > #include <linux/iio/sysfs.h> ...this was specifically grouped to show the relation to the certain subsystem. At the end we should have something like this linux/*.h // generic ones ...blank line... asm/*.h // generic ones (optionally, if there is a need in a such) ...blank line... linux/iio/*.h ...blank line... So, what I meant with fixing clk.h is just to move it to the main group and sort that. You can check (recent enough) drivers for the examples. Yes, some of them (but minority IIRC) might have linux/iio/*.h among linux/*.h, but usually they are grouped separately. -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 2/3] iio: adc: ad9467: sort header includes 2025-12-09 14:41 ` Andy Shevchenko @ 2025-12-09 15:46 ` Tomas Melin 2025-12-09 18:17 ` Andy Shevchenko 0 siblings, 1 reply; 8+ messages in thread From: Tomas Melin @ 2025-12-09 15:46 UTC (permalink / raw) To: Andy Shevchenko Cc: Lars-Peter Clausen, Michael Hennerich, Nuno Sa, Jonathan Cameron, David Lechner, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio, devicetree, linux-kernel On 09/12/2025 16:41, Andy Shevchenko wrote: > On Tue, Dec 9, 2025 at 7:34 AM Tomas Melin <tomas.melin@vaisala.com> wrote: >> >> Include headers in ascending order. > > Thanks, but... > >> #include <linux/iio/backend.h> >> #include <linux/iio/iio.h> >> #include <linux/iio/sysfs.h> > > ...this was specifically grouped to show the relation to the certain > subsystem. At the end we should have something like this > > linux/*.h // generic ones > ...blank line... > asm/*.h // generic ones (optionally, if there is a need in a such) > ...blank line... > linux/iio/*.h > ...blank line... Thanks for the clarification. Sure, it's not a big deal to do a new version. But FWIW, that convention is not AFAIS explicitly stated anywhere and with even recent drivers not all following it, it's somewhat hard to know what expected formatting should be. It would really be good to have that documented somewhere. Thanks, Tomas > > So, what I meant with fixing clk.h is just to move it to the main > group and sort that. > > You can check (recent enough) drivers for the examples. Yes, some of > them (but minority IIRC) might have linux/iio/*.h among linux/*.h, but > usually they are grouped separately. > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 2/3] iio: adc: ad9467: sort header includes 2025-12-09 15:46 ` Tomas Melin @ 2025-12-09 18:17 ` Andy Shevchenko 2025-12-13 16:34 ` Jonathan Cameron 0 siblings, 1 reply; 8+ messages in thread From: Andy Shevchenko @ 2025-12-09 18:17 UTC (permalink / raw) To: Tomas Melin Cc: Andy Shevchenko, Lars-Peter Clausen, Michael Hennerich, Nuno Sa, Jonathan Cameron, David Lechner, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio, devicetree, linux-kernel On Tue, Dec 09, 2025 at 05:46:16PM +0200, Tomas Melin wrote: > On 09/12/2025 16:41, Andy Shevchenko wrote: > > On Tue, Dec 9, 2025 at 7:34 AM Tomas Melin <tomas.melin@vaisala.com> wrote: > >> > >> Include headers in ascending order. > > > > Thanks, but... > > > >> #include <linux/iio/backend.h> > >> #include <linux/iio/iio.h> > >> #include <linux/iio/sysfs.h> > > > > ...this was specifically grouped to show the relation to the certain > > subsystem. At the end we should have something like this > > > > linux/*.h // generic ones > > ...blank line... > > asm/*.h // generic ones (optionally, if there is a need in a such) > > ...blank line... > > linux/iio/*.h > > ...blank line... > > Thanks for the clarification. Sure, it's not a big deal to do a new > version. But FWIW, that convention is not AFAIS explicitly stated > anywhere and with even recent drivers not all following it, it's > somewhat hard to know what expected formatting should be. > It would really be good to have that documented somewhere. I fully agree. The problem with such a documentation is that you will always have 50/50% split at best. At worse ~100% will be against any doc updates like this. For minimum we can do it on an IIO level (only for this subsystem), see how others do Documentation/process/maintainer-*.rst. There is no IIO. You can start it :-) -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 2/3] iio: adc: ad9467: sort header includes 2025-12-09 18:17 ` Andy Shevchenko @ 2025-12-13 16:34 ` Jonathan Cameron 0 siblings, 0 replies; 8+ messages in thread From: Jonathan Cameron @ 2025-12-13 16:34 UTC (permalink / raw) To: Andy Shevchenko Cc: Tomas Melin, Andy Shevchenko, Lars-Peter Clausen, Michael Hennerich, Nuno Sa, David Lechner, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio, devicetree, linux-kernel On Tue, 9 Dec 2025 20:17:45 +0200 Andy Shevchenko <andriy.shevchenko@intel.com> wrote: > On Tue, Dec 09, 2025 at 05:46:16PM +0200, Tomas Melin wrote: > > On 09/12/2025 16:41, Andy Shevchenko wrote: > > > On Tue, Dec 9, 2025 at 7:34 AM Tomas Melin <tomas.melin@vaisala.com> wrote: > > >> > > >> Include headers in ascending order. > > > > > > Thanks, but... > > > > > >> #include <linux/iio/backend.h> > > >> #include <linux/iio/iio.h> > > >> #include <linux/iio/sysfs.h> > > > > > > ...this was specifically grouped to show the relation to the certain > > > subsystem. At the end we should have something like this > > > > > > linux/*.h // generic ones > > > ...blank line... > > > asm/*.h // generic ones (optionally, if there is a need in a such) > > > ...blank line... > > > linux/iio/*.h > > > ...blank line... > > > > Thanks for the clarification. Sure, it's not a big deal to do a new > > version. But FWIW, that convention is not AFAIS explicitly stated > > anywhere and with even recent drivers not all following it, it's > > somewhat hard to know what expected formatting should be. > > It would really be good to have that documented somewhere. > > I fully agree. The problem with such a documentation is that you will always > have 50/50% split at best. At worse ~100% will be against any doc updates > like this. For minimum we can do it on an IIO level (only for this subsystem), > see how others do Documentation/process/maintainer-*.rst. There is no IIO. > You can start it :-) > That maintainer doc is my xmas holiday todo list. Then again it was on there last year and I think the year before :( It's possibly something where we need a rolling draft for a bit out of tree so that by the time it actually merges it doesn't imply things simply because we forgot certain aspects. Jonathan ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 3/3] iio: adc: ad9467: add support for ad9211 2025-12-09 5:32 [PATCH v4 0/3] iio: adc: ad9467: add support for ad9211 Tomas Melin 2025-12-09 5:32 ` [PATCH v4 1/3] dt-bindings: " Tomas Melin 2025-12-09 5:32 ` [PATCH v4 2/3] iio: adc: ad9467: sort header includes Tomas Melin @ 2025-12-09 5:32 ` Tomas Melin 2 siblings, 0 replies; 8+ messages in thread From: Tomas Melin @ 2025-12-09 5:32 UTC (permalink / raw) To: Lars-Peter Clausen, Michael Hennerich, Nuno Sa, Jonathan Cameron, David Lechner, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: Michael Hennerich, linux-iio, devicetree, linux-kernel, Tomas Melin, Andy Shevchenko The AD9211 is a 10-bit monolithic sampling analog-to-digital converter optimized for high performance, low power, and ease of use. The product operates at up to a 300 MSPS conversion rate and is optimized for outstanding dynamic performance in wideband carrier and broadband systems. The scale table implemented here is not an exact match with the datasheet as the table presented there is missing some information. The reference presents these values as being linear, but that does not add up. There is information missing in the table. Implemented scale table matches values at the middle and at the ends, smoothing the curve towards middle and end. Impact on end result from deviation in scale factor affects only software using it for scaling. All the possible hw-settings are also available with this implementation. Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/AD9211.pdf Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com> Signed-off-by: Tomas Melin <tomas.melin@vaisala.com> --- drivers/iio/adc/ad9467.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/drivers/iio/adc/ad9467.c b/drivers/iio/adc/ad9467.c index 9e79b313ba12f92455c009ae3ade01d1e566465e..63428e2e5e07d0a26011a2bba3240acf82bc971f 100644 --- a/drivers/iio/adc/ad9467.c +++ b/drivers/iio/adc/ad9467.c @@ -24,6 +24,7 @@ #include <linux/seq_file.h> #include <linux/slab.h> #include <linux/spi/spi.h> +#include <linux/units.h> /* * ADI High-Speed ADC common spi interface registers @@ -78,6 +79,14 @@ /* AN877_ADC_REG_OUTPUT_DELAY */ #define AN877_ADC_DCO_DELAY_ENABLE 0x80 +/* + * Analog Devices AD9211 10-Bit, 200/250/300 MSPS ADC + */ + +#define CHIPID_AD9211 0x06 +#define AD9211_DEF_OUTPUT_MODE 0x00 +#define AD9211_REG_VREF_MASK GENMASK(4, 0) + /* * Analog Devices AD9265 16-Bit, 125/105/80 MSPS ADC */ @@ -231,6 +240,17 @@ static int ad9467_reg_access(struct iio_dev *indio_dev, unsigned int reg, return 0; } +static const unsigned int ad9211_scale_table[][2] = { + {980, 0x10}, {1000, 0x11}, {1020, 0x12}, {1040, 0x13}, + {1060, 0x14}, {1080, 0x15}, {1100, 0x16}, {1120, 0x17}, + {1140, 0x18}, {1160, 0x19}, {1180, 0x1A}, {1190, 0x1B}, + {1200, 0x1C}, {1210, 0x1D}, {1220, 0x1E}, {1230, 0x1F}, + {1250, 0x0}, {1270, 0x1}, {1290, 0x2}, {1310, 0x3}, + {1330, 0x4}, {1350, 0x5}, {1370, 0x6}, {1390, 0x7}, + {1410, 0x8}, {1430, 0x9}, {1450, 0xA}, {1460, 0xB}, + {1470, 0xC}, {1480, 0xD}, {1490, 0xE}, {1500, 0xF}, +}; + static const unsigned int ad9265_scale_table[][2] = { {1250, 0x00}, {1500, 0x40}, {1750, 0x80}, {2000, 0xC0}, }; @@ -294,6 +314,10 @@ static void __ad9467_get_scale(struct ad9467_state *st, int index, }, \ } +static const struct iio_chan_spec ad9211_channels[] = { + AD9467_CHAN(0, BIT(IIO_CHAN_INFO_SCALE), 0, 10, 's'), +}; + static const struct iio_chan_spec ad9434_channels[] = { AD9467_CHAN(0, BIT(IIO_CHAN_INFO_SCALE), 0, 12, 's'), }; @@ -366,6 +390,23 @@ static const struct ad9467_chip_info ad9434_chip_tbl = { .num_lanes = 6, }; +static const struct ad9467_chip_info ad9211_chip_tbl = { + .name = "ad9211", + .id = CHIPID_AD9211, + .max_rate = 300 * HZ_PER_MHZ, + .scale_table = ad9211_scale_table, + .num_scales = ARRAY_SIZE(ad9211_scale_table), + .channels = ad9211_channels, + .num_channels = ARRAY_SIZE(ad9211_channels), + .test_points = AD9647_MAX_TEST_POINTS, + .test_mask = GENMASK(AN877_ADC_TESTMODE_ONE_ZERO_TOGGLE, + AN877_ADC_TESTMODE_OFF), + .test_mask_len = AN877_ADC_TESTMODE_ONE_ZERO_TOGGLE + 1, + .default_output_mode = AD9211_DEF_OUTPUT_MODE, + .vref_mask = AD9211_REG_VREF_MASK, + .has_dco = true, +}; + static const struct ad9467_chip_info ad9265_chip_tbl = { .name = "ad9265", .id = CHIPID_AD9265, @@ -1261,6 +1302,7 @@ static int ad9467_probe(struct spi_device *spi) } static const struct of_device_id ad9467_of_match[] = { + { .compatible = "adi,ad9211", .data = &ad9211_chip_tbl, }, { .compatible = "adi,ad9265", .data = &ad9265_chip_tbl, }, { .compatible = "adi,ad9434", .data = &ad9434_chip_tbl, }, { .compatible = "adi,ad9467", .data = &ad9467_chip_tbl, }, @@ -1272,6 +1314,7 @@ static const struct of_device_id ad9467_of_match[] = { MODULE_DEVICE_TABLE(of, ad9467_of_match); static const struct spi_device_id ad9467_ids[] = { + { "ad9211", (kernel_ulong_t)&ad9211_chip_tbl }, { "ad9265", (kernel_ulong_t)&ad9265_chip_tbl }, { "ad9434", (kernel_ulong_t)&ad9434_chip_tbl }, { "ad9467", (kernel_ulong_t)&ad9467_chip_tbl }, -- 2.47.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-12-13 16:35 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-12-09 5:32 [PATCH v4 0/3] iio: adc: ad9467: add support for ad9211 Tomas Melin 2025-12-09 5:32 ` [PATCH v4 1/3] dt-bindings: " Tomas Melin 2025-12-09 5:32 ` [PATCH v4 2/3] iio: adc: ad9467: sort header includes Tomas Melin 2025-12-09 14:41 ` Andy Shevchenko 2025-12-09 15:46 ` Tomas Melin 2025-12-09 18:17 ` Andy Shevchenko 2025-12-13 16:34 ` Jonathan Cameron 2025-12-09 5:32 ` [PATCH v4 3/3] iio: adc: ad9467: add support for ad9211 Tomas Melin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox