[PATCH 1/2] spi: dual and quad support(device tree)
Gupta, Pekon
pekon at ti.com
Mon Aug 26 05:29:55 EDT 2013
> Hi, Pekon
>
> 2013/8/26 Gupta, Pekon <pekon at ti.com>:
> >>
> >> Signed-off-by: wangyuhang <wangyuhang2014 at gmail.com>
> >> ---
> >> Documentation/devicetree/bindings/spi/spi-bus.txt | 14
> ++++++++++++++
> >> 1 file changed, 14 insertions(+)
> >>
> >> diff --git a/Documentation/devicetree/bindings/spi/spi-bus.txt
> >> b/Documentation/devicetree/bindings/spi/spi-bus.txt
> >> index 296015e..145ba96 100644
> >> --- a/Documentation/devicetree/bindings/spi/spi-bus.txt
> >> +++ b/Documentation/devicetree/bindings/spi/spi-bus.txt
> >> @@ -55,6 +55,20 @@ contain the following properties.
> >> chip select active high
> >> - spi-3wire - (optional) Empty property indicating device requires
> >> 3-wire mode.
> >> +- spi-tx-nbits - (optional) Number of bits used for MOSI(writting)
> >> +- spi-rx-nbits - (optional) Number of bits used for MISO(reading)
> >> +
> >> +So if for example the slave has 4 wires for writting and 2 wires for
> reading,
> >> +and the spi-tx/rx-nbits property should be set as follows:
> >> +
> >> +spi-tx-nbits = <4>;
> >> +spi-rx-nbits = <2>;
> >
> > [Pekon]: there is a problem here...
> > spi-tx-nbit = <4> suggests that SPI device support QUAD writes, but it does
> > not indicate whether DUAL writes are supported by device or not.
> > So, In my view having either of the following implementation could help
> > in specifying capabilities independently and clearly.
> > *Implementation-1 Boolean*
> > spi-tx-quad = <true | false>
> > spi-tx-dual = <true | false>
> > spi-tx-single = <true | false>
> > Same way for Rx..
> > spi-rx-quad = <true | false>
> > spi-rx-dual = <true | false>
> > spi-rx-single = <true | false>
> >
> > *Implementation-2 Multi-option*
> > spi-quad = <tx-only | rx-only | duplex>
> > spi-dual = <tx-only | rx-only | duplex>
> > spi-single = <tx-only | rx-only | full-duplex | half-duplex>
> >
> Not exactly, spi-tx-nbit = <4> suggests that SPI device will use QUAD
> writes, not support QUAD writes. There is no need to set what mode
> slave supports, user just set the certain mode slave will work in.
>
[Pekon]: Wait.. I think there is some mis-match in our understandings..
(a) struct spi_device->mode determines capabilities spi_device can support
(b) And, when user (here m25p80 like flash driver) puts a spi_transfer, then
it specifies whether to use spi_transfer->tx_nbits = 4 or not..
And you are using DT binding to specify (a) correct ?
Now, how would you specify following configuration, using DT ?
spi_device->mode = SPI_TX_SINGLE | SPI_TX_QUAD. (but not dual)
so that driver
- driver give error,
when m25p80 driver uses spi_transfer->tx-nbits = 2
- But allow,
when m25p80 driver uses spi_transfer->tx-nbits = 1 or
when m25p80 driver uses spi_transfer->tx-nbits = 4
> >> +
> >> +Now the value that spi-tx-nbits and spi-rx-nbits can receive is only
> >> +1(single), 2(dual) and 4(quad). If you don't set spi-tx-nbits or spi-rx-nbits,
> >> +spi_device mode will be set in single(1 wire) as default. Another point, if
> >> +property:spi-3wire is set, spi-tx/rx-nbits is forbidden to set to <2 or 4>,
> >> +otherwise, an errro will return.
> >>
> > [Pekon]: Also, instead of having separate binding for 'spi-3wire', it can be
> > moved under as spi-single = <half-duplex>.
> > Full-duplex = Tx and Rx operate on independent channels and
> concurrently.
> > Half-duplex = Tx and Rx use same bi-directional channel for transmission
> > one by one
> >
> Actually, spi-3wire can be regarded as a part of spi-single, but
> corrected as what you said, there will be some inconvenient.
> 1,the driver that has already used spi-3wire need a big change.
> 2,there have to be a complexed check in spi framework if set like:
> spi-quad = <tx-only | rx-only | duplex>
> spi-dual = <tx-only | rx-only | duplex>
> spi-single = <tx-only | rx-only | full-duplex | half-duplex>
>
[Pekon]: No, I'm not asking you to update logic in all drivers,
just the DT bindings. Something like this..
@@ -872,46 +872,42 @@ static void of_register_spi_devices(struct spi_master *master)
/* Device DUAL/QUAD mode */
prop = of_get_property(nc, "spi-single", &len);
if (prop == HALF_DUPLEX)
spi->mode |= SPI_3WIRE;
So, you set the same spi->mode[SPI_3WIRE] bit, thus other drivers are not
impacted. And you can deprecate the older "spi-3wire" binding.
with regards, pekon
> >> If a gpio chipselect is used for the SPI slave the gpio number will be
> passed
> >> via the cs_gpio
> >> --
> >> 1.7.9.5
> >
> > with regards, pekon
More information about the linux-mtd
mailing list