RE: [PATCH] i2c: imx: Add arbitration lost check

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Haibo Chen <haibo.chen@xxxxxxxxxxxxx> Sent: Monday, September 01, 2014 4:59 PM
>To: wsa@xxxxxxxxxxxxx
>Cc: linux-i2c@xxxxxxxxxxxxxxx; Duan Fugang-B38611
>Subject: [PATCH] i2c: imx: Add arbitration lost check
>
>According to the i.mx spec, for multimaster mode, if I2C is enabled when
>the bus is busy and asserts start, hardware inhibits the transmission,
>clears MSTA without signaling a stop, generate an interrupt, and set
>I2C_I2SR[IAL] to indicate a failed attempt to engage the bus, which means
>arbitration lost. In this case, we should first test I2C_I2SR[IAL], and
>clear this bit if it is set, and then I2C controller default to slave
>receive mode.
>
>This patch check the IAL bit every time before an I2c transmission.
>if IAL is set, clear it and make I2C controller to default mode.
>
>Signed-off-by: Haibo Chen <haibo.chen@xxxxxxxxxxxxx>
>---
> drivers/i2c/busses/i2c-imx.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
>diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
>index 613069b..144b620 100644
>--- a/drivers/i2c/busses/i2c-imx.c
>+++ b/drivers/i2c/busses/i2c-imx.c
>@@ -268,6 +268,14 @@ static int i2c_imx_bus_busy(struct imx_i2c_struct
>*i2c_imx, int for_busy)
>
> 	while (1) {
> 		temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
>+
>+		/** check for arbitration lost **/
>+		if (temp & I2SR_IAL) {
>+			temp &= ~I2SR_IAL;
>+			imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR);
>+			return -EIO;
>+		}
>+
> 		if (for_busy && (temp & I2SR_IBB))
> 			break;
> 		if (!for_busy && !(temp & I2SR_IBB))
>--
>1.9.1

Acked-by: Fugang Duan <B38611@xxxxxxxxxxxxx>

Thanks,
Andy
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux