Am 10.01.2014 09:33, schrieb Mauro Carvalho Chehab: > If i2c_debug is enabled, we splicitly want to know when a > device fails with timeout. > > If i2c_debug==2, this is already provided, for each I2C transfer > that fails. > > However, most of the time, we don't need to go that far. We just > want to know that I2C transfers fail. > > So, add such errors for normal (ret == 0x10) I2C aborted timeouts. > > Signed-off-by: Mauro Carvalho Chehab <m.chehab@xxxxxxxxxxx> > --- > drivers/media/usb/em28xx/em28xx-i2c.c | 27 ++++++++++++++++++++++++--- > 1 file changed, 24 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/usb/em28xx/em28xx-i2c.c b/drivers/media/usb/em28xx/em28xx-i2c.c > index e8eb83160d36..7e1724076ac4 100644 > --- a/drivers/media/usb/em28xx/em28xx-i2c.c > +++ b/drivers/media/usb/em28xx/em28xx-i2c.c > @@ -80,6 +80,9 @@ static int em2800_i2c_send_bytes(struct em28xx *dev, u8 addr, u8 *buf, u16 len) > if (ret == 0x80 + len - 1) > return len; > if (ret == 0x94 + len - 1) { > + if (i2c_debug == 1) > + em28xx_warn("R05 returned 0x%02x: I2C timeout", > + ret); > return -ENXIO; > } > if (ret < 0) { > @@ -124,6 +127,9 @@ static int em2800_i2c_recv_bytes(struct em28xx *dev, u8 addr, u8 *buf, u16 len) > if (ret == 0x84 + len - 1) > break; > if (ret == 0x94 + len - 1) { > + if (i2c_debug == 1) > + em28xx_warn("R05 returned 0x%02x: I2C timeout", > + ret); > return -ENXIO; > } > if (ret < 0) { > @@ -203,6 +209,9 @@ static int em28xx_i2c_send_bytes(struct em28xx *dev, u16 addr, u8 *buf, > if (ret == 0) /* success */ > return len; > if (ret == 0x10) { > + if (i2c_debug == 1) > + em28xx_warn("I2C transfer timeout on writing to addr 0x%02x", > + addr); > return -ENXIO; > } > if (ret < 0) { > @@ -263,8 +272,12 @@ static int em28xx_i2c_recv_bytes(struct em28xx *dev, u16 addr, u8 *buf, u16 len) > ret); > return ret; > } > - if (ret == 0x10) > + if (ret == 0x10) { > + if (i2c_debug == 1) > + em28xx_warn("I2C transfer timeout on writing to addr 0x%02x", > + addr); > return -ENXIO; > + } > > em28xx_warn("unknown i2c error (status=%i)\n", ret); > return -ETIMEDOUT; > @@ -322,8 +335,12 @@ static int em25xx_bus_B_send_bytes(struct em28xx *dev, u16 addr, u8 *buf, > */ > if (!ret) > return len; > - else if (ret > 0) > + else if (ret > 0) { > + if (i2c_debug == 1) > + em28xx_warn("Bus B R08 returned 0x%02x: I2C timeout", > + ret); > return -ENXIO; > + } > > return ret; > /* > @@ -373,8 +390,12 @@ static int em25xx_bus_B_recv_bytes(struct em28xx *dev, u16 addr, u8 *buf, > */ > if (!ret) > return len; > - else if (ret > 0) > + else if (ret > 0) { > + if (i2c_debug == 1) > + em28xx_warn("Bus B R08 returned 0x%02x: I2C timeout", > + ret); > return -ENXIO; > + } > > return ret; > /* The error description should be "I2C ACK error". You are using (i2c_debug == 1) checks here, which should either be changed to (i2c_debug > 0) in case of 3 debug levels. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html