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 */

