Re: I2C_FUNC_SMBUS_QUICK on i2c-mxs

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

 



Hi Fabio,

On Mon, 27 Aug 2012 16:32:12 -0300, Fabio Estevam wrote:
> When using i2cdetect on a mx28 I get:
> 
> $ i2cdetect 0
> Error: Can't use SMBus Quick Write command on this bus (ISA bus?)

You must be using a somewhat old version of i2c-tools, as the stray
reference to the ISA bus was removed two years ago already.

> Enabling I2C_FUNC_SMBUS_QUICK the error goes away:
> ---
>  drivers/i2c/busses/i2c-mxs.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/i2c/busses/i2c-mxs.c b/drivers/i2c/busses/i2c-mxs.c
> index 088c5c1..84484bb 100644
> --- a/drivers/i2c/busses/i2c-mxs.c
> +++ b/drivers/i2c/busses/i2c-mxs.c
> @@ -322,7 +322,7 @@ static int mxs_i2c_xfer(struct i2c_adapter *adap,
> struct i2c_msg msgs[],
> 
>  static u32 mxs_i2c_func(struct i2c_adapter *adap)
>  {
> -	return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
> +	return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
>  }
> 
>  static irqreturn_t mxs_i2c_isr(int this_irq, void *dev_id)
>
> Could anyone clarify whether I2C_FUNC_SMBUS_QUICK option could be
> turned on or not?

Well, I2C_FUNC_SMBUS_QUICK was left out explicitly, so I would expect
there was a good reason for this. Looking at the driver code:

> static int mxs_i2c_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg,
> 				int stop)
> {
> (...)
> 	if (msg->len == 0)
> 		return -EINVAL;

it seems that quick transactions are really not supported by the
driver. So your hack made the error message go away but presumably
i2cdetect couldn't see any slave device on your I2C bus (except for the
limited address range where it doesn't use quick writes by default.)

You may want to try "i2cdetect -r" on this bus, but first please read
the warning in the manual page.

What is on your bus and what are you trying to find with i2cdetect?

Looking at the code in i2cdetect, it appears the checks are more strict
than they need to be. Instead of bailing out by default if either quick
writes or short reads aren't supported, we could simply warn and skip
the addresses we can't probe. Only if both quick writes and short reads
are unsupported, we should bail out. I can implement this easily if it
solves your problem.

-- 
Jean Delvare
--
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