Skip to contentSkip to conversation

Fix dst i2c read/write timeout failure.

PATCH In review Manu Abraham 3 participants 5 messages May 4, 2005 – May 5, 2005 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Fix dst i2c read/write timeout failure.

Hi,

Attached is a patch to bttv which fixes the following problems.

Affected cards and problems:
~~~~~~~~~~~~~~~~~~~~~~~~
o VP-1020 (200103A) Tuning problems, device detection.
o VP-1020 (DST-MOT) Errors during tuning, device detection fails in a while.
o VP-1030 (DST-CI) Tuning sometimes fails after CI commands.
o VP-2031 (DCT-CI) Tuning problems

The timeout happens before the actual timeout occured in the MCU on the board, and hence the problems.

Changes: (bttv-i2c.diff)
~~~~~~~~~~~~~~~~~~~~~~~~
o Changed the custom wait queue to wait_event_interruptible_timeout()
- Suggestion by Johannes Stezenbach.

o Fixed the wait queue timeout problem
- This fixes the timeout problem on various cards.
- This problem was visible as many
* Cannot tune to channels, when signal levels are very low.
* app_info does not work in some conditions for CI based cards
- Smaller values worked good for newer cards, but the older cards
suffered, settled down to the worst case values that could happen in any eventuality.

Index: linux-2.6.12-rc3/drivers/media/video/bttv-i2c.c
========================================
--- 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 <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/delay.h>
+#include <linux/jiffies.h>
#include <asm/io.h>

#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;

#1 lore raw
Quoted 3 lines · Manu Abraham

User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050317)

uh-oh.

Quoted 2 lines

Attached is a patch to bttv which fixes the following problems.

Mozilla space-stuffed it. Please resend as an attachment.

#2 lore raw
Quoted 6 lines · Andrew Morton
Quoted 2 lines · Manu Abraham

User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050317)

Quoted 10 lines

uh-oh.

Quoted 1 line

Attached is a patch to bttv which fixes the following problems.

Mozilla space-stuffed it. Please resend as an attachment.

Oh, i am sorry, resending it ..

Attached is a patch to bttv which fixes the following problems.

Affected cards and problems:
~~~~~~~~~~~~~~~~~~~~~~~~
o VP-1020 (200103A) Tuning problems, device detection.
o VP-1020 (DST-MOT) Errors during tuning, device detection fails in a while.
o VP-1030 (DST-CI) Tuning sometimes fails after CI commands.
o VP-2031 (DCT-CI) Tuning problems

The timeout happens before the actual timeout occured in the MCU on the board, and hence the problems.

Changes: (bttv-i2c.diff)
~~~~~~~~~~~~~~~~~~~~~~~~
o Changed the custom wait queue to wait_event_interruptible_timeout()
- Suggestion by Johannes Stezenbach.

o Fixed the wait queue timeout problem
- This fixes the timeout problem on various cards.
- This problem was visible as many
* Cannot tune to channels, when signal levels are very low.
* app_info does not work in some conditions for CI based cards
- Smaller values worked good for newer cards, but the older cards
suffered, settled down to the worst case values that could happen in any eventuality.

drivers/media/video/bttv-i2c.c +7 -9
@@ -29,6 +29,7 @@
 #include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/delay.h>
+#include <linux/jiffies.h>
 #include <asm/io.h>
 
 #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;
#3 lore raw
Quoted 5 lines · On Thu, 05 May 2005 01:27:34 +0400 Manu Abraham <[email protected]> wrote:

Oh, i am sorry, resending it ..

Attached is a patch to bttv which fixes the following problems.

Has 2 instances of trailing whitespace added (one space, one tab).

You can check for that with one of several available scripts or with several editors...

---
~Randy

#4 lore raw
Quoted 7 lines · Randy.Dunlap
Quoted 3 lines · On Thu, 05 May 2005 01:27:34 +0400 Manu Abraham <[email protected]> wrote:

Oh, i am sorry, resending it ..

Quoted 9 lines
Quoted 1 line

Attached is a patch to bttv which fixes the following problems.

Has 2 instances of trailing whitespace added (one space, one tab).

You can check for that with one of several available scripts or with several editors...

Should i cleanup and send again ?

Manu