diff options
| -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; |
