[media] em28xx: fix the i2c adapter functionality flags
authorFrank Schaefer <fschaefer.oss@googlemail.com>
Thu, 3 Jan 2013 17:27:04 +0000 (14:27 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 5 Jan 2013 03:16:54 +0000 (01:16 -0200)
I2C_FUNC_SMBUS_EMUL includes flag I2C_FUNC_SMBUS_WRITE_BLOCK_DATA which signals
that up to 31 data bytes can be written to the ic2 client.
But the EM2800 supports only i2c messages with max. 4 data bytes.
I2C_FUNC_IC2 should be set if a master_xfer function pointer is provided in
struct i2c_algorithm.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/usb/em28xx/em28xx-i2c.c

index 67a8e62..4a24ed0 100644 (file)
@@ -445,7 +445,11 @@ static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len)
  */
 static u32 functionality(struct i2c_adapter *adap)
 {
-       return I2C_FUNC_SMBUS_EMUL;
+       struct em28xx *dev = adap->algo_data;
+       u32 func_flags = I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
+       if (dev->board.is_em2800)
+               func_flags &= ~I2C_FUNC_SMBUS_WRITE_BLOCK_DATA;
+       return func_flags;
 }
 
 static struct i2c_algorithm em28xx_algo = {