Re: [PATCH v4] dt-bindings: iio: accel: add binding documentation for ADIS16240

From: Jonathan Cameron
Date: Sun Dec 01 2019 - 06:41:04 EST



+CC Mark as we probably need a more general view point on
the question of whether SPI mode should be enforced by binding
or in the driver.

On Mon, 25 Nov 2019 07:51:30 +0000
"Ardelean, Alexandru" <alexandru.Ardelean@xxxxxxxxxx> wrote:

> On Sat, 2019-11-23 at 11:41 +0000, Jonathan Cameron wrote:
> > On Sat, 23 Nov 2019 02:19:27 -0300
> > Rodrigo Carvalho <rodrigorsdc@xxxxxxxxx> wrote:
> >
> > > This patch add device tree binding documentation for ADIS16240.
> > >
> > > Signed-off-by: Rodrigo Ribeiro Carvalho <rodrigorsdc@xxxxxxxxx>
>
> My bad for the late timing on this.
> I'm slightly more fresh on Mondays.
> But I will get overloaded with work in a few hours, so I may not have time
> ot respond.
>
> > No problem with this patch, but I definitely want to see an accompanying
> > one enforcing the SPI mode in the driver.
> >
>
> So, then the binding should probably also define spi-cpol & spi-cpha
> as mandatory.
> Maybe, the driver would do a check and print a warning.
>
> I'm noticing that this device uses SPI mode 3, but this DT binding defaults
> to SPI mode 0
>
> > Right now the driver doesn't set it and so I'm fairly sure not putting
> > it in the binding will leave you with a non working device.
> >
> > The right option if only one option is supported is for the driver
> > to call spi_setup with the relevant options.
> >
>
> What if the board uses some level inverters [because of some weird reason]
> and that messes up with the SPI mode?
> It's not common, but it is possible.

I have wondered the same and have a few boards that do this sort of thing.
My personal feeling is that such level convertors should have explicit
representation rather than being hidden in changes to
the devicetree. Perhaps via a single input single output mux that
would wrap up the actions of any inverters in the path.

As you say, the alternative is to just leave it to the devicetree bindings.

Jonathan

>
> > Thanks,
> >
> > Jonathan
> >
> > > ---
> > > V4:
> > > - Remove spi-cpha and spi-cpol in binding example, since this driver
> > > supports only one timing mode.
> > > .../bindings/iio/accel/adi,adis16240.yaml | 49 +++++++++++++++++++
> > > 1 file changed, 49 insertions(+)
> > > create mode 100644
> > > Documentation/devicetree/bindings/iio/accel/adi,adis16240.yaml
> > >
> > > diff --git
> > > a/Documentation/devicetree/bindings/iio/accel/adi,adis16240.yaml
> > > b/Documentation/devicetree/bindings/iio/accel/adi,adis16240.yaml
> > > new file mode 100644
> > > index 000000000000..8e902f7c49e6
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/iio/accel/adi,adis16240.yaml
> > > @@ -0,0 +1,49 @@
> > > +# SPDX-License-Identifier: GPL-2.0
> > > +%YAML 1.2
> > > +---
> > > +$id: http://devicetree.org/schemas/iio/accel/adi,adis16240.yaml#
> > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > +
> > > +title: ADIS16240 Programmable Impact Sensor and Recorder driver
> > > +
> > > +maintainers:
> > > + - Alexandru Ardelean <alexandru.ardelean@xxxxxxxxxx>
> > > +
> > > +description: |
> > > + ADIS16240 Programmable Impact Sensor and Recorder driver that
> > > supports
> > > + SPI interface.
> > > + https://www.analog.com/en/products/adis16240.html
> > > +
> > > +properties:
> > > + compatible:
> > > + enum:
> > > + - adi,adis16240
> > > +
> > > + reg:
> > > + maxItems: 1
> > > +
> > > + interrupts:
> > > + maxItems: 1
> > > +
> > > +required:
> > > + - compatible
> > > + - reg
> > > + - interrupts
> > > +
> > > +examples:
> > > + - |
> > > + #include <dt-bindings/gpio/gpio.h>
> > > + #include <dt-bindings/interrupt-controller/irq.h>
> > > + spi0 {
> > > + #address-cells = <1>;
> > > + #size-cells = <0>;
> > > +
> > > + /* Example for a SPI device node */
> > > + accelerometer@0 {
> > > + compatible = "adi,adis16240";
> > > + reg = <0>;
> > > + spi-max-frequency = <2500000>;
> > > + interrupt-parent = <&gpio0>;
> > > + interrupts = <0 IRQ_TYPE_LEVEL_HIGH>;
> > > + };
> > > + };