@@ -381,12 +381,12 @@ i2c_read(u8 dev, uint addr, int alen, u8 *data,
int length)
u8 *a = (u8*)&addr;
if (i2c_wait4bus() >= 0
- && i2c_write_addr(dev, I2C_WRITE_BIT, 0) != 0
- && __i2c_write(&a[4 - alen], alen) == alen)
+ && (alen == 0 || (i2c_write_addr(dev, I2C_WRITE_BIT, 0) != 0
+ && __i2c_write(&a[4 - alen], alen) == alen)))
i = 0; /* No error so far */
if (length
- && i2c_write_addr(dev, I2C_READ_BIT, 1) != 0)
+ && i2c_write_addr(dev, I2C_READ_BIT, alen == 0 ? 0 : 1) != 0)
i = __i2c_read(data, length);