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

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

 



Hi, Wolfram,

From: Haibo Chen <haibo.chen@xxxxxxxxxxxxx> Sent: Wednesday, September 03, 2014 1:52 PM + 0800
> To: wsa@xxxxxxxxxxxxx
> Cc: Duan Fugang-B38611; linux-i2c@xxxxxxxxxxxxxxx
> Subject: [PATCH v2] 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>
> Acked-by: Fugang Duan <B38611@xxxxxxxxxxxxx>
> ---
> Changes for V2:
> -Use 'EAGAIN' instead of 'EIO' for arbitration lost -Modify the comment
> style
> 
>  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..ceff87c 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 -EAGAIN;
> +		}
> +
>  		if (for_busy && (temp & I2SR_IBB))
>  			break;
>  		if (!for_busy && !(temp & I2SR_IBB))
> --
> 1.9.1
> 
> --

Can you apply the patch or other comments ?

Thanks,
Haibo
--
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