Re: [PATCH 2/4] iio: ABI: add ABI file for the LTC2664 DAC

From: David Lechner
Date: Fri Apr 12 2024 - 17:26:40 EST


On Thu, Apr 11, 2024 at 10:21 PM Kim Seer Paller
<kimseer.paller@xxxxxxxxxx> wrote:
>
> Define the sysfs interface for toggle capable channels.
>
> Toggle enabled channels will have:
>
> * out_voltageY_toggle_en

It looks like there are 3 toggle modes.

Two involve the notion of "enabled" outputs that I assume this attribute is for:

1. Toggling all enabled pins at the same time using a software trigger
(global toggle bit)
2. Toggling all enabled pins at the same time using a hardware trigger
(TGP pin) and toggling pins

The third mode though looks like it uses the same toggle select
register for selecting A or B for each channel instead of enabling or
disabling each channel.

3. Toggling all pins to A or B based on the toggle select register. No
notion of enabled pins here.

I haven't looked at the driver implementation, but it sounds like
out_voltageY_toggle_en and out_voltageY_symbol would be writing to the
same register in conflicting ways. So maybe we need yet another custom
attribute to select the currently active toggle mode?

In any case, it would be helpful if the documentation below explained
a bit better the intention and conditions required to use each
attribute (or add a .rst documentation file for these chips to explain
how to use it in more detail since this is rather complex feature).

> * out_voltageY_raw0
> * out_voltageY_raw1

I guess there is no enum iio_modifier that fits this. It seems like we
could still have out_voltageY_raw for register A so that users that
don't need to do any toggling can use standard ABI. And maybe
out_voltageY_raw_toggled for register B (question for Jonathan)?

Or just have 8 channels instead of 4 where even channels are register
A and odd channels are register B?

> * out_voltageY_symbol

"symbol" is a confusing name. It sounds like this just supports
toggling one channel individually so _toggle_select would make more
sense to me. Are there plans for supporting toggling multiple channels
at the same time using a software trigger as well?

>
> The common interface present in all channels is:
>
> * out_voltageY_raw (not present in toggle enabled channels)

As mentioned above, I don't think we need to have to make a
distinction between toggle enabled channels and not enabled channels.

> * out_voltageY_raw_available
> * out_voltageY_powerdown

Is _powerdown a standard attribute? I don't see it documented
anywhere. Perhaps you meant _en (via IIO_CHAN_INFO_ENABLE)?


> * out_voltageY_scale
> * out_voltageY_offset
>
> Co-developed-by: Michael Hennerich <michael.hennerich@xxxxxxxxxx>
> Signed-off-by: Michael Hennerich <michael.hennerich@xxxxxxxxxx>
> Signed-off-by: Kim Seer Paller <kimseer.paller@xxxxxxxxxx>
> ---
> .../ABI/testing/sysfs-bus-iio-dac-ltc2664 | 30 +++++++++++++++++++
> MAINTAINERS | 1 +
> 2 files changed, 31 insertions(+)
> create mode 100644 Documentation/ABI/testing/sysfs-bus-iio-dac-ltc2664
>
> diff --git a/Documentation/ABI/testing/sysfs-bus-iio-dac-ltc2664 b/Documentation/ABI/testing/sysfs-bus-iio-dac-ltc2664
> new file mode 100644
> index 000000000..4b656b7af
> --- /dev/null
> +++ b/Documentation/ABI/testing/sysfs-bus-iio-dac-ltc2664
> @@ -0,0 +1,30 @@
> +What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_toggle_en
> +KernelVersion: 5.18
> +Contact: linux-iio@xxxxxxxxxxxxxxx
> +Description:
> + Toggle enable. Write 1 to enable toggle or 0 to disable it. This is
> + useful when one wants to change the DAC output codes. The way it should
> + be done is:
> +
> + - disable toggle operation;
> + - change out_voltageY_raw0 and out_voltageY_raw1;
> + - enable toggle operation.
> +
> +What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_raw0
> +What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_raw1
> +KernelVersion: 5.18
> +Contact: linux-iio@xxxxxxxxxxxxxxx
> +Description:
> + It has the same meaning as out_voltageY_raw. This attribute is
> + specific to toggle enabled channels and refers to the DAC output
> + code in INPUT_A (_raw0) and INPUT_B (_raw1). The same scale and offset
> + as in out_voltageY_raw applies.
> +
> +What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_symbol
> +KernelVersion: 5.18
> +Contact: linux-iio@xxxxxxxxxxxxxxx
> +Description:
> + Performs a SW toggle. This attribute is specific to toggle
> + enabled channels and allows to toggle between out_voltageY_raw0
> + and out_voltageY_raw1 through software. Writing 0 will select
> + out_voltageY_raw0 while 1 selects out_voltageY_raw1.
> diff --git a/MAINTAINERS b/MAINTAINERS
> index bd8645f6e..9ed00b364 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12842,6 +12842,7 @@ M: Kim Seer Paller <kimseer.paller@xxxxxxxxxx>
> L: linux-iio@xxxxxxxxxxxxxxx
> S: Supported
> W: https://ez.analog.com/linux-software-drivers
> +F: Documentation/ABI/testing/sysfs-bus-iio-dac-ltc2664
> F: Documentation/devicetree/bindings/iio/dac/adi,ltc2664.yaml
>
> LTC2688 IIO DAC DRIVER
> --
> 2.34.1
>