Thx Jonas Larsson @ http://www.linuxtv.org/pipermail/linux-dvb/2007-February/015863.html Dirty workaround for timeouts @ MSI MegaSky 580 USB qt1010 I2C write failed zl10353: write to reg 67 failed (err = 0)! zl10353: write to reg 70 failed (err = 0)! zl10353_read_register: readreg error (reg=8, ret==0) qt1010 I2C write failed zl10353: write to reg 69 failed (err = 0)! zl10353_read_register: readreg error (reg=16, ret==0) zl10353: write to reg 5e failed (err = 0)! --- gl861.c.orig 2007-08-13 06:38:27.000000000 +0200 +++ gl861.c 2007-08-13 06:40:52.000000000 +0200 @@ -19,6 +19,8 @@ static int gl861_i2c_msg(struct dvb_usb_device *d, u8 addr, u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) { + int err; + int tries; u16 index; u16 value = addr << (8 + 1); int wo = (rbuf == NULL || rlen == 0); /* write-only */ @@ -45,8 +47,12 @@ return -EINVAL; } - return usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0), req, type, - value, index, rbuf, rlen, 2000); + tries = 0; + do { + err = usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0), req, type, value, index, rbuf, rlen, 2000); + } while (err == -ETIMEDOUT && ++tries < 3); + return err; + } /* I2C */