> 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 <[EMAIL PROTECTED]>
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 [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to