--- linux-2.6.12-rc3.orig/drivers/media/video/bttv-i2c.c 2005-05-03 16:04:28.000000000 +0400 +++ linux-2.6.12-rc3/drivers/media/video/bttv-i2c.c 2005-05-05 00:01:00.000000000 +0400 @@ -29,6 +29,7 @@ #include #include #include +#include #include #include "bttvp.h" @@ -130,17 +131,14 @@ static u32 functionality(struct i2c_adap static int bttv_i2c_wait_done(struct bttv *btv) { - DECLARE_WAITQUEUE(wait, current); int rc = 0; - add_wait_queue(&btv->i2c_queue, &wait); - if (0 == btv->i2c_done) - msleep_interruptible(20); - remove_wait_queue(&btv->i2c_queue, &wait); - - if (0 == btv->i2c_done) - /* timeout */ - rc = -EIO; + /* timeout */ + if (wait_event_interruptible_timeout(btv->i2c_queue, + btv->i2c_done, msecs_to_jiffies(85)) == -ERESTARTSYS) + + rc = -EIO; + if (btv->i2c_done & BT848_INT_RACK) rc = 1; btv->i2c_done = 0;