public inbox for devicetree@vger.kernel.org
 help / color / mirror / Atom feed
From: "Nuno Sá" <noname.nuno@gmail.com>
To: David Lechner <dlechner@baylibre.com>,
	Rodrigo Alencar <455.rodrigo.alencar@gmail.com>,
	rodrigo.alencar@analog.com,  linux-iio@vger.kernel.org,
	devicetree@vger.kernel.org,  linux-kernel@vger.kernel.org
Cc: Lars-Peter Clausen <lars@metafoo.de>,
	Michael Hennerich	 <Michael.Hennerich@analog.com>,
	Jonathan Cameron <jic23@kernel.org>,
	Andy Shevchenko <andy@kernel.org>, Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	 Conor Dooley <conor+dt@kernel.org>,
	Philipp Zabel <p.zabel@pengutronix.de>
Subject: Re: [PATCH RFC 0/8] AD9910 Direct Digital Synthesizer
Date: Mon, 23 Feb 2026 10:02:00 +0000	[thread overview]
Message-ID: <9392fea00a9c3b23d1bc9468faa1b3cc20904398.camel@gmail.com> (raw)
In-Reply-To: <bdc973e5-df74-48f2-8884-439b03565940@baylibre.com>

On Sun, 2026-02-22 at 14:32 -0600, David Lechner wrote:
> On 2/22/26 4:01 AM, Rodrigo Alencar wrote:
> > On 26/02/21 02:16PM, David Lechner wrote:
> > > On 2/20/26 10:46 AM, Rodrigo Alencar via B4 Relay wrote:
> > > > This patch series adds support for the Analog Devices AD9910 DDS.
> > > > This is an RFC so that we can agree/discuss on the design that follows:
> > > > 
> 
> ...
> 
> > > > represents a distinct signal path into the DDS accumulator, so the driver
> > > > models them as separate IIO output channels (all IIO_ALTVOLTAGE type).
> > > 
> > > Generally IIO channels represent the physical input/output, not the
> > > internal channels.
> > 
> > That is part of the reason for this RFC. Dividing those top-level modes
> > into channels allows for better organization, as they can operate together,
> > i.e., phase or scale can be provided by single-tone profile, while
> > frequency is controlled by the digital ramp generator (see Mode Priority
> > section in the datasheet). Also, it allows to explore the most of standard
> > ABIs like, scale, frequency, phase, sampling_frequency and enable.
> > Putting everything into a single channel would make things a lot messy
> > to interface with.
> > 
> > > Ideally we would just have the one channel here with a mode selection
> > > attribute. Documentation can tell us which modes use which attributes.
> > > 
> > > > This per-channel separation allows userspace to configure each mode
> > > > independently through its own set of sysfs attributes, and to
> > > > enable/disable modes individually via IIO_CHAN_INFO_ENABLE, relying on
> > > > the hardware's own mode selection architecture.
> > > > 
> 
> Looking at Table 5 in the datasheet really helped me understand this better.
> I think this series could benefit from a documentation patch that explains
> more about how the driver works with some diagrams.
> 
> So really what we have here are a bunch of digital data generators rather
> than a bunch of altvotlage output channels. And the same data channels can be
> mixed and match as the source for up to 3 different components of the output
> (frequency, phase, amplitude) depending on the priority rules defined in
> Table 5.

More bellow... But note that all of the (or most of it) generators are going to
be feed into a DAC. Your output is altvoltage but maybe we can treat the
internals as voltage. Not sure.
 
> 
> Digital data sources are really more like a buffer in IIO terms than a
> channel. And before we added the IIO backend stuff, there wasn't really
> any other digital data source/sink that I am aware of other than buffers
> (but there are certainly a lot of odd corners of IIO that I haven't explored
> yet, so maybe I missed some).
> 
> In a recent discussion, the idea of possibly needing a way to provide
> some userspace interface to be able to tweak knobs of an IIO backend
> was also brought up.
> 
> Putting those ideas together, I'm wondering if we need some new channel
> type or even a whole new interface (e.g. a new sysfs directory like buffers
> and events) for managing these digital data sources/sinks that are not an
> IIO buffer.
> 

But what would be that channel? In the end of the day, we typically have voltage or
current DACs and a DDS primary function is indeed to generate alternating waveforms
that you then typically feed into a DAC (and in some cases from the DAC into a
power amplifier). So the DDS is just part of the data/signal path. Anyways, not sure
on the new type and I think we already have the "blocks" in IIO for dealing with this:

. frequency
. phase
. amplitude (raw + scale + offset)

But you're right that maybe it's time to think in a better way to fit them together. 
Maybe a new type (as buffers or events) can make sense where the above are treated as, example, scan
elements. Maybe it's overcomplicating, not sure. It surely needs  discussion and thinking :).

And spoiler alert, as you might have guessed already, the parallel port stuff is to be
used with DMA buffers (and IIO backends). At least, that was the plan IIRC. But Rodrigo
can confirm it.

> I think we've seen enough of these already to know that things like a
> "tone generator" and a "ramp generator" are going to be common and could
> share some standard attributes. 
> 

I tend to agree. For example, there already some DACs (with dithering) that make use of a similar
interface (but with a custom prefix). Though the end goal is different, the interface is not that
far off:


https://elixir.bootlin.com/linux/v6.19.3/source/Documentation/ABI/testing/sysfs-bus-iio-dac-ltc2688

Anyways, I knew this one would be an interesting one for upstream :)

- Nuno Sá

  reply	other threads:[~2026-02-23 10:01 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-20 16:46 [PATCH RFC 0/8] AD9910 Direct Digital Synthesizer Rodrigo Alencar via B4 Relay
2026-02-20 16:46 ` [PATCH RFC 1/8] dt-bindings: iio: frequency: add ad9910 Rodrigo Alencar via B4 Relay
2026-02-21 20:43   ` David Lechner
2026-02-21 22:43     ` Conor Dooley
2026-02-22 10:49       ` Rodrigo Alencar
2026-02-22 13:24         ` Conor Dooley
2026-02-22 10:47     ` Rodrigo Alencar
2026-02-22 20:28       ` David Lechner
2026-02-22 20:31       ` Conor Dooley
2026-03-01 12:50   ` Jonathan Cameron
2026-02-20 16:46 ` [PATCH RFC 2/8] iio: frequency: ad9910: initial driver implementation Rodrigo Alencar via B4 Relay
2026-03-01 13:20   ` Jonathan Cameron
2026-02-20 16:46 ` [PATCH RFC 3/8] iio: frequency: ad9910: add simple parallel port mode support Rodrigo Alencar via B4 Relay
2026-02-23  8:27   ` Andy Shevchenko
2026-03-01 13:22   ` Jonathan Cameron
2026-02-20 16:46 ` [PATCH RFC 4/8] iio: frequency: ad9910: expose sysclk_frequency device attribute Rodrigo Alencar via B4 Relay
2026-03-01 13:23   ` Jonathan Cameron
2026-02-20 16:46 ` [PATCH RFC 5/8] iio: frequency: ad9910: add digital ramp generator support Rodrigo Alencar via B4 Relay
2026-03-01 13:26   ` Jonathan Cameron
2026-02-20 16:46 ` [PATCH RFC 6/8] iio: frequency: ad9910: add RAM mode support Rodrigo Alencar via B4 Relay
2026-03-01 13:31   ` Jonathan Cameron
2026-03-03 15:32     ` Rodrigo Alencar
2026-03-03 17:16       ` Nuno Sá
2026-03-03 17:32         ` Rodrigo Alencar
2026-03-07 14:07     ` Jonathan Cameron
2026-03-10 17:40       ` Rodrigo Alencar
2026-03-11  0:11         ` David Lechner
2026-03-11 13:11           ` Rodrigo Alencar
2026-03-11 16:54             ` Nuno Sá
2026-03-11 17:08               ` Rodrigo Alencar
2026-02-20 16:46 ` [PATCH RFC 7/8] iio: frequency: ad9910: add output shift keying support Rodrigo Alencar via B4 Relay
2026-02-20 16:46 ` [PATCH RFC 8/8] iio: frequency: ad9910: add channel labels Rodrigo Alencar via B4 Relay
2026-02-21 20:16 ` [PATCH RFC 0/8] AD9910 Direct Digital Synthesizer David Lechner
2026-02-22 10:01   ` Rodrigo Alencar
2026-02-22 20:32     ` David Lechner
2026-02-23 10:02       ` Nuno Sá [this message]
2026-03-01 13:38         ` Jonathan Cameron
2026-03-02 10:22           ` Rodrigo Alencar
2026-03-07 14:09             ` Jonathan Cameron
2026-03-07 16:50               ` David Lechner
2026-03-07 16:58                 ` Jonathan Cameron
2026-03-07 18:54                   ` Rodrigo Alencar
2026-03-07 20:01                     ` David Lechner
2026-03-08 18:12                       ` Jonathan Cameron
2026-03-09  9:52                         ` Rodrigo Alencar
2026-03-09 13:14                           ` Nuno Sá

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=9392fea00a9c3b23d1bc9468faa1b3cc20904398.camel@gmail.com \
    --to=noname.nuno@gmail.com \
    --cc=455.rodrigo.alencar@gmail.com \
    --cc=Michael.Hennerich@analog.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=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=p.zabel@pengutronix.de \
    --cc=robh@kernel.org \
    --cc=rodrigo.alencar@analog.com \
    /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