Skip to content

Commit

Permalink
spi/i.mx: drain MXC SPI transfer buffer when probing device
Browse files Browse the repository at this point in the history
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 receive buffer on startup.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
  • Loading branch information
Daniel Mack authored and Grant Likely committed Dec 9, 2009
1 parent d33c861 commit ce1807b
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions drivers/spi/spi_imx.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@
#define MXC_CSPIINT 0x0c
#define MXC_RESET 0x1c

#define MX3_CSPISTAT 0x14
#define MX3_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 */
Expand Down Expand Up @@ -593,6 +596,11 @@ 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 receive buffer */
if (cpu_is_mx31() || cpu_is_mx35())
while (readl(spi_imx->base + MX3_CSPISTAT) & MX3_CSPISTAT_RR)
readl(spi_imx->base + MXC_CSPIRXDATA);

spi_imx->intctrl(spi_imx, 0);

ret = spi_bitbang_start(&spi_imx->bitbang);
Expand Down

0 comments on commit ce1807b

Please sign in to comment.