Re: [PATCH] I2C block read

From: Jean Delvare
Date: Wed Jun 07 2006 - 13:48:38 EST


Hi Alexander,

> When doing i2c block read the lenght is passed as the first byte of the buffer,
> so we must copy it from user otherwise temp is uninitialized.

> --- drivers/i2c/i2c-dev.c.orig 2006-01-04 02:00:00.000000000 +0200
> +++ drivers/i2c/i2c-dev.c 2006-06-07 19:46:08.000000000 +0300
> @@ -337,6 +337,7 @@
>
> if ((data_arg.size == I2C_SMBUS_PROC_CALL) ||
> (data_arg.size == I2C_SMBUS_BLOCK_PROC_CALL) ||
> + (data_arg.size == I2C_SMBUS_BLOCK_DATA) ||
> (data_arg.read_write == I2C_SMBUS_WRITE)) {
> if (copy_from_user(&temp, data_arg.data, datasize))
> return -EFAULT;

Nack. Firstly, your comment says I2C block read, but your code changes
SMBus block read. These are two different transactions. Secondly, for
SMBus block read, the master doesn't ask for a given number of bytes.
Instead, the chip decides and returns the number of (following) bytes as
the first byte of the read part of the transaction. Check the SMBus
specification.

So your patch is not correct, sorry.

--
Jean Delvare
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/