Message ID | 20171228082742.13415-1-robert.jarzmik@free.fr (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, 28 Dec 2017, 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") Since this fixes an old kernel, I'm not going to apply it for -fixes. > Reported-by: Andrea Adami <andrea.adami@gmail.com> > Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr> > Acked-by: Daniel Thompson <daniel.thompson@linaro.org> > --- > Since v1: added 2 other panels > Since v2: added Daniel's ack > --- > 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(-) Applied to -next, thanks.
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, };