On Sun, Dec 01, 2013 at 11:59 +0400, Alexander Shiyan wrote:
> 
> This patch takes the CS active level from the GPIO bindings,
> so we remove the special property "spi-cs-high" for chipselects
> that use GPIO.

I'm afraid this description does not reflect what the patch does.
This is not saying that the patch is wrong, but suggests that the
description may be in need of an update.

Whether there is some gain in the change is a different matter,
see below.


> Signed-off-by: Alexander Shiyan <shc_w...@mail.ru>
> ---
>  drivers/spi/spi.c       | 28 ++++++++++++++++++----------
>  include/linux/spi/spi.h |  2 ++
>  2 files changed, 20 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> index 98f4b77..d2ba1ec 100644
> --- a/drivers/spi/spi.c
> +++ b/drivers/spi/spi.c
> @@ -413,8 +413,12 @@ int spi_add_device(struct spi_device *spi)
>               goto done;
>       }
>  
> -     if (master->cs_gpios)
> +     if (master->cs_gpios) {
>               spi->cs_gpio = master->cs_gpios[spi->chip_select];
> +             if (!(master->cs_gpios_flags[spi->chip_select] &
> +                   OF_GPIO_ACTIVE_LOW))
> +                     spi->mode |= SPI_CS_HIGH;
> +     }
>  
>       /* Drivers may modify this initial i/o setup, but will
>        * normally rely on the device being setup.  Devices

OK, so you accept GPIO flags as an _additional_ source of
information, to derive "CS high" attributes in the SPI subsystem
in the (potential) absence of explicit specs in the device tree.

I'm not quite certain whether the GPIO pin's "not being inverted"
(not being low-active, the de-facto default for a GPIO pin) and
the SPI chip select's being high-active really are the same
thing.  Unless I'm missing something, this is quite a change in
semantics.  (Should this automatic deriving attributes emit a
message as well, to raise awareness?  Are we spamming users then,
or do these go unnoticed und ignored?)

Does this patch _force_ those who use GPIOs for SPI CS to adjust
their GPIO configuration in device trees?  Or make SPI
communication fail if the device tree won't get adjusted?  Should
you adjust users as well, and put a big fat remark into the
documentation?

A quick 'git grep spi-cs-high' reveals just one in-tree user, but
I'd expect quite a lot out-of-tree users which assume "regular,
straight semantics".


> @@ -1027,10 +1031,14 @@ static void of_register_spi_devices(struct spi_master 
> *master)
>                       spi->mode |= SPI_CPHA;
>               if (of_find_property(nc, "spi-cpol", NULL))
>                       spi->mode |= SPI_CPOL;
> -             if (of_find_property(nc, "spi-cs-high", NULL))
> -                     spi->mode |= SPI_CS_HIGH;
>               if (of_find_property(nc, "spi-3wire", NULL))
>                       spi->mode |= SPI_3WIRE;
> +             if (of_find_property(nc, "spi-cs-high", NULL)) {
> +                     if (master->cs_gpios)
> +                             dev_notice(&master->dev,
> +                                     "\"spi-cs-high\" property is 
> obsolete.\n");
> +                     spi->mode |= SPI_CS_HIGH;
> +             }
>  
>               /* Device DUAL/QUAD mode */
>               if (!of_property_read_u32(nc, "spi-tx-bus-width", &value)) {

Here you keep the evaluation of the 'spi-cs-high' property.
Which is a good thing, and should not go away as Mark has
suggested, at least not without proper period of migration.

You introduce a diagnostic message if SPI CS is high-active (and
this spec comes from the SPI node) and the CS is backed by a GPIO
pin.

Considering that you cannot remove the "CS high-active" attribute
in general, and need to keep the 'spi-cs-high' property for those
cases where the signal is not driven by means of GPIO, and keep
backwards compatibility for GPIO backed signals -- is there
really any gain in the change?

I'm afraid that forcing users to specify the same "this SPI
slave's CS is high-active" information in different ways
depending on whether the signal is generated by GPIO or by other
means is not a good thing.  I'm even questioning the benefit of
introducing the optional second source of this information by
deriving it from the GPIO flags.  Am I missing something?

[ it's just a nit that hou move the 'spi-cs-high' evaluation in
the patch while I fail to see the motivation of the move, it's
neither logical grouping nor alphabetical sorting ]


virtually yours
Gerhard Sittig
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr. 5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: off...@denx.de
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to