2023-05-24 09:23:19

by Boerge Struempfel

[permalink] [raw]
Subject: [PATCH v6 2/5] spi: spi-imx: add support for SPI_MOSI_IDLE_LOW mode bit

By default, the spi-imx controller pulls the mosi line high, whenever it
is idle. This behaviour can be inverted per CS by setting the
corresponding DATA_CTL bit in the config register of the controller.

Also, since the controller mode-bits have to be touched anyways, the
SPI_CPOL and SPI_CPHA are replaced by the combined SPI_MODE_X_MASK flag.

Signed-off-by: Boerge Struempfel <[email protected]>
---
drivers/spi/spi-imx.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
index 34e5f81ec431..1c4172fcba2d 100644
--- a/drivers/spi/spi-imx.c
+++ b/drivers/spi/spi-imx.c
@@ -281,6 +281,7 @@ static bool spi_imx_can_dma(struct spi_controller *controller, struct spi_device
#define MX51_ECSPI_CONFIG_SCLKPOL(cs) (1 << ((cs & 3) + 4))
#define MX51_ECSPI_CONFIG_SBBCTRL(cs) (1 << ((cs & 3) + 8))
#define MX51_ECSPI_CONFIG_SSBPOL(cs) (1 << ((cs & 3) + 12))
+#define MX51_ECSPI_CONFIG_DATACTL(cs) (1 << ((cs & 3) + 16))
#define MX51_ECSPI_CONFIG_SCLKCTL(cs) (1 << ((cs & 3) + 20))

#define MX51_ECSPI_INT 0x10
@@ -573,6 +574,11 @@ static int mx51_ecspi_prepare_message(struct spi_imx_data *spi_imx,
cfg &= ~MX51_ECSPI_CONFIG_SCLKCTL(spi_get_chipselect(spi, 0));
}

+ if (spi->mode & SPI_MOSI_IDLE_LOW)
+ cfg |= MX51_ECSPI_CONFIG_DATACTL(spi_get_chipselect(spi, 0));
+ else
+ cfg &= ~MX51_ECSPI_CONFIG_DATACTL(spi_get_chipselect(spi, 0));
+
if (spi->mode & SPI_CS_HIGH)
cfg |= MX51_ECSPI_CONFIG_SSBPOL(spi_get_chipselect(spi, 0));
else
@@ -1743,7 +1749,8 @@ static int spi_imx_probe(struct platform_device *pdev)
spi_imx->controller->prepare_message = spi_imx_prepare_message;
spi_imx->controller->unprepare_message = spi_imx_unprepare_message;
spi_imx->controller->slave_abort = spi_imx_slave_abort;
- spi_imx->controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_NO_CS;
+ spi_imx->controller->mode_bits = SPI_MODE_X_MASK | SPI_CS_HIGH | SPI_NO_CS |
+ SPI_MOSI_IDLE_LOW;

if (is_imx35_cspi(spi_imx) || is_imx51_ecspi(spi_imx) ||
is_imx53_ecspi(spi_imx))
--
2.40.1



2023-05-24 10:20:58

by Frieder Schrempf

[permalink] [raw]
Subject: Re: [PATCH v6 2/5] spi: spi-imx: add support for SPI_MOSI_IDLE_LOW mode bit

On 24.05.23 11:19, Boerge Struempfel wrote:
> By default, the spi-imx controller pulls the mosi line high, whenever it
> is idle. This behaviour can be inverted per CS by setting the
> corresponding DATA_CTL bit in the config register of the controller.
>
> Also, since the controller mode-bits have to be touched anyways, the
> SPI_CPOL and SPI_CPHA are replaced by the combined SPI_MODE_X_MASK flag.
>
> Signed-off-by: Boerge Struempfel <[email protected]>

Thanks for working on this! We used a similar downstream patch for
driving NeoPixels with i.MX. I'm happy to see a proper upstream solution.

I also have this Python module [1] around for using spidev to drive the
LEDs. It would be nice to see support for SPI_MOSI_IDLE_LOW in py-spidev
[2] so we could use it there. Though the latter looks a bit like it is
not properly maintained anymore.

[1] https://github.com/fschrempf/py-neopixel-spidev
[2] https://github.com/doceme/py-spidev

Reviewed-by: Frieder Schrempf <[email protected]>

2023-05-24 12:04:14

by Boerge Struempfel

[permalink] [raw]
Subject: Re: [PATCH v6 2/5] spi: spi-imx: add support for SPI_MOSI_IDLE_LOW mode bit

Am Mi., 24. Mai 2023 um 11:47 Uhr schrieb Frieder Schrempf
<[email protected]>:
>
> On 24.05.23 11:19, Boerge Struempfel wrote:
> > By default, the spi-imx controller pulls the mosi line high, whenever it
> > is idle. This behaviour can be inverted per CS by setting the
> > corresponding DATA_CTL bit in the config register of the controller.
> >
> > Also, since the controller mode-bits have to be touched anyways, the
> > SPI_CPOL and SPI_CPHA are replaced by the combined SPI_MODE_X_MASK flag.
> >
> > Signed-off-by: Boerge Struempfel <[email protected]>
>
> Thanks for working on this! We used a similar downstream patch for
> driving NeoPixels with i.MX. I'm happy to see a proper upstream solution.
>

Thanks for your reply. I'm glad to see that there is an interest for this
and I'm not the only one, who is working with this.

> I also have this Python module [1] around for using spidev to drive the
> LEDs. It would be nice to see support for SPI_MOSI_IDLE_LOW in py-spidev
> [2] so we could use it there. Though the latter looks a bit like it is
> not properly maintained anymore.

The python modules looks interesting.

FYI: there is already another patch by Chuanhong Guo on the mailing
list, which implements a proper driver for neopixel leds. It also allows
to add them via DT and access them via sys-fs. It might be an
interesting upstream alternative for your python module if it gets
accepted.

https://lore.kernel.org/lkml/[email protected]/

>
> [1] https://github.com/fschrempf/py-neopixel-spidev
> [2] https://github.com/doceme/py-spidev
>
> Reviewed-by: Frieder Schrempf <[email protected]>

--
Kind Regards,
Börge Strümpfel

2023-05-30 12:55:31

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH v6 2/5] spi: spi-imx: add support for SPI_MOSI_IDLE_LOW mode bit

On Wed, May 24, 2023 at 11:19:45AM +0200, Boerge Struempfel wrote:
> By default, the spi-imx controller pulls the mosi line high, whenever it
> is idle. This behaviour can be inverted per CS by setting the
> corresponding DATA_CTL bit in the config register of the controller.

This doesn't apply against current code, please check and resend.


Attachments:
(No filename) (350.00 B)
signature.asc (499.00 B)
Download all attachments

2023-05-30 14:19:30

by Boerge Struempfel

[permalink] [raw]
Subject: Re: [PATCH v6 2/5] spi: spi-imx: add support for SPI_MOSI_IDLE_LOW mode bit

Am Di., 30. Mai 2023 um 14:46 Uhr schrieb Mark Brown <[email protected]>:
>
> On Wed, May 24, 2023 at 11:19:45AM +0200, Boerge Struempfel wrote:
> > By default, the spi-imx controller pulls the mosi line high, whenever it
> > is idle. This behaviour can be inverted per CS by setting the
> > corresponding DATA_CTL bit in the config register of the controller.
>
> This doesn't apply against current code, please check and resend.

I wrote this patch against the current master and not the next/master.
I'll upload an adjusted patch version momentarily.
I'm sorry for the inconvenience.

--
Kind Regards,
Börge Strümpfel