[PATCH 2/4] ARM: dts: imx6qp-prtwd3: Fix the SPI chipselect polarity

Shawn Guo shawnguo at kernel.org
Tue Sep 21 20:02:50 PDT 2021


On Fri, Jul 16, 2021 at 10:36:57AM -0300, Fabio Estevam wrote:
> The conversion of the spi-imx driver to use GPIO descriptors
> in commit 8cdcd8aeee28 ("spi: imx/fsl-lpspi: Convert to GPIO descriptors")
> helped to detect the following SPI chipselect polarity mismatch on an
> imx6q-sabresd for example:
>     
> [    4.854337] m25p80 at 0 enforce active low on chipselect handle
>    
> Prior to the above commit, the chipselect polarity passed via cs-gpios
> property was ignored and considered active-low.
>     
> The reason for such mismatch is clearly explained in the comments inside
> drivers/gpio/gpiolib-of.c:
>     
> * SPI children have active low chip selects
> * by default. This can be specified negatively
> * by just omitting "spi-cs-high" in the
> * device node, or actively by tagging on
> * GPIO_ACTIVE_LOW as flag in the device
> * tree. If the line is simultaneously
> * tagged as active low in the device tree
> * and has the "spi-cs-high" set, we get a
> * conflict and the "spi-cs-high" flag will
> * take precedence.
>     
> To properly represent the SPI chipselect polarity, change it to active-low
> when the "spi-cs-high" property is absent.

...

> The conversion of the spi-imx driver to use GPIO descriptors
> in commit 8cdcd8aeee28 ("spi: imx/fsl-lpspi: Convert to GPIO descriptors")
> helped to detect the following SPI chipselect polarity mismatch on an
> imx6q-sabresd for example:
>     
> [    4.854337] m25p80 at 0 enforce active low on chipselect handle
>    
> Prior to the above commit, the chipselect polarity passed via cs-gpios
> property was ignored and considered active-low.
>     
> The reason for such mismatch is clearly explained in the comments inside
> drivers/gpio/gpiolib-of.c:
>     
> * SPI children have active low chip selects
> * by default. This can be specified negatively
> * by just omitting "spi-cs-high" in the
> * device node, or actively by tagging on
> * GPIO_ACTIVE_LOW as flag in the device
> * tree. If the line is simultaneously
> * tagged as active low in the device tree
> * and has the "spi-cs-high" set, we get a
> * conflict and the "spi-cs-high" flag will
> * take precedence.
>     
> To properly represent the SPI chipselect polarity, change it to active-low
> when the "spi-cs-high" property is absent.

So the commit log was written twice?  I will fix it up.

Shawn

> 
> Signed-off-by: Fabio Estevam <festevam at gmail.com>
> ---
>  arch/arm/boot/dts/imx6qp-prtwd3.dts | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/imx6qp-prtwd3.dts b/arch/arm/boot/dts/imx6qp-prtwd3.dts
> index c42723989bc0..1a334918f9ca 100644
> --- a/arch/arm/boot/dts/imx6qp-prtwd3.dts
> +++ b/arch/arm/boot/dts/imx6qp-prtwd3.dts
> @@ -123,7 +123,7 @@ &can1 {
>  };
>  
>  &ecspi2 {
> -	cs-gpios = <&gpio2 26 GPIO_ACTIVE_HIGH>;
> +	cs-gpios = <&gpio2 26 GPIO_ACTIVE_LOW>;
>  	pinctrl-names = "default";
>  	pinctrl-0 = <&pinctrl_ecspi2>;
>  	status = "okay";
> @@ -189,7 +189,7 @@ fixed-link {
>  };
>  
>  &ecspi3 {
> -	cs-gpios = <&gpio4 24 GPIO_ACTIVE_HIGH>;
> +	cs-gpios = <&gpio4 24 GPIO_ACTIVE_LOW>;
>  	pinctrl-names = "default";
>  	pinctrl-0 = <&pinctrl_ecspi3>;
>  	status = "okay";
> -- 
> 2.25.1
> 



More information about the linux-arm-kernel mailing list