Hello, On Thu, Nov 19, 2009 at 08:01:42PM +0100, Daniel Mack wrote: > Hi Uwe, > > On Thu, Nov 19, 2009 at 07:49:51PM +0100, Uwe Kleine-König wrote: > > On Thu, Nov 19, 2009 at 11:44:47AM +0100, Daniel Mack wrote: > > > 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 > > On imx27 the register at offset 0x14 is called PERIODREG ... > > > > > #define MXC_RESET 0x1c > > > > > > +#define MXC_CSPISTAT_RR (1 << 3) > > ... and bits 0..14 are called WAIT. > > > > > > > + > > > /* 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); > > > + > > So this needs protection by > > > > if (cpu_is_mx31() || cpu_is_mx35()) > > Oh, I wasn't aware of such differences, thanks for checking! > > > (note, I didn't check the mx35 reference!). > > But I did now, and mx35 seems to be compatible. I also changed the > register define names to avoid confusion. hmm, I'm not really happy with the naming, but as I don't have a better idea now, it's OK for me. You can take it as an ack.
Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ | ------------------------------------------------------------------------------ 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