Re: [PATCH v5 1/2] staging: iio: accel: adis16240: enforce SPI mode on probe function

From: Ardelean, Alexandru
Date: Wed Dec 04 2019 - 02:25:59 EST


On Sun, 2019-12-01 at 11:42 +0000, Jonathan Cameron wrote:
> [External]
>
> On Mon, 25 Nov 2019 07:55:39 +0000
> "Ardelean, Alexandru" <alexandru.Ardelean@xxxxxxxxxx> wrote:
>
> > On Sat, 2019-11-23 at 20:35 -0300, Rodrigo Carvalho wrote:
> > > [External]
> > >
> > > According to the datasheet, this driver supports only SPI mode 3,
> > > so we should enforce it and call spi_setup() on probe function.
> > >
> > > Signed-off-by: Rodrigo Ribeiro Carvalho <rodrigorsdc@xxxxxxxxx>
> > > ---
> > > V5:
> > > - Add this patch to the patchset
> > >
> > > drivers/staging/iio/accel/adis16240.c | 7 +++++++
> > > 1 file changed, 7 insertions(+)
> > >
> > > diff --git a/drivers/staging/iio/accel/adis16240.c
> > > b/drivers/staging/iio/accel/adis16240.c
> > > index 82099db4bf0c..77b6b81767b9 100644
> > > --- a/drivers/staging/iio/accel/adis16240.c
> > > +++ b/drivers/staging/iio/accel/adis16240.c
> > > @@ -400,6 +400,13 @@ static int adis16240_probe(struct spi_device
> > > *spi)
> > > indio_dev->num_channels = ARRAY_SIZE(adis16240_channels);
> > > indio_dev->modes = INDIO_DIRECT_MODE;
> > >
> > > + spi->mode = SPI_MODE_3;
> >
> > A generic question from me here, since I am not sure.
> >
> > Would this limit the configurations of this chip on the board?
> > In case there is some level-inverter [for various weird reasons] on the
> > board, this may not work, because the SPI controller would need CPOL to
> > be
> > 0.
> >
> > Not sure if this question is valid, or whether we need to care about
> > such
> > configurations.
>
> It's a good question as this sort of trick is used sometimes. Let's see
> what responses we get to the other branch of this thread before moving
> forwards
> with this.
>

Coming back here.
Apologies to Rodrigo. I do realize that I delayed this a bit too much.

Let's have this series as-is here, and then we can see about a more generic
SPI Mode Converter driver that rounds-up all these weird boards.
Or, if we don't do any SPI mode converter drivers, then we can handle this
on a case-by-case basis/driver.


> Jonathan
>
>
> > Thanks
> > Alex
> >
> > > + ret = spi_setup(spi);
> > > + if (ret) {
> > > + dev_err(&spi->dev, "spi_setup failed!\n");
> > > + return ret;
> > > + }
> > > +
> > > ret = adis_init(st, indio_dev, spi, &adis16240_data);
> > > if (ret)
> > > return ret;