From: "Nuno Sá" <nuno.sa@analog.com>
To: <linux-iio@vger.kernel.org>
Cc: Jonathan Cameron <jic23@kernel.org>
Subject: [RFC PATCH 0/1] LTC2688 support
Date: Thu, 11 Nov 2021 12:00:42 +0100 [thread overview]
Message-ID: <20211111110043.101891-1-nuno.sa@analog.com> (raw)
The reason why this is a RFC is because I'm still waiting for proper HW
to test this thing. The reason why I'm sending this already is because
there's some non usual features which might require extra ABI. Hence,
while waiting I thought we could already speed up the process in regards
with the ABI.
I still pushed the driver but the intent here is not really to review it.
Naturally, if someone already wants to give some feedback, that's very
much appreciated :)
Now, there are three main interfaces depending on the channel mode:
1) default (no new ABI)
2) toggle mode
3) dither mode
The channel mode will be a devicetree property as it does not really
make much sense to change between modes at runtime even more because the
piece of HW we might want to control with a channel might be different
depending on the selected mode (I'm fairly sure on this between toggle
and other modes but not so sure between dither and default mode).
toggle mode special ABI:
* Toggle operation enables fast switching of a DAC output between two
different DAC codes without any SPI transaction. Two codes are set in
input_a and input_b and then the output switches according to an input
signal (input_a -> clk high; input_b -> clk low).
out_voltageY_input_register
- selects between input_a and input_b. After selecting one register, we
can write the dac code in out_voltageY_raw.
out_voltageY_toggle_en
- Disable/Enable toggle mode. The reason why I think this one is
important is because if we wanna change the 2 codes, we should first
disable this, set the codes and only then enable the mode back...
As I'm writing this, It kind of came to me that we can probably
achieve this with out_voltageY_powerdown attr (maybe takes a bit more
time to see the outputs but...)
dither mode special ABI:
* Dither operation adds a small sinusoidal wave to the digital DAC
signal path. Dithering is a signal processing technique that involves
the injection of ac noise to the signal path to reduce system
nonlinearities.
out_voltage0_dither_en
- Same as in toggle mode.
out_voltage0_dither_period
out_voltage0_dither_phase
- Period and phase of the signal. Only some values are valid so there's
also *_available files for these. I'm not sure if we can use the more
generic IIO_CHAN_INFO_PHASE and IIO_CHAN_INFO_FREQUENCY here as these
parameters don't really apply to the channel output signal...
out_voltage0_input_register
- Same as in toggle mode. However in this mode the code set in the
input_b register has a special meaning. It's the amplitude of the
dither signal.
One special mention to the dac scale. In this part this is something
that can be purely controlled by SW so that I'm allowing userspace to
change it rather then having it in dts. The available scales are:
* [0 5V] -> offset 0
* [0 10V] -> offset 0
* [-5 5V] -> offset -32678
* [-10 10V] -> offset -32768
* [-15 15V] -> offset -32768
With the above, we also need to have the offset configurable and right
now I'm going to some trouble to make sure the scale + offset is
something valid. Honestly, I think I'm overdoing it because things can
still go wrong with [0 10V] and [-5 5V] as the scales are the same
here. Furthermore, there's no real arm that can be done to the HW. Is
just that the readings won't match with what someone might be expecting.
My plan is to just remove those checks and assume is up to userspace to
make it right and not have [-10 10V] scale with 0 offset for example.
I know that I'm taking a shortcut here :) so if you prefer to only
discuss this in the __real__ series, I totally get it.
https://www.analog.com/media/en/technical-documentation/data-sheets/ltc2688.pdf
- Nuno Sá
Nuno Sá (1):
iio: dac: add support for ltc2688
drivers/iio/dac/ltc2688.c | 995 ++++++++++++++++++++++++++++++++++++++
1 file changed, 995 insertions(+)
create mode 100644 drivers/iio/dac/ltc2688.c
--
2.33.1
next reply other threads:[~2021-11-11 11:00 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-11 11:00 Nuno Sá [this message]
2021-11-11 11:00 ` [RFC PATCH 1/1] iio: dac: add support for ltc2688 Nuno Sá
2021-11-11 13:49 ` Andy Shevchenko
2021-11-11 14:30 ` Sa, Nuno
2021-11-11 14:41 ` Andy Shevchenko
2021-11-11 15:24 ` Sa, Nuno
2021-11-12 15:22 ` Jonathan Cameron
2021-11-12 15:40 ` Sa, Nuno
2021-11-12 16:14 ` [RFC PATCH 0/1] LTC2688 support Jonathan Cameron
2021-11-15 10:28 ` Sa, Nuno
2021-11-21 12:17 ` Jonathan Cameron
2021-11-30 14:43 ` Sa, Nuno
2021-12-02 15:37 ` Sa, Nuno
2021-12-05 18:03 ` Jonathan Cameron
2021-12-06 11:07 ` Sa, Nuno
2021-12-06 13:09 ` Jonathan Cameron
2021-12-06 13:56 ` Sa, Nuno
2021-12-05 18:00 ` Jonathan Cameron
2021-12-06 10:49 ` Sa, Nuno
2021-12-06 13:15 ` Jonathan Cameron
2021-12-06 13:42 ` Sa, Nuno
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=20211111110043.101891-1-nuno.sa@analog.com \
--to=nuno.sa@analog.com \
--cc=jic23@kernel.org \
--cc=linux-iio@vger.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