On the MX31litekit, the bootloader seems to communicate with the MC13783
PMIC chip before booting Linux. However, it does not flush all the
buffers properly after that, which makes the imx-spi driver read
bogus data when probing the MC13783.

Fix that by draining the SPI buffer on startup.

Signed-off-by: Daniel Mack <dan...@caiaq.de>
Cc: David Brownell <dbrown...@users.sourceforge.net>
Cc: Andrew Morton <a...@linux-foundation.org>
Cc: Sascha Hauer <s.ha...@pengutronix.de>
Cc: Uwe Kleine-König <u.kleine-koe...@pengutronix.de>
Cc: spi-devel-general@lists.sourceforge.net
---
 drivers/spi/spi_imx.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/spi/spi_imx.c b/drivers/spi/spi_imx.c
index 89c22ef..a3894fd 100644
--- a/drivers/spi/spi_imx.c
+++ b/drivers/spi/spi_imx.c
@@ -42,8 +42,11 @@
 #define MXC_CSPITXDATA         0x04
 #define MXC_CSPICTRL           0x08
 #define MXC_CSPIINT            0x0c
+#define MXC_CSPISTAT           0x14
 #define MXC_RESET              0x1c
 
+#define MXC_CSPISTAT_RR                (1 << 3)
+
 /* generic defines to abstract from the different register layouts */
 #define MXC_INT_RR     (1 << 0) /* Receive data ready interrupt */
 #define MXC_INT_TE     (1 << 1) /* Transmit FIFO empty interrupt */
@@ -593,6 +596,10 @@ static int __init spi_imx_probe(struct platform_device 
*pdev)
        if (!cpu_is_mx31() || !cpu_is_mx35())
                writel(1, spi_imx->base + MXC_RESET);
 
+       /* drain the buffer */
+       while (readl(spi_imx->base + MXC_CSPISTAT) & MXC_CSPISTAT_RR)
+               readl(spi_imx->base + MXC_CSPIRXDATA);
+
        spi_imx->intctrl(spi_imx, 0);
 
        ret = spi_bitbang_start(&spi_imx->bitbang);
-- 
1.6.5.2


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general

Reply via email to