On Fri, Nov 27, 2020 at 3:08 PM Alexandru Ardelean
<[email protected]> wrote:
> Transmit/receive only is a valid SPI mode. For example, the MOSI/TX line
> might be missing from an ADC while for a DAC the MISO/RX line may be
> optional. This patch adds these two new modes: SPI_NO_TX and
> SPI_NO_RX. This way, the drivers will be able to identify if any of
> these two lines is missing and to adjust the transfers accordingly.
...
> + /*
> + * check mode to prevent that any two of DUAL, QUAD and NO_MOSI/MISO
> + * are set at the same time
> */
Since you are here,
check -> Check
time -> time.
...
> + if ((hweight_long(spi->mode &
> + (SPI_TX_DUAL | SPI_TX_QUAD | SPI_NO_TX)) > 1) ||
> + (hweight_long(spi->mode &
> + (SPI_RX_DUAL | SPI_RX_QUAD | SPI_NO_RX)) > 1)) {
> dev_err(&spi->dev,
> - "setup: can not select dual and quad at the same time\n");
> + "setup: can not select any two of dual, quad and no-rx/tx "
> + "at the same time\n");
Don't split literals, and probably rephrase (If I can't set 2, can I set 3?)
"setup: can't select more than one out of dual, quad, and no-Rx /
no-Tx at the same time\n");
> --- a/include/uapi/linux/spi/spi.h
> +++ b/include/uapi/linux/spi/spi.h
> @@ -43,5 +43,7 @@
> #define SPI_TX_OCTAL 0x2000 /* transmit with 8 wires */
> #define SPI_RX_OCTAL 0x4000 /* receive with 8 wires */
> #define SPI_3WIRE_HIZ 0x8000 /* high impedance turnaround */
> +#define SPI_NO_TX 0x10000 /* no transmit wire */
> +#define SPI_NO_RX 0x20000 /* no receive wire */
Is it really material for uAPI?
Perhaps we may have something like
SPI_MODE_USER_MASK in uAPI and
in internal headers
SPI_MODE_KERNEL_MASK with
static_assert(_USER_MASK & _KERNEL_MASK); // check conditional
?
--
With Best Regards,
Andy Shevchenko
On Fri, Nov 27, 2020 at 4:22 PM Andy Shevchenko
<[email protected]> wrote:
> On Fri, Nov 27, 2020 at 3:08 PM Alexandru Ardelean
> <[email protected]> wrote:
...
> > --- a/include/uapi/linux/spi/spi.h
> > +++ b/include/uapi/linux/spi/spi.h
> > @@ -43,5 +43,7 @@
> > #define SPI_TX_OCTAL 0x2000 /* transmit with 8 wires */
> > #define SPI_RX_OCTAL 0x4000 /* receive with 8 wires */
> > #define SPI_3WIRE_HIZ 0x8000 /* high impedance turnaround */
> > +#define SPI_NO_TX 0x10000 /* no transmit wire */
> > +#define SPI_NO_RX 0x20000 /* no receive wire */
>
> Is it really material for uAPI?
> Perhaps we may have something like
> SPI_MODE_USER_MASK in uAPI and
> in internal headers
>
> SPI_MODE_KERNEL_MASK with
> static_assert(_USER_MASK & _KERNEL_MASK); // check conditional
>
> ?
And logically start bits for the kernel from the end (31, 30, ...).
--
With Best Regards,
Andy Shevchenko
> -----Original Message-----
> From: Andy Shevchenko <[email protected]>
> Sent: Friday, November 27, 2020 4:24 PM
> To: Ardelean, Alexandru <[email protected]>
> Cc: linux-spi <[email protected]>; devicetree
> <[email protected]>; Linux Kernel Mailing List <linux-
> [email protected]>; Rob Herring <[email protected]>; Mark Brown
> <[email protected]>; Bogdan, Dragos <[email protected]>
> Subject: Re: [PATCH v3 2/3] spi: Add SPI_NO_TX/RX support
>
> On Fri, Nov 27, 2020 at 4:22 PM Andy Shevchenko
> <[email protected]> wrote:
> > On Fri, Nov 27, 2020 at 3:08 PM Alexandru Ardelean
> > <[email protected]> wrote:
>
> ...
>
> > > --- a/include/uapi/linux/spi/spi.h
> > > +++ b/include/uapi/linux/spi/spi.h
> > > @@ -43,5 +43,7 @@
> > > #define SPI_TX_OCTAL 0x2000 /* transmit with 8 wires */
> > > #define SPI_RX_OCTAL 0x4000 /* receive with 8 wires */
> > > #define SPI_3WIRE_HIZ 0x8000 /* high impedance turnaround
> */
> > > +#define SPI_NO_TX 0x10000 /* no transmit wire */
> > > +#define SPI_NO_RX 0x20000 /* no receive wire */
> >
> > Is it really material for uAPI?
> > Perhaps we may have something like
> > SPI_MODE_USER_MASK in uAPI and
> > in internal headers
Hmm, in a way this could make sense for some SPIDEVs as well, to set these flags and get an error if they try to TX with the NO_TX flag set.
Not really sure about this.
Initially I mechanically added these here as an inertia to the previous patch which is just unifying the headers.
Any other opinions? Thoughts?
Mark?
> >
> > SPI_MODE_KERNEL_MASK with
> > static_assert(_USER_MASK & _KERNEL_MASK); // check conditional
> >
> > ?
>
> And logically start bits for the kernel from the end (31, 30, ...).
>
> --
> With Best Regards,
> Andy Shevchenko
On Thu, Dec 03, 2020 at 08:20:57AM +0000, Ardelean, Alexandru wrote:
> > > > @@ -43,5 +43,7 @@
> > > > #define SPI_TX_OCTAL 0x2000 /* transmit with 8 wires */
> > > > #define SPI_RX_OCTAL 0x4000 /* receive with 8 wires */
> > > > #define SPI_3WIRE_HIZ 0x8000 /* high impedance turnaround
> > */
> > > > +#define SPI_NO_TX 0x10000 /* no transmit wire */
> > > > +#define SPI_NO_RX 0x20000 /* no receive wire */
> > > Is it really material for uAPI?
> > > Perhaps we may have something like
> > > SPI_MODE_USER_MASK in uAPI and
> > > in internal headers
> Hmm, in a way this could make sense for some SPIDEVs as well, to set these flags and get an error if they try to TX with the NO_TX flag set.
> Not really sure about this.
> Initially I mechanically added these here as an inertia to the previous patch which is just unifying the headers.
> Any other opinions? Thoughts?
> Mark?
spidev is hacky at the best of times... It *is* probably better to only
have the usefully mainpulable modes exposed in uapi and then define the
rest internally though.