Re: [PATCH] I2C block read

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

 



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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux