Skip to contentSkip to conversation

bw-qcam: adds parameter aggressive to skip passive detection and directly attempt initialization

PATCH In review Brett T. Warden 3 participants 10 messages Dec 5, 2007 – Jan 2, 2008 1 message not in the archive Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 bw-qcam: adds parameter aggressive to skip passive detection and directly attempt initialization

---

drivers/media/video/bw-qcam.c +9 -1
index 5842352..b74a9cb 100644
@@ -82,11 +82,16 @@ OTHER DEALINGS IN THE SOFTWARE.
 static unsigned int maxpoll=250;   /* Maximum busy-loop count for qcam I/O */
 static unsigned int yieldlines=4;  /* Yield after this many during capture */
 static int video_nr = -1;
+static unsigned int aggressive;		/* Whether to probe aggressively */
 
 module_param(maxpoll, int, 0);
 module_param(yieldlines, int, 0);
 module_param(video_nr, int, 0);
 
+/* Set aggressive=1 to avoid detection by polling status register and
+ * immediately attempt to initialize qcam */
+module_param(aggressive, int, 0);
+
 static inline int read_lpstatus(struct qcam_device *q)
 {
 	return parport_read_status(q->pport);
@@ -331,6 +336,9 @@ static int qc_detect(struct qcam_device *q)
 	int count = 0;
 	int i;
 
+	if (aggressive)
+		return 1;
+
 	lastreg = reg = read_lpstatus(q) & 0xf0;
 
 	for (i = 0; i < 500; i++)
@@ -354,12 +362,12 @@ static int qc_detect(struct qcam_device *q)
 
 	/* Be (even more) liberal in what you accept...  */
 
-/*	if (count > 30 && count < 200) */
 	if (count > 20 && count < 400) {
 		return 1;	/* found */
 	} else {
 		printk(KERN_ERR "No Quickcam found on port %s\n",
 			q->pport->name);
+		printk(KERN_DEBUG "Quickcam detection counter: %u\n", count);
 		return 0;	/* not found */
 	}
 }
#1 lore raw

PATCH 1/1 bw-qcam: Adds module parameter 'aggressive' to skip polite auto-detection prior to direct initialization.

Setting aggressive=1 bypasses the friendly auto-detection by polling the status register, and instead attempts to initialize the qcam directly. Not friendly to other parallel devices, but much more reliable than the auto-detection.

---
 drivers/media/video/bw-qcam.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)
drivers/media/video/bw-qcam.c +9 -1
index 5842352..b74a9cb 100644
@@ -82,11 +82,16 @@ OTHER DEALINGS IN THE SOFTWARE.
 static unsigned int maxpoll=250;   /* Maximum busy-loop count for qcam I/O */
 static unsigned int yieldlines=4;  /* Yield after this many during capture */
 static int video_nr = -1;
+static unsigned int aggressive;		/* Whether to probe aggressively */
 
 module_param(maxpoll, int, 0);
 module_param(yieldlines, int, 0);
 module_param(video_nr, int, 0);
 
+/* Set aggressive=1 to avoid detection by polling status register and
+ * immediately attempt to initialize qcam */
+module_param(aggressive, int, 0);
+
 static inline int read_lpstatus(struct qcam_device *q)
 {
 	return parport_read_status(q->pport);
@@ -331,6 +336,9 @@ static int qc_detect(struct qcam_device *q)
 	int count = 0;
 	int i;
 
+	if (aggressive)
+		return 1;
+
 	lastreg = reg = read_lpstatus(q) & 0xf0;
 
 	for (i = 0; i < 500; i++)
@@ -354,12 +362,12 @@ static int qc_detect(struct qcam_device *q)
 
 	/* Be (even more) liberal in what you accept...  */
 
-/*	if (count > 30 && count < 200) */
 	if (count > 20 && count < 400) {
 		return 1;	/* found */
 	} else {
 		printk(KERN_ERR "No Quickcam found on port %s\n",
 			q->pport->name);
+		printk(KERN_DEBUG "Quickcam detection counter: %u\n", count);
 		return 0;	/* not found */
 	}
 }
Signature · 1 line
1.5.2.5
#2 lore raw

Re: [PATCH] bw-qcam: Adds module parameter 'aggressive' to skip polite auto-detection prior to direct initialization.

Quoted 1 line · On Tue, 4 Dec 2007 16:44:41 -0800 "Brett T. Warden" <[email protected]>…

Setting aggressive=1 bypasses the friendly auto-detection by polling the status register, and instead attempts to initialize the qcam directly. Not friendly to other parallel devices, but much more reliable than the auto-detection.

Someone still has a bw-qcam device ?

The status polling ought to be rock solid - what values do you see ?

A message that is not in the archive (sent off-list or not yet received): [email protected]

#4 lore raw

Re: [PATCH] bw-qcam: Adds module parameter 'aggressive' to skip polite auto-detection prior to direct initialization.

Sorry, forgot to copy back to the lists.

Quoted 20 lines · Brett Warden
Quoted 2 lines · Alan Cox

Someone still has a bw-qcam device ?

Yes. I haven't found a better option for very-low-light, although I admit I haven't looked in a long while. The last one I tried was an OV518+, but of course that driver seems to have been abandoned.

Quoted 1 line

The status polling ought to be rock solid - what values do you see ?

It has been as high as 94-96, but after being connected, powered, and used for a while, it drops sometimes into the 40s, but has even been as low as 8-14. When it's that low, it never comes back up until either I disconnect/reconnect the power, or I force the driver to initialize it through this hack. Even after trying that again just now, it's ranging from 24-33.

--
Brett Warden

Signature · 1 line
Brett Warden
Acked-by on v1 1/1
#5 lore raw
In reply to Brett T. Warden

drivers/media/video/bw-qcam.c OTHER DEALINGS IN THE SOFTWARE. · line 85

Quoted 11 lines · On Tue, 4 Dec 2007 16:14:13 -0800 "Brett T. Warden" <[email protected]>…

---

drivers/media/video/bw-qcam.c +1 -0
index 5842352..b74a9cb 100644
@@ -82,11 +82,16 @@ OTHER DEALINGS IN THE SOFTWARE.
 static unsigned int maxpoll=250;   /* Maximum busy-loop count for qcam I/O */
 static unsigned int yieldlines=4;  /* Yield after this many during capture */
 static int video_nr = -1;
+static unsigned int aggressive;	

Although I would suggest that "aggressive" may not be the best term - I'm not such of a good one however - skip_passive ?

#6 lore raw
Quoted 2 lines · Alan Cox

Although I would suggest that "aggressive" may not be the best term - I'm not such of a good one however - skip_passive ?

How about force_init?

Signature · 1 line
Brett Warden
#7 lore raw
Quoted 7 lines · Brett Warden
Quoted 2 lines · Alan Cox

Although I would suggest that "aggressive" may not be the best term - I'm not such of a good one however - skip_passive ?

How about force_init?

Much more descriptive.

Signature · 3 lines
Bill Davidsen <[email protected]>
  "We have more to fear from the bungling of the incompetent than from
the machinations of the wicked."  - from Slashdot
#8 lore raw

PATCH 1/1 bw-qcam: Adds module parameter 'aggressive' to skip polite auto-detection prior to direct initialization.

In reply to Brett Warden

Setting aggressive=1 bypasses the friendly auto-detection by polling the status register, and instead attempts to initialize the qcam directly. Not friendly to other parallel devices, but much more reliable than the auto-detection.

---
 drivers/media/video/bw-qcam.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)
drivers/media/video/bw-qcam.c +9 -1
index 5842352..b74a9cb 100644
@@ -82,11 +82,16 @@ OTHER DEALINGS IN THE SOFTWARE.
 static unsigned int maxpoll=250;   /* Maximum busy-loop count for qcam I/O */
 static unsigned int yieldlines=4;  /* Yield after this many during capture */
 static int video_nr = -1;
+static unsigned int aggressive;		/* Whether to probe aggressively */
 
 module_param(maxpoll, int, 0);
 module_param(yieldlines, int, 0);
 module_param(video_nr, int, 0);
 
+/* Set aggressive=1 to avoid detection by polling status register and
+ * immediately attempt to initialize qcam */
+module_param(aggressive, int, 0);
+
 static inline int read_lpstatus(struct qcam_device *q)
 {
 	return parport_read_status(q->pport);
@@ -331,6 +336,9 @@ static int qc_detect(struct qcam_device *q)
 	int count = 0;
 	int i;
 
+	if (aggressive)
+		return 1;
+
 	lastreg = reg = read_lpstatus(q) & 0xf0;
 
 	for (i = 0; i < 500; i++)
@@ -354,12 +362,12 @@ static int qc_detect(struct qcam_device *q)
 
 	/* Be (even more) liberal in what you accept...  */
 
-/*	if (count > 30 && count < 200) */
 	if (count > 20 && count < 400) {
 		return 1;	/* found */
 	} else {
 		printk(KERN_ERR "No Quickcam found on port %s\n",
 			q->pport->name);
+		printk(KERN_DEBUG "Quickcam detection counter: %u\n", count);
 		return 0;	/* not found */
 	}
 }
Signature · 1 line
1.5.3.7
#9 lore raw

PATCH 1/1 bw-qcam: Rename parameter 'aggressive' to 'force_init'

Changed new parameter name to 'force_init' for clarity, as per feedback.

---
 drivers/media/video/bw-qcam.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)
drivers/media/video/bw-qcam.c +4 -4
index b74a9cb..0322653 100644
@@ -82,15 +82,15 @@ OTHER DEALINGS IN THE SOFTWARE.
 static unsigned int maxpoll=250;   /* Maximum busy-loop count for qcam I/O */
 static unsigned int yieldlines=4;  /* Yield after this many during capture */
 static int video_nr = -1;
-static unsigned int aggressive;		/* Whether to probe aggressively */
+static unsigned int force_init;		/* Whether to probe aggressively */
 
 module_param(maxpoll, int, 0);
 module_param(yieldlines, int, 0);
 module_param(video_nr, int, 0);
 
-/* Set aggressive=1 to avoid detection by polling status register and
+/* Set force_init=1 to avoid detection by polling status register and
  * immediately attempt to initialize qcam */
-module_param(aggressive, int, 0);
+module_param(force_init, int, 0);
 
 static inline int read_lpstatus(struct qcam_device *q)
 {
@@ -336,7 +336,7 @@ static int qc_detect(struct qcam_device *q)
 	int count = 0;
 	int i;
 
-	if (aggressive)
+	if (force_init)
 		return 1;
 
 	lastreg = reg = read_lpstatus(q) & 0xf0;
Signature · 1 line
1.5.3.7