> PS: TS is still unusable with the 16x16 pixel resolution This is also the case for Pandora. The patch below fixes the problem, but as I have no other boards to test this on, I haven't sent it. See if it helps you. >From 91f3af26bbf751b846e6265d86387e81be7c1364 Mon Sep 17 00:00:00 2001 From: Grazvydas Ignotas <notasas@xxxxxxxxx> Date: Tue, 28 Oct 2008 22:01:42 +0200 Subject: [PATCH] OMAP3: fix McSPI transfers Currently on OMAP3 if both write and read is set up for a transfer, the first byte returned on read is corrupted. Work around this by disabling channel between reads and writes, instead of transfers. --- drivers/spi/omap2_mcspi.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c index 454a271..4890b6c 100644 --- a/drivers/spi/omap2_mcspi.c +++ b/drivers/spi/omap2_mcspi.c @@ -710,7 +710,6 @@ static void omap2_mcspi_work(struct work_struct *work) spi = m->spi; cs = spi->controller_state; - omap2_mcspi_set_enable(spi, 1); list_for_each_entry(t, &m->transfers, transfer_list) { if (t->tx_buf == NULL && t->rx_buf == NULL && t->len) { status = -EINVAL; @@ -741,6 +740,8 @@ static void omap2_mcspi_work(struct work_struct *work) if (t->len) { unsigned count; + omap2_mcspi_set_enable(spi, 1); + /* RX_ONLY mode needs dummy data in TX reg */ if (t->tx_buf == NULL) __raw_writel(0, cs->base @@ -752,6 +753,8 @@ static void omap2_mcspi_work(struct work_struct *work) count = omap2_mcspi_txrx_pio(spi, t); m->actual_length += count; + omap2_mcspi_set_enable(spi, 0); + if (count != t->len) { status = -EIO; break; @@ -777,8 +780,6 @@ static void omap2_mcspi_work(struct work_struct *work) if (cs_active) omap2_mcspi_force_cs(spi, 0); - omap2_mcspi_set_enable(spi, 0); - m->status = status; m->complete(m->context); -- 1.5.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html