• Linus Walleij's avatar
    gpio/spi: Fix spi-gpio regression on active high CS · fbbf145a
    Linus Walleij authored
    I ran into an intriguing bug caused by
    commit ""spi: gpio: Don't request CS GPIO in DT use-case"
    affecting all SPI GPIO devices with an active high
    chip select line.
    
    The commit switches the CS gpio handling over to the GPIO
    core, which will parse and handle "cs-gpios" from the OF
    node without even calling down to the driver to get the
    job done.
    
    However the GPIO core handles the standard bindings in
    Documentation/devicetree/bindings/spi/spi-controller.yaml
    that specifies that active high CS needs to be specified
    using "spi-cs-high" in the DT node.
    
    The code in drivers/spi/spi-gpio.c never respected this
    and never tried to inspect subnodes to see if they contained
    "spi-cs-high" like the gpiolib OF quirks does. Instead the
    only way to get an active high CS was to tag it in the
    device tree using the flags cell such as
    cs-gpios = <&gpio 4 GPIO_ACTIVE_HIGH>;
    
    This alters the quirks to not inspect the subnodes of SPI
    masters on "spi-gpio" for the standard attribute "spi-cs-high",
    making old device trees work as expected.
    
    This semantic is a bit ambigous, but just allowing the
    flags on the GPIO descriptor to modify polarity is what
    the kernel at large mostly uses so let's encourage that.
    
    Fixes: 249e2632 ("spi: gpio: Don't request CS GPIO in DT use-case")
    Cc: Andrey Smirnov <andrew.smirnov@gmail.com>
    Cc: linux-gpio@vger.kernel.org
    Cc: linux-spi@vger.kernel.org
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    fbbf145a
gpiolib-of.c 18.8 KB