On Mon, Apr 25, 2016 at 04:33:32PM +0200, Jan Glauber wrote:
SMBUS QUICK never worked for the read case, because EINVAL was returned
for a zero length message. The hardware does not support SMBUS QUICK
messages so disable the support and remove the zero length check.
Signed-off-by: Jan Glauber <jglauber@xxxxxxxxxx>
I see better now and I think we need to drop this patch. It looks like
the driver supports only SMBUS_QUICK_WRITE which can be used for
scanning devices. The driver probably works with 'i2cdetect -q'. This
will regress if I apply the patch.
It seems it can't do SMBUS_QUICK_READ thus the extra check in the code.
I2C_FUNC_SMBUS_QUICK should have been split up in READ and WRITE to
support this scenario.
Are my assumptions correct?
---
drivers/i2c/busses/i2c-octeon.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/i2c/busses/i2c-octeon.c b/drivers/i2c/busses/i2c-octeon.c
index 0f536a1..ad563cf 100644
--- a/drivers/i2c/busses/i2c-octeon.c
+++ b/drivers/i2c/busses/i2c-octeon.c
@@ -459,9 +459,6 @@ static int octeon_i2c_read(struct octeon_i2c *i2c, int target,
int i, result, length = *rlength;
bool final_read = false;
- if (length < 1)
- return -EINVAL;
-
octeon_i2c_data_write(i2c, (target << 1) | 1);
octeon_i2c_ctl_write(i2c, TWSI_CTL_ENAB);
@@ -597,7 +594,7 @@ static struct i2c_bus_recovery_info octeon_i2c_recovery_info = {
static u32 octeon_i2c_functionality(struct i2c_adapter *adap)
{
- return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL |
+ return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK) |
I2C_FUNC_SMBUS_READ_BLOCK_DATA | I2C_SMBUS_BLOCK_PROC_CALL;
}
--
1.9.1