From: Stephan Costa Barros <stephanbrrs8@gmail.com>
To: Jonathan Cameron <jic23@kernel.org>
Cc: "David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Mike Looijmans" <mike.looijmans@topic.nl>,
linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
"Stephan Costa Barros" <stephanbrrs8@gmail.com>
Subject: [PATCH 1/2] dt-bindings: iio: adc: add TI ADS1299
Date: Sun, 18 Oct 2026 21:12:46 -0300 [thread overview]
Message-ID: <20261019001247.483005-2-stephanbrrs8@gmail.com> (raw)
In-Reply-To: <20261019001247.483005-1-stephanbrrs8@gmail.com>
The ADS1299 is an 8-channel, 24-bit, simultaneous-sampling biopotential
(EEG) analog front-end with an SPI interface. The ADS1299-6 and ADS1299-4
are the same part with six and four channels.
One converter can drive its clock out of its CLK pin to the others
(#clock-cells), and converters sharing a chip select in daisy-chain mode
are described as one node with #daisy-chained-devices.
Signed-off-by: Stephan Costa Barros <stephanbrrs8@gmail.com>
---
.../bindings/iio/adc/ti,ads1299.yaml | 221 ++++++++++++++++++
MAINTAINERS | 6 +
2 files changed, 227 insertions(+)
create mode 100644 Documentation/devicetree/bindings/iio/adc/ti,ads1299.yaml
diff --git a/Documentation/devicetree/bindings/iio/adc/ti,ads1299.yaml b/Documentation/devicetree/bindings/iio/adc/ti,ads1299.yaml
new file mode 100644
index 000000000..a8966cd07
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/adc/ti,ads1299.yaml
@@ -0,0 +1,221 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/adc/ti,ads1299.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Texas Instruments ADS1299 biopotential analog front-end
+
+maintainers:
+ - Stephan Costa Barros <stephanbrrs8@gmail.com>
+
+description: |
+ Texas Instruments ADS1299 family: low-noise, 24-bit, simultaneous-sampling
+ biopotential (EEG) analog front-ends with an SPI interface. The ADS1299 has
+ eight channels, the ADS1299-6 six and the ADS1299-4 four.
+
+ Each channel has its own programmable gain amplifier and a multiplexer that
+ can select the electrode inputs, a shorted input, the internal test signal,
+ the supply or the temperature sensor. The part also provides lead-off
+ detection and a bias drive amplifier for the driven reference electrode.
+
+ The converter signals a completed conversion on its DRDY output and is read
+ over SPI in mode 1 (CPOL=0, CPHA=1).
+
+ Several converters can share one SPI bus in two ways. In cascaded mode each
+ has its own chip select and its own node; one of them can drive its internal
+ oscillator out of its CLK pin (#clock-cells) for the others to use as their
+ external clock. In daisy-chain mode they share the chip select and DIN, the
+ DOUT of each one feeds the DAISY_IN of the one before it, and the chain is a
+ single node with #daisy-chained-devices. A daisy chain shares DIN, so every
+ register write reaches every device: the devices run with one configuration
+ and from one external clock, and the bias drive amplifier cannot be used.
+
+ https://www.ti.com/lit/gpn/ads1299
+
+properties:
+ compatible:
+ enum:
+ - ti,ads1299
+ - ti,ads1299-4
+ - ti,ads1299-6
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+ description:
+ The DRDY output of the converter, asserted low when a conversion is
+ ready to be read.
+
+ reset-gpios:
+ maxItems: 1
+ description: The active-low RESET input of the converter.
+
+ powerdown-gpios:
+ maxItems: 1
+ description:
+ The active-low PWDN input.
+
+ clocks:
+ maxItems: 1
+ description:
+ External clock on the CLK pin, used when the CLKSEL pin selects an
+ external clock. Omit when the part runs from its internal oscillator.
+
+ clock-names:
+ const: clk
+
+ '#clock-cells':
+ const: 0
+ description:
+ The CLK pin as a clock output, for a part whose CLKSEL pin selects the
+ internal oscillator.
+
+ clock-output-names:
+ maxItems: 1
+
+ gpio-controller:
+ description:
+ GPIO1 to GPIO4 are wired for use as general-purpose pins. Omit when they
+ are tied to DGND, as the datasheet asks of unused ones, so that no pin
+ tied to ground can be driven as an output.
+
+ '#gpio-cells':
+ const: 2
+
+ gpio-line-names:
+ minItems: 1
+ maxItems: 4
+
+ '#daisy-chained-devices':
+ description:
+ Number of converters in the daisy chain, all of the type the compatible
+ names. Their channels are reported in chain order, the device whose DOUT
+ reaches the host first.
+ minimum: 1
+ maximum: 8
+ default: 1
+
+ avdd-supply:
+ description: Analog supply.
+
+ dvdd-supply:
+ description: Digital supply.
+
+ vref-supply:
+ description:
+ External voltage reference on VREFP. Omit to use the internal 4.5 V
+ reference.
+
+ biasref-supply:
+ description:
+ External voltage on the BIASREF pin, the reference of the bias drive
+ amplifier. Omit to have the part generate (AVDD + AVSS) / 2.
+
+ spi-cpha: true
+
+required:
+ - compatible
+ - reg
+ - interrupts
+ - avdd-supply
+ - spi-cpha
+
+allOf:
+ - $ref: /schemas/spi/spi-peripheral-props.yaml#
+ - if:
+ required:
+ - '#clock-cells'
+ then:
+ properties:
+ clocks: false
+ - if:
+ required:
+ - '#daisy-chained-devices'
+ properties:
+ '#daisy-chained-devices':
+ minimum: 2
+ then:
+ required:
+ - clocks
+ properties:
+ '#clock-cells': false
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ #include <dt-bindings/interrupt-controller/irq.h>
+
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ adc@0 {
+ compatible = "ti,ads1299";
+ reg = <0>;
+ spi-max-frequency = <4000000>;
+ spi-cpha;
+ interrupt-parent = <&gpio1>;
+ interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
+ powerdown-gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
+ avdd-supply = <®_avdd>;
+ dvdd-supply = <®_dvdd>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ gpio-line-names = "ADC_GPIO1", "ADC_GPIO2", "", "STATUS_LED";
+ };
+ };
+ - |
+ #include <dt-bindings/interrupt-controller/irq.h>
+
+ /* Cascaded: the first converter clocks the second */
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ adc0: adc@0 {
+ compatible = "ti,ads1299";
+ reg = <0>;
+ spi-cpha;
+ interrupt-parent = <&gpio1>;
+ interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
+ avdd-supply = <®_avdd>;
+ #clock-cells = <0>;
+ };
+
+ adc@1 {
+ compatible = "ti,ads1299";
+ reg = <1>;
+ spi-cpha;
+ interrupt-parent = <&gpio1>;
+ interrupts = <6 IRQ_TYPE_EDGE_FALLING>;
+ avdd-supply = <®_avdd>;
+ clocks = <&adc0>;
+ clock-names = "clk";
+ };
+ };
+ - |
+ #include <dt-bindings/interrupt-controller/irq.h>
+
+ /* Daisy chain: three converters, 24 channels, one chip select */
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ adc@0 {
+ compatible = "ti,ads1299";
+ reg = <0>;
+ spi-cpha;
+ interrupt-parent = <&gpio1>;
+ interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
+ avdd-supply = <®_avdd>;
+ clocks = <&osc_2048k>;
+ clock-names = "clk";
+ #daisy-chained-devices = <3>;
+ };
+ };
diff --git a/MAINTAINERS b/MAINTAINERS
index 52024397d..b4a8e4573 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -27370,6 +27370,12 @@ S: Maintained
F: Documentation/devicetree/bindings/iio/adc/ti,ads1018.yaml
F: drivers/iio/adc/ti-ads1018.c
+TI ADS1299 ADC DRIVER
+M: Stephan Costa Barros <stephanbrrs8@gmail.com>
+L: linux-iio@vger.kernel.org
+S: Maintained
+F: Documentation/devicetree/bindings/iio/adc/ti,ads1299.yaml
+
TI ADS7924 ADC DRIVER
M: Hugo Villeneuve <hvilleneuve@dimonoff.com>
L: linux-iio@vger.kernel.org
--
2.43.0
next prev parent reply other threads:[~2026-10-19 0:13 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-19 0:12 [PATCH 0/2] " Stephan Costa Barros
2026-10-19 0:12 ` Stephan Costa Barros [this message]
2026-10-19 0:12 ` [PATCH 2/2] iio: adc: ti-ads1299: add driver for " Stephan Costa Barros
2026-10-19 7:03 ` Uwe Kleine-König
2026-10-19 10:16 ` [PATCH 0/2] iio: adc: add " Andy Shevchenko
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=20261019001247.483005-2-stephanbrrs8@gmail.com \
--to=stephanbrrs8@gmail.com \
--cc=andy@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=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mike.looijmans@topic.nl \
--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
all inboxes | Powered by JetHome®