All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 0/1] LTC2688 support
@ 2021-11-11 11:00 Nuno Sá
  2021-11-11 11:00 ` [RFC PATCH 1/1] iio: dac: add support for ltc2688 Nuno Sá
  2021-11-12 16:14 ` [RFC PATCH 0/1] LTC2688 support Jonathan Cameron
  0 siblings, 2 replies; 21+ messages in thread
From: Nuno Sá @ 2021-11-11 11:00 UTC (permalink / raw)
  To: linux-iio; +Cc: Jonathan Cameron

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


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2021-12-06 13:56 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-11 11:00 [RFC PATCH 0/1] LTC2688 support Nuno Sá
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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.