diff options
Diffstat (limited to 'drivers/media/video/bttv-i2c.c')
-rw-r--r-- | drivers/media/video/bttv-i2c.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/media/video/bttv-i2c.c b/drivers/media/video/bttv-i2c.c index e42f1ec13f3e..e3f477dff827 100644 --- a/drivers/media/video/bttv-i2c.c +++ b/drivers/media/video/bttv-i2c.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/moduleparam.h> | 29 | #include <linux/moduleparam.h> |
30 | #include <linux/init.h> | 30 | #include <linux/init.h> |
31 | #include <linux/delay.h> | 31 | #include <linux/delay.h> |
32 | #include <linux/jiffies.h> | ||
32 | #include <asm/io.h> | 33 | #include <asm/io.h> |
33 | 34 | ||
34 | #include "bttvp.h" | 35 | #include "bttvp.h" |
@@ -130,17 +131,14 @@ static u32 functionality(struct i2c_adapter *adap) | |||
130 | static int | 131 | static int |
131 | bttv_i2c_wait_done(struct bttv *btv) | 132 | bttv_i2c_wait_done(struct bttv *btv) |
132 | { | 133 | { |
133 | DECLARE_WAITQUEUE(wait, current); | ||
134 | int rc = 0; | 134 | int rc = 0; |
135 | 135 | ||
136 | add_wait_queue(&btv->i2c_queue, &wait); | 136 | /* timeout */ |
137 | if (0 == btv->i2c_done) | 137 | if (wait_event_interruptible_timeout(btv->i2c_queue, |
138 | msleep_interruptible(20); | 138 | btv->i2c_done, msecs_to_jiffies(85)) == -ERESTARTSYS) |
139 | remove_wait_queue(&btv->i2c_queue, &wait); | 139 | |
140 | rc = -EIO; | ||
140 | 141 | ||
141 | if (0 == btv->i2c_done) | ||
142 | /* timeout */ | ||
143 | rc = -EIO; | ||
144 | if (btv->i2c_done & BT848_INT_RACK) | 142 | if (btv->i2c_done & BT848_INT_RACK) |
145 | rc = 1; | 143 | rc = 1; |
146 | btv->i2c_done = 0; | 144 | btv->i2c_done = 0; |