Re: [PATCH v2 1/3] backlight: tdo24m: fix the spi cs between transfers
From: Daniel Thompson
Date: Fri Dec 15 2017 - 06:40:42 EST
On Fri, Oct 13, 2017 at 09:42:47PM +0200, Robert Jarzmik wrote:
> Currently the LCD display (TD035S) on the cm-x300 platform is broken and
> remains blank.
>
> The TD0245S specification requires that the chipselect is toggled
> between commands sent to the panel. This was also the purpose of the
> former patch of commit f64dcac0b124 ("backlight: tdo24m: ensure chip
> select changes between transfers").
>
> Unfortunately, the "cs_change" field of a SPI transfer is
> misleading. Its true meaning is that for a SPI message holding multiple
> transfers, the chip select is toggled between each transfer, but for the
> last transfer it remains asserted.
>
> In this driver, all the SPI messages contain exactly one transfer, which
> means that each transfer is the last of its message, and as a
> consequence the chip select is never toggled.
>
> Actually, there was a second bug hidding the first one, hence the
> problem was not seen until v4.6. This problem was fixed by commit
> a52db659c79c ("spi: pxa2xx: Fix cs_change management") for PXA based
> boards.
>
> This fix makes the TD035S work again on a cm-x300 board. The same
> applies to other PXA boards, ie. corgi and tosa.
>
> Fixes: a52db659c79c ("spi: pxa2xx: Fix cs_change management")
> Reported-by: Andrea Adami <andrea.adami@xxxxxxxxx>
> Signed-off-by: Robert Jarzmik <robert.jarzmik@xxxxxxx>
Didn't I already ack this one?
Daniel.
> ---
> Since v1: added 2 other panels
> ---
> drivers/video/backlight/corgi_lcd.c | 2 +-
> drivers/video/backlight/tdo24m.c | 2 +-
> drivers/video/backlight/tosa_lcd.c | 2 +-
> 3 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/video/backlight/corgi_lcd.c b/drivers/video/backlight/corgi_lcd.c
> index d7c239ea3d09..f5574060f9c8 100644
> --- a/drivers/video/backlight/corgi_lcd.c
> +++ b/drivers/video/backlight/corgi_lcd.c
> @@ -177,7 +177,7 @@ static int corgi_ssp_lcdtg_send(struct corgi_lcd *lcd, int adrs, uint8_t data)
> struct spi_message msg;
> struct spi_transfer xfer = {
> .len = 1,
> - .cs_change = 1,
> + .cs_change = 0,
> .tx_buf = lcd->buf,
> };
>
> diff --git a/drivers/video/backlight/tdo24m.c b/drivers/video/backlight/tdo24m.c
> index eab1f842f9c0..e4bd63e9db6b 100644
> --- a/drivers/video/backlight/tdo24m.c
> +++ b/drivers/video/backlight/tdo24m.c
> @@ -369,7 +369,7 @@ static int tdo24m_probe(struct spi_device *spi)
>
> spi_message_init(m);
>
> - x->cs_change = 1;
> + x->cs_change = 0;
> x->tx_buf = &lcd->buf[0];
> spi_message_add_tail(x, m);
>
> diff --git a/drivers/video/backlight/tosa_lcd.c b/drivers/video/backlight/tosa_lcd.c
> index 6a41ea92737a..4dc5ee8debeb 100644
> --- a/drivers/video/backlight/tosa_lcd.c
> +++ b/drivers/video/backlight/tosa_lcd.c
> @@ -49,7 +49,7 @@ static int tosa_tg_send(struct spi_device *spi, int adrs, uint8_t data)
> struct spi_message msg;
> struct spi_transfer xfer = {
> .len = 1,
> - .cs_change = 1,
> + .cs_change = 0,
> .tx_buf = buf,
> };
>
> --
> 2.11.0
>