From: Nobuhiro Iwamatsu Date: Tue, 4 Nov 2014 04:28:50 +0000 (+0900) Subject: i2c: rcar_i2c: Fix order of restart and clear status X-Git-Tag: v2015.01-rc1~1^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=cd818a381ddcdc2440a167757394298f28b70240;p=u-boot i2c: rcar_i2c: Fix order of restart and clear status In case of repeated START condition, the restart has to be kicked before clear status (MSR register). If it is kicked after clear status, R-Car I2C may transfer data (TXD register) or receive data (RXD register) instead of transferring slave address (MAR register). Signed-off-by: Ryo Kataoka Signed-off-by: Nobuhiro Iwamatsu --- diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c index 50cebd622b..90ad116a98 100644 --- a/drivers/i2c/rcar_i2c.c +++ b/drivers/i2c/rcar_i2c.c @@ -119,10 +119,10 @@ rcar_i2c_raw_read(struct rcar_i2c *dev, u8 chip, uint addr) /* set slave address, receive */ writel((chip << 1) | 1, &dev->icmar); - /* clear status */ - writel(0, &dev->icmsr); /* start master receive */ writel(MCR_MDBS | MCR_MIE | MCR_ESG, &dev->icmcr); + /* clear status */ + writel(0, &dev->icmsr); while ((readl(&dev->icmsr) & (MSR_MAT | MSR_MDR)) != (MSR_MAT | MSR_MDR))